ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [20181031]模拟网络问题.txt

[20181031]模拟网络问题.txt

原创 Linux操作系统 作者:lfree 时间:2018-10-31 08:43:54 0 删除 编辑

[20181031]模拟网络问题.txt

--//别人问的问题,如何在正常的环境模拟网络问题,实际上linux环境使用tc+netem就ok了.(netem 表示 Network Emulation)
--//不过我以前我自己有过1次,设置太狠了,导致自己连接服务器都异常慢,差点控制不住.
--//我仔细看了文档,链接:


--//主要问题在于netem模块不支持流量控制.
--//自己做一点点总结:

1.简单测试:
--//设置延迟100ms
# tc qdisc add dev em1 root netem delay 100ms
--//显示状态
# tc qdisc show dev em1
--//取消设置
# tc qdisc delete dev em1 root netem delay 100ms
--//显示状态
# tc qdisc show dev em1

--//这样设置最大的问题,全部连接都受影响,导致不可控.一般应该限制某个IP,而不是全部IP.
--//这种测试延迟不要设置太大!! 注意em1是网络设备名.

2.我以前的脚本:

#! /bin/bash
DEV=eth0
tc qdisc del dev $DEV root
tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 1000mbit
tc class add dev $DEV parent 1: classid 1:9  cbq rate 256kbit  allot 1500 prio 8 bounded isolated
tc class add dev $DEV parent 1: classid 1:10 cbq rate 128kbit  allot 1500 prio 8 bounded isolated
tc class add dev $DEV parent 1: classid 1:11 cbq rate 64kbit  allot 1500 prio 8 bounded isolated
tc class add dev $DEV parent 1: classid 1:12 cbq rate 1kbit  allot 1500 prio 8 bounded isolated

tc filter add dev $DEV parent 1: protocol ip prio 16 u32 match ip dst 192.168.100.40/32   flowid 1:10

--//如果网卡设备名不对,修改DEV变量就可以了。后面一段可以根据自己的情况现在网络流量。
-- //取消
#! /bin/bash
DEV=eth0
tc qdisc del dev $DEV root

--//实际上的我的脚本仅仅限制网络流量.真正模拟网络问题最佳还是使用tc+netem.

3.比较客观的模拟还是建议使用netem模块.
--//但是方法1不是很好,影响全局.链接有一个例子,
--//自己修改一下.

#! /bin/bash
DEV=eth0

tc qdisc del dev $DEV root
tc qdisc show dev $DEV

tc qdisc add dev $DEV root handle 1: prio
tc qdisc add dev $DEV parent 1:3 handle 30: tbf rate 256kbit buffer 1600 limit  3000

# tc qdisc add dev $DEV parent 30:1 handle 31: netem  delay 200ms 10ms distribution normal
# tc qdisc add dev $DEV parent 30:1 handle 31: netem  delay 200ms loss 0.3% corrupt 0.1%
# tc qdisc add dev $DEV parent 30:1 handle 31: netem  delay 200ms loss 40% 25% corrupt 0.1%

tc qdisc add dev $DEV parent 30:1 handle 31: netem  delay 200ms 10ms distribution normal
tc filter add dev $DEV protocol ip parent 1:0 prio 3 u32 match ip dst 192.168.100.40/32 flowid 1:3

tc qdisc show dev $DEV

--//注设置3种情况,都注解了,可以根据需要修改,我选择第1种方案
--//loss 40% 25%
--//This will cause 40 of packets to be lost, and each successive probability depends by a quarter on the last one.
--//Probn = .25 * Probn-1 + .75 * Random

--//取消设置:
# DEV=eth0
# tc qdisc del dev $DEV root
# tc qdisc show dev $DEV


--//测试看看.执行以上脚本后:

# ping 192.168.100.40
PING 192.168.100.40 (192.168.100.40) 56(84) bytes of data.
64 bytes from 192.168.100.40: icmp_seq=1 ttl=64 time=192 ms
64 bytes from 192.168.100.40: icmp_seq=2 ttl=64 time=196 ms
64 bytes from 192.168.100.40: icmp_seq=3 ttl=64 time=209 ms
64 bytes from 192.168.100.40: icmp_seq=4 ttl=64 time=204 ms
64 bytes from 192.168.100.40: icmp_seq=5 ttl=64 time=186 ms
^C
--- 192.168.100.40 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 186.498/198.011/209.835/8.419 ms

# tc qdisc del dev eth0 root
# ping 192.168.100.40
PING 192.168.100.40 (192.168.100.40) 56(84) bytes of data.
64 bytes from 192.168.100.40: icmp_seq=1 ttl=64 time=0.113 ms
64 bytes from 192.168.100.40: icmp_seq=2 ttl=64 time=0.177 ms
64 bytes from 192.168.100.40: icmp_seq=3 ttl=64 time=0.132 ms
64 bytes from 192.168.100.40: icmp_seq=4 ttl=64 time=0.159 ms
64 bytes from 192.168.100.40: icmp_seq=5 ttl=64 time=0.130 ms
^C
--- 192.168.100.40 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.113/0.142/0.177/0.024 ms

--//启用后ping约2XXms,取消后0.1xxms.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/267265/viewspace-2218147/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    2855
  • 访问量
    6643200