Netem参数说明
Netem参数说明
本文主要内容来自Linux基金会Wiki网站Netem文档,点击这里访问原文
netem通过模拟广域网的特性为测试协议提供网络仿真功能。当前版本模拟可变延迟,丢失,重复和重新排序。
如果您运行当前的2.6发行版(Fedora,OpenSuse,Gentoo,Debian,Mandriva,Ubuntu),那么netem已在内核中启用,并且包含当前版本的iproute2。 netem内核组件在以下位置启用:
Networking -->
Networking Options -->
QoS and/or fair queuing -->
Network emulator
Netem由命令行工具tc控制,它是iproute2工具包的一部分。 tc命令使用/usr/lib/tc目录中的共享库和数据文件。
目录
- 模拟广域网延迟
- 指定延迟的分布
- 数据包丢失
- 数据包重复
- 数据包损坏
- 数据包重新排序
- HZ的值如何影响Netem?
模拟广域网延迟
这是最简单的示例,它只是为从本地以太网发出的所有数据包添加了固定数量的延迟。
delay 100ms
现在,在本地网络上进行主机的简单ping测试应显示增加100毫秒。延迟受内核(HZ)的时钟分辨率限制。在大多数内核版本为2.4的系统中,系统时钟以100hz运行,允许延迟增量为10ms。在2.6内核上,该值是1000到100赫兹的可配置参数。
真正的广域网具有可变性,因此可以添加随机变化。
delay 100ms 10ms
这导致增加的延迟为100ms±10ms。网络延迟变化不是纯粹随机的,因此要模拟存在相关性。
delay 100ms 10ms 25%
这导致增加的延迟为100ms±10ms,下一个随机元素取决于最后一个随机元素的25%。这不是真正的统计学意义上的相关性,而只是程序模拟的近似值。
指定延迟的分布
通常,网络中的延迟是不均匀的。使用类似正态分布的东西来描述延迟的变化更为常见。 netem可以采用预先编写的表格来指定非均匀的分布。
delay 100ms 20ms distribution normal
实际使用的表格(normal,pareto,paretonormal)作为iproute2编译的一部分生成并放在/usr/lib/tc中;因此用户可以根据实验数据花费一点时间编写自己的分布表格。
数据包丢失
随机的数据包丢失在tc命令中以百分比形式指定。最小的非零值是:
1/(2的32次方) = 0.0000000232%
loss 0.1%
这导致0.1个百分点的(即1000个中的1个)数据包被随机丢弃。
还可以添加可选的相关性。使随机数不那么随机,可以用于模拟分组突发丢失。
loss 0.3% 25%
这将导致0.3%的数据包丢失,并且下一个包丢失的概率有四分之一取决于上一个数据包的丢包概率。
丢包概率(n) = 0.25 * 丢包概率(n-1) + 0.75 * 指定概率
数据包重复
数据包重复的指定方式与数据包丢失的方式相同。
duplicate 1%
数据包损坏
可以制造数据包损坏来模拟随机噪声(在2.6.16内核或更高版本中)。这个功能会在数据包中的随机位置引入单个比特的错误(翻转)。
corrupt 0.1%
数据包重新排序
指定数据包重新排序有两种不同的方法。第一个方法是gap,gap使用固定序列并重新排序每第N个数据包。一个简单的用例是:
gap 5 delay 10ms
这会导致每隔5(10,15,...)个数据包会立即发送,其他每个数据包都会延迟10ms。这种方式模拟的重排是可预测的。
重新排序的第二种方式更贴近真实网络。它会导致一定比例的数据包被错误排序:
delay 10ms reorder 25% 50%
在此示例中,25%的数据包(相关性为50%)将立即发送,其他数据包将延迟10毫秒。
如果相邻数据包的随机延迟值不同,netem的较新版本也将重新排序数据包。以下参数将导致这一类的重新排序:
delay 100ms 75ms
如果第一个数据包的随机延迟为100毫秒(100毫秒基数 - 0毫秒抖动),第二个数据包在1毫秒后发送,延迟时间为50毫秒(100毫秒基数 - 50毫秒抖动),第二个数据包将首先发送。这是因为在netem内部的队列规则tfifo会按时间顺序进行数据包发送。
注意
- 混合形式的重新排序可能会导致意外结果;
- 任何方式的重新排序,都会引入延迟;
- 如果延迟小于数据包之间到达时间的时间差,则无法观察到数据包的重新排序。
HZ的值如何影响Netem?
在2.6内核中,HZ是一个可配置参数,取值为100,250或1000。因为它会影响Netem能够延迟数据包的粒度,所以最好将HZ设置为1000,允许以1ms的增量延迟。有关HZ影响的更详细讨论,请参阅此邮件列表上的帖子。
在内核版本2.6.22或更高版本中,netem将使用高分辨率计时器(如果已启用)。这允许更精细的粒度(亚单位)分辨率。
Netem参数说明的更多相关文章
- 《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制 一.综述 SuperIO(SIO)定位 ...
- JQuery UI dialog 弹窗实例及参数说明
按钮代码: <a id="suprise" style="margin-left: 0.5em;cursor:pointer;">点我会有惊喜< ...
- 服务器.htaccess 详解以及 .htaccess 参数说明(转载)
htaccess文件(或者”分布式配置文件”)提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户,所能使用的命令受到限 ...
- Mongodb启动命令mongod参数说明
Mongodb启动命令mongod参数说明 mongod的主要参数有: 基本配置 ----------------------------------------------------------- ...
- Connect to Database Using Custom params链接数据库配置参数说明
使用RF的关键字Connect to Database Using Custom params链接数据库,对应的参数说明: a) 第一个参数我使用的是cx_Oracle,就写这个 b) ...
- .htaccess详解及.htaccess参数说明【转】
目录(?)[-] htaccess 详解 htaccess rewrite 规则详细说明 RewriteEngine OnOff RewriteBase URL-path RewriteCond Te ...
- 转载《SimpleAdapter的参数说明》
SimpleAdapter的参数说明 第一个参数 表示访问整个android应用程序接口,基本上所有的组件都需要 第二个参数表示生成一个Map(String ,Object)列表选项 第三个参数表示界 ...
- Redis配置文件参数说明
Redis配置文件参数说明 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时,Redis ...
- mosquitto_pub和mosquitto_sub 命令参数说明
mosquitto_pub 命令参数说明 1. -d 打印debug信息 2. -f 将指定文件的内容作为发送消息的内容 3. -h 指定要连接的域名 默认为localhost 4. -i ...
随机推荐
- CentOS7 SVN基本配置
开机自启指令如下 systemctl enable svnserve.service 对应可执行脚本文件路径 vim /etc/sysconfig/svnserve 查看状态: ps -ef|grep ...
- SpringMVC基础03——常用注解之@RequestMapping
1.用法 SpringMVC使用@RequestMapping注解,为控制器指定可以处理哪些URL请求,并且可以指定处理请求的类型(POST/GET),如果@RequestMapping没有指定请求的 ...
- 韦东山嵌入式Linux学习笔记08--中断体系结构
中断是什么? 举个栗子, 系统怎么知道你什么时候插入鼠标这个设备? 可以有两种处理方式: 1. 查询方式: 轮询去检测是否有设备插入; 2. 中断的方式 当鼠标插入这个事件发生时, 置位某个寄存器,告 ...
- VMWare中CentOS7 设置固定IP且能够访问外网
最近搭建kubernetes集群环境时遇到一个问题,CentOS7在重启后IP发生变化导致集群中etcd服务无法启动后集群环境变得不可用,针对这种情况,必须要对CentOS7设置固定IP且可以访问外网 ...
- Go语言标准库之fmt.Print
Go语言fmt.Printf使用指南 本文整理了Go语言的标准输出流(fmt.Printf)在打印到屏幕时的格式化输出操作. 在这里按照占位符将被替换的变量类型划分,更方便查询和记忆. General ...
- C# 各个版本特性总结
历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有17年的历史,语言本身具有丰富的特性,微软对其更新支持也十分支持.微软将C#提交给标准组织ECMA,C# 5.0目前是ECM ...
- 【leetcode】1252. Cells with Odd Values in a Matrix
题目如下: Given n and m which are the dimensions of a matrix initialized by zeros and given an array ind ...
- Java中接口与抽象类的异同
定义(以下是百度百科中的定义): Java接口:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具 ...
- 关系型数据库(七),复杂SQL语句
目录 1.SQL语句由六部分组成 2.Group By 和HAVING 七.复杂SQL语句 1.SQL语句由六部分组成 Select *** From *** Where *** Group B ...
- 计算机网络(五),TCP四次挥手
目录 1.TCP四次挥手详情 2.为什么会有TIME-WAIT状态 3.为什么需要四次握手才能断开连接 4.服务器出现大量CLOSE_WAIT的原因 五.TCP四次挥手 1.TCP四次挥手详情 (1) ...