28

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

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

4

3 回答 3

13

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

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

于 2009-02-27T16:21:40.047 回答
1

在概念上,有一个 96 位的伪标头作为 TCP 标头的前缀,该标头已经包含该信息。

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

校验和:16 位

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

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

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

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

于 2008-11-11T17:48:31.843 回答
0

这只是最初指定 UDP 的方式。UDP 可以像 TCP 一样在没有长度字段的情况下工作。

TCP中每个段的长度是如何得到的?这实际上取决于具体的实现(OS)。TCP 的 RFC 只是声明:

任何较低级别的协议都必须提供源地址、目标地址和协议字段,以及确定“TCP 长度”的某种方式,[...]

于 2020-11-02T18:03:13.113 回答