【发布时间】:2010-09-21 20:23:18
【问题描述】:
为什么 UDP 的头部有长度字段,而 TCP 没有?
我猜测 TCP 中段的长度是从 IP 标头推断出来的,但是对于 UDP 数据报应该能够做到这一点
【问题讨论】:
标签: header udp tcp ip-protocol
为什么 UDP 的头部有长度字段,而 TCP 没有?
我猜测 TCP 中段的长度是从 IP 标头推断出来的,但是对于 UDP 数据报应该能够做到这一点
【问题讨论】:
标签: header udp tcp ip-protocol
有一个 96 位的伪标头概念性地作为 TCP 标头的前缀,该标头已包含该信息。
this source 的校验和字段描述给出了答案:
校验和:16 位
校验和字段是一个的 16 位反码 补充标题和文本中所有 16 位字的总和。如果一个 段包含奇数个标题和文本八位字节 校验和,最后一个八位字节在右边用零填充 形成一个 16 位字用于校验和。垫子不是 作为段的一部分传输。在计算 校验和, 校验和字段本身被零替换。
校验和在概念上还涵盖了 96 位伪标头 以 TCP 标头为前缀。此伪标头包含 Source 地址、目标地址、协议和 TCP 长度。 这为 TCP 提供了针对错误路由段的保护。这 信息在 Internet 协议中承载并传输 通过参数或结果中的 TCP/网络接口 TCP 对 IP 的调用。
+--------+--------+--------+--------+ | Source Address | +--------+--------+--------+--------+ | Destination Address | +--------+--------+--------+--------+ | zero | PTCL | TCP Length | +--------+--------+--------+--------+
TCP 级别不需要该信息,因为 TCP 是基于流的协议。
【讨论】:
根据TCP/IP Illustrated Volume 1,长度字段是多余的。这就是史蒂文斯对此事所说的全部内容。
我个人认为这是使 UDP 标头长度(以位为单位)可被 32 整除 :)
【讨论】:
这正是最初指定 UDP 的方式。 UDP 可以像 TCP 一样在标头中没有长度字段的情况下工作。
TCP中每个段的长度是如何得到的?这实际上取决于具体的实现(OS)。 TCP 的 RFC 只是声明:
任何较低级别的协议都必须提供源地址, 目的地址和协议字段,以及一些确定的方法 “TCP 长度”,[...]
【讨论】: