本文目录

  • 1、延时---Delay
    • 1.1、enp2s0 网卡上增加100ms延时
    • 1.2、enp2s0 网卡上增加100ms ± 20ms的延时(80ms到120ms)
    • 1.3、enp2s0 网卡上增加100ms ± 20ms的延时(80ms到120ms),并且设置相关系数为50%
    • 1.4、enp2s0 网卡上增加100ms ± 20ms的延时(80ms到120ms),报文延时分布满足正态分布
  • 2、丢包率---loss
    • 2.1、enp2s0 网卡模拟发送的报文有 16% 的丢包率
    • 2.2、enp2s0 网卡模拟发送的报文使用loss state/loss gemodel模型进行丢包
    • 2.3、enp2s0 网卡模拟发送的报文选用loss state/loss gemodel模型进行丢包时的enc选项
  • 3、损坏/错误报文---corrupt
    • 3.1、enp2s0 网卡模拟发送的报文中随机选取 25%变成损坏的报文(在被随机选中做为错误报文的随机位置造成一个错误)
  • 4、重复报文---duplicate
    • 4.1、enp2s0 网卡模拟发送的报文中随机选取 25%产生重复报文
  • 5、乱序---reorder
    • 5.1、enp2s0 网卡模拟发送的报文中每5个报文就产生一个乱序包
    • 5.2、enp2s0 网卡模拟发送的报文中以50%的概率完全随机产生乱序包
  • 6、基于报文数量(令牌桶TBF)的限速---limit
  • 7、基于报文长度的限速---rate
  • 8、基于时间窗的延时与限速---slot

NetEm 是Linux的TC(traffic control)下的那个增强工具,使用这个工具可以在指定的网卡的发送方向上,注入网络延迟、丢包、重复、损坏和乱序等,用于在性能良好的局域网中,模拟出广域网中复杂的网络问题。 值得注意的是NetEm的规则是在指定网卡上生效的,所以所有从指定网卡发出的报文都会受到NetEm指定规则的影响。

NetEm借助于tc的qdisc框架,配置到网卡上,支持的命令格式如下(注意:一般来说netem要在root权限下配置)

   tc qdisc ... dev DEVICE ] add netem OPTIONSOPTIONS := [ LIMIT ] [ DELAY ] [ LOSS ] [ CORRUPT ] [ DUPLICATION ] [ REORDERING ] [ RATE ] [ SLOT ]

NetEm支持LIMIT, DELAY, LOSS, CORRUPT, DUPLICATION, REORDERING, RATE, SLOT这几种选项,下面会挨个详细介绍。

1、延时—Delay

设置延时的命令如下所示:

   DELAY := delay TIME [ JITTER [ CORRELATION ]]][ distribution { uniform | normal | pareto |  paretonormal } ]

这里有4个参数:TIME,JITTER, CORRELATION, distribution,TIME是必选参数,而其它几个参数都是可选参数。

  1. TIME:延迟的时间
  2. JITTER:抖动,增加一个随机时间长度,让延迟时间出现在某个范围
  3. CORRELATION:相关,下一个报文延迟时间和上一个报文的相关系数
  4. distribution:分布,延迟的分布模式,可以选择的值有 uniform、normal、pareto 和 paretonormal
  • delay
    通过些命令,可以在指定网卡的发送方向上给发送出去的报文设置一个指定的延时,这个延时值(TIME)可以是固定的,也可以在固定值的基础上设置一个抖动(JITTER)和一个相关性(CORRELATION)(网络延时的变化应该是平滑的,则相邻的报文的延时应该是大小变化不大的,而不是突变的,100%表示前后完全相关,即无抖动的固定延时,0%表示完全不相关,则延时是完全随机的,相邻报文之间的延时没有任何相关性)。延时和抖动的单位是ms,而相关性是个百分数。

  • distribution
    可以通过这个参数配置延时的分布状态,不使用这个配置时,默认为Normal配置,延时的分布会符合正态分布,但因为受网络里流量类型不同的影响,延时分布可能用不同的分布状态,所以除了默认的Normal之外,NetEm同时不提供了uniform, pareto和paretonormal供用户选择。

使用例子如下:

1.1、enp2s0 网卡上增加100ms延时

tc qdisc add dev enp2s0 root netem delay 100ms

1.2、enp2s0 网卡上增加100ms ± 20ms的延时(80ms到120ms)

tc qdisc add dev enp2s0 root netem delay 100ms 20ms

1.3、enp2s0 网卡上增加100ms ± 20ms的延时(80ms到120ms),并且设置相关系数为50%

tc qdisc add dev enp2s0 root netem delay 100ms 20ms 50%

1.4、enp2s0 网卡上增加100ms ± 20ms的延时(80ms到120ms),报文延时分布满足正态分布

tc qdisc add dev enp2s0 root netem delay 100ms 20ms distribution normal

2、丢包率—loss

设置丢包的命令如下所示:

       LOSS := loss { random PERCENT [ CORRELATION ]  |state p13 [ p31 [ p32 [ p23 [ p14]]]] |gemodel p [ r [ 1-h [ 1-k ]]] }  [ ecn ]

这里有4个参数:其中random, state, gemodel 是必选参数(3选1),而ecn参数都是可选参数。

  • loss random
    设置本网卡发送数据报文的丢包率(用百分比来表示),同样也支持相关性配置(这里相关性配置强烈不推荐使用,因为在使用过程中发现了一些影响测试结果的表现)。

  • loss state
    adds packet losses according to the 4-state Markov using the transition probabilities as input parameters. The parameter p13 is mandatory and if used alone corresponds to the Bernoulli model. The optional parameters allows to extend the model to 2-state (p31), 3-state (p23 and p32) and 4-state (p14). State 1 corresponds to good reception, State 4 to independent losses, State 3 to burst losses and State 2 to good reception within a burst.

  • loss gemodel
    adds packet losses according to the Gilbert-Elliot loss model or its special cases (Gilbert, Simple Gilbert and Bernoulli). To use the Bernoulli model, the only needed parameter is p while the others will be set to the default values r=1-p, 1-h=1 and 1-k=0. The parameters needed for the Simple Gilbert model are two (p and r), while three parameters (p, r, 1-h) are needed for the Gilbert model and four (p, r, 1-h and 1-k) are needed for the Gilbert-Elliot model. As known, p and r are the transition probabilities between the bad and the good states, 1-h is the loss probability in the bad state and 1-k is the loss probability in the good state.

使用例子如下:

2.1、enp2s0 网卡模拟发送的报文有 16% 的丢包率

tc qdisc add dev eth0 root netem loss 16%

2.2、enp2s0 网卡模拟发送的报文使用loss state/loss gemodel模型进行丢包

4-state Markov 模型 和 Gilbert-Elliot 丢包模型一般使用不多,待更新。

2.3、enp2s0 网卡模拟发送的报文选用loss state/loss gemodel模型进行丢包时的enc选项

can be used optionally to mark packets instead of dropping them. A loss model has to be used for this to be enabled.待更新

3、损坏/错误报文—corrupt

设置损坏/错误的命令如下所示:

       CORRUPT := corrupt PERCENT [ CORRELATION ]]

这里有2个参数:其中PERCENT是必选参数,而CORRELATION参数都是可选参数。

  • corrupt PERCENT
    按PERCENT指定的百分比随机选定的报文中模拟随机噪声在报文随机的位置引入错误。
  • CORRELATION
    同样支持相关系数。0%表示完全不相关,是完全随机的,而100%是完全相关。

使用例子如下:

3.1、enp2s0 网卡模拟发送的报文中随机选取 25%变成损坏的报文(在被随机选中做为错误报文的随机位置造成一个错误)

tc qdisc add dev enp2s0 root netem corrupt 25%

4、重复报文—duplicate

设置重复报文的命令如下所示:

       DUPLICATION := duplicate PERCENT [ CORRELATION ]]

这里有2个参数:其中PERCENT是必选参数,而CORRELATION参数都是可选参数。

  • duplicate PERCENT
    按PERCENT指定的百分比随机选定的报文相应的产生一组重复报文
  • CORRELATION
    同样支持相关系数。0%表示完全不相关,是完全随机的,而100%是完全相关。

使用例子如下:

4.1、enp2s0 网卡模拟发送的报文中随机选取 25%产生重复报文

tc  qdisc  add  dev  eth0  enp2s0  netem  duplicate 25%

5、乱序—reorder

设置重复报文的命令如下所示:

       REORDERING := reorder PERCENT [ CORRELATION ] [ gap DISTANCE ]

这里有2个参数:其中PERCENT是必选参数,而CORRELATION和 gap DISTANCE参数都是可选参数。

  • duplicate PERCENT
    按PERCENT指定的百分比随机选定的报文相应的产生乱序

  • CORRELATION
    同样支持相关系数。0%表示完全不相关,是完全随机的,而100%是完全相关。

     要使用乱序,则必须要同时配置一个延时(这个很好理解,本该在前面的报文延时了,后面的报文先发,才会产生乱序)。通常有以下二种方式来配置乱序(以延时10ms做为前提).
    
  • reorder 90% gap 5
    在这里,最开始4个报文(4= gap - 1)延时10ms, 接下去的下一个报文(第5个报文)以90%的可能性(就是说第5个报文有90%的可能性会被立刻发送)会被立刻发送(第5个报文有10%的可能性会被延时10ms发送),同样也支持相关系数。在产生了一个乱序的包后(上面第5个报文如果被立刻发送了,那么因为只有第5个包没有被延时,那第它就是一个乱序的包) ,立刻重复上述流程(将再接下去的4个报文延时10ms, 再接下去的第5个报文有90%的可能性立刻发送,就有90%的可能性产生一个乱序包)。注意:如果你需要 100%的每5个包,产生一个乱序包,则可以将可能性设置成100%。

  • reorder 25%
    25%的包被立刻发送,其它75%的包被延时10ms以产生乱序。

使用例子如下:

5.1、enp2s0 网卡模拟发送的报文中每5个报文就产生一个乱序包

这里100%可以设置成0-100%,那么系统将以指定的概率来生产一个乱序包,如果不到100%则生产乱序的规则见上面说明,只有100%的情况 下,才是稳定的每5个包,产生一个乱序。gap值也可以按需要进行修改。

root@xxx-pc:/home/xxx# tc qdisc add dev enp2s0 root netem delay 20ms reorder 100% gap 5

5.2、enp2s0 网卡模拟发送的报文中以50%的概率完全随机产生乱序包

在不设置相关系数和gap的情况下,系统会以指定的概论完全随机的产生乱序包

root@xxx-pc:/home/xxx# tc qdisc add dev enp2s0 root netem delay 20ms reorder 50%

6、基于报文数量(令牌桶TBF)的限速—limit

待更新

7、基于报文长度的限速—rate

待更新

8、基于时间窗的延时与限速—slot

待更新

弱网测试:使用netem模拟网络延迟、丢包、损坏、重复、和乱序等网络问题相关推荐

  1. 弱网测试及工具对比(Fiddler/Charles/NEWT/Clumsy/ATC/WANem/QNET)

    1.什么是弱网测试? 弱网测试主要就是对带宽.丢包.延时等进行模拟弱网环境. 衡量网络性能好坏的几个指标: 带宽(吞吐量):单位时间内传输的数据量,单位通常是:每秒比特数:bps.带宽反映了网络的传输 ...

  2. 使用Charles做弱网测试入门篇

    1.弱网测试简介 1.1.背景 当前APP网络环境比较复杂,网络制式有2G.3G.4G.5G网络,还有越来越多的公共Wi-Fi.不同的网络环境和网络制式的差异,都会对用户使用app造成一定影响.另外, ...

  3. 整理弱网测试时碰到的问题和解决方案

    [背景]弱网测试,属于健壮性测试的内容.随着国内移动端迅猛发展,大大增加用户碎片化使用移动端的概率.想象一下,用户在地铁里,巴士上,甚至是电梯,车库等场景使用APP,我们就需要针对这些场景的弱网环境下 ...

  4. 弱网测试利器-Charles工具实战

    一:弱网测试要点 二:利用抓包工具charles进行弱网设置,适用PC端和移动端(IOS/Android) 1.以charles 4.5.6版本为例,打开Proxy->Throttle Sett ...

  5. 弱网测试在app测试中探索

    目录 最近在搞一个智能穿戴项目. 手环手表等智能穿戴项目中最核心的功能是运动计步功能. 计步功能的业务逻辑是主要流程是通过手环设备采集运动数据,通过app提交采集的数据并发送到服务端,在服务端的算法库 ...

  6. 弱网测试及QNET工具介绍

    弱网测试及工具介绍 摘要:随着电梯门关闭,微博吃瓜的畅快之旅戛然而止.刚刚跨越人群挤进地铁口,却打不开入闸的二维码.在食堂找到座位坐下,正在播放的视频突然卡掉还亲切地提醒你换高清.在5g覆盖的今天,弱 ...

  7. Fiddler及浏览器开发者工具进行弱网测试

    ------·今天距2021年265天·------ 这是ITester软件测试小栈第110次推文 在上一篇Fiddler系列文章:Fiddler跨域调试及Django跨域处理,主要介绍了跨域原理.F ...

  8. Android 性能测试及弱网测试要点

    参考来源:https://www.zybuluo.com/defias/note/592309 1. 性能测试 Android性能测试分为两类: 1.一类为rom版本(系统)的性能测试 2.一类为应用 ...

  9. 弱网测试工具以及模拟真实的网络环境

    弱网测试的情况和意义我就不讲了,基本上浏览器搜一下就清楚了,我这里主要是讲下我在实际测试环境中对弱网的工具选择以及怎么去模拟真实的网络环境. 弱网工具 现在网络上用于限制网络的工具有很多,我这里主要介 ...

  10. app性能测试与弱网测试

    1. 性能测试 Android的app性能测试包括的测试项比如:  1.资源消耗  2.内存泄露  3.电量功耗  4.耗时  5.网络流量消耗  6.移动终端相关资源利用率  7.帧率  8.渲染等 ...

最新文章

  1. Vivado中IP核的xci, xcix, .dcp文件的区别
  2. java 连接mysql 并测试是否成功
  3. Spring boot的@Value注解
  4. 终于不会看不懂LSTM了
  5. Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊...
  6. linux c语 curl代码_偷懒必备工具——一键生成爬虫代码
  7. springboot mybatis 事务_真香——Github上的优秀SpringBoot框架
  8. 全国各省市县统计年鉴/中国环境统计年鉴/中国工业企业数据库/中国专利数据库/污染排放数据库
  9. JAVA 二维码图片生成和base64位加密解密
  10. 对比excel 轻松学python电子书_对比Excel,轻松学习Python数据分析
  11. 计算机组成原理的各种常见英文缩写介绍--<<方便复习的笔记>>
  12. 在javascript中如何实现珠峰海拔8848米,现在有足够大的纸,厚度是0.01米,折多少次高度可以超过珠穆朗玛峰
  13. Makefile中echo和@echo、和的区别
  14. 学简单python好学吗_python好学吗? 语法简单吗? 举个例子?
  15. 便宜好用积分兑换商城系统必须具备这些功能
  16. 12306火车票查询——Python
  17. 嵌入式系统测试工具——ETest
  18. 计算机毕业设计PHP汽车4S店保养在线预约系统
  19. ZOJ 1598 Spherical Triangle
  20. 赛尔号服务器维护时间4月27,赛尔号03月27日更新攻略汇总 瀚海界神重获新生

热门文章

  1. 最新版IDEA设置打开IDEA弹出新窗体
  2. 工具 | Windows 功能猎手 (WFH)
  3. 项目三 管理文件和目录
  4. Python3调用百度翻译API进行英文翻译
  5. web直播+聊天室功能(阿里云播放器和即时通信IM聊天、消息自动滚动)
  6. Knight Tournament
  7. android sd卡 读写文件系统,安卓10写入和读取sdcard文件
  8. PS Suite Studio Android 调试方法
  9. 如何把e01挂载到系统上?
  10. 依据imu姿态角计算z轴倾角_树莓派小车-07-IMU姿态解算 imu_complementray_filter