• 售前

  • 售后

热门帖子
入门百科

Linux模仿网络丢包与耽误的方法

[复制链接]
历史人物费 显示全部楼层 发表于 2021-10-26 12:32:06 |阅读模式 打印 上一主题 下一主题
netem 与 tc:

netem 是 Linux 2.6 及以上内核版本提供的一个网络模拟功能模块。该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽、传输延长、丢包等等情况。使用 Linux 2.6 (或以上) 版本内核的很多发行版 Linux 都开启了该内核功能,比如Fedora、Ubuntu、Redhat、OpenSuse、CentOS、Debian等等。
tc 是 Linux 体系中的一个工具,全名为traffic control(流量控制)。tc 可以用来控制 netem 的工作模式,也就是说,如果想使用 netem ,必要至少两个条件,一个是内核中的 netem 功能被包含,另一个是要有 tc 。
必要注意的是:本文介绍的流控只能控制发包动作,不能控制收包动作,同时,它直接对物理接口见效,如果控制了物理的eth0,那么逻辑网卡(比如eth0:1)也会受到影响,反之,如果您在逻辑网卡上做控制,该控制可能是无效的。(注:虚拟机中的多个网卡可以在虚拟机中视为多个物理网卡)。
Linux 有个 tc 工具,即 traffic control,可以用来模拟网络丢包和延长。在开辟背景 server 时,如果我们想要知道这个 server 在特定的网络丢包情况下,是否能表现良好,就可以用 tc 来模拟丢包率。
模拟丢包

下面命令可以模拟丢包,从 eth0 网口出去的包将随机丢失 10%:
  1. sudo tc qdisc add dev eth0 root netem loss 10%
复制代码
模拟延长

下面命令,从 eth0 网口出去的包将延长 40ms:
  1. sudo tc qdisc add dev eth0 root netem delay 40ms
复制代码
特定场景下的丢包和延长

注意,上面我们介绍的命令,是针对整个 eth0 网口起作用的,也就是说,只要是从 eth0 出去的全部的包,都会产生随机丢包大概延长。但偶然候,我们只想让丢包和延长作用于某个目的地址,那要怎么做呢?
  1. sudo tc qdisc add dev eth0 root handle 1: prio
  2. sudo tc qdisc add dev eth0 parent 1:3 handle 30: netem loss 13% delay 40ms
  3. sudo tc filter add dev eth0 protocol ip parent 1:0 u32 match ip dst 199.91.72.192 match ip dport 36000 0xffff flowid 1:3
复制代码
上面的命令,我们告诉 tc,对发往 199.91.72.192:36000 的网络包产生 13% 的丢包和 40ms 的延长,而发往别的目的地址的网络包将不受影响。
删除规则

好了,模拟完丢包和延长之后,要记得删撤除规则:
  1. sudo tc qdisc del dev eth0 root
复制代码
总结
以上就是这篇文章的全部内容了,渴望本文的内容对大家的学习大概工作具有肯定的参考学习代价,谢谢大家对脚本之家的支持。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作