我有两个应用程序通过UDP在同一主机上进行通信,我想发送具有不同延迟(抖动)但没有乱序数据包的数据包。我对loopback接口有这个规则:
sudo tc qdisc add dev lo root handle 1: netem delay 10ms 100ms
这似乎成功地创造了抖动;然而,存在无序数据包..基本上我想按接收方发送的顺序接收数据包,只是变化的延迟,即抖动。
我尝试了一些基本的重新排序命令..当我使用100%重新排序时,它会重新排序,但在这种情况下没有抖动。如果我使用任何小于100%的重新排序命令,那么就会出现无序数据包。
它表示here如果执行以下命令,数据包将按顺序保留:
sudo tc qdisc add dev lo parent 1:1 pfifo limit 1000
但我仍然无法使用数据包。任何帮助深表感谢。
答案 0 :(得分:0)
(§1)根据官方文档 - delay section此代码
# tc qdisc change dev eth0 root netem delay 100ms 10ms.
...导致增加的延迟为100ms±10m
在您的代码中,第二个ms
命令行参数大于第一个。
(§2)此外,在packet re-ordering section此代码下
# tc qdisc change dev eth0 root netem delay 100ms 75ms
...会导致一些重新排序。如果第一个数据包的随机延迟为100毫秒(100毫秒基数 - 0毫秒抖动),第二个数据包在1毫秒后发送,延迟时间为50毫秒(100毫秒基数 - 50毫秒抖动);第二个数据包将首先发送。
受过教育的猜测:(没有测试)
切换最后两个参数的位置
sudo tc qdisc add dev lo root handle 1: netem delay 10ms 100ms
到
sudo tc qdisc add dev lo root handle 1: netem delay 100ms 10ms
虽然根据(§2),如果您在20ms内背靠背发送数据包仍然可能会重新排序:第一个数据包获得100 + 10 = 110ms延迟,你发送1ms后发送的第二个数据包得到100-10 = 90ms的延迟;第二个数据包将在第一个数据包之前到达。