【发布时间】:2011-12-01 23:00:28
【问题描述】:
似乎 UDP 使用了一种相当简单的校验和算法,并且大多数情况下它会产生预期的结果并检测错误。
但是,据我所知,使用巨型帧时 UDP 的标头是相同的,并且校验和是相同的。它只有 16 位。
这是否会增加错误渗入的可能性,并且使用 UDP 的协议(尤其是那些使用大数据包的协议)根本不应该依赖 UDP 校验和?
【问题讨论】:
似乎 UDP 使用了一种相当简单的校验和算法,并且大多数情况下它会产生预期的结果并检测错误。
但是,据我所知,使用巨型帧时 UDP 的标头是相同的,并且校验和是相同的。它只有 16 位。
这是否会增加错误渗入的可能性,并且使用 UDP 的协议(尤其是那些使用大数据包的协议)根本不应该依赖 UDP 校验和?
【问题讨论】:
正如您所指出的,无论数据包有多大,UDP 都使用 16 位校验和。如果更改没有改变所有 16 位字的总和,则 UDP 校验和无法检测到错误。随着数据包大小的增加,这种情况更有可能发生。
但是,UDP 通常在以太网之上运行,以太网提供 32 位 CRC,它比 UDP 校验和更可靠。因此,大多数人依赖 etherframe 来保证数据完整性。
大型 UDP 数据包将被分割成多个 IP 数据包,每个数据包在其自己的以太网数据包中,并带有 32 位 CRC。因此,从数据完整性的角度来看,发送大型 UDP 数据包不是问题,尽管 IP 分段会增加数据包丢失和重新排序。
【讨论】:
需要对大帧进行分段,每个分段都有一个与之关联的校验和。您是正确的,标头的大小不会改变,但是发送的数据包数量会改变,从而增加发送的校验和位的数量。我希望这会有所帮助。
【讨论】: