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环境,网络异常模拟测试方法【转载自光荣之路微信公众号】的更多相关文章

  1. 微信公众号开发系统入门教程(公众号注册、开发环境搭建、access_token管理、Demo实现、natapp外网穿透)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/a1786223749/article/ ...

  2. windows和linux环境下使用google的glog日志库

    一.概述 glog是google推出的一款轻量级c++开源日志框架,源码在github上,目前最新release版本是v0.3.5. githut地址:https://github.com/googl ...

  3. 用java开发微信公众号:测试公众号与本地测试环境搭建(一)

    本文为原创,原始地址为:http://www.cnblogs.com/fengzheng/p/5023678.html 俗话说,工欲善其事,必先利其器.要做微信公众号开发,两样东西不可少,那就是要有一 ...

  4. NodeJs 开发微信公众号(二)测试环境部署

    由于卤煮本人是做前端开发的,所以在做公众号过程中基本上没有遇到前端问题,在这方面花的时间是最少的.加上用了mui框架(纯css界面)和自己积累的代码,很快地开发出了界面来.接着是后台开发.卤煮选的是n ...

  5. 微信公众号开发之被逼学web服务端1-----使用SecureCRT连接Linux服务器

    做Android的进新公司后安排做微信公众号开发,这基本是后台和前端的活都要由小白的我来做,这两天基本成鸭子了,被填的满满的,却还是不够,博文仅作记录,希望能给后来的小白一点参考吧 今天做的是如何配置 ...

  6. .NET C#微信公众号开发远程断点调试(本地远程调试生产环境代码)

    最近在做微信公众号开发,由于之前没有接触过,突然发现调试不方便,不方便进行断点跟踪调试.因为微信那边绑定的服务器地址必须是公网地址,但是还是想进行断点调试(毕竟这样太方便了,程序有Bug,一步步断点跟 ...

  7. NET微信公众号开发环境搭建(一)-了解微信由来

    公众号的应用,开发及调试环境搭建 花生壳要注册 需要二十多块钱 ,还要实名认证,估计要一两天才能审核通过  主要就是在 windows搭建测试环境   1.微信的应用场景   360百科微信简介 ht ...

  8. NodeJs 开发微信公众号(五)真实环境部署

    在测试环境下开发完成代表着你离正式上线的目标不远了.接下来本章就主要谈一谈把测试环境的公众号升级为正式的公众号. 服务器和域名 目前为止我们只是在自己的电脑上完成了测试环境.真实的线上环境当然需要自己 ...

  9. 微信公众号开发系列教程一(调试环境部署续:vs远程调试)

    http://www.cnblogs.com/zskbll/p/4080328.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ...

随机推荐

  1. 解决vue不相关组件之间的数据传递----vuex的学习笔记,解决报错this.$store.commit is not a function

    Vue的项目中,如果项目简单, 父子组件之间的数据传递可以使用  props 或者 $emit 等方式 进行传递 但是如果是大中型项目中,很多时候都需要在不相关的平行组件之间传递数据,并且很多数据需要 ...

  2. jquery 选择唯一值 选择器“”非“用法

    $(document).ready(function () { $("#addwork").hide(); $(".xi").click(function(){ ...

  3. 使用Redis SETNX 命令实现分布式锁(转载)

    使用Redis的 SETNX 命令可以实现分布式锁,下文介绍其实现方法. SETNX命令简介 命令格式 SETNX key value 将 key 的值设为 value,当且仅当 key 不存在. 若 ...

  4. CSS3 图标神器 => content:"我是特殊符号"

    基本形状 ▲ 9650 25B2 ► 9658 25BA ► 9658 25BA ▼ 9660 25BC ◄ 9668 25C4 ❤ 10084 2764 ✈ 9992 2708 ★ 9733 260 ...

  5. select2 下拉搜索 可编辑可搜索 / 只可搜索

    官网 (http://select2.github.io/examples.html) <!--引入select2需要的文件--> <script type="text/j ...

  6. Sublime Text - 在浏览器打开当前文件

    有没有办法通过快捷键在指定的浏览器中打开当前文件? 有点怀念Dreamweaver的F12? 其实Sublime也可以实现这一效果,而且不需要安装任何插件. 进入Tools -> Build S ...

  7. javascript 基础知识-1

    1, stringObject.charAt(index) : 返回指定位置(index)的字符 2, RegExpObject.exec(string), 用于检索字符串(string)中正则表达式 ...

  8. 多线程-定时器Timer

    2019-04-1218:03:32 package 多线程.定时器Timer_重要; import java.util.Timer; import java.util.TimerTask; publ ...

  9. java一些对象概念扫盲帖(DO VO DTO PO)

    资料来源:http://virusswb.blog.51cto.com/115214/458636 BO:Business Object,业务对象.主要是承载业务数据的实体.处理业务逻辑的时候使用,数 ...

  10. Cookie写入之path的坑

    问题 我在/page/index/index.html中向浏览器添加了一个useid的cookie(这里没有指定path), 然后试着从/page/demo/demo.html中取值,发现无法取到, ...