引入每个数据包之间的延迟

时间:2014-07-29 14:17:52

标签: linux delay trafficshaping

所以我知道我可以使用Linux tc和netem延迟给定延迟的流的所有数据包。 这里展示了什么http://www.linuxfoundation.org/collaborate/workgroups/networking/netem#Delay_distribution 只是在给定的时间内延迟所有数据包,而不是改变实际数据包之间的间隔。

我想要做的是将每个连续数据包对之间的最小间隔时间设置为100毫秒。而且我不想重新排序。

任何想法都非常感激。

此致

kravvcu

1 个答案:

答案 0 :(得分:0)

所以,如果我理解你的要求是正确的,你需要一个100毫秒的恒定的数据包间延迟并且没有重新排序。你提到的链接中的命令(linux基础)引入了100ms的延迟和20ms的抖动。这种抖动会产生重新排序。

有两种方法可以满足您的要求。

  • 如果不需要抖动: - tc qdisc add/change/replace dev eth0 root netem delay 100ms
  • 如果需要抖动: - 诀窍是在你的netem命令中使用高rate参数。 netem在内部维护一个tfifo队列。使用rate参数,netem根据其tfifo队列中最后一个数据包的发送时间计算下一个数据包的数据包延迟。因此有延迟和抖动但没有重新排序。

相同的命令是
tc qdisc add/change/replace dev eth0 root netem rate 1000mbit delay 100ms

rate 1000mbit或任何非常高的比率就可以了!

此功能未在任何地方记录。但是,在2011/2012/2013年的linux netdev邮件列表中进行了讨论。 ATM我找不到相同的链接。但是,我可以指向实现上述代码的linux源代码。

http://lxr.free-electrons.com/source/net/sched/sch_netem.c#L495

如果答案有用,请投票!