這次工頭將「利用 Linux 中的 tc 指令以cbq來進行網路頻寬的管理-上傳篇」來補上,以免落了個「為德不卒」之名.
之前工頭談到了
使用 cbq.init 這個軟體來進行網路頻寬的管理,其實這個軟體其實也是使用了 tc 這個指令在進行網路頻寬的管理的.所以我們為了能更加深入了解 linux,這次工頭就來談談在 Linux Fedora Core 4 的環境中去使用 tc 這一個指令去做上傳的頻寬分配.如果只是單純的想限要限制在NAT server 後面的 LAN (192.168.1.0/24)的網路頻寬,事實上只要4行 tc 指令及配合 iptables 內的設定,不必 cbq.init 這個軟體就能完成對上傳做頻寬分配了.假設的網路環境圖

假設對 INTERNET 的網路連接的網卡為 eth1,那4行的 tc 指令如下:
iptables -t mangle -A FORWARD -o eth1 -s 192.168.1.0/24 -j MARK –set-mark 20
tc qdisc add dev eth1 root handle 1 cbq bandwidth 100Mbit avpkt 1000 cell 8
tc class add dev eth1 parent 1: classid 1:3 cbq bandwidth 100Mbit rate 60Kbit weight 6Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
tc qdisc add dev eth1 parent 1:3 handle 3 tbf rate 60Kbit buffer 10Kb/8 limit 15Kb mtu 1500
tc filter add dev eth1 parent 1:0 protocol ip prio 200 handle 20 fw classid 1:3
將以上指令,複製到 /etc/rc.local 此檔案內,重新開機後即可生效.此時所有對 LAN (192.168.1.0/24)的網路的電腦下載速度均為60Kbit/sec.
以上的tc 指令說明如下:
tc qdisc add dev eth1 root handle 1 cbq bandwidth 100Mbit avpkt 1000 cell 8
這一行 tc 指令在宣告一個頂級的佇列戒律.
qdisc add : 新增加一個佇列戒律.
dev eth1 : 網路卡 eth1.
root : 宣告這個是一個頂級戒律.
handle 1 : 編號為1.
bandwidth 100Mbit : 網路頻寬為 100Mbit.
avpkt 1000 : 平均封包體積大約為 1000.
cell 8 : 封包間隔發送單位為8.
tc class add dev eth1 parent 1: classid 1:3 cbq bandwidth 100Mbit rate 60Kbit weight 6Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
這一行 tc 指令在產生一個屬於佇列戒律1的 頂層類別 1:3.
class add parent 1: classid 1:2 : 產生一個屬於佇列戒律1的 頂層類別 1:3.
dev eth1 : 網路卡 eth1.
classid 1:3 : 指定這個新類別的編號名稱.
rate 60Kbit : 為實際限制的網路下載速度.
weight 6Kbit : 為一個微調參數.一般為rate值除以10去得出來的.
prio 5 : 為一優先級別值,一般設定為5.
allot 1514 : 為網卡的MTU值加上overhead.
maxburst 20 : 可接收衝突的最大封包數目.
bounded : 設定不可借用其它類別頻寬.
tc qdisc add dev eth1 parent 1:3 handle 3 tbf rate 60Kbit 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 eth1 parent 1:0 protocol ip prio 200 handle 20 fw classid 1:3
這一行 tc 指令在利用 fw 分類器來比對處理的封包.
protocol ip : 分類器所能接受的協定.
prio 100 : 為分類器的優先等級.
handle 20 fw : 為指定分類器 fw 的使用範圍為iptables make 20.
classid 1:3 : 過濾後的封包再送到類別1:3那邊去.