【问题标题】:Why does UDP have a length field in the header and TCP does not?为什么 UDP 在标头中有长度字段而 TCP 没有?
【发布时间】:2010-09-21 20:23:18
【问题描述】:

为什么 UDP 的头部有长度字段,而 TCP 没有?

我猜测 TCP 中段的长度是从 IP 标头推断出来的,但是对于 UDP 数据报应该能够做到这一点

【问题讨论】:

    标签: header udp tcp ip-protocol


    【解决方案1】:

    有一个 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 是基于流的协议。

    【讨论】:

    【解决方案2】:

    根据TCP/IP Illustrated Volume 1,长度字段是多余的。这就是史蒂文斯对此事所说的全部内容。

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

    【讨论】:

    • 他还补充说(在第 2 卷中)“为什么存在 UDP 长度字段?可能会添加少量错误检查,因为 UDP 校验和是可选的。”不过我同意 32 位对齐可能是部分原因。
    • 那是哪一章?您介意引用相关部分以便其他用户也可以阅读吗?
    • TCP/IP 图解第 1 卷第 11.2 节“UDP 标头”。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-05-14
      • 2020-04-18
      • 2020-07-23
      • 2012-09-08
      • 2013-04-17
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      • 2019-04-29
      相关资源
      最近更新 更多