我正在编写一个程序,使用基于UDP的停止和等待协议在局域网和广域网上传输数据包。最近,我测试了我的程序并发现更大的数据包(接近64k字节)的丢包率更高。直觉上这是有道理的,但实际上是什么原因呢?
我正在编写一个程序,使用基于UDP的停止和等待协议在局域网和广域网上传输数据包。最近,我测试了我的程序并发现更大的数据包(接近64k字节)的丢包率更高。直觉上这是有道理的,但实际上是什么原因呢?
嗯,数据网络远非可靠;包经常会丢失。过载的路由器、满的缓冲区和损坏的数据包是一些原因。由于UDP没有流量控制功能,所以如果接收端过载,它不能减速。
正如Jeremy所解释的那样,负载越大,它就会被分成更多的包,因此失去其中一些的机会会更大。
UDP在以下情况下使用:在这种情况下,偶尔丢失一个数据包不会影响任何事情,或者你需要某些东西及时到达或者根本不到达。(VOIP,流媒体视频等)
这都与IP分片和重组有关。如果数据包大于MTU,则需要在最终主机上进行分片和重组,还有可能在路径上再次分片,这会增加延迟。有时,如果某个网络元素配置了第4层过滤,则它会进行重组(而不是最终主机),应用规则,然后再次分片并转发。这就是需要性能的应用程序总是尝试发送大小为<=(MTU-ETHHDR-IPHDR)的数据的原因。