利用 Linux 中的 tc 指令以cbq來進行網路頻寬的管理

 

之前工頭談到了使用 cbq.init 這個軟體來進行網路頻寬的管理,其實這個軟體其實也是使用了 tc 這個指令在進行網路頻寬的管理的.所以我們為了能更加深入了解 linux,這次工頭就來談談在 Linux Fedora Core 4 的環境中去使用 tc 這一個指令去做下載的頻寬分配.

如果只是單純的想限要限制在NAT server 後面的 LAN (192.168.1.0/24)的網路頻寬,事實上只要4行 tc 指令,不必 cbq.init 這個軟體就能完成對下載做頻寬分配了.
假設的網路環境圖
nat-network
假設對 LAN (192.168.1.0/24)的網路連接的網卡為 eth0,那4行的 tc 指令如下:
tc qdisc add dev eth0 root handle 1 cbq bandwidth 100Mbit avpkt 1000 cell 8

tc class add dev eth0 parent 1: classid 1:2 cbq bandwidth 100Mbit rate 300Kbit weight 30Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded

tc qdisc add dev eth0 parent 1:2 handle 2 tbf rate 300Kbit buffer 10Kb/8 limit 15Kb mtu 1500

tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dst 192.168.1.0/24 classid 1:2
將以上指令,複製到 /etc/rc.local 此檔案內,重新開機後即可生效.此時所有對 LAN (192.168.1.0/24)的網路的電腦下載速度均為300Kbit/sec.
以上的tc 指令說明如下:
tc qdisc add dev eth0 root handle 1 cbq bandwidth 100Mbit avpkt 1000 cell 8
這一行 tc 指令在宣告一個頂級的佇列戒律.
qdisc add : 新增加一個佇列戒律.
dev eth0 : 網路卡 eth0.
root : 宣告這個是一個頂級戒律.
handle 1 : 編號為1.
bandwidth 100Mbit : 網路頻寬為 100Mbit.
avpkt 1000 : 平均封包體積大約為 1000.
cell 8 : 封包間隔發送單位為8.
[More:]
tc class add dev eth0 parent 1: classid 1:2 cbq bandwidth 100Mbit rate 300Kbit weight 30Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
這一行 tc 指令在產生一個屬於佇列戒律1的 頂層類別 1:2.
class add parent 1: classid 1:2 : 產生一個屬於佇列戒律1的 頂層類別 1:2.
dev eth0 : 網路卡 eth0.
classid 1:2 : 指定這個新類別的編號名稱.
rate 300Kbit : 為實際限制的網路下載速度.
weight 30Kbit : 為一個微調參數.一般為rate值除以10去得出來的.
prio 5 : 為一優先級別值,一般設定為5.
allot 1514 : 為網卡的MTU值加上overhead.
maxburst 20 : 可接收衝突的最大封包數目.
bounded : 設定不可借用其它類別頻寬.
tc qdisc add dev eth0 parent 1:2 handle 2 tbf rate 300Kbit buffer 10Kb/8 limit 15Kb mtu 1500
這一行 tc 指令在利用 TBF 來處理頻寬管理.
tbf : 使用 TBF 來處理頻寬管理.
buffer 10Kb/8 : 最大可接收的位元組.一般在cbq.init預設值為10Kb/8.
limit 15Kb : 它是能被佇列的有效位元組長度.
mtu 1500 : 網卡的MTU值.
tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dst 192.168.1.0/24 classid 1:2
這一行 tc 指令在利用 u32 分類器來比對處理的封包.
protocol ip : 分類器所能接受的協定.
prio 100 : 為分類器的優先等級.
u32 match ip dst 192.168.1.0/24 : 為指定分類器 u32 的使用範圍為何.
classid 1:2 : 過濾後的封包再送到類別1:2那邊去

0

收藏

一棵菠菜

33篇文章,6W+人气,0粉丝