Windows和Linux环境,网络异常模拟测试方法【转载自光荣之路微信公众号】
1.网络异常的分类
在系统的运行过程中,可能会遇到各种各样的网络问题,其中主要可能出现的问题有
网络延迟:当网络信息流过大时,可能导致设备反应缓慢,造成数据传输延迟;
网路掉包:网路掉包是在数据传输的过程中,数据包由于各种原因在信道中丢失的现象;
网络节流:当数据传输量达到网络带宽上限时,数据包可能会被设备拦截下来在之后发出;
网络重发:当网络不稳定是可能会导致发送端判断数据包丢失导致部分数据包重发;
数据乱序:当数据传输有可能出现数据包到达接收端时间不一致,导致数据包乱序问题;
数据篡改:数据传输的过程中可能出现数据被连接篡改的情况。
2.Windows下网络异常的模拟方法
Windows下可以使用clumsy来进行网络异常的模拟
clumsy 首先根据用户选择的 filter 来拦截指定的网络数据。在 filter 中可以设定你感兴趣的协议(tcp/udp),端口号,是接收还是发出的端口。你也可以通过简单的逻辑语句来进一步缩小范围。当 clumsy 被激活时,只有符合这些标准的网络数据会被进行处理,而你不感兴趣的数据仍然会由系统正常传输。
当被 filter 的网络数据包被拦截后,你可以选择clumsy 提供的功能来有目的性的调整网络情况:
延迟(Lag),把数据包缓存一段时间后再发出,这样能够模拟网络延迟的状况。
掉包(Drop),随机丢弃一些数据。
节流(Throttle),把一小段时间内的数据拦截下来后再在之后的同一时间一同发出去。
重发(Duplicate),随机复制一些数据并与其本身一同发送。
乱序(Out of order),打乱数据包发送的顺序。
篡改(Tamper),随机修改小部分的包裹内容。
在测试时,该工具的filtering使用默认即可,Presets选择localhost ipv4 all,然后配置相应的功能单击start按钮,等待按钮变成stop以及按钮旁边出现小绿点时,工具则启用成功。
使用工具模拟网路延时,网络延时3000ms
使用工具模拟网络掉包,随机将10%的数据包丢弃
使用工具模拟网络节流,将10%的数据节流1000ms
使用工具模拟网络重发,将10%的数据集重发两次
使用工具模拟网络乱序,将10%的数据乱序
使用工具模拟网络篡改,篡改10%的数据
测试的过程中可以检查业务处理是否正确,比如检查数据库数据是否正确,数据库与文件库是否一致,文件库是否出现较多的垃圾文件,垃圾文件是否有清理机制等等。
3.Linux下的网络异常模拟方法
netem 是Linux 2.6 及以上内核版本提供的一个网络模拟功能模块。该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽、传输延迟、丢包等等情况。使用 Linux 2.6 (或以上) 版本内核的很多发行版 Linux 都开启了该内核功能,比如 Fedora、Ubuntu、Redhat、OpenSuse、CentOS、Debian 等等。 tc 是Linux系统中的一个工具,全名为 traffic control(流量控制)。tc 可以用来控制 netem 的工作模式,也就是说,如果想使用 netem ,需要至少两个条件,一个是内核中的 netem 功能被包含,另一个是要有 tc 。
模拟网络异常方法:
1.首先查看网卡,可使用ifconfig命令查看
[root@localhostnetwork-scripts]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.75.132 netmask 255.255.255.0 broadcast 192.168.75.255
inet6fe80::20c:29ff:fe7c:8d22 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:7c:8d:22 txqueuelen 1000 (Ethernet)
RX packets 19535 bytes2592045 (2.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 31019 bytes38969412 (37.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
红字表明的就是网卡的设备号
2.模拟网络异常可通过以下命令,其中eth0可根据自己的网卡设备号进行替换:
网络延迟
tc qdisc add dev eth0 rootnetem delay 100ms
该命令将 eth0 网卡的传输设置为延迟 100 毫秒发送。
模拟更真实的情况,延迟值可能会有一定的波动性,可以使用以下命令来模拟
Tc qdisc add dev eth0 root netem delay 100ms 10ms
该命令将 eth0 网卡的传输设置为延迟 100ms ± 10ms (90 ~ 110 ms 之间的任意值)发送
网络丢包
tc qdisc add dev eth0 root netem loss 1%
该命令将 eth0 网卡的传输设置为随机丢掉 1% 的数据包。
数据包重复
tc qdisc add dev eth0 root netem duplicate 1%
该命令将 eth0 网卡的传输设置为随机产生 1% 的重复数据包 。
数据包损坏
tc qdisc add dev eth0 root netem corrupt 0.2%
该命令将 eth0 网卡的传输设置为随机产生 0.2% 的损坏的数据包 。
数据包乱序
tc qdisc change dev eth0 root netem delay 10ms reorder 25% 50%
该命令将 eth0 网卡的传输设置为:有 25% 的数据包(50%相关)会被立即发送,其他的延迟10 秒。
查看已经配置的网络条件
tc qdisc show dev eth0
如果需要删除已配置的条件,则将以上命令中的add更改为del即可
Windows和Linux环境,网络异常模拟测试方法【转载自光荣之路微信公众号】的更多相关文章
- 微信公众号开发系统入门教程(公众号注册、开发环境搭建、access_token管理、Demo实现、natapp外网穿透)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/a1786223749/article/ ...
- windows和linux环境下使用google的glog日志库
一.概述 glog是google推出的一款轻量级c++开源日志框架,源码在github上,目前最新release版本是v0.3.5. githut地址:https://github.com/googl ...
- 用java开发微信公众号:测试公众号与本地测试环境搭建(一)
本文为原创,原始地址为:http://www.cnblogs.com/fengzheng/p/5023678.html 俗话说,工欲善其事,必先利其器.要做微信公众号开发,两样东西不可少,那就是要有一 ...
- NodeJs 开发微信公众号(二)测试环境部署
由于卤煮本人是做前端开发的,所以在做公众号过程中基本上没有遇到前端问题,在这方面花的时间是最少的.加上用了mui框架(纯css界面)和自己积累的代码,很快地开发出了界面来.接着是后台开发.卤煮选的是n ...
- 微信公众号开发之被逼学web服务端1-----使用SecureCRT连接Linux服务器
做Android的进新公司后安排做微信公众号开发,这基本是后台和前端的活都要由小白的我来做,这两天基本成鸭子了,被填的满满的,却还是不够,博文仅作记录,希望能给后来的小白一点参考吧 今天做的是如何配置 ...
- .NET C#微信公众号开发远程断点调试(本地远程调试生产环境代码)
最近在做微信公众号开发,由于之前没有接触过,突然发现调试不方便,不方便进行断点跟踪调试.因为微信那边绑定的服务器地址必须是公网地址,但是还是想进行断点调试(毕竟这样太方便了,程序有Bug,一步步断点跟 ...
- NET微信公众号开发环境搭建(一)-了解微信由来
公众号的应用,开发及调试环境搭建 花生壳要注册 需要二十多块钱 ,还要实名认证,估计要一两天才能审核通过 主要就是在 windows搭建测试环境 1.微信的应用场景 360百科微信简介 ht ...
- NodeJs 开发微信公众号(五)真实环境部署
在测试环境下开发完成代表着你离正式上线的目标不远了.接下来本章就主要谈一谈把测试环境的公众号升级为正式的公众号. 服务器和域名 目前为止我们只是在自己的电脑上完成了测试环境.真实的线上环境当然需要自己 ...
- 微信公众号开发系列教程一(调试环境部署续:vs远程调试)
http://www.cnblogs.com/zskbll/p/4080328.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ...
随机推荐
- OpenTLD在VS2012和opencv246编译通过
最近看到了TLD的跟踪视频,觉得很有意思,刚好最近在看行人检测所以就打算下载源码玩一玩,因为源码是Linux版本的(原作者写的是C++和MATLAB的混合编程)C++源码可以在我的博客TLD(一种目标 ...
- 基于struts2注解@action的@Result跳转问题——跳转到另一个action
初学ssh 基于注解的方式简单灵活,但是做一个例子的时候,添加用户AddUser 完成后 想页面跳转到 ListUser 这个action, 然后action 成功后 会跳转到list.jsp 显示 ...
- HTML基础-常用标签及图片
标记/标签{元素} 双标签: <标签>内容</标签> <html></html> 网页 页面的根元素 <head></head& ...
- lodop判断是否打印成功
需要引用js <script src="js/jquery-3.3.1.js"></script> <script src="js/Lodo ...
- c#尽量使用条件属性(Conditional Attribute)
至此我们应该对Attribute属性大体了解了.下面来看看条件属性(Conditional Attribute)到底是怎么回事. 1 [Conditional("DEBUG")] ...
- Html.DropDownList传值
Html.DropDownList传值: 可以传入明确的IEnumerable<SelectListItem>,也可以通过ViewBag或者ViewData隐式地传入,前提是需要相同的名称 ...
- 三、synchronized同步锁
一.简介 在Java多线程中,我们要实现同步串行最早接触的就是synchronized关键字. 基本语法如下: synchronized(锁) { // 代码块 } sychronized关键字的锁主 ...
- 一个JNI的helloworld小demo
最近想学习一下jni,在网上看了一些demo,自己也操作了一遍,首先我将我自己学习的demo网站贴出来:https://blog.csdn.net/lwcloud/article/details/78 ...
- 单点登录-SSO
单点登录 (Single Sign-On ) 1.同域单点登录 登录的时候,设置cookie的域即可. 2.跨域单点登录 重点是,如何在浏览器端保存登录的标识. 祭图:(脑补) 三个系统: a.aaa ...
- drupal中安装CKEditor文本编辑器,并配置图片上传功能 之 方法二
drupal中安装CKEditor文本编辑器,并配置图片上传功能 之 方法一 中介绍了ckeditor的安装和配置方法,其实还有另一种新方法,不用IMCE模块. 不过需要ckfinder的JS库,可以 ...