Why does UDP have a length field in the header and TCP does not?

て烟熏妆下的殇ゞ 提交于 2020-05-24 10:12:21

问题


Why does UDP have a length field in the header and TCP does not?

I am guessing that the length of the segment in TCP is inferred from the IP header but one should be able to do the same for a UDP datagram


回答1:


According to TCP/IP Illustrated Volume 1, the length field is redundant. That's all Stevens says on the matter.

I personally believe it was to make the UDP header length (in bits) divisible by 32 :)




回答2:


There is a 96 bit pseudo header conceptually prefixed to the TCP header that contains the information already.

The checksum field description from this source gives the answer:

Checksum: 16 bits

The checksum field is the 16 bit one's complement of the one's complement sum of all 16 bit words in the header and text. If a segment contains an odd number of header and text octets to be checksummed, the last octet is padded on the right with zeros to form a 16 bit word for checksum purposes. The pad is not transmitted as part of the segment. While computing the checksum, the checksum field itself is replaced with zeros.

The checksum also covers a 96 bit pseudo header conceptually prefixed to the TCP header. This pseudo header contains the Source Address, the Destination Address, the Protocol, and TCP length. This gives the TCP protection against misrouted segments. This information is carried in the Internet Protocol and is transferred across the TCP/Network interface in the arguments or results of calls by the TCP on the IP.

      +--------+--------+--------+--------+
      |           Source Address          |
      +--------+--------+--------+--------+
      |         Destination Address       |
      +--------+--------+--------+--------+
      |  zero  |  PTCL  |    TCP Length   |
      +--------+--------+--------+--------+

The information is not needed at the TCP level since TCP is a stream based protocol.




回答3:


I thought: As TCP is a stream based protocol, it's ok if its segment be fragmented at . UDP is transaction oriented, if its messages be fragmented at IP layer we need its length to recover it.

Sorry for my poor English.



来源:https://stackoverflow.com/questions/281606/why-does-udp-have-a-length-field-in-the-header-and-tcp-does-not

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!