为什么UDP在标题中有长度字段而TCP没有?
我猜测TCP中段的长度是从IP头推断的,但是对于UDP数据报应该能够做同样的事情
答案 0 :(得分:10)
根据 TCP / IP Illustrated Volume 1 ,长度字段是多余的。这就是史蒂文斯就此事所说的。
我个人认为将UDP标头长度(以位为单位)整除为32:)
答案 1 :(得分:1)
有一个96位伪头,在概念上以TCP头为前缀,包含已有的信息。
来自this source的校验和字段说明给出了答案:
校验和:16位
校验和字段是该字符串的16位补码 补充标题和文本中所有16位字的总和。如果一个 segment包含奇数个标头和文本八位字节 校验和,最后一个八位字节在右边用零填充 为校验和目的形成一个16位字。垫不是 作为细分市场的一部分传播。在计算时 校验, 校验和字段本身将替换为零。
校验和还概念性地涵盖了96位伪头 前缀为TCP标头。此伪标头包含Source 地址,目标地址,协议和TCP长度。 这为TCP提供了针对错误路由段的保护。这个 信息在互联网协议中传输并传输 穿过TCP / Network接口的参数或结果 TCP上的IP呼叫。
+--------+--------+--------+--------+ | Source Address | +--------+--------+--------+--------+ | Destination Address | +--------+--------+--------+--------+ | zero | PTCL | TCP Length | +--------+--------+--------+--------+
TCP级别不需要该信息,因为TCP是基于流的协议。
答案 2 :(得分:0)
这只是最初指定UDP的方式。 UDP可以像TCP一样在标头中没有长度字段的情况下工作。
如何在TCP中获得每个段的长度?这实际上取决于特定的实现(OS)。 TCP的RFC只是指出:
任何较低级别的协议都必须提供源地址, 目标地址和协议字段,以及确定方法 “ TCP长度”,[...]
答案 3 :(得分:-3)
我认为: 由于TCP是基于流的协议,因此可以将其段分段为。 UDP是面向事务的,如果它的消息在IP层被分段,我们需要它的长度来恢复它。
对不起,我的英语不好。