所以我知道我可以使用 Linux tc 和 netem 将流的所有数据包延迟给定的延迟。 这里展示的内容 http://www.linuxfoundation.org/collaborate/workgroups/networking/netem#Delay_distribution 只是将所有数据包延迟给定的时间,而不改变实际数据包之间的间隔。
我想要做的是将每对连续数据包之间的最小间隔时间设置为 100 毫秒。而且我不想进行任何重新排序。
非常感谢任何想法。
问候,
kravvcu
最佳答案
因此,如果我正确理解您的要求,您希望数据包间延迟恒定为 100 毫秒并且无需重新排序。您提到的链接(linux Foundation)中的命令引入了 100ms 的延迟和 20ms 的抖动。这种抖动会导致重新排序。
有两种方法可以满足您的要求。
- 如果不需要抖动:-
tc qdisc 添加/更改/替换 dev eth0 root netem 延迟 100ms
- 如果需要抖动:-
诀窍是在 netem 命令中使用高
rate
参数。 netem 内部维护一个 tfifo 队列。使用rate
参数,netem 根据 tfifo 队列中最后一个数据包的发送时间计算下一个数据包的数据包延迟。因此有延迟和抖动,但没有重新排序。
相同的命令是
tc qdisc 添加/更改/替换 dev eth0 root netem 速率 1000mbit 延迟 100ms
速率 1000mbit
或任何非常高的速率即可完成工作!
此功能未在任何地方记录。然而,早在 2011/2012/2013 年就在 linux netdev 邮件列表中进行了讨论。 ATM 我找不到相同的链接。不过,我可以指出实现上述代码的linux源代码。
http://lxr.free-electrons.com/source/net/sched/sch_netem.c#L495
如果答案有用,请投票!
关于linux - 在每个数据包之间引入延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25017648/