TCP/IP consists of IP and TCP. TCP_IS_ENCAPSULATED_INSIDE_IP. Same goes for udp. Here is IP packet header: 0 7 15 31 +----------------------------------------------------------------------------------+ | IP_ver | IP_HD_LEN | TOS (8 bit) | 16bit total lenght in bytes | +---------------------+-------------------+-----+----------------------------------+ | 16bit identification |flags| 13-bit fragemnt size | +---------------------+-------------------+-----+----------------------------------+ | 8 bit TTL | 8 bit protocol | 16bit header checksum | +---------------------+-------------------+----------------------------------------+ | 32 bit source address | +----------------------------------------------------------------------------------+ | 32 bit dest. address | +----------------------------------------------------------------------------------+ | options (if any) | +----------------------------------------------------------------------------------+ | data (if any) | +----------------------------------------------------------------------------------+ TOS=Type of service TTL=Time To Live Empty IP packet would be 20 bytes long ( 32*5=160 bits.. 160/8=20 bytes). Also, you can note that there are maximum of 255 protocols IPv4 can encapsulate. IP is connectionless as is UDP. TCP is connection oriented. TCP header looks like this: 0 3 +-----------------------------------------+----------------------------------------+ | 16 bit source port | 16 bit destination port | +-----------------------------------------+----------------------------------------+ | 32 bit sequence number | +----------------------------------------------------------------------------------+ | 32 bit ACK number | +---+-------------------------+-+-+-+-+-+-+----------------------------------------+ |HL | 6bits reserved |U|A|P|R|S|F| 16 bit window size | | | |R|C|S|S|Y|I| | | | |G|K|H|T|N|N| | +---+-------------------------+-+-+-+-+-+-+----------------------------------------+ | 16 bit TCP cheksum | 16 bit urgent pointer | +----------------------------------------------------------------------------------+ | options (if any) | +----------------------------------------------------------------------------------+ | data (if any) | +----------------------------------------------------------------------------------+ HL=header lenght. sequencing ensures that sent packet is recived at the end - so that is main catch how connection oriented protocol can be encapsulated inside connectionless (IP) protocol. Minimum tcp packet size is 5*32=160 bits or 20 bytes. So, since TCP uses IP to encapsulate packets minimum tcp/ip packet size is 20+20=40 bytes (containing only let's say SYN or RST flag). UDP header looks like this: +-----------------------------------------+----------------------------------------+ | 16 bit source port | 16 bit destination port | +-----------------------------------------+----------------------------------------+ | 16 bit udp lenght | 16 bit udp cheksum | +----------------------------------------------------------------------------------+ | data(if any) | +----------------------------------------------------------------------------------+ Overall it is 2*32=64 bits.. 64/8=8. So smallest UDP packet size is: 20+8=28 bytes.