UDP数据包丢失-但是没有任何数据包显示由于任何地方而丢失?

时间:2018-08-14 01:43:04

标签: networking network-programming udp packet packet-loss

对于网络测试,我正在发送价值5兆字节的小数据报(每个UDP有效负载大小为50字节,不含报头),并测试服务器可以多快地接收所有〜100000数据包。

伪代码如下所示:

服务器(尽快恢复,下载速度> 50mbps):

bind("20.30.40.50", 5000)

while (true)
    recv_next_udp() // negligible overhead
    if (count++ % 100000 == 0)
        break

print "100000 * 50 bytes = 5 megabytes recv"

客户端(发送速度最快,上传速度> 20mbps):

while (true)
    send_udp_now("20.30.40.50", 5000)
    if (count++ % 100000 == 0)
        break

print "100000 * 50 bytes = 5 megabytes sent"

如果我发送到localhost127.0.0.1:我收到了所有数据报,并且都按预期完成了它们的消息。 如果我绑定并发送到公共地址:我只会收到约40%的数据报(其中约40000个),而丢失约60%。

Q:如果客户端说所有数据报均已发送,则netstat -s表示所有数据报均已发送且没有丢弃,服务器显示没有数据报因以下原因丢失或丢弃:内部缓冲区或读取速度慢:如何找到丢包的原因和位置?

根据netstat,使用最大化的操作系统缓冲区不是问题,而且我很难相信路由器和交换机的缓冲区小于5 MB。如果我放慢发送速度,并在每次发送之间添加短暂的延迟,则不会丢失数据包。

0 个答案:

没有答案