使用tc模拟特定端口上的networking延迟

我试图在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 

这个filter似乎没有任何延迟,有人可以指出我要去哪里错了吗? 另外,有什么办法可以ping一个端口或做一些等效的testing延迟?

谢谢!

尝试这个:

 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 
  • 我已经将priomap全零添加到prio,所以所有常规流量都将流经一个单一频段
    • 默认情况下, prio根据数据包的DSCP值将流量分配到不同的频段
    • 这意味着某些与您的过滤器不匹配的流量可能会与延迟的流量同级
  • 然后,我把netem分配给其中一个类 – 1:2
  • 最后,我添加了你的过滤器,所以它会将流标识符1:2分配给匹配的数据包
    • 这可能是你错误的地方
    • 您需要将过滤器分配给有 prio qdisc的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 XXXX - 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处理的数据包数量有意义。