之前以为可以使用Linux自带的工具模拟控制网络时延,所以上网找了一些资料。后来发现,找到的资料目前只支持在一个网卡上模拟发送报文的时延,而不能 设置有差别的网络时延,或者说当要模拟的向A发送的时延与要模拟的向B发送的时延不一致时,Linux的tc功能就无能为力了。记录一下在网上查到的有用 的资料:
- TC带宽管理规则排版最好的链接:http://www.tuicool.com/articles/7zYzey
- TC
命令的man手册:http://wenku.baidu.com
/link?url=o0CPVzuBDLJMt0_7Qph1T7TtdFOzu7O-apIpvaWbIYMz8ZWqBneGqI8LGtLdqpuKHbUoZ-eXcguONVJ9ruTQN1JuV6xC0b-okqu7b7Ro-oW - TC详细说明及应用实例:http://wenku.baidu.com/view/f02078db50e2524de5187e45.html
- TC控制网络时延:http://blog.csdn.net/blade2001/article/details/7163316
------------------------------------------------------------
后来仔细回顾资料,发现TC控制网络时延的netem关键字不在man手册中,然后发现控制网络时延的不是原生的tc功能,而是tc调用了netem模块。
在netem官网
http://www.linuxfoundation.org/collaborate/workgroups/networking/netem#Delaying_only_some_traffic
发现了控制某个ip的网络时延的shell命令,亲测可用。
------------------------------------------------------------
在10.10.10.133,10.10.10.134,10.10.10.135上配置的:
tc qdisc add dev ib0 root handle 1: prio
tc qdisc add dev ib0 parent 1:3 handle 30: tbf rate 1000mbit burst 100mbit latency 1000ms mtu 100kbit
tc qdisc add dev ib0 parent 30:1 handle 31: netem delay 9.4ms
tc filter add dev ib0 protocol ip parent 1:0 prio 3 u32 match ip dst 10.10.10.136/32 flowid 1:3
tc filter add dev ib0 protocol ip parent 1:0 prio 3 u32 match ip dst 10.10.10.137/32 flowid 1:3
tc filter add dev ib0 protocol ip parent 1:0 prio 3 u32 match ip dst 10.10.10.138/32 flowid 1:3
在10.10.10.136,10.10.10.137,10.10.10.138上配置的:
tc qdisc add dev ib0 root handle 1: prio
tc qdisc add dev ib0 parent 1:3 handle 30: tbf rate 1000mbit burst 100mbit latency 1000ms mtu 100kbit
tc qdisc add dev ib0 parent 30:1 handle 31: netem delay 9.4ms
tc filter add dev ib0 protocol ip parent 1:0 prio 3 u32 match ip dst 10.10.10.133/32 flowid 1:3
tc filter add dev ib0 protocol ip parent 1:0 prio 3 u32 match ip dst 10.10.10.134/32 flowid 1:3
tc filter add dev ib0 protocol ip parent 1:0 prio 3 u32 match ip dst 10.10.10.135/32 flowid 1:3
查看:
tc -s qdisc ls dev ib0
删除:
tc qdisc del dev ib0 root handle 1: prio