netem(Network Emulator)可以用来对网卡发出的数据包进行增加延迟、丢包、重复、乱序等处理,来模拟复杂网络环境。netem的设置依赖tc命令,tc是Linux内核提供的流量控制工具。

基本用法

对eth0网卡发出的数据包延迟500毫秒发送

$ tc qdisc add dev eth0 root netem delay 500ms

这里的qdisc是tc中的一个基本概念,dev eth0表示操作的网卡,root表示出队列的根(egress),与之相对的是ingress(入队列)。netem表示启用netem,delay 500ms表示延迟500毫秒。其他命令类似。

对eth0网卡发出的数据包随机丢包5%

$ tc qdisc add dev eth0 root netem loss 5%

对eth0网卡发出的数据包产生10%的重复数据包

$ tc qdisc add dev eth0 root netem duplicate 10%

对eth0网卡发出的数据包,乱序25%(50%相关),延迟50ms

$ tc qdisc add dev eth0 root netem delay 50ms reorder 25% 50%

处理特定IP或端口的数据包

前述的命令会影响指定网络发出的所有数据包,tc命令支持更精细的控制。

如下面的设置,对发往1.1.1.1的数据包随机丢包10%

$ tc qdisc add dev eth0 root handle 1: prio

$ tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 1.1.1.1 flowid 2:1

$ tc qdisc add dev eth0 parent 1:1 handle 2: netem loss 10%

上述命令,先在入队列的根节点绑定一个prio qdisc,handle指定队列的id,id为冒号分割的两个数字。prio disc下自带了三个band,id分别是1:0, 1:1, 1:2。然后在band 1:1上增加一个qdisc,类型为netem,loss 10%是netem参数,表示丢包10%。同时,通过tc filter增加规则,将匹配到目的IP为1.1.1.1的数据包交由id为2:1的对象(即netem的 qdisc)。

这里命令中的handle后的id如,1:、1:1等不能重复。详细的解析可以参考tc命令。在filter中配置不同的match规则,可以匹配目的IP、源IP、目的端口、源端口等。

处理入数据包

netem只能发出的数据包,无法处理接收的数据包。要处理入数据包,需要借助Linux内核提供的ifb模块(Intermediate Functional Block)。

先加载ifb模块,启动ifb网卡

$ modprobe ifb

$ if link set ifb0 up

通过tc命令将入流量导入到ifb网卡上。

$ tc qdisc add dev eth0 handle ffff: ingress

$ tc filter add dev eth0 parent ffff: u32 match u32 0 0 action mirred egress redirect dev ifb0

然后再通过tc命令设置需要的规则即可,只是这里需要操作的是ifb0网卡。 如设置入数据包延迟500ms

$ tc qdisc add dev ifb0 root netem delay 500ms

设置其他处理方式,或者按照IP/端口处理与前述相同。

使用tcconfig配置netem

tc提供的非常强大的功能,同时也非常难以理解使用。通过tcconfig可以方便地配置netem的功能。 tcconfig可以通过pip或pip3安装,详见官方文档,可惜实测centos6通过pip安装会失败。

如对发往1.1.1.1的数据包增加延迟500ms,只需要一个命令即可。tcconfig会自动根据需要调用tc命令进行配置。

$ tcset eth0 --delay 500ms --dst-address 1.1.1.1 --direction outgoing

对1.1.1.1的80端口的出入数据包增加随机丢包5%。

$ tcset eth0 --loss 5% --dst-address 1.1.1.1 --dst-port 80 --direction outgoing

$ tcset eth0 --loss 5% --src-address 1.1.1.1 --src-port 80 --direction incoming

通过tcshow命令可以查看现有的规则

$ tcshow eth0

通过tcdel命令删除现有规则

$ tcdel eth0 --all

Linux 网络tc,linux下使用tc和netem模拟复杂网络环境相关推荐

  1. Linux系统:centos7下安装Jdk8、Tomcat8、MySQL5.7环境

    一.JDK1.8 环境搭建 1.上传文件解压 [root@localhost mysoft]# tar -zxvf jdk-8u161-linux-x64.tar.gz [root@localhost ...

  2. 混沌工程之ChaosMesh使用之模拟POD网络延迟

    文章目录 前言 模拟 POD 网络延迟 目标 配置文件 执行 验证 恢复 留个思考题给你 前言 在这一篇中我们来看一下如何模拟 POD 网络故障. 模拟 POD 网络延迟 目标 指定 pod 产生 1 ...

  3. Chrome浏览器模拟4G网络

    1 F12 打开开发者工具 2 选择Network面板,选择"Add"添加自定义网络: 4 填写自定义网络网速信息: 5 选择"Add"保存自定义网络信息,设置 ...

  4. linux下使用TC模拟弱网络环境

    linux下使用TC模拟弱网络环境 模拟延迟传输简介 netem 与 tc: netem 是 Linux 2.6 及以上内核版本提供的一个网络模拟功能模块.该功能模块可以用来在性能良好的局域网中,模拟 ...

  5. linux 下使用 tc 模拟网络延迟和丢包

    1 模拟延迟传输简介 netem 与 tc: netem 是 Linux 2.6 及以上内核版本提供的一个网络模拟功能模块.该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带 ...

  6. Linux下使用 tc 模拟网络延迟和丢包

    1.模拟延迟传输简介 netem 与 tc: netem 是 Linux 2.6 及以上内核版本提供的一个网络模拟功能模块.该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带 ...

  7. iproute2和流量控制(ip和tc工具)---iproute2/ip/tc/qdisc实现Linux下的QoS控制

    本文目录 1.网络配置: "ip"工具 2.流量控制工具Traffic Control: tc工具 2.1.流量整形:Queuing Packets(也称做traffic shap ...

  8. linux下使用tc工具模拟网络延迟和丢包

    模拟延迟传输简介 netem 与 tc: netem 是 Linux 2.6 及以上内核版本提供的一个网络模拟功能模块.该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽. ...

  9. 如何确认linux内核是否配置了nat,Linux Stateless无状态NAT-使用TC来配置

    Linux Stateless无状态NAT-使用TC来配置 如果想在Linux上配置NAT,那么大家众所一言的就是使用iptables的NAT表来配置,iptables提供了灵活丰富的配置来配置SNA ...

最新文章

  1. mysql如何实现实时存储_OpenResty + Mysql 实现日志实时存储
  2. 从传统操作系统角度理解Hadoop YARN
  3. python——学习笔记3
  4. python的使用说明_Python 的基本使用说明
  5. mini6410 uboot board.c 分析
  6. django jsonresponse_0基础掌握Django框架(29)HttpResponse对象
  7. jquery 插件 分析
  8. spark 窗口函数(Window)实战详解
  9. ppc64,ppc64le,ARM,AMD,X86,i386,x86_64(AMD64),AArch64的概念
  10. AD快捷键的设置及推荐
  11. CDMA 短信中心号码
  12. android studio 官方虚拟机,Android Studio 移动虚拟机
  13. Web Services Ksoap 下载多张图片
  14. python视频转字符详细教程_python视频转字符画教程
  15. 某云不限速破解详细教程附工具
  16. RTP:一种实时应用的传输协议 (RFC-3550)
  17. WPF技巧(5)元素的加载与卸载(Loaded and Unloaded)
  18. AtCoder Beginner Contest 165 D Floor Function 公式推导
  19. C语言—猜数字游戏的实现
  20. 东半球空间环境地基综合监测子午链——子午工程

热门文章

  1. cad面积计算机,AutoCAD如何测面积 AutoCAD面积计算方法
  2. SSM+宠物领养系统毕业设计-附源码031654
  3. 径向球坐标拉普拉斯方程在高数中的应用
  4. 阿里云混合云首席架构师张晓丹:政企混合云技术架构的演进和发展
  5. 【文献阅读】CSI: Novelty Detection via Contrastive Learning on Distributionally Shifted Instances
  6. [渝粤教育] 南昌航空大学 数据库原理 参考 资料
  7. 【JS】问号点和双问号的用法
  8. 【软件工程】小学四则运算 “软件”之初版
  9. 调试笔记 --- Sending non-protected broadcast ...
  10. equals方法该怎么重写呢