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即可