平均 UDP 数据包丢失和数据包重新排序
Posted
技术标签:
【中文标题】平均 UDP 数据包丢失和数据包重新排序【英文标题】:Average UDP packet loss and packet re-ordering 【发布时间】:2011-08-26 20:00:02 【问题描述】:我想就 UDP 数据包丢失(或丢失)问题获得 SO'ers 的经验。
最初我的理解是,在直接点对点连接的情况下,通过交叉电缆和 NIC 上的充足缓冲区连接 NIC 并及时处理所述缓冲区,“应该”没有数据包丢失或数据包排序问题。考虑到两点之间的良好/高端切换,我相信也是如此。
排除上述情况,LAN 上预期的平均 UDP 丢包率是多少
哪些情况会导致 UDP 数据包排序问题?
【问题讨论】:
萨米,你是在解决一个真正的问题,还是这是一个理论问题? 【参考方案1】:不知道平均 LAN 上的 UDP 数据包丢失。我假设现代交换网络的负载相当低,否则您的 LAN 或端点负载太高。 :)
重新排序可能是最容易实现的,当路线被启动和关闭时;比如说,您组织中的一台交换机的负载足够大,因此重新组织树是有意义的,并且流量通过不同的交换机发送。更有可能是您的 ISP 的对等方来来往往,或达到流量限制,并且通过它们的数据包的优先级发生变化——旧数据包在负载较重的网络上传输,新数据包在负载较轻的网络上传输,并且他们乱序到达。
【讨论】:
【参考方案2】:我也在寻找一个预期的平均值。我发现从直接链路(PC 到 PC)丢包的情况很少发生,尽管它肯定会发生。在 1 kB 数据包 @ 50 Hz 时,可用性约为 99.9%。
我已经看到通过在同一个网络接口上发送和接收来重新排序。 我得出的结论是,这是因为每个数据包都是异步处理的,因此有可能在收到新收到的数据包之前处理新到达的数据包。
【讨论】:
【参考方案3】:在我的基本千兆交换 LAN 上,即使使用 FreeBSD、Solaris 或 Linux,我每秒甚至可以实现 50,000 个数据包的零数据包丢失。
然而 Windows 是非常特别的东西,我很容易看到完全相同的硬件在低速(例如每秒 10,000 个)上丢失数据包。这主要是由于 WinSock 和 NIC 之间的缓冲区溢出,如果您驱动数据包更快,您丢失的数据包更多,如果您将数据包分开,您丢弃的数据包更少。
没有神奇的数字,我的情况可能更糟,因为 Broadcom 的 Windows 驱动程序很糟糕。
您可以很容易地看到数据包排序问题,但几乎总是只交换最后两个数据包。这是开关如何运作的人工制品。
有趣的是,您在 Wi-Fi 中没有提到,无线电信号很容易受到干扰和环境条件的影响。
【讨论】:
以上是关于平均 UDP 数据包丢失和数据包重新排序的主要内容,如果未能解决你的问题,请参考以下文章
使用 esp32 接入点流式传输 UDP 数据包会导致大量数据包丢失
“丢失”的 UDP 数据包(JBoss + DatagramSocket)