cov*_*bob 5 networking network-programming
我一直在编写一个程序,在UDP上使用停止和等待协议,通过LAN和WAN发送数据包.我最近一直在测试我的程序,并注意到较大的数据包(接近64k字节)的丢包率更高.直觉上这是有道理的,但实际原因是什么?
大于承载它们的网络的MTU大小的UDP数据包将自动拆分为多个数据包,然后由接收方重新组装.如果这些多个子包中的任何一个被丢弃,那么接收器也将丢弃其余的子包.
因此,例如,如果您发送63k UDP数据包,并且它通过以太网,它将被分解为47个更小的"片段"数据包(因为以太网的MTU是1500字节,但其中一些用于UDP标头等,因此,UDP数据包中可用的用户数据空间量小于该数据包.如果所有47个以上的片段数据包都能正常通过,接收器将只"看到"该UDP数据包.如果只丢弃其中一个片段数据包,则整个操作将失败.