真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

包含linuxtc命令原理的詞條

linux內(nèi)核中配置tc命令

只需要修改iproute2應(yīng)用層的makefile就可以了,編譯tc并把tc拷貝到執(zhí)行目錄里

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到七星網(wǎng)站設(shè)計(jì)與七星網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋七星地區(qū)。

TC的詳細(xì)使用方法

給你個(gè)TC中文MAN,參考參考,也可以去我的BLOG看看,最近我也在學(xué),

名字

tc - 顯示/維護(hù)流量控制設(shè)置

摘要

tc qdisc [ add | change | replace | link ] dev DEV [ parent qdisc-id | root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ]

tc class [ add | change | replace ] dev DEV parent qdisc-id [ classid class-id ] qdisc [ qdisc specific parameters ]

tc filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ] protocol protocol prio priority filtertype [ filtertype specific parameters ] flowid flow-id

tc [-s | -d ] qdisc show [ dev DEV ]

tc [-s | -d ] class show dev DEV tc filter show dev DEV

簡(jiǎn)介

Tc用于Linux內(nèi)核的流量控制。流量控制包括以下幾種方式:

SHAPING(限制)

當(dāng)流量被限制,它的傳輸速率就被控制在某個(gè)值以下。限制值可以大大小于有效帶寬,這樣可以平滑突發(fā)數(shù)據(jù)流量,使網(wǎng)絡(luò)更為穩(wěn)定。shaping(限制)只適用于向外的流量。

SCHEDULING(調(diào)度)

通過(guò)調(diào)度數(shù)據(jù)包的傳輸,可以在帶寬范圍內(nèi),按照優(yōu)先級(jí)分配帶寬。SCHEDULING(調(diào)度)也只適于向外的流量。

POLICING(策略)

SHAPING用于處理向外的流量,而POLICIING(策略)用于處理接收到的數(shù)據(jù)。

DROPPING(丟棄)

如果流量超過(guò)某個(gè)設(shè)定的帶寬,就丟棄數(shù)據(jù)包,不管是向內(nèi)還是向外。

流量的處理由三種對(duì)象控制,它們是:qdisc(排隊(duì)規(guī)則)、class(類(lèi)別)和filter(過(guò)濾器)。

QDISC(排隊(duì)嬖?

QDisc(排隊(duì)規(guī)則)是queueing discipline的簡(jiǎn)寫(xiě),它是理解流量控制(traffic control)的基礎(chǔ)。無(wú)論何時(shí),內(nèi)核如果需要通過(guò)某個(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ù)包采用先入先出的方式通過(guò)隊(duì)列。不過(guò),它會(huì)保存網(wǎng)絡(luò)接口一時(shí)無(wú)法處理的數(shù)據(jù)包。

CLASS(類(lèi))

某些QDisc(排隊(duì)規(guī)則)可以包含一些類(lèi)別,不同的類(lèi)別中可以包含更深入的QDisc(排隊(duì)規(guī)則),通過(guò)這些細(xì)分的QDisc還可以為進(jìn)入的隊(duì)列的數(shù)據(jù)包排隊(duì)。通過(guò)設(shè)置各種類(lèi)別數(shù)據(jù)包的離隊(duì)次序,QDisc可以為設(shè)置網(wǎng)絡(luò)數(shù)據(jù)流量的優(yōu)先級(jí)。

FILTER(過(guò)濾器)

filter(過(guò)濾器)用于為數(shù)據(jù)包分類(lèi),決定它們按照何種QDisc進(jìn)入隊(duì)列。無(wú)論何時(shí)數(shù)據(jù)包進(jìn)入一個(gè)劃分子類(lèi)的類(lèi)別中,都需要進(jìn)行分類(lèi)。分類(lèi)的方法可以有多種,使用fileter(過(guò)濾器)就是其中之一。使用filter(過(guò)濾器)分類(lèi)時(shí),內(nèi)核會(huì)調(diào)用附屬于這個(gè)類(lèi)(class)的所有過(guò)濾器,直到返回一個(gè)判決。如果沒(méi)有判決返回,就作進(jìn)一步的處理,而處理方式和QDISC有關(guān)。

需要注意的是,filter(過(guò)濾器)是在QDisc內(nèi)部,它們不能作為主體。

CLASSLESS QDisc(不可分類(lèi)QDisc)

無(wú)類(lèi)別QDISC包括:

[p|b]fifo

使用最簡(jiǎn)單的qdisc,純粹的先進(jìn)先出。只有一個(gè)參數(shù):limit,用來(lái)設(shè)置隊(duì)列的長(zhǎng)度,pfifo是以數(shù)據(jù)包的個(gè)數(shù)為單位;bfifo是以字節(jié)數(shù)為單位。

pfifo_fast

在編譯內(nèi)核時(shí),如果打開(kāi)了高級(jí)路由器(Advanced Router)編譯選項(xiàng),pfifo_fast就是系統(tǒng)的標(biāo)準(zhǔn)QDISC。它的隊(duì)列包括三個(gè)波段(band)。在每個(gè)波段里面,使用先進(jìn)先出規(guī)則。而三個(gè)波段(band)的優(yōu)先級(jí)也不相同,band 0的優(yōu)先級(jí)最高,band 2的最低。如果band里面有數(shù)據(jù)包,系統(tǒng)就不會(huì)處理band 1里面的數(shù)據(jù)包,band 1和band 2之間也是一樣。數(shù)據(jù)包是按照服務(wù)類(lèi)型(Type of Service,TOS)被分配多三個(gè)波段(band)里面的。

red

red是Random Early Detection(隨機(jī)早期探測(cè))的簡(jiǎn)寫(xiě)。如果使用這種QDISC,當(dāng)帶寬的占用接近于規(guī)定的帶寬時(shí),系統(tǒng)會(huì)隨機(jī)地丟棄一些數(shù)據(jù)包。它非常適合高帶寬應(yīng)用。

sfq

sfq是Stochastic Fairness Queueing的簡(jiǎn)寫(xiě)。它按照會(huì)話(huà)(session--對(duì)應(yīng)于每個(gè)TCP連接或者UDP流)為流量進(jìn)行排序,然后循環(huán)發(fā)送每個(gè)會(huì)話(huà)的數(shù)據(jù)包。

tbf

tbf是Token Bucket Filter的簡(jiǎn)寫(xiě),適合于把流速降低到某個(gè)值。

不可分類(lèi)QDisc的配置

如果沒(méi)有可分類(lèi)QDisc,不可分類(lèi)QDisc只能附屬于設(shè)備的根。它們的用法如下:

tc qdisc add dev DEV root QDISC QDISC-PARAMETERS

要?jiǎng)h除一個(gè)不可分類(lèi)QDisc,需要使用如下命令:

tc qdisc del dev DEV root

一個(gè)網(wǎng)絡(luò)接口上如果沒(méi)有設(shè)置QDisc,pfifo_fast就作為缺省的QDisc。

CLASSFUL QDISC(分類(lèi)QDisc)

可分類(lèi)的QDisc包括:

CBQ

CBQ是Class Based Queueing(基于類(lèi)別排隊(duì))的縮寫(xiě)。它實(shí)現(xiàn)了一個(gè)豐富的連接共享類(lèi)別結(jié)構(gòu),既有限制(shaping)帶寬的能力,也具有帶寬優(yōu)先級(jí)管理的能力。帶寬限制是通過(guò)計(jì)算連接的空閑時(shí)間完成的??臻e時(shí)間的計(jì)算標(biāo)準(zhǔn)是數(shù)據(jù)包離隊(duì)事件的頻率和下層連接(數(shù)據(jù)鏈路層)的帶寬。

HTB

HTB是Hierarchy Token Bucket的縮寫(xiě)。通過(guò)在實(shí)踐基礎(chǔ)上的改進(jìn),它實(shí)現(xiàn)了一個(gè)豐富的連接共享類(lèi)別體系。使用HTB可以很容易地保證每個(gè)類(lèi)別的帶寬,雖然它也允許特定的類(lèi)可以突破帶寬上限,占用別的類(lèi)的帶寬。HTB可以通過(guò)TBF(Token Bucket Filter)實(shí)現(xiàn)帶寬限制,也能夠劃分類(lèi)別的優(yōu)先級(jí)。

PRIO

PRIO QDisc不能限制帶寬,因?yàn)閷儆诓煌?lèi)別的數(shù)據(jù)包是順序離隊(duì)的。使用PRIO QDisc可以很容易對(duì)流量進(jìn)行優(yōu)先級(jí)管理,只有屬于高優(yōu)先級(jí)類(lèi)別的數(shù)據(jù)包全部發(fā)送完畢,才會(huì)發(fā)送屬于低優(yōu)先級(jí)類(lèi)別的數(shù)據(jù)包。為了方便管理,需要使用iptables或者ipchains處理數(shù)據(jù)包的服務(wù)類(lèi)型(Type Of Service,ToS)。

操作原理

類(lèi)(Class)組成一個(gè)樹(shù),每個(gè)類(lèi)都只有一個(gè)父類(lèi),而一個(gè)類(lèi)可以有多個(gè)子類(lèi)。某些QDisc(例如:CBQ和HTB)允許在運(yùn)行時(shí)動(dòng)態(tài)添加類(lèi),而其它的QDisc(例如:PRIO)不允許動(dòng)態(tài)建立類(lèi)。

允許動(dòng)態(tài)添加類(lèi)的QDisc可以有零個(gè)或者多個(gè)子類(lèi),由它們?yōu)閿?shù)據(jù)包排隊(duì)。

此外,每個(gè)類(lèi)都有一個(gè)葉子QDisc,默認(rèn)情況下,這個(gè)葉子QDisc使用pfifo的方式排隊(duì),我們也可以使用其它類(lèi)型的QDisc代替這個(gè)默認(rèn)的QDisc。而且,這個(gè)葉子葉子QDisc有可以分類(lèi),不過(guò)每個(gè)子類(lèi)只能有一個(gè)葉子QDisc。

當(dāng)一個(gè)數(shù)據(jù)包進(jìn)入一個(gè)分類(lèi)QDisc,它會(huì)被歸入某個(gè)子類(lèi)。我們可以使用以下三種方式為數(shù)據(jù)包歸類(lèi),不過(guò)不是所有的QDisc都能夠使用這三種方式。

tc過(guò)濾器(tc filter)

如果過(guò)濾器附屬于一個(gè)類(lèi),相關(guān)的指令就會(huì)對(duì)它們進(jìn)行查詢(xún)。過(guò)濾器能夠匹配數(shù)據(jù)包頭所有的域,也可以匹配由ipchains或者iptables做的標(biāo)記。

服務(wù)類(lèi)型(Type of Service)

某些QDisc有基于服務(wù)類(lèi)型(Type of Service,ToS)的內(nèi)置的規(guī)則為數(shù)據(jù)包分類(lèi)。

skb-priority

用戶(hù)空間的應(yīng)用程序可以使用SO_PRIORITY選項(xiàng)在skb-priority域設(shè)置一個(gè)類(lèi)的ID。

樹(shù)的每個(gè)節(jié)點(diǎn)都可以有自己的過(guò)濾器,但是高層的過(guò)濾器也可以直接用于其子類(lèi)。

如果數(shù)據(jù)包沒(méi)有被成功歸類(lèi),就會(huì)被排到這個(gè)類(lèi)的葉子QDisc的隊(duì)中。相關(guān)細(xì)節(jié)在各個(gè)QDisc的手冊(cè)頁(yè)中。

命名規(guī)則

所有的QDisc、類(lèi)和過(guò)濾器都有ID。ID可以手工設(shè)置,也可以有內(nèi)核自動(dòng)分配。

ID由一個(gè)主序列號(hào)和一個(gè)從序列號(hào)組成,兩個(gè)數(shù)字用一個(gè)冒號(hào)分開(kāi)。

QDISC

一個(gè)QDisc會(huì)被分配一個(gè)主序列號(hào),叫做句柄(handle),然后把從序列號(hào)作為類(lèi)的命名空間。句柄采用象10:一樣的表達(dá)方式。習(xí)慣上,需要為有子類(lèi)的QDisc顯式地分配一個(gè)句柄。

類(lèi)(CLASS)

在同一個(gè)QDisc里面的類(lèi)分享這個(gè)QDisc的主序列號(hào),但是每個(gè)類(lèi)都有自己的從序列號(hào),叫做類(lèi)識(shí)別符(classid)。類(lèi)識(shí)別符只與父QDisc有關(guān),和父類(lèi)無(wú)關(guān)。類(lèi)的命名習(xí)慣和QDisc的相同。

過(guò)濾器(FILTER)

過(guò)濾器的ID有三部分,只有在對(duì)過(guò)濾器進(jìn)行散列組織才會(huì)用到。詳情請(qǐng)參考tc-filters手冊(cè)頁(yè)。

單位

tc命令的所有參數(shù)都可以使用浮點(diǎn)數(shù),可能會(huì)涉及到以下計(jì)數(shù)單位。

帶寬或者流速單位:

kbps

千字節(jié)/秒

mbps

兆字節(jié)/秒

kbit

KBits/秒

mbit

MBits/秒

bps或者一個(gè)無(wú)單位數(shù)字

字節(jié)數(shù)/秒

數(shù)據(jù)的數(shù)量單位:

kb或者k

千字節(jié)

mb或者m

兆字節(jié)

mbit

兆bit

kbit

千bit

b或者一個(gè)無(wú)單位數(shù)字

字節(jié)數(shù)

時(shí)間的計(jì)量單位:

s、sec或者secs

ms、msec或者msecs

分鐘

us、usec、usecs或者一個(gè)無(wú)單位數(shù)字

微秒

TC命令

tc可以使用以下命令對(duì)QDisc、類(lèi)和過(guò)濾器進(jìn)行操作:

add

在一個(gè)節(jié)點(diǎn)里加入一個(gè)QDisc、類(lèi)或者過(guò)濾器。添加時(shí),需要傳遞一個(gè)祖先作為參數(shù),傳遞參數(shù)時(shí)既可以使用ID也可以直接傳遞設(shè)備的根。如果要建立一個(gè)QDisc或者過(guò)濾器,可以使用句柄(handle)來(lái)命名;如果要建立一個(gè)類(lèi),可以使用類(lèi)識(shí)別符(classid)來(lái)命名。

remove

刪除有某個(gè)句柄(handle)指定的QDisc,根QDisc(root)也可以刪除。被刪除QDisc上的所有子類(lèi)以及附屬于各個(gè)類(lèi)的過(guò)濾器都會(huì)被自動(dòng)刪除。

change

以替代的方式修改某些條目。除了句柄(handle)和祖先不能修改以外,change命令的語(yǔ)法和add命令相同。換句話(huà)說(shuō),change命令不能一定節(jié)點(diǎn)的位置。

replace

對(duì)一個(gè)現(xiàn)有節(jié)點(diǎn)進(jìn)行近于原子操作的刪除/添加。如果節(jié)點(diǎn)不存在,這個(gè)命令就會(huì)建立節(jié)點(diǎn)。

link

只適用于DQisc,替代一個(gè)現(xiàn)有的節(jié)點(diǎn)。

歷史

tc由Alexey N. Kuznetsov編寫(xiě),從Linux 2.2版開(kāi)始并入Linux內(nèi)核。

SEE ALSO

tc-cbq(8)、tc-htb(8)、tc-sfq(8)、tc-red(8)、tc-tbf(8)、tc-pfifo(8)、tc-bfifo(8)、tc-pfifo_fast(8)、tc-filters(8)

Linux從kernel 2.1.105開(kāi)始支持QOS,不過(guò),需要重新編譯內(nèi)核。運(yùn)行make config時(shí)將EXPERIMENTAL _OPTIONS設(shè)置成y,并且將Class Based Queueing (CBQ), Token Bucket Flow, Traffic Shapers 設(shè)置為 y ,運(yùn)行 make dep; make clean; make bzilo,生成新的內(nèi)核。

在Linux操作系統(tǒng)中流量控制器(TC)主要是在輸出端口處建立一個(gè)隊(duì)列進(jìn)行流量控制,控制的方式是基于路由,亦即基于目的IP地址或目的子網(wǎng)的網(wǎng)絡(luò)號(hào)的流量控制。流量控制器TC,其基本的功能模塊為隊(duì)列、分類(lèi)和過(guò)濾器。Linux內(nèi)核中支持的隊(duì)列有,Class Based Queue ,Token Bucket Flow ,CSZ ,F(xiàn)irst In First Out ,Priority ,TEQL ,SFQ ,ATM ,RED。這里我們討論的隊(duì)列與分類(lèi)都是基于CBQ(Class Based Queue)的,而過(guò)濾器是基于路由(Route)的。

配置和使用流量控制器TC,主要分以下幾個(gè)方面:分別為建立隊(duì)列、建立分類(lèi)、建立過(guò)濾器和建立路由,另外還需要對(duì)現(xiàn)有的隊(duì)列、分類(lèi)、過(guò)濾器和路由進(jìn)行監(jiān)視。

其基本使用步驟為:

1) 針對(duì)網(wǎng)絡(luò)物理設(shè)備(如以太網(wǎng)卡eth0)綁定一個(gè)CBQ隊(duì)列;

2) 在該隊(duì)列上建立分類(lèi);

3) 為每一分類(lèi)建立一個(gè)基于路由的過(guò)濾器;

4) 最后與過(guò)濾器相配合,建立特定的路由表。

先假設(shè)一個(gè)簡(jiǎn)單的環(huán)境

流量控制器上的以太網(wǎng)卡(eth0) 的IP地址為192.168.1.66,在其上建立一個(gè)CBQ隊(duì)列。假設(shè)包的平均大小為1000字節(jié),包間隔發(fā)送單元的大小為8字節(jié),可接收沖突的發(fā)送最長(zhǎng)包數(shù)目為20字節(jié)。

假如有三種類(lèi)型的流量需要控制:

1) 是發(fā)往主機(jī)1的,其IP地址為192.168.1.24。其流量帶寬控制在8Mbit,優(yōu)先級(jí)為2;

2) 是發(fā)往主機(jī)2的,其IP地址為192.168.1.26。其流量帶寬控制在1Mbit,優(yōu)先級(jí)為1;

3) 是發(fā)往子網(wǎng)1的,其子網(wǎng)號(hào)為192.168.1.0,子網(wǎng)掩碼為255.255.255.0。流量帶寬控制在1Mbit,優(yōu)先級(jí)為6。

1. 建立隊(duì)列

一般情況下,針對(duì)一個(gè)網(wǎng)卡只需建立一個(gè)隊(duì)列。

將一個(gè)cbq隊(duì)列綁定到網(wǎng)絡(luò)物理設(shè)備eth0上,其編號(hào)為1:0;網(wǎng)絡(luò)物理設(shè)備eth0的實(shí)際帶寬為10 Mbit,包的平均大小為1000字節(jié);包間隔發(fā)送單元的大小為8字節(jié),最小傳輸包大小為64字節(jié)。

?tc qdisc add dev eth0 root handle 1: cbq bandwidth 10Mbit avpkt 1000 cell 8 mpu 64

2. 建立分類(lèi)

分類(lèi)建立在隊(duì)列之上。一般情況下,針對(duì)一個(gè)隊(duì)列需建立一個(gè)根分類(lèi),然后再在其上建立子分類(lèi)。對(duì)于分類(lèi),按其分類(lèi)的編號(hào)順序起作用,編號(hào)小的優(yōu)先;一旦符合某個(gè)分類(lèi)匹配規(guī)則,通過(guò)該分類(lèi)發(fā)送數(shù)據(jù)包,則其后的分類(lèi)不再起作用。

1) 創(chuàng)建根分類(lèi)1:1;分配帶寬為10Mbit,優(yōu)先級(jí)別為8。

?tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 10Mbit rate 10Mbit maxburst 20 allot 1514 prio 8 avpkt 1000 cell 8 weight 1Mbit

該隊(duì)列的最大可用帶寬為10Mbit,實(shí)際分配的帶寬為10Mbit,可接收沖突的發(fā)送最長(zhǎng)包數(shù)目為20字節(jié);最大傳輸單元加MAC頭的大小為1514字節(jié),優(yōu)先級(jí)別為8,包的平均大小為1000字節(jié),包間隔發(fā)送單元的大小為8字節(jié),相應(yīng)于實(shí)際帶寬的加權(quán)速率為1Mbit。

2)創(chuàng)建分類(lèi)1:2,其父分類(lèi)為1:1,分配帶寬為8Mbit,優(yōu)先級(jí)別為2。

?tc class add dev eth0 parent 1:1 classid 1:2 cbq bandwidth 10Mbit rate 8Mbit maxburst 20 allot 1514 prio 2 avpkt 1000 cell 8 weight 800Kbit split 1:0 bounded

該隊(duì)列的最大可用帶寬為10Mbit,實(shí)際分配的帶寬為 8Mbit,可接收沖突的發(fā)送最長(zhǎng)包數(shù)目為20字節(jié);最大傳輸單元加MAC頭的大小為1514字節(jié),優(yōu)先級(jí)別為1,包的平均大小為1000字節(jié),包間隔發(fā)送單元的大小為8字節(jié),相應(yīng)于實(shí)際帶寬的加權(quán)速率為800Kbit,分類(lèi)的分離點(diǎn)為1:0,且不可借用未使用帶寬。

3)創(chuàng)建分類(lèi)1:3,其父分類(lèi)為1:1,分配帶寬為1Mbit,優(yōu)先級(jí)別為1。

?tc class add dev eth0 parent 1:1 classid 1:3 cbq bandwidth 10Mbit rate 1Mbit maxburst 20 allot 1514 prio 1 avpkt 1000 cell 8 weight 100Kbit split 1:0

該隊(duì)列的最大可用帶寬為10Mbit,實(shí)際分配的帶寬為 1Mbit,可接收沖突的發(fā)送最長(zhǎng)包數(shù)目為20字節(jié);最大傳輸單元加MAC頭的大小為1514字節(jié),優(yōu)先級(jí)別為2,包的平均大小為1000字節(jié),包間隔發(fā)送單元的大小為8字節(jié),相應(yīng)于實(shí)際帶寬的加權(quán)速率為100Kbit,分類(lèi)的分離點(diǎn)為1:0。

4)創(chuàng)建分類(lèi)1:4,其父分類(lèi)為1:1,分配帶寬為1Mbit,優(yōu)先級(jí)別為6。

?tc class add dev eth0 parent 1:1 classid 1:4 cbq bandwidth 10Mbit rate 1Mbit maxburst 20 allot 1514 prio 6 avpkt 1000 cell 8 weight 100Kbit split 1:0

該隊(duì)列的最大可用帶寬為10Mbit,實(shí)際分配的帶寬為 64Kbit,可接收沖突的發(fā)送最長(zhǎng)包數(shù)目為20字節(jié);最大傳輸單元加MAC頭的大小為1514字節(jié),優(yōu)先級(jí)別為1,包的平均大小為1000字節(jié),包間隔發(fā)送單元的大小為8字節(jié),相應(yīng)于實(shí)際帶寬的加權(quán)速率為100Kbit,分類(lèi)的分離點(diǎn)為1:0。

3. 建立過(guò)濾器

過(guò)濾器主要服務(wù)于分類(lèi)。一般只需針對(duì)根分類(lèi)提供一個(gè)過(guò)濾器,然后為每個(gè)子分類(lèi)提供路由映射。

1) 應(yīng)用路由分類(lèi)器到cbq隊(duì)列的根,父分類(lèi)編號(hào)為1:0;過(guò)濾協(xié)議為ip,優(yōu)先級(jí)別為100,過(guò)濾器為基于路由表。

?tc filter add dev eth0 parent 1:0 protocol ip prio 100 route

2) 建立路由映射分類(lèi)1:2, 1:3, 1:4

?tc filter add dev eth0 parent 1:0 protocol ip prio 100 route to 2 flowid 1:2

?tc filter add dev eth0 parent 1:0 protocol ip prio 100 route to 3 flowid 1:3

?tc filter add dev eth0 parent 1:0 protocol ip prio 100 route to 4 flowid 1:4

4.建立路由

該路由是與前面所建立的路由映射一一對(duì)應(yīng)。

1) 發(fā)往主機(jī)192.168.1.24的數(shù)據(jù)包通過(guò)分類(lèi)2轉(zhuǎn)發(fā)(分類(lèi)2的速率8Mbit)

?ip route add 192.168.1.24 dev eth0 via 192.168.1.66 realm 2

2) 發(fā)往主機(jī)192.168.1.30的數(shù)據(jù)包通過(guò)分類(lèi)3轉(zhuǎn)發(fā)(分類(lèi)3的速率1Mbit)

?ip route add 192.168.1.30 dev eth0 via 192.168.1.66 realm 3

3)發(fā)往子網(wǎng)192.168.1.0/24的數(shù)據(jù)包通過(guò)分類(lèi)4轉(zhuǎn)發(fā)(分類(lèi)4的速率1Mbit)

?ip route add 192.168.1.0/24 dev eth0 via 192.168.1.66 realm 4

注:一般對(duì)于流量控制器所直接連接的網(wǎng)段建議使用IP主機(jī)地址流量控制限制,不要使用子網(wǎng)流量控制限制。如一定需要對(duì)直連子網(wǎng)使用子網(wǎng)流量控制限制,則在建立該子網(wǎng)的路由映射前,需將原先由系統(tǒng)建立的路由刪除,才可完成相應(yīng)步驟。

5. 監(jiān)視

主要包括對(duì)現(xiàn)有隊(duì)列、分類(lèi)、過(guò)濾器和路由的狀況進(jìn)行監(jiān)視。

1)顯示隊(duì)列的狀況

簡(jiǎn)單顯示指定設(shè)備(這里為eth0)的隊(duì)列狀況

?tc qdisc ls dev eth0

qdisc cbq 1: rate 10Mbit (bounded,isolated) prio no-transmit

詳細(xì)顯示指定設(shè)備(這里為eth0)的隊(duì)列狀況

?tc -s qdisc ls dev eth0

qdisc cbq 1: rate 10Mbit (bounded,isolated) prio no-transmit

Sent 7646731 bytes 13232 pkts (dropped 0, overlimits 0)

borrowed 0 overactions 0 avgidle 31 undertime 0

這里主要顯示了通過(guò)該隊(duì)列發(fā)送了13232個(gè)數(shù)據(jù)包,數(shù)據(jù)流量為7646731個(gè)字節(jié),丟棄的包數(shù)目為0,超過(guò)速率限制的包數(shù)目為0。

2)顯示分類(lèi)的狀況

簡(jiǎn)單顯示指定設(shè)備(這里為eth0)的分類(lèi)狀況

?tc class ls dev eth0

class cbq 1: root rate 10Mbit (bounded,isolated) prio no-transmit

class cbq 1:1 parent 1: rate 10Mbit prio no-transmit #no-transmit表示優(yōu)先級(jí)為8

class cbq 1:2 parent 1:1 rate 8Mbit prio 2

class cbq 1:3 parent 1:1 rate 1Mbit prio 1

class cbq 1:4 parent 1:1 rate 1Mbit prio 6

詳細(xì)顯示指定設(shè)備(這里為eth0)的分類(lèi)狀況

?tc -s class ls dev eth0

class cbq 1: root rate 10Mbit (bounded,isolated) prio no-transmit

Sent 17725304 bytes 32088 pkts (dropped 0, overlimits 0)

borrowed 0 overactions 0 avgidle 31 undertime 0

class cbq 1:1 parent 1: rate 10Mbit prio no-transmit

Sent 16627774 bytes 28884 pkts (dropped 0, overlimits 0)

borrowed 16163 overactions 0 avgidle 587 undertime 0

class cbq 1:2 parent 1:1 rate 8Mbit prio 2

Sent 628829 bytes 3130 pkts (dropped 0, overlimits 0)

borrowed 0 overactions 0 avgidle 4137 undertime 0

class cbq 1:3 parent 1:1 rate 1Mbit prio 1

Sent 0 bytes 0 pkts (dropped 0, overlimits 0)

borrowed 0 overactions 0 avgidle 159654 undertime 0

class cbq 1:4 parent 1:1 rate 1Mbit prio 6

Sent 5552879 bytes 8076 pkts (dropped 0, overlimits 0)

borrowed 3797 overactions 0 avgidle 159557 undertime 0

這里主要顯示了通過(guò)不同分類(lèi)發(fā)送的數(shù)據(jù)包,數(shù)據(jù)流量,丟棄的包數(shù)目,超過(guò)速率限制的包數(shù)目等等。其中根分類(lèi)(class cbq 1:0)的狀況應(yīng)與隊(duì)列的狀況類(lèi)似。

例如,分類(lèi)class cbq 1:4發(fā)送了8076個(gè)數(shù)據(jù)包,數(shù)據(jù)流量為5552879個(gè)字節(jié),丟棄的包數(shù)目為0,超過(guò)速率限制的包數(shù)目為0。

顯示過(guò)濾器的狀況

?tc -s filter ls dev eth0

filter parent 1: protocol ip pref 100 route

filter parent 1: protocol ip pref 100 route fh 0xffff0002 flowid 1:2 to 2

filter parent 1: protocol ip pref 100 route fh 0xffff0003 flowid 1:3 to 3

filter parent 1: protocol ip pref 100 route fh 0xffff0004 flowid 1:4 to 4

這里flowid 1:2代表分類(lèi)class cbq 1:2,to 2代表通過(guò)路由2發(fā)送。

顯示現(xiàn)有路由的狀況

?ip route

192.168.1.66 dev eth0 scope link

192.168.1.24 via 192.168.1.66 dev eth0 realm 2

202.102.24.216 dev ppp0 proto kernel scope link src 202.102.76.5

192.168.1.30 via 192.168.1.66 dev eth0 realm 3

192.168.1.0/24 via 192.168.1.66 dev eth0 realm 4

192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.66

172.16.1.0/24 via 192.168.1.66 dev eth0 scope link

127.0.0.0/8 dev lo scope link

default via 202.102.24.216 dev ppp0

default via 192.168.1.254 dev eth0

如上所示,結(jié)尾包含有realm的顯示行是起作用的路由過(guò)濾器。

6. 維護(hù)

主要包括對(duì)隊(duì)列、分類(lèi)、過(guò)濾器和路由的增添、修改和刪除。

增添動(dòng)作一般依照"隊(duì)列-分類(lèi)-過(guò)濾器-路由"的順序進(jìn)行;修改動(dòng)作則沒(méi)有什么要求;刪除則依照"路由-過(guò)濾器-分類(lèi)-隊(duì)列"的順序進(jìn)行。

1)隊(duì)列的維護(hù)

一般對(duì)于一臺(tái)流量控制器來(lái)說(shuō),出廠(chǎng)時(shí)針對(duì)每個(gè)以太網(wǎng)卡均已配置好一個(gè)隊(duì)列了,通常情況下對(duì)隊(duì)列無(wú)需進(jìn)行增添、修改和刪除動(dòng)作了。

2)分類(lèi)的維護(hù)

增添

增添動(dòng)作通過(guò)tc class add命令實(shí)現(xiàn),如前面所示。

修改

修改動(dòng)作通過(guò)tc class change命令實(shí)現(xiàn),如下所示:

?tc class change dev eth0 parent 1:1 classid 1:2 cbq bandwidth 10Mbit

rate 7Mbit maxburst 20 allot 1514 prio 2 avpkt 1000 cell

8 weight 700Kbit split 1:0 bounded

對(duì)于bounded命令應(yīng)慎用,一旦添加后就進(jìn)行修改,只可通過(guò)刪除后再添加來(lái)實(shí)現(xiàn)。

刪除

刪除動(dòng)作只在該分類(lèi)沒(méi)有工作前才可進(jìn)行,一旦通過(guò)該分類(lèi)發(fā)送過(guò)數(shù)據(jù),則無(wú)法刪除它了。因此,需要通過(guò)shell文件方式來(lái)修改,通過(guò)重新啟動(dòng)來(lái)完成刪除動(dòng)作。

3)過(guò)濾器的維護(hù)

增添

增添動(dòng)作通過(guò)tc filter add命令實(shí)現(xiàn),如前面所示。

修改

修改動(dòng)作通過(guò)tc filter change命令實(shí)現(xiàn),如下所示:

?tc filter change dev eth0 parent 1:0 protocol ip prio 100 route to

10 flowid 1:8

刪除

刪除動(dòng)作通過(guò)tc filter del命令實(shí)現(xiàn),如下所示:

?tc filter del dev eth0 parent 1:0 protocol ip prio 100 route to 10

4)與過(guò)濾器一一映射路由的維護(hù)

增添

增添動(dòng)作通過(guò)ip route add命令實(shí)現(xiàn),如前面所示。

修改

修改動(dòng)作通過(guò)ip route change命令實(shí)現(xiàn),如下所示:

?ip route change 192.168.1.30 dev eth0 via 192.168.1.66 realm 8

刪除

刪除動(dòng)作通過(guò)ip route del命令實(shí)現(xiàn),如下所示:

?ip route del 192.168.1.30 dev eth0 via 192.168.1.66 realm 8

?ip route del 192.168.1.0/24 dev eth0 via 192.168.1.66 realm 4

TC - Linux 流量控制工具

參考: TC - Linux 流量控制工具 | Life is magic. Coding is art. (int64.me)

TC(Linux下流量控制工具)詳細(xì)說(shuō)明及應(yīng)用_Gino的專(zhuān)欄-CSDN博客

本來(lái)打算直接列一波用法,但是總覺(jué)得,不記錄一下原理,操作起來(lái)也是一臉懵逼。 TC 通過(guò)建立處理數(shù)據(jù)包隊(duì)列,并定義隊(duì)列中數(shù)據(jù)包被發(fā)送的方式,從而實(shí)現(xiàn)進(jìn)行流量控制。TC 模擬實(shí)現(xiàn)流量控制功能使用的隊(duì)列分為兩類(lèi):

classful 隊(duì)列規(guī)定(qdisc), 類(lèi)(class)和過(guò)濾器(filter)這 3 個(gè)組件組成,繪圖中一般用圓形表示隊(duì)列規(guī)定,用矩形表示類(lèi),圖 copy 自 Linux 下 TC 以及 netem 隊(duì)列的使用

都是以一個(gè)根 qdisc 開(kāi)始的,若根 qdisc 是不分類(lèi)的隊(duì)列規(guī)定,那它就沒(méi)有子類(lèi),因此不可能包含其他的子對(duì)象,也不會(huì)有過(guò)濾器與之關(guān)聯(lián),發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)包進(jìn)入這個(gè)隊(duì)列里面排隊(duì),然后根據(jù)該隊(duì)列規(guī)定的處理方式將數(shù)據(jù)包發(fā)送出去。

分類(lèi)的 qdisc 內(nèi)部包含一個(gè)或多個(gè)類(lèi),而每個(gè)類(lèi)可以包含一個(gè)隊(duì)列規(guī)定或者包含若干個(gè)子類(lèi),這些子類(lèi)友可以包含分類(lèi)或者不分類(lèi)的隊(duì)列規(guī)定,如此遞歸,形成了一個(gè)樹(shù)。

句柄號(hào):qdisc 和類(lèi)都使用一個(gè)句柄進(jìn)行標(biāo)識(shí),且在一棵樹(shù)中必須是唯一的,每個(gè)句柄由主號(hào)碼和次號(hào)碼組成 qdisc 的次號(hào)碼必須為 0(0 通??梢允÷圆粚?xiě))

根 qdisc 的句柄為 1:,也就是 1:0。類(lèi)的句柄的主號(hào)碼與它的父輩相同(父類(lèi)或者父 qdisc),如類(lèi) 1:1 的主號(hào)碼與包含他的隊(duì)列規(guī)定 1:的主號(hào)碼相同,1:10 和 1:11 與他們的父類(lèi) 1:1 的主號(hào)碼相同,也為 1。

新建一個(gè)類(lèi)時(shí),默認(rèn)帶有一個(gè) pfifo_fast 類(lèi)型的不分類(lèi)隊(duì)列規(guī)定,當(dāng)添加一個(gè)子類(lèi)時(shí),這個(gè)類(lèi)型的 qdisc 就會(huì)被刪除,所以,非葉子類(lèi)是沒(méi)有隊(duì)列規(guī)定的,數(shù)據(jù)包最后只能到葉子類(lèi)的隊(duì)列規(guī)定里面排隊(duì)。

若一個(gè)類(lèi)有子類(lèi),那么允許這些子類(lèi)競(jìng)爭(zhēng)父類(lèi)的帶寬,但是,以隊(duì)列規(guī)定為父輩的類(lèi)之間是不允許相互競(jìng)爭(zhēng)帶寬的。

默認(rèn) TC 的 qdisc 控制就是出口流量,要使用 TC 控制入口,需要把流量重定向到 ifb 網(wǎng)卡,其實(shí)就是加了一層,原理上還是控制出口 。

為何要先說(shuō) classless 隊(duì)列,畢竟這個(gè)簡(jiǎn)單嘛,要快速使用,那么這個(gè)就是首選了?;?classless 隊(duì)列,我們可以進(jìn)行故障模擬,也可以用來(lái)限制帶寬。

TC 使用 linux network netem 模塊進(jìn)行網(wǎng)絡(luò)故障模擬

網(wǎng)絡(luò)傳輸并不能保證順序,傳輸層 TCP 會(huì)對(duì)報(bào)文進(jìn)行重組保證順序,所以報(bào)文亂序?qū)?yīng)用的影響比上面的幾種問(wèn)題要小。

報(bào)文亂序可前面的參數(shù)不太一樣,因?yàn)樯厦娴膱?bào)文問(wèn)題都是獨(dú)立的,針對(duì)單個(gè)報(bào)文做操作就行,而亂序則牽涉到多個(gè)報(bào)文的重組。模擬報(bào)亂序一定會(huì)用到延遲(因?yàn)槟M亂序的本質(zhì)就是把一些包延遲發(fā)送),netem 有兩種方法可以做。

以 tbf (Token Bucket Filter) 為例,

參數(shù)說(shuō)明:

限制 100mbit

限制延遲 100ms, 流量 100mbit

這個(gè)就復(fù)雜一些,同樣也特別靈活,可以限制特定的 ip 或者服務(wù)類(lèi)型以及端口

以使用 htb 為例

使用 TC 進(jìn)行入口限流,需要把流量重定向到 ifb 虛擬網(wǎng)卡,然后在控制 ifb 的輸出流量


當(dāng)前題目:包含linuxtc命令原理的詞條
轉(zhuǎn)載來(lái)于:http://weahome.cn/article/ddooioe.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部