Linux模拟网络丢包与延迟的方法
netem与tc:
netem是Linux2.6及以上内核版本提供的一个网络模拟功能模块。该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽、传输延迟、丢包等等情况。使用Linux2.6(或以上)版本内核的很多发行版Linux都开启了该内核功能,比如Fedora、Ubuntu、Redhat、OpenSuse、CentOS、Debian等等。
tc是Linux系统中的一个工具,全名为trafficcontrol(流量控制)。tc可以用来控制netem的工作模式,也就是说,如果想使用netem,需要至少两个条件,一个是内核中的netem功能被包含,另一个是要有tc。
需要注意的是:本文介绍的流控只能控制发包动作,不能控制收包动作,同时,它直接对物理接口生效,如果控制了物理的eth0,那么逻辑网卡(比如eth0:1)也会受到影响,反之,如果您在逻辑网卡上做控制,该控制可能是无效的。(注:虚拟机中的多个网卡可以在虚拟机中视为多个物理网卡)。
Linux有个tc工具,即trafficcontrol,可以用来模拟网络丢包和延迟。在开发后台server时,如果我们想要知道这个server在特定的网络丢包情况下,是否能表现良好,就可以用tc来模拟丢包率。
模拟丢包
下面命令可以模拟丢包,从eth0网口出去的包将随机丢失10%:
sudotcqdiscadddeveth0rootnetemloss10%
模拟延迟
下面命令,从eth0网口出去的包将延迟40ms:
sudotcqdiscadddeveth0rootnetemdelay40ms
特定场景下的丢包和延迟
注意,上面我们介绍的命令,是针对整个eth0网口起作用的,也就是说,只要是从eth0出去的所有的包,都会产生随机丢包或者延迟。但有时候,我们只想让丢包和延迟作用于某个目的地址,那要怎么做呢?
sudotcqdiscadddeveth0roothandle1:prio sudotcqdiscadddeveth0parent1:3handle30:netemloss13%delay40ms sudotcfilteradddeveth0protocolipparent1:0u32matchipdst199.91.72.192matchipdport360000xffffflowid1:3
上面的命令,我们告诉tc,对发往199.91.72.192:36000的网络包产生13%的丢包和40ms的延迟,而发往其它目的地址的网络包将不受影响。
删除规则
好了,模拟完丢包和延迟之后,要记得删除掉规则:
sudotcqdiscdeldeveth0root
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。