1.使用命令ifconfig查看服務器上的網卡信息,比如網卡eth0是用來對外的網絡,也就是用戶通過該網卡連接到系統,那么我們就對這個網卡進行帶寬的限制
ifconfig
2.建立eth0隊列
tc qdisc add dev eth0 root handle 1: htb default 20
命令解釋:將一個htb隊列綁定在eth0上,編號為1:0,默認歸類是 20
3.建立跟分類
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 3Mbit
命令解釋:在隊列1:0上創建根分類1:1 限速,類別htb,限速3Mbit
4.創建分類
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 2Mbit ceil 3Mbit
以根分類1:1為父類創建分類1:20 ,類別為htb 限速 1Mbit 最大3Mbit(htb可借用其它類帶寬)
5.添加公平隊列
tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10
命令解釋:sfq是公平隊列 ,防止一個會話占用全部帶寬
6.創建分類過濾器
tc filter add dev eth0 parent 1:20 protocol ip u32 match ip sport 8080 0xffff classid 1:20
命令解釋:以分類1:20為父類創建編號為1:20的過濾器 ,加載u32模塊,指定端口為8080
到此為止帶寬就限制住了,最大帶寬為3Mbit,也就是200多k的下載速度。
7.刪除tc隊列
tc qdisc del dev eth0 root
把建立好的隊列刪除,帶寬不再限制。
以上只是使用tc進行對帶寬的限制,當然也可以結合iptables使用,那么以上的第六步就不太一樣了
6.創建過濾器並制定handle
tc filter add dev em2 parent 1:0 protocol ip prio 1 handle 1000 fw classid 1:20
7.使用iptable對端口綁定tc隊列
iptables -t mangle -I POSTROUTING -o eth0 -sport 8080 -j MARK --set-mark 1000 iptables -t mangle -I POSTROUTING -o eth0 -sport 8080 -j RETURN
以上就是iptables與tc結合的結果,這里限制的是端口,當然也可以制定某個目標ip只限制制定ip的帶寬。
總結
這里提到限制的是帶寬,而且下載根據連接數進行平均分配,對TC而言,限制200k的話,一個連接那速度就是200k,如果兩個連接就變成100k一個,而iptables的話,如果一個連接占滿了200k的帶寬,那么第二個連接就直接被拒絕了。
最終如果只是想對應用系統的下載的所有連接每個連接都限制在200k的下載速度的話,最好還是應用服務器自己進行限制。
本文轉載自:http://www.fullstacks.cn/archives/423