使用Kernel NetEm和tc模拟复杂网络环境
关键词:netem(Network Emulator)、tc(Traffic Control)。
大部分局域网环境良好,但是产品实际网络环境可能千差万别,为了对产品进行各种情况测试就需要模拟网络环境。
Linux内核network模块提供了NetworkEmulator功能,结合iproute2的tc功能可以模拟各种网络环境。
还有一点好处就是可以固定特殊网络环境,进行bug复现。
1. 环境准备
要模拟网络环境,首先需要Kernel支持netem,并且需要tc工具。
使能netem功能,在make emnuconfig界面输入"/",然后“netem”,即可找到配置netem的路径。

稍微了解tc就知道它是iproue2的一部分,在buildroot中配置iproute2.

在配置好两者之后,编译即可使用。
2. 原理
netem是内核提供的网络模拟功能模块,该功能模块可以用来在性能良好的局域网中,模拟出复杂网络传输性能,比如不同时延、丢包、乱序、重复等问题。
netem的功能模拟通过tc进行配置。通过tc在用户空间对网卡进行配置,可以模拟出netem提供的各种网络环境。
netem相关源码在net/sched/sch_netem.c中,tc在iproute2-4.14.1/tc中。
3. 使用
3.1 模拟延迟传输
将 eth0 网卡的传输设置为延迟100毫秒发送。
tc qdisc add dev eth0 root netem delay 100ms
真实的情况下,延迟值不会这么精确,会有一定的波动,下面命令模拟带有波动性的延迟值:
tc qdisc add dev eth0 root netem delay 100ms 10ms
该命令将 eth0 网卡的传输设置为延迟 100ms ± 10ms (90 ~ 110 ms 之间的任意值)发送。
由于各个包的延迟值不通,也会在一定程度上打乱发包的次序。
还可以更进一步加强这种波动的随机性,将 eth0 网卡的传输设置为 100ms ,同时,大约有30%的包会延迟 ± 10ms 发送:
tc qdisc add dev eth0 root netem delay 100ms 10ms 30%
3.2 模拟网络丢包
将 eth0 网卡的传输设置为随机丢掉 1% 的数据包。
tc qdisc add dev eth0 root netem loss 1%
也可以设置丢包的成功率,将 eth0 网卡的传输设置为随机丢掉 1% 的数据包,成功率为30% :
tc qdisc add dev eth0 root netem loss 1% 30%
3.3 模拟包重复
将 eth0 网卡的传输设置为随机产生 1% 的重复数据包。
tc qdisc add dev eth0 root netem duplicate 1%
3.4 模拟数据包损坏
将 eth0 网卡的传输设置为随机产生 0.2% 的损坏的数据包。
tc qdisc add dev eth0 root netem corrupt 0.2%
3.5 模拟数据包乱序
将 eth0 网卡的传输设置为:有25%的数据包(50%相关)会被立即发送,其他的延迟10秒。
tc qdisc change dev eth0 root netem delay 10ms reorder 25% 50%
详细信息请参考:Linux Foundation的《netem》。
使用Kernel NetEm和tc模拟复杂网络环境的更多相关文章
- Fiddler13模拟弱网络环境测试
前言现在的Android软件,基本上都会有网络请求,有些APP需要频繁的传输数据时对于网络请求的稳定性和在特殊网络条件下的兼容性有要求,但是我们在测试的时候又很难模拟那种弱网络差网络的情况,今天就给大 ...
- Network-Emulator-Toolkit 模拟各种网络环境 windows
背景.目标.目的 (1) 背景: 我们在使用网络时,时常遇到在正常网络环境下的代码运行一切正常,可以复杂的网络环境下的各种问题无法复现,必须搭建模拟各种网络环境,去复现问题,定位问题.不管是移动平台, ...
- 用Fiddler模拟低速网络环境
有时候宽频网路用习惯了… 在开发的过程就比较少去考虑最佳化的问题… 但当有人反应说「你的网页好慢」甚至当网路速度慢,会造成你的网页跳出什么啊哩不哒的bug时要如何重现呢? 我们可以用Fiddler 这 ...
- Network Link Conditioner模拟不同网络环境
在Xcode4.1中有一个工具叫Network Link Conditioner,可以让用户模拟不同的网络连接和带宽,可供Mac和iOS开发者测试自己的程序在不同网络环境下的表现. 在Xcode4.3 ...
- Android使用Fiddler模拟弱网络环境测试
原文:https://blog.csdn.net/u010618194/article/details/76652513 1.设置fiddler 顶部Tools-->Connections,把p ...
- fiddler扩展模拟弱网络环境设置
今天在qq群中有人问到怎么模拟app弱网络环境,我查了下资料,记得之前做测试的时候是设置fiddler断点,app请求后止于fiddler断点,app一直拿不到响应结果就应该要给出网络请求失败的提示, ...
- 用Fiddler模拟低速网络环境(弱网)
原文链接:http://caibaojian.com/fiddler.html 有时候宽频网路用习惯了… 在开发的过程就比较少去考虑最佳化的问题… 但当有人反应说「你的网页好慢」 甚至当网路速度慢,会 ...
- 用Fiddler模拟低速网络环境【转】
原文链接:http://caibaojian.com/fiddler.html 我们为什么要限速 限速对于web前端研发是非常重要的,由于开发者的机器一般配置都很高,并且是在localhost下来调试 ...
- Network Emulator for Windows Toolkit(模拟弱网络环境的软件)
前言和下载地址 用户会在各种网络环境下使用我们的app,pc应用,我们决不能祈求用户的网络环境都是稳定的,因此我们需要模拟出弱网络的情况,用来测试我们的APP在弱网络环境下的表现如何. Network ...
随机推荐
- 探索Windows命令行系列(4):通过命令操作文件和文件夹
1.文件夹操作 1.1.DIR(directory)命令 1.2.TREE 命令 1.3.CD(change directory)命令 1.4.MD(make directory)命令 1.5.RD( ...
- XSS Reflected 测试
由于最近在做XSS方面的测试,于是找到了DVWA平台进行实验测试,通过这三篇文章让大家了解XSS方面的大概内容,这三篇文章只是把你领进XSS的大门,要想真正深入的学习XSS,你还需要去学习很多东西来提 ...
- leetcode — reverse-linked-list
/** * Source : https://leetcode.com/problems/reverse-linked-list/ * * * Reverse a singly linked list ...
- Linux 进程管理工具 supervisord 安装及使用
Supervisor是用Python实现的一款非常实用的进程管理工具 1.安装过程非常简单 安装python 安装meld3-0.6.8.tar.gz 安装supervisor-3.0a12.tar. ...
- 讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute
先贴文章链接 正文 ASP.NET Core MVC 2.1 特意为构建 HTTP API 提供了一些小特性,今天主角就是 ApiControllerAttribute. (注:文章是18年2月份的, ...
- 杭电ACM2009--求数列的和
求数列的和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- CSS-蜂窝状展示区域(多个六边形)的一种实现方式
网上已经有很多关于正六边形的CSS画法,主要是利用一个矩形和前后的两个三角形组合而成. 之前在看四维图新的官网的时候,发现了一种六边形的画法,比较适合多排六边形组合成蜂窝状的展示区域(注:四维图新现在 ...
- PJSUA2开发文档--第十一章 网络问题
11 网络问题 11.1 IP地址更改 请参阅wiki 处理IP地址更改.请注意,本指南使用PJSUA API作为参考. 11.2 被阻止/过滤的网络 请参阅维基百科 通过阻止或过滤的VoIP网络
- Linux LVM学习总结——Insufficient Free Extents for a Logical Volume
如下所示,在创建LV的时候,偶尔会遇到"Volume group "xxxx" has insufficient free space (xxxx extents): x ...
- sqlserver数据库触发器调用外部exe
sqlserver数据库触发器调用外部exe,同事可以选择参入参数! sqlserver使用 master..xp_cmdshell 进行外部exe的执行. 使用master..xp_cmdshell ...