TC功能的簡要說明

TC:用語流量控制的工具。


原則:控發包,不控收包。


隊列:決定數據被髮送的方式。


無類隊列(對所有數據一視同仁,不加區分,適合比較低級的流量控制)

fifo_fast:傳統發包方式。

TBF:令牌桶 有點像小時候我們做的一道應用題,一個池子一邊放水,一般進水,當進水速度不夠時,出水速度也就被限制了。

SFQ:隨機公平隊列 每一個會話,輪流公平發包,不至於出現某個網絡進程獨佔網絡的情況。


分類隊列規定(可以對包進行分類處理,分別對待

用一個例子說明

tc qdisc add dev $BRIDGE root handle 5:0 htb default 2 r2q 64
tc class add dev $BRIDGE parent 5:0 classid 5:1 htb rate ${DOWNLINK_SPEED}kbit ceil ${DOWNLINK_SPEED}kbit quantum 30000
tc class add dev $BRIDGE parent 5:1 classid 5:2 htb rate 1kbit ceil ${DOWNLINK_SPEED}kbit prio 256 quantum 30000
tc qdisc add dev $BRIDGE parent 5:2 handle 502: sfq perturb 10


這個一個限制最大下載速度的腳本。

首先第一行,是在“BRIDGE”這張網卡上建立一個標號(就是一個稱呼,就像你名字一樣,沒有太多意義)5:0的HTB(可以暫時不關心)分類隊列。

後三行有這樣的字樣

parent 5:0 classid 5:1 這是在建立子類。

他們的關係是這樣,5:0-》5:1-》5:2-》502


我們又回到第一行,default 2 在這代表缺省包,直接放在標號爲2的後代類中,也就是5:2這個類。


所謂缺省包,就是沒有通過濾器處理的數據包。

所謂過濾器,就是按照一定規則如IP 端口等等,將數據包放在指定的類裏面工具。


每一個父類都應該有一個過濾器,來確定數據被分到那一個子類

這裏我們的分類隊列 5:0 由於沒有過濾器,缺省將所有數據包放進5:2的子類中。


rate:代表該類數據包強制的最大流量。(理解爲保證的最小帶寬)

ceil:當父類還用空餘流量時,可以借的最大流量。(理解爲限制的最大帶寬)


這樣就可以理解我們第三行的限速腳本了。


最後一行,是由於數據發送時,會遍歷所有的子類,才能找到數據包的位置,這樣在遍歷的過程中,又經過了,SFQ這個無類隊列,實現了SFQ的調度功能。


tc class add dev $BRIDGE parent 5:1 classid 5:$lan_pkt_mark htb rate 1kbit ceil ${bandwidth_dl}kbit prio 2 quantum 30000
tc qdisc add dev $BRIDGE parent 5:$lan_pkt_mark handle 5$lan_pkt_mark: sfq perturb 10
tc filter add dev $BRIDGE parent 5:0 protocol ip prio 100 handle $lan_pkt_mark fw classid 5:$lan_pkt_mark



最後一行是將打了lan_pkt_mark標記的數據包,放入classid 5:$lan_pkt_mark子類中。


標記可以用iptables打上,也就是說,iptables 可以代替TC自帶的一些過濾器




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章