linux下使用tc(Traffic Control) 流量控制命令模擬網(wǎng)絡(luò)延遲和丟包
目錄
- TC案例
- TC常用命令
- TC安裝
- TC原理介紹
- TC規(guī)則
- TC操作原理
- TC命名規(guī)則
- TC單位
- TC命令
TC案例
如何使用tc模擬網(wǎng)絡(luò)延遲和丟包
修改網(wǎng)絡(luò)延時(shí): sudo tc qdisc add dev eth0 root netem delay 1000ms
查看流量管理:tc qdisc show
刪除策略:sudo tc qdisc del dev eth0 root netem delay 1000ms
驗(yàn)證效果:ping 192.168.102.124 -c 20
修改丟包率:sudo tc qdisc add dev eth0 root netem loss 10%
刪除策略:sudo tc qdisc del dev eth0 root netem loss 10%
配置網(wǎng)絡(luò)超時(shí)
[root@dev-xx-xx ~]``# tc qdisc del dev eth0 root netem delay 100ms
RTNETLINK answers: Invalid argument
[root@dev-xx-xx ~]``# tc qdisc show
qdisc mq 0: dev eth0 root
qdisc pfifo_fast 0: dev eth0 parent :1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev eth0 parent :2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev eth0 parent :3 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev eth0 parent :4 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
[root@dev-xx-xx ~]``# tc qdisc add dev eth0 root netem delay 100ms
[root@dev-xx-xx ~]``# ping 192.168.102.124
PING 192.168.102.124 (192.168.102.124) 56(84) bytes of data.
64 bytes from 192.168.102.124: icmp_seq=1 ttl=64 ``time``=0.074 ms
64 bytes from 192.168.102.124: icmp_seq=2 ttl=64 ``time``=0.066 ms
64 bytes from 192.168.102.124: icmp_seq=3 ttl=64 ``time``=0.080 ms
64 bytes from 192.168.102.124: icmp_seq=4 ttl=64 ``time``=0.043 ms
64 bytes from 192.168.102.124: icmp_seq=5 ttl=64 ``time``=0.084 ms
64 bytes from 192.168.102.124: icmp_seq=6 ttl=64 ``time``=0.094 ms
^C
--- 192.168.102.124 ``ping
statistics ---
12 packets transmitted, 12 received, 0% packet loss, ``time
11131ms
rtt min``/avg/max/mdev
= 0.043``/0``.081``/0``.107``/0``.018 ms
[root@dev-xx-xx ~]``# tc qdisc del dev eth0 root netem delay 100ms
[root@dev-xx-xx ~]``# tc qdisc del dev eth0 root netem delay 100ms
RTNETLINK answers: Invalid argument
|
配置網(wǎng)絡(luò)丟包率
[root@dev-xx-xx ~]``# tc qdisc del dev eth0 root netem loss 10%
RTNETLINK answers: Invalid argument
[root@dev-xx-xx ~]``# tc qdisc add dev eth0 root netem loss 10%
[root@dev-xx-xx ~]``# tc qdisc show
qdisc netem 8005: dev eth0 root refcnt 5 limit 1000 loss 10%
[root@dev-xx-xx ~]``# ping 192.168.102.124 -n 20
PING 20 (0.0.0.20) 56(124) bytes of data.
^C
--- 20 ``ping
statistics ---
21 packets transmitted, 0 received, 100% packet loss, ``time
20650ms
[root@dev-xx-xx ~]``# ping 192.168.102.124 -c 20
PING 192.168.102.124 (192.168.102.124) 56(84) bytes of data.
64 bytes from 192.168.102.124: icmp_seq=1 ttl=64 ``time``=0.101 ms
64 bytes from 192.168.102.124: icmp_seq=2 ttl=64 ``time``=0.062 ms
64 bytes from 192.168.102.124: icmp_seq=3 ttl=64 ``time``=0.098 ms
64 bytes from 192.168.102.124: icmp_seq=4 ttl=64 ``time``=0.098 ms
64 bytes from 192.168.102.124: icmp_seq=5 ttl=64 ``time``=0.062 ms
64 bytes from 192.168.102.124: icmp_seq=6 ttl=64 ``time``=0.088 ms
64 bytes from 192.168.102.124: icmp_seq=7 ttl=64 ``time``=0.045 ms
64 bytes from 192.168.102.124: icmp_seq=8 ttl=64 ``time``=0.070 ms
64 bytes from 192.168.102.124: icmp_seq=9 ttl=64 ``time``=0.062 ms
64 bytes from 192.168.102.124: icmp_seq=10 ttl=64 ``time``=0.066 ms
64 bytes from 192.168.102.124: icmp_seq=11 ttl=64 ``time``=0.088 ms
64 bytes from 192.168.102.124: icmp_seq=12 ttl=64 ``time``=0.070 ms
64 bytes from 192.168.102.124: icmp_seq=13 ttl=64 ``time``=0.089 ms
64 bytes from 192.168.102.124: icmp_seq=14 ttl=64 ``time``=0.087 ms
64 bytes from 192.168.102.124: icmp_seq=15 ttl=64 ``time``=0.054 ms
64 bytes from 192.168.102.124: icmp_seq=16 ttl=64 ``time``=0.085 ms
64 bytes from 192.168.102.124: icmp_seq=17 ttl=64 ``time``=0.064 ms
64 bytes from 192.168.102.124: icmp_seq=18 ttl=64 ``time``=0.124 ms
64 bytes from 192.168.102.124: icmp_seq=19 ttl=64 ``time``=0.063 ms
64 bytes from 192.168.102.124: icmp_seq=20 ttl=64 ``time``=0.108 ms
--- 192.168.102.124 ``ping
statistics ---
20 packets transmitted, 20 received, 0% packet loss, ``time
19000ms
rtt min``/avg/max/mdev
= 0.045``/0``.079``/0``.124``/0``.020 ms
[root@dev-xx-xx ~]``# tc qdisc del dev eth0 root netem loss 10%
[root@dev-xx-xx ~]``# ping 192.168.102.124 -c 20
PING 192.168.102.124 (192.168.102.124) 56(84) bytes of data.
64 bytes from 192.168.102.124: icmp_seq=1 ttl=64 ``time``=0.041 ms
64 bytes from 192.168.102.124: icmp_seq=2 ttl=64 ``time``=0.132 ms
64 bytes from 192.168.102.124: icmp_seq=3 ttl=64 ``time``=0.344 ms
64 bytes from 192.168.102.124: icmp_seq=4 ttl=64 ``time``=0.404 ms
64 bytes from 192.168.102.124: icmp_seq=5 ttl=64 ``time``=0.086 ms
64 bytes from 192.168.102.124: icmp_seq=6 ttl=64 ``time``=0.088 ms
64 bytes from 192.168.102.124: icmp_seq=7 ttl=64 ``time``=0.063 ms
64 bytes from 192.168.102.124: icmp_seq=8 ttl=64 ``time``=0.109 ms
64 bytes from 192.168.102.124: icmp_seq=9 ttl=64 ``time``=0.064 ms
64 bytes from 192.168.102.124: icmp_seq=10 ttl=64 ``time``=0.092 ms
64 bytes from 192.168.102.124: icmp_seq=11 ttl=64 ``time``=0.044 ms
64 bytes from 192.168.102.124: icmp_seq=12 ttl=64 ``time``=0.066 ms
64 bytes from 192.168.102.124: icmp_seq=13 ttl=64 ``time``=0.094 ms
64 bytes from 192.168.102.124: icmp_seq=14 ttl=64 ``time``=0.097 ms
64 bytes from 192.168.102.124: icmp_seq=15 ttl=64 ``time``=0.108 ms
64 bytes from 192.168.102.124: icmp_seq=16 ttl=64 ``time``=0.043 ms
64 bytes from 192.168.102.124: icmp_seq=17 ttl=64 ``time``=0.093 ms
64 bytes from 192.168.102.124: icmp_seq=18 ttl=64 ``time``=0.056 ms
64 bytes from 192.168.102.124: icmp_seq=19 ttl=64 ``time``=0.093 ms
64 bytes from 192.168.102.124: icmp_seq=20 ttl=64 ``time``=0.039 ms
--- 192.168.102.124 ``ping
statistics ---
20 packets transmitted, 20 received, 0% packet loss, ``time
18999ms
rtt min``/avg/max/mdev
= 0.039``/0``.107``/0``.404``/0``.093 ms
[root@dev-xx-xx ~]``#
|
TC常用命令
1)模擬延遲傳輸:
tc qdisc add dev eth0 root netem delay 100ms
該命令將 eth0 網(wǎng)卡的傳輸設(shè)置為延遲 100 毫秒發(fā)送蚁袭,更真實(shí)的情況下,延遲值不會(huì)這么精確斋荞,會(huì)有一定的波動(dòng)耸棒,后面用下面的情況來模擬出帶有波動(dòng)性的延遲值
2)模擬延遲波動(dòng):
tc qdisc add dev eth0 root netem delay 100ms 10ms
該命令將 eth0 網(wǎng)卡的傳輸設(shè)置為延遲 100ms ± 10ms (90 ~ 110 ms 之間的任意值)發(fā)送荆忍。 還可以更進(jìn)一步加強(qiáng)這種波動(dòng)的隨機(jī)性
3)延遲波動(dòng)隨機(jī)性:
該命令將 eth0 網(wǎng)卡的傳輸設(shè)置為 100ms ,同時(shí),大約有 30% 的包會(huì)延遲 ± 10ms 發(fā)送阿趁。
tc qdisc add dev eth0 root netem delay 100ms 10ms 30%
4)模擬網(wǎng)絡(luò)丟包:
tc qdisc add dev eth0 root netem loss 1%
該命令將 eth0 網(wǎng)卡的傳輸設(shè)置為隨機(jī)丟掉 1% 的數(shù)據(jù)包
5)網(wǎng)絡(luò)丟包成功率:
tc qdisc add dev eth0 root netem loss 1% 30%
該命令將 eth0 網(wǎng)卡的傳輸設(shè)置為隨機(jī)丟掉 1% 的數(shù)據(jù)包,成功率為 30%
6)刪除相關(guān)配置(將之前命令中的 add 改為 del 即可刪除配置):
tc qdisc del dev eth0 root netem delay 100ms
7)模擬包重復(fù):
tc qdisc add dev eth0 root netem duplicate 1%
該命令將 eth0 網(wǎng)卡的傳輸設(shè)置為隨機(jī)產(chǎn)生 1% 的重復(fù)數(shù)據(jù)包
8)模擬包損壞:
tc qdisc add dev eth0 root netem corrupt 0.2%
該命令將 eth0 網(wǎng)卡的傳輸設(shè)置為隨機(jī)產(chǎn)生 0.2% 的損壞的數(shù)據(jù)包 。 (內(nèi)核版本需在 2.6.16 以上)
9)模擬包亂序:
tc qdisc change dev eth0 root netem delay 10ms reorder 25% 50%
該命令將 eth0 網(wǎng)卡的傳輸設(shè)置為:有 25% 的數(shù)據(jù)包(50%相關(guān))會(huì)被立即發(fā)送,其他的延遲10 秒炬称。
新版本中,如下命令也會(huì)在一定程度上打亂發(fā)包的次序:# tc qdisc add dev eth0 root netem delay 100ms 10ms
10)查看網(wǎng)卡配置:
tc qdisc show dev eth0
該命令將 查看并顯示 eth0 網(wǎng)卡的相關(guān)傳輸配置
11)查看丟包率:
tc -s qdisc show dev eth0
TC安裝
TC是linux自帶的模塊堰塌,一般不需要安裝,TC要求內(nèi)核2.4.18以上。注意:64位機(jī)器上模聋,或需先執(zhí)行下面命令肩民,做個(gè)軟鏈接:ln -s /usr/lib64/tc /usr/lib/tc
TC原理介紹
Linux 操作系統(tǒng)中的流量控制器 TC(Traffic Control) 用于Linux內(nèi)核的流量控制,它利用隊(duì)列規(guī)定建立處理數(shù)據(jù)包的隊(duì)列链方,并定義隊(duì)列中的數(shù)據(jù)包被發(fā)送的方式持痰,從而實(shí)現(xiàn)對(duì)流量的控制。TC 模塊實(shí)現(xiàn)流量控制功能使用的隊(duì)列規(guī)定分為兩類祟蚀,一類是無類隊(duì)列規(guī)定工窍,另一類是分類隊(duì)列規(guī)定。無類隊(duì)列規(guī)定相對(duì)簡(jiǎn)單暂题,而分類隊(duì)列規(guī)定則引出了分類和過濾器等概念,使其流量控制功能增強(qiáng)究珊。
無類隊(duì)列規(guī)定是對(duì)進(jìn)入網(wǎng)絡(luò)設(shè)備(網(wǎng)卡)的數(shù)據(jù)流不加區(qū)分統(tǒng)一對(duì)待的隊(duì)列規(guī)定薪者。使用無類隊(duì)列規(guī)定形成的隊(duì)列能夠接收數(shù)據(jù)包以及重新編排、延遲或丟棄數(shù)據(jù)包剿涮。這類隊(duì)列規(guī)定形成的隊(duì)列可以對(duì)整個(gè)網(wǎng)絡(luò)設(shè)備(網(wǎng)卡)的流量進(jìn)行整形言津,但不能細(xì)分各種情況。常用的無類隊(duì)列規(guī)定主要有 pfifo_fast(先進(jìn)先出)取试、TBF(令牌桶過濾器)悬槽、SFQ(隨機(jī)公平隊(duì)列)、ID(前向隨機(jī)丟包)等等瞬浓。這類隊(duì)列規(guī)定使用的流量整形手段主要是排序初婆、限速和丟包。
分類隊(duì)列規(guī)定是對(duì)進(jìn)入網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)包根據(jù)不同的需求以分類的方式區(qū)分對(duì)待的隊(duì)列規(guī)定猿棉。數(shù)據(jù)包進(jìn)入一個(gè)分類的隊(duì)列后磅叛,它就需要被送到某一個(gè)類中,也就是說需要對(duì)數(shù)據(jù)包做分類處理萨赁。對(duì)數(shù)據(jù)包進(jìn)行分類的工具是過濾器弊琴,過濾器會(huì)返回一個(gè)決定,隊(duì)列規(guī)定就根據(jù)這個(gè)決定把數(shù)據(jù)包送入相應(yīng)的類進(jìn)行排隊(duì)杖爽。每個(gè)子類都可以再次使用它們的過濾器進(jìn)行進(jìn)一步的分類敲董。直到不需要進(jìn)一步分類時(shí),數(shù)據(jù)包才進(jìn)入該類包含的隊(duì)列排隊(duì)慰安。除了能夠包含其他隊(duì)列規(guī)定之外腋寨,絕大多數(shù)分類的隊(duì)列規(guī)定還能夠?qū)α髁窟M(jìn)行整形。這對(duì)于需要同時(shí)進(jìn)行調(diào)度(如使用SFQ)和流量控制的場(chǎng)合非常有用化焕。
接收包從輸入接口(Input Interface)進(jìn)來后精置,經(jīng)過流量限制(Ingress Policing)丟棄不符合規(guī)定的數(shù)據(jù)包,由輸入多路分配器(Input De-Multiplexing)進(jìn)行判斷選擇锣杂。如果接收包的目的地是本主機(jī)脂倦,那么將該包送給上層處理番宁,否則需要進(jìn)行轉(zhuǎn)發(fā),將接收包交到轉(zhuǎn)發(fā)塊(Forwarding Block)處理赖阻。轉(zhuǎn)發(fā)塊同時(shí)也接收本主機(jī)上層(TCP蝶押、UDP等)產(chǎn)生的包。轉(zhuǎn)發(fā)塊通過查看路由表火欧,決定所處理包的下一跳棋电。然后,對(duì)包進(jìn)行排列以便將它們傳送到輸出接口(Output Interface)苇侵。一般我們只能限制網(wǎng)卡發(fā)送的數(shù)據(jù)包赶盔,不能限制網(wǎng)卡接收的數(shù)據(jù)包,所以我們可以通過改變發(fā)送次序來控制傳輸速率榆浓。Linux流量控制主要是在輸出接口排列時(shí)進(jìn)行處理和實(shí)現(xiàn)的于未。
TC規(guī)則
一、流量控制方式
流量控制包括一下幾種方式:SHAPING陡鹃、SCHEDULING烘浦、POLICING、DROPPING萍鲸;
SHAPING(限制)
當(dāng)流量被限制時(shí)闷叉,它的傳輸速率就被控制在某個(gè)值以下。限制值可以大大小于有效帶寬脊阴,這樣可以平滑突發(fā)數(shù)據(jù)流量握侧,使網(wǎng)絡(luò)更為穩(wěn)定。SHAPING(限制)只適用于向外的流量嘿期。
SCHEDULING(調(diào)度)
通過調(diào)度數(shù)據(jù)包的傳輸藕咏,可以在帶寬范圍內(nèi),按照優(yōu)先級(jí)分配帶寬秽五。SCHEDULING(調(diào)度)也只適用于向外的流量孽查。
POLICING(策略)
SHAPING(限制)用于處理向外的流量,而POLICING(策略)用于處理接收到的數(shù)據(jù)坦喘。
DROPPING(丟棄)
如果流量超過某個(gè)設(shè)定的帶寬盲再,就丟棄數(shù)據(jù)包,不管是向內(nèi)還是向外瓣铣。
二答朋、流量控制處理對(duì)象
流量的處理由三種對(duì)象控制,它們是:qdisc(排隊(duì)規(guī)則)棠笑、class(類別)和filter(過濾器)梦碗。
qdisc(排隊(duì)規(guī)則)是 queueing discipline的簡(jiǎn)寫,它是理解流量控制(traffic control)的基礎(chǔ)。無論何時(shí)洪规,內(nèi)核如果需要通過某個(gè)網(wǎng)絡(luò)接口發(fā)送數(shù)據(jù)包印屁,它都需要按照為這個(gè)接口配置的qdisc(排隊(duì)規(guī)則)把數(shù)據(jù)包加入隊(duì)列。然后斩例,內(nèi)核會(huì)盡可能多的從qdisc里面取出數(shù)據(jù)包雄人,把它們交給網(wǎng)絡(luò)適配器驅(qū)動(dòng)模塊。最簡(jiǎn)單的qdisc是pfifo他不對(duì)進(jìn)入的數(shù)據(jù)包做任何的處理念赶,數(shù)據(jù)包采用先進(jìn)先出的方式通過隊(duì)列础钠。不過,它會(huì)保存網(wǎng)絡(luò)接口一時(shí)無法處 理的數(shù)據(jù)包叉谜。
qddis(排隊(duì)規(guī)則)分為 CLASSLESS QDISC和 CLASSFUL QDISC旗吁;
CLASSLESS QDISC (無類別QDISC)包括:
[ p | b ]fifo,使用最簡(jiǎn)單的qdisc(排隊(duì)規(guī)則),純粹的先進(jìn)先出停局。只有一個(gè)參數(shù):limit 很钓,用來設(shè)置隊(duì)列的長(zhǎng)度,pfifo是以數(shù)據(jù)包的個(gè)數(shù)為單位翻具;bfifo是以字節(jié)數(shù)為單位履怯。
pfifo_fast回还,在編譯內(nèi)核時(shí)裆泳,如果打開了高級(jí)路由器(Advanced Router)編譯選項(xiàng),pfifo_fast 就是系統(tǒng)的標(biāo)準(zhǔn)qdisc(排隊(duì)規(guī)則)柠硕。它的隊(duì)列包括三個(gè)波段(band)工禾。在每個(gè)波段里面,使用先進(jìn)先出規(guī)則蝗柔。而三個(gè)波段(band)的優(yōu)先級(jí)也不相同闻葵,band 0 的優(yōu)先級(jí)最高,band 2的最低癣丧。如果band 0里面有數(shù)據(jù)包槽畔,系統(tǒng)就不會(huì)處理band 1 里面的數(shù)據(jù)包,band 1 和 band 2 之間也是一樣的胁编。數(shù)據(jù)包是按照服務(wù)類型(Type Of Service厢钧,TOS )被分配到三個(gè)波段(band)里面的。
red嬉橙,red是Random Early Detection(隨機(jī)早期探測(cè))的簡(jiǎn)寫早直。如果使用這種qdsic,當(dāng)帶寬的占用接近與規(guī)定的帶寬時(shí)市框,系統(tǒng)會(huì)隨機(jī)的丟棄一些數(shù)據(jù)包霞扬。他非常適合高帶寬的應(yīng)用。
sfq,sfq是Stochastic Fairness Queueing 的簡(jiǎn)寫喻圃。它會(huì)按照會(huì)話(session --對(duì)應(yīng)與每個(gè)TCP 連接或者UDP流)為流量進(jìn)行排序萤彩,然后循環(huán)發(fā)送每個(gè)會(huì)話的數(shù)據(jù)包。
tbf级及,tbf是 Token Bucket Filter 的簡(jiǎn)寫乒疏,適用于把流速降低到某個(gè)值。
CLASSLESS QDISC (無類別QDISC)的配置:
如果沒有可分類qdisc饮焦,不可分類qdisc 只能附屬于設(shè)備的根怕吴。它們的用法如#tc qdisc add dev DEV root QDISC QDISC_PARAMETERS
要?jiǎng)h除一個(gè)不可分類qdisc,需要使用如#tc qdisc del dev DEV root
一個(gè)網(wǎng)絡(luò)接口上如果沒有設(shè)置qdisc县踢,pfifo_fast就作為缺省的qdisc转绷。
CLASSFUL QDISC(可分類 QDISC)包括:
CBQ,CBQ是 Class Based Queueing(基于類別排隊(duì))的縮寫硼啤。它實(shí)現(xiàn)了一個(gè)豐富的連接共享類別結(jié)構(gòu)议经,既有限制(shaping)帶寬的能力,也具有帶寬優(yōu)先級(jí)別管理的能力谴返。帶寬限制是通過計(jì)算連接的空閑時(shí)間完成的煞肾。空閑時(shí)間的計(jì)算標(biāo)準(zhǔn)是數(shù)據(jù)包離隊(duì)事件的頻率和下層連接(數(shù)據(jù)鏈路層)的帶寬嗓袱。
HTB籍救,HTB是Hierarchy Token Bucket 的縮寫。通過在實(shí)踐基礎(chǔ)上的改進(jìn)渠抹,它實(shí)現(xiàn)一個(gè)豐富的連接共享類別體系蝙昙。使用HTB可以很容易地保證每個(gè)類別的帶寬,雖然它也允許特定的類可以突破帶寬上限梧却,占用別的類的帶寬奇颠。HTB可以通過TBF(Token Bucket Filter)實(shí)現(xiàn)帶寬限制,也能夠劃分類別的優(yōu)先級(jí)放航。
PRIO烈拒,PRIO qdisc 不能限制帶寬,因?yàn)閷儆诓煌悇e的數(shù)據(jù)包是順序離隊(duì)的广鳍。使用PRIO qdisc 可以很容易對(duì)流量進(jìn)行優(yōu)先級(jí)管理荆几,只有屬于高優(yōu)先級(jí)類別的數(shù)據(jù)包全部發(fā)送完畢,參會(huì)發(fā)送屬于低優(yōu)先級(jí)類別的數(shù)據(jù)包搜锰。為了方便管理伴郁,需要使用iptables 或者 ipchains 處理數(shù)據(jù)包的服務(wù)類型(Type Of Service,TOS)蛋叼。
TC操作原理
類(class)組成一個(gè)樹焊傅,每個(gè)類都只有一個(gè)父類剂陡,而一個(gè)類可以有多個(gè)子類。某些qdisc (例如:CBQ和 HTB)允許在運(yùn)行時(shí)動(dòng)態(tài)添加類狐胎,而其它的qdisc(例如:PRIO)不允許動(dòng)態(tài)建立類鸭栖。允許動(dòng)態(tài)添加類的qdisc可以有零個(gè)或者多個(gè)子類,由它們?yōu)閿?shù)據(jù)包排隊(duì)握巢。此外晕鹊,每個(gè)類都有一個(gè)葉子qdisc,默認(rèn)情況下暴浦,這個(gè)也在qdisc有可分類溅话,不過每個(gè)子類只能有一個(gè)葉子qdisc。 當(dāng)一個(gè)數(shù)據(jù)包進(jìn)入一個(gè)分類qdisc歌焦,它會(huì)被歸入某個(gè)子類飞几。我們可以使用一下三種方式為數(shù)據(jù)包歸類,不過不是所有的qdisc都能夠使用這三種方式独撇。
如果過濾器附屬于一個(gè)類屑墨,相關(guān)的指令就會(huì)對(duì)它們進(jìn)行查詢。過濾器能夠匹配數(shù)據(jù)包頭所有的域纷铣,也可以匹配由ipchains或者iptables做的標(biāo)記卵史。
樹的每個(gè)節(jié)點(diǎn)都可以有自己的過濾器,但是高層的過濾器也可以一直接用于其子類搜立。如果數(shù)據(jù)包沒有被成功歸類以躯,就會(huì)被排到這個(gè)類的葉子qdisc的隊(duì)中。相關(guān)細(xì)節(jié)在各個(gè)qdisc的手冊(cè)頁中儒拂。
TC命名規(guī)則
所有的qdisc寸潦、類色鸳、和過濾器都有ID社痛。ID可以手工設(shè)置,也可以由內(nèi)核自動(dòng)分配命雀。ID由一個(gè)主序列號(hào)和一個(gè)從序列號(hào)組成蒜哀,兩個(gè)數(shù)字用一個(gè)冒號(hào)分開。
qdisc吏砂,一個(gè)qdisc會(huì)被分配一個(gè)主序列號(hào)撵儿,叫做句柄(handle),然后把從序列號(hào)作為類的命名空間狐血。句柄才有像1:0 一樣的表達(dá)方式淀歇。習(xí)慣上,需要為有子類的qdisc顯式的分配一個(gè)句柄匈织。
類(Class)浪默,在同一個(gè)qdisc里面的類共享這個(gè)qdisc的主序列號(hào)牡直,但是每個(gè)類都有自己的從序列號(hào),叫做類識(shí)別符(classid)纳决。類識(shí)別符只與父qdisc有關(guān)碰逸,與父類無關(guān)。類的命名習(xí)慣和qdisc相同阔加。
過濾器(Filter)饵史,過濾器的ID有三部分,只有在對(duì)過濾器進(jìn)行散列組織才會(huì)用到胜榔。詳情請(qǐng)參考tc-filtes手冊(cè)頁胳喷。
TC單位
tc命令所有的參數(shù)都可以使用浮點(diǎn)數(shù),可能會(huì)涉及到以下計(jì)數(shù)單位夭织。
帶寬或者流速單位:
kbps 千字節(jié)/秒
mbps 兆字節(jié)/秒
kbit KBits/秒
mbit MBits/秒
bps或者一個(gè)無單位數(shù)字 字節(jié)數(shù)/秒
數(shù)據(jù)的數(shù)量單位:
kb或者k 千字節(jié)
mb或者m 兆字節(jié)
mbit 兆bit
kbit 千bit
b或者一個(gè)無單位數(shù)字 字節(jié)數(shù)
時(shí)間的計(jì)量單位:
s厌蔽、sec或者secs 秒
ms、msec或者msecs 分鐘
us摔癣、usec奴饮、usecs或者一個(gè)無單位數(shù)字 微秒
TC命令
tc可以使用以下命令對(duì)qdisc、類和過濾器進(jìn)行操作:
add择浊, 在一個(gè)節(jié)點(diǎn)里加入一個(gè)qdisc戴卜、類、或者過濾器琢岩。添加時(shí)投剥,需要傳遞一個(gè)祖先作為參數(shù),傳遞參數(shù)時(shí)既可以使用ID也跨越式直接傳遞設(shè)備的根担孔。如果要建立一個(gè)qdisc或者過濾器江锨,可以使用句柄(handle)來命名。如果要建立一個(gè)類糕篇,可以使用類識(shí)別符(classid)來命名啄育。
remove, 刪除由某個(gè)句柄(handle)指定的qdisc拌消,根qdisc(root)也可以刪除挑豌。被刪除qdisc上所有的子類以及附屬于各個(gè)類的過濾器都會(huì)被自動(dòng)刪除。
change墩崩, 以替代的方式修改某些條目氓英。除了句柄(handle)和祖先不能修改以外,change命令的語法和add命令相同鹦筹。換句話說铝阐,change命令不能指定節(jié)點(diǎn)的位置。
replace铐拐, 對(duì)一個(gè)現(xiàn)有節(jié)點(diǎn)進(jìn)行近于原子操作的刪除/添加徘键。如果節(jié)點(diǎn)不存在芳誓,這個(gè)命令就會(huì)建立節(jié)點(diǎn)。
link啊鸭, 只適用于qdisc锹淌,替代一個(gè)現(xiàn)有的節(jié)點(diǎn)。
名稱:
linux TC(8) : tc - 顯示/操作流量控制設(shè)置
命令的格式:
tc qdisc [ add | change | replace | link | delete ] dev DEV [ parent qdisc-id | root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ]
tc class [ add | change | replace | delete ] dev DEV parent qdisc-id [ classid class-id ] qdisc [ qdisc specific parameters ]
tc filter [ add | change | replace | delete ] dev DEV [ parent qdisc-id | root ] protocol protocol prio priority filtertype [ filtertype specific parameters ] flowid flow-id
tc [ FORMAT ] qdisc show [ dev DEV ]
tc [ FORMAT ] class show dev DEV
tc filter show dev DEV
tc [ -force ] [ -OK ] -b[atch] [ filename ]
FORMAT := { -s[tatistics] | -d[etails] | -r[aw] | -p[retty] | -i[ec] }
描述:
Tc用于在Linux內(nèi)核中配置流量控制赠制。交通管制包括以下內(nèi)容:
SHAPING(成型)
交通成形時(shí)赂摆,其傳輸速度受到控制。整形可能不僅僅是降低可用帶寬 - 它還可以用來消除流量突發(fā)钟些,實(shí)現(xiàn)更好的網(wǎng)絡(luò)行為烟号。在出口處形成整形。
SCHEDULING(調(diào)度)
通過調(diào)度數(shù)據(jù)包的傳輸政恍,可以改善需要它的流量的交互性汪拥,同時(shí)保證帶寬進(jìn)行批量傳輸。重新排序也被稱為優(yōu)先排序篙耗,只發(fā)生在出口迫筑。
POLICING(治安)
鑒于與交通的傳輸形成交易,警務(wù)涉及到的交通宗弯。警察因此在入口處發(fā)生脯燃。
DROPPING
超過設(shè)定帶寬的流量也可以隨時(shí)在入口和出口丟棄。
流量處理由三種對(duì)象來控制:qdiscs蒙保,classes和filters辕棚。
更多細(xì)節(jié)請(qǐng)?jiān)L問https://www.fujieace.com/linux/man/tc.html