【问题标题】:How reliable is the UDP checksum algorithm?UDP校验和算法有多可靠?
【发布时间】:2011-12-01 23:00:28
【问题描述】:

似乎 UDP 使用了一种相当简单的校验和算法,并且大多数情况下它会产生预期的结果并检测错误。

但是,据我所知,使用巨型帧时 UDP 的标头是相同的,并且校验和是相同的。它只有 16 位。

这是否会增加错误渗入的可能性,并且使用 UDP 的协议(尤其是那些使用大数据包的协议)根本不应该依赖 UDP 校验和?

【问题讨论】:

    标签: udp checksum


    【解决方案1】:

    正如您所指出的,无论数据包有多大,UDP 都使用 16 位校验和。如果更改没有改变所有 16 位字的总和,则 UDP 校验和无法检测到错误。随着数据包大小的增加,这种情况更有可能发生。

    但是,UDP 通常在以太网之上运行,以太网提供 32 位 CRC,它比 UDP 校验和更可靠。因此,大多数人依赖 etherframe 来保证数据完整性。

    大型 UDP 数据包将被分割成多个 IP 数据包,每个数据包在其自己的以太网数据包中,并带有 32 位 CRC。因此,从数据完整性的角度来看,发送大型 UDP 数据包不是问题,尽管 IP 分段会增加数据包丢失和重新排序。

    【讨论】:

      【解决方案2】:

      需要对大帧进行分段,每个分段都有一个与之关联的校验和。您是正确的,标头的大小不会改变,但是发送的数据包数量会改变,从而增加发送的校验和位的数量。我希望这会有所帮助。

      【讨论】:

      • 两点。巨型帧!= 大碎片帧,如果 UDP 有效负载被分段,则只有一个 UDP 校验和。不过,每个片段都有一个 IP 校验和。
      • @skjaidev 感谢您指出 jumbo != large。我没有意识到 jumbo 是一个技术术语。我很高兴我学到了一些东西。我很抱歉回答不好。
      猜你喜欢
      • 2010-12-01
      • 1970-01-01
      • 2014-08-16
      • 2010-12-18
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      相关资源
      最近更新 更多