我尝试使用ubuntu上的tc命令模拟来自源端口7000的tcp数据包的固定时间延迟。我使用的命令是:
sudo tc qdisc add dev eth1 root handle 1: prio
sudo tc qdisc add dev eth1 parent 1:1 handle 2: netem delay 3000ms
sudo tc filter add dev eth1 parent 1:0 protocol ip u32 match ip sport 7000 0xffff flowid 2:1
此过滤器似乎没有任何延迟,有人可以指出我出错的地方吗?另外,有什么方法可以ping一个端口或做一些相当于测试延迟的东西吗?
谢谢!
答案 0 :(得分:4)
试试这个:
sudo tc qdisc add dev eth1 root handle 1: prio priomap 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
sudo tc qdisc add dev eth1 parent 1:2 handle 20: netem delay 3000ms
sudo tc filter add dev eth1 parent 1:0 protocol ip u32 match ip sport 7000 0xffff flowid 1:2
prio
,因此所有常规流量都将流经单个频段
prio
根据数据包的DSCP值将流量分配给不同的频段1:2
1:2
分配给匹配的数据包
1:2
,而不是无类 netem。为了测试它,我将过滤器更改为 d 端口 80 而不是 s 端口7000,并连接到checkip.amazonaws.com
花了我6秒钟(TCP Syn延迟3秒,HTTP GET延迟3秒):
malt@ubuntu:~$ wget -O - checkip.amazonaws.com
--2016-10-23 06:21:42-- http://checkip.amazonaws.com/
Resolving checkip.amazonaws.com (checkip.amazonaws.com)... 75.101.161.183, 54.235.71.200, 107.20.206.176, ...
Connecting to checkip.amazonaws.com (checkip.amazonaws.com)|75.101.161.183|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10
Saving to: ‘STDOUT’
- 0%[ ] 0 --.-KB/s X.X.X.X
- 100%[===========================================================>] 10 --.-KB/s in 0s
2016-10-23 06:21:48 (3.58 MB/s) - written to stdout [10/10]
虽然与其他端口的连接(例如443 - HTTPS,22 - SSH等)要快得多。您还可以运行sudo tc -s qdisc show dev eth1
以确保netem处理的数据包数量有意义。