通过 VOIP 应用程序呼叫时,我有时会遇到语音中断。由于所有的VOIP应用程序都使用UDP进行数据传输,Linux中有没有什么工具可以测量丢包量和测量网络性能。
UDP 数据包丢失的一般原因是什么?当数据包丢失很多时我需要采取什么措施?
小智 5
UDP 丢失(尤其是在 LAN 中)的主要原因之一是缓冲区溢出。这些可能发生在交换机、发送或接收服务器中。在 Linux 上可以使用的一种验证数据包丢失的机制是运行以下命令:
watch -n 1 -d 'cat /proc/net/udp'
Run Code Online (Sandbox Code Playgroud)
这将显示类似于以下内容的输出,其中最后一列是丢弃的数据包数:
Every 1.0s: cat /proc/net/udp Mon Sep 28 15:01:00 2015
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode ref pointer drops
11362: 00000000:3443 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 18224 2 ffff880808040000 0
19543: 00000000:D438 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 3809742 2 ffff8808060c8400 0
30819: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 12644 2 ffff88100f2b0400 0
Run Code Online (Sandbox Code Playgroud)
然后,您可以尝试多种不同的技巧来尝试解决这些问题(再次以 Linux 为例):
tx_queue
或rx_queue
列是否增长),然后使用 sudo sysctl -w 'net/ipv4/udp_mem=xxx yyy zzzz'
、 or sysctl -w 'net/core/rmem_default=????'
、 or增加 udp 缓冲区sysctl -w 'net/core/wmem_default=????'
(注意,xxx ,yyyy,zzz在这里定义在无耻的自我推销中,我创建了一个名为Pontus Vision Thread Manager 的产品,它可以不断地自动调整。
UDP丢包的一般原因是什么
拥塞(数据包过多)且缺少 QOS(随机数据包丢弃、VoIP 未优先处理)和/或设备故障(线路质量等)。首先,获取支持 QOS 的设备,其次检查线路(硬件、开关,无论如何)因为不好。
对于互联网连接,您需要在两端都有 QOS 路由器 - 但您不会拥有(除非您的提供商提供 VoIP,那么他可能已经拥有适当的基础设施)。也就是说,由于下行通道通常比上行通道大得多,因此仅优先考虑下行通道的本地路由器通常“足够好”。
然而,线路质量差是一个很难处理的问题。