当前位置:  开发笔记 > 运维 > 正文

在Linux上模拟延迟和丢弃的数据包

如何解决《在Linux上模拟延迟和丢弃的数据包》经验,为你挑选了3个好方法。

我想模拟数据包延迟和丢失的UDP,并TCP在Linux上衡量一个应用程序的性能.有一个简单的方法吗?



1> ephemient..:

netem利用已经内置在Linux和用户空间实用程序中的功能来模拟网络.这实际上是马克的答案所指的不同名称.

他们主页上的示例已经显示了如何实现您的要求:

例子

模拟广域网延迟

这是最简单的示例,它只是为从本地以太网发出的所有数据包添加了固定数量的延迟.

# tc qdisc add dev eth0 root netem delay 100ms

现在,在本地网络上进行主机的简单ping测试应显示增加100毫秒.延迟受内核时钟分辨率(Hz)的限制.在大多数2.4系统中,系统时钟以100 Hz运行,允许延迟增量为10 ms.在2.6上,该值是1000到100 Hz的配置参数.

后面的例子只是更改参数而不重新加载qdisc

真正的广域网显示出可变性,因此可以添加随机变化.

# tc qdisc change dev eth0 root netem delay 100ms 10ms

这导致增加的延迟为100±10ms.网络延迟变化不是纯粹随机的,因此要模拟存在相关值.

# tc qdisc change dev eth0 root netem delay 100ms 10ms 25%

这导致增加的延迟为100±10 ms,下一个随机元素取决于最后一个随机元素的25%.这不是真正的统计相关性,而是近似值.

延迟分发

通常,网络中的延迟不均匀.使用类似正态分布的东西来描述延迟的变化更为常见.netem学科可以采用表格来指定非均匀分布.

# tc qdisc change dev eth0 root netem delay 100ms 20ms distribution normal

实际表(normal,pareto,paretonormal)作为iproute2编译的一部分生成并放在/ usr/lib/tc中; 因此,可以通过一些努力根据实验数据进行自己的分发.

数据包丢失

随机数据包丢失在'tc'命令中以百分比形式指定.最小可能的非零值是:

2 -32 = 0.0000000232%

# tc qdisc change dev eth0 root netem loss 0.1%

这导致1/10百分比(即1000个中的1个)数据包被随机丢弃.

还可以添加可选的相关性.这使得随机数发生器不那么随机,并且可以用于模拟分组突发丢失.

# tc qdisc change dev eth0 root netem loss 0.3% 25%

这将导致0.3%的数据包丢失,并且每个连续概率取决于最后一个数据包的四分之一.

Prob n = 0.25×Prob n-1 + 0.75×随机

请注意,tc qdisc add如果您没有该接口的规则,或者tc qdisc change您已经拥有该接口的规则,则应该使用.尝试tc qdisc change在没有规则的接口上使用会产生错误RTNETLINK answers: No such file or directory.


请注意,`tc -p qdisc ls dev eth0`将列出当前定义的规则,`tc qdisc del dev eth0 root`将删除它们
原始网站有错误,我只是直接复制了该文本.但是,是的,2 ^( - 32)= 2.33e-10

2> Bjarke Freun..:

对于丢弃的数据包,我只需使用iptables和统计模块.

iptables -A INPUT -m statistic --mode random --probability 0.01 -j DROP

以上将以1%的概率丢弃传入的数据包.小心,大约0.14以上的任何东西tcp连接都很可能完全停止.

看看man iptables并搜索"statistic"以获取更多信息.


为了安全起见,最好将规则限制为仅适用于您要测试的端口:iptables -A INPUT --dport FOO -m statistics ....这样,您的ssh和其他连接将会保持不受干扰,您可以提高感兴趣的服务的丢弃率,以便能够更快地重现任何问题.
为什么TCP连接会停留在14%以上?
请注意,*outbound*连接上的`DROP`非常荒谬地导致`send()`操作返回'EPERM`,而不是丢弃数据包(就像它应该).
@DavidWolever:因为tcp滑动窗口大小的调整方式.但是14%纯粹来自经验,自己试一试,你会发现ssh在14%及以上时变得无法使用,但实际上在较低的丢包率下工作得很好.
这是撤消该命令所需的全部内容吗?`iptables -D INPUT -m statistic --mode random --probability 0.01 -j DROP`

3> Mark..:

我的一位同事使用tc来做到这一点.有关更多信息,请参见手册页.您可以在此处查看其用法示例.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有