这里测试系统为Linux操作系统,通过简单的TC命令来实现对带宽的控制.
1对具体IP地址的流量控制
这里采用iperf来进行带宽的测试,首先在服务器和客户端都安装上iperf软件,通过该软件下的命令来进行通讯和测试.
1.1测试正常情况下的带宽
1)服务器设置端口:
[root@docker117 ~]# iperf -s -p 7000 #设置端口为7000,端口号不要设置成容易被占用的,比如XShell占用端口为22,此处倘若设置为22,就会发生冲突.
2)客户端连接服务器:
[root@localhost src]# ./iperf -c 192.168.48.117 -p 7000 -n 1000 #192.168.48. 117为服务器地址,7000为其端口;-n规定了发送字节的个数.
3)服务器结果显示:
1.2根据IP对流量进行控制
1)客户端根据服务器的ip及其端口来限制网速:
tc qdisc add dev eth0 root handle 10: htb default 12
#在网卡eth0上添加队列规则htb(分层令牌桶),其主序列号为10:,default 12表示当某个ip流不满足任何已设定的filter规则时,将自动归入class 12 中 tc class add dev eth0 parent 10: classid 10:1 htb rate 100kbit ceil 1000kbit burst 100k
#在队列规则下添加类型,以便有更深入的qdisc,这里所添加的类仍为htb,rate是一个类保证得到的带宽值,ceil是该类能最大能得到的带宽值,burst是令牌桶的大小
tc filter add dev eth0 protocol ip parent 10:0 prio 1 u32 match ip dst 192.168.48.117/32 match ip dport 7000 0xffff flowid 10:1
#添加过滤器,满足后面的筛选条件进入到类10:1中.其中,prio代表优先级,u32是选择器,后面的是服务器的ip地址和端口. 0xffff是defmap字段值,数据包的优先权位
与defmap字段的值进行"或"运算来决定是否存在这样的匹配,如果是0xffff代表匹配所有包,0则代表不匹配
2)服务器结果显示:
可看出限制后带宽由13.8Mbits/s降至403Kbits/s,证明了流量控制命令的有效性.
2对具体IP协议的流量控制
这里采用CentOS下的firefox浏览器作为研究对象,在其上开启流量测量网页,在流量控制前后分别进行测量,以检验TC命令的效果.
2.1测试正常情况下网速
2.2通过命令限制浏览器网速
1)利用TC命令限制TCP协议下的网速:
tc qdisc add dev eth0 root handle 10: htb default 12 tc class add dev eth0 parent 10: classid 10:1 htb rate 100kbit ceil 100kbit burst 1000k tc filter add dev eth0 protocol ip parent 10:0 prio 1 u32 match ip protocol 6 0xff flowid 10:1
#浏览器测速时对应的协议为TCP协议,对应的ip protocol为6
2)测试限制后浏览器网速:
限制后,下载和上传速度均有所下降,其中上传速度下降尤为显著,说明限制策略有效.