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

时间:2008-11-11 17:42:43

标签: header udp tcp ip-protocol

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

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

4 个答案:

答案 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层被分段,我们需要它的长度来恢复它。

对不起,我的英语不好。