netem loopback接口重新排序数据包

时间:2014-02-10 15:54:20

标签: networking wireshark packet-capture packet-sniffers packets

我有两个应用程序通过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

但我仍然无法使用数据包。任何帮助深表感谢。

1 个答案:

答案 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的延迟;第二个数据包将在第一个数据包之前到达。