为什么UDP在标头中有长度字段而TCP没有?

25 udp tcp header ip-protocol

为什么UDP在标头中有长度字段而TCP没有?

我猜测TCP中的段的长度是从IP头推断的,但是对于UDP数据报应该能够做同样的事情.

jdi*_*zle 10

根据TCP/IP Illustrated第1卷,长度字段是多余的.这就是史蒂文斯在这件事上所说的.

我个人认为这是使UDP标头长度(以位为单位)可被32整除:)

  • 他还补充说(第2卷)"为什么UDP长度字段存在?可能会添加少量错误检查,因为UDP校验和是可选的." 但是我同意32位对齐可能是其中一部分原因. (3认同)

Bri*_*ndy 1

从概念上讲,有一个 96 位伪标头位于已包含信息的 TCP 标头的前缀。

该来源的校验和字段描述给出了答案:

校验和:16位

校验和字段是标头和文本中所有 16 位字的补码和的 16 位补码。如果一个段包含奇数个要校验和的标头和文本八位字节,则最后一个八位字节在右侧用零填充,以形成用于校验和目的的 16 位字。pad 不作为段的一部分进行传输。在计算校验和时,校验和字段本身将被替换为零。

校验和还涵盖概念上作为 TCP 标头前缀的 96 位伪标头。该伪标头包含源地址、目标地址、协议和 TCP 长度。这为 TCP 提供了防止误路由段的保护。此信息在 Internet 协议中承载,并在 IP 上的 TCP 调用的参数或结果中通过 TCP/网络接口进行传输。

      +--------+--------+--------+--------+
      |           Source Address          |
      +--------+--------+--------+--------+
      |         Destination Address       |
      +--------+--------+--------+--------+
      |  zero  |  PTCL  |    TCP Length   |
      +--------+--------+--------+--------+
Run Code Online (Sandbox Code Playgroud)

TCP 级别不需要该信息,因为 TCP 是基于流的协议。

  • UDP使用相同的伪报头;请参阅此 http://www.ietf.org/rfc/rfc3828.txt 的第 3.2 节 (7认同)