Traffic Controll
生活随笔
收集整理的這篇文章主要介紹了
Traffic Controll
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
TC--Traffic Control
?
?
TC流量控制方式 ?
SHAPING 限制--流量被限制時,它的傳輸速率就被控制在某個值以下,限制閾值可以大大的小于有效帶寬,這樣可以平滑網(wǎng)絡(luò)的突發(fā)流量,是網(wǎng)絡(luò)更穩(wěn)定,shaping適用于限制外出的流量。 ?
SCHEDULING 調(diào)度--通過調(diào)度數(shù)據(jù)包的傳輸,可以在帶寬范圍內(nèi)按照優(yōu)先級分配,也只適用于限制外出流量。 ?
POLICING 策略--用于處理接收到的數(shù)據(jù) ?
DROPPING 丟棄--如果流量超過設(shè)置的帶寬就丟棄數(shù)據(jù)包,向內(nèi)向外皆管用。 ?
?
TC流量控制處理對象 ?
流量的處理由三種對象控制,分別是:qdisc-排隊規(guī)則、class-類別、filter-過濾器。 ?
QDISC ?
? ? qdisc是流量控制的基礎(chǔ),無論何時,內(nèi)核如果需要通過某個網(wǎng)絡(luò)接口發(fā)送數(shù)據(jù)包,它都需要按照該接口配置的qdisc把數(shù)據(jù)包加入隊列中。內(nèi)核會盡可能多的從qdisc中取出數(shù)據(jù)包,然后交給網(wǎng)絡(luò)適配器進行處理。而qdisc又分為CLASSLESS QDisc--不可分類隊列規(guī)則、CLASSFUL QDISC--分類隊列規(guī)則。 ?
CLASSLESS QDisc--不可分類隊列規(guī)則 ?
無類qdisc包括以下隊列: [p|b]fifo ?最簡單的qdsic,先進先出策略,只有一個limit參數(shù)用來設(shè)置隊列長度,pfifo是以數(shù)據(jù)包個數(shù)為單位,bfifo是以字節(jié)數(shù)為單位。pfifo_fast包含三個波段,band0~band2,每個波段也使用先進先出策略,band0優(yōu)先級最高,band2最低,如果band0中有數(shù)據(jù)包,系統(tǒng)就不會去處理band1的數(shù)據(jù)包,直到band0的數(shù)據(jù)包處理完。同理band1和band2。 ?
red ?是Random Early Detection的簡寫--隨機早起檢測。當帶寬的占用接近指定帶寬時隨機的丟棄一些數(shù)據(jù)包。 ?
sfq ?是Stochastic Fairness Queueing的簡寫--隨機公平隊列,它會按照會話為流量進行排序,一般對應(yīng)于每個tcp或者udp數(shù)據(jù)流,然后循環(huán)發(fā)送每個會話的數(shù)據(jù)包。 ?
tbf ?是Token Bucket Filter的簡寫--xx 適合把速率降到某個值。 ?
如果沒有設(shè)置可分類隊列規(guī)則,則無分類隊列規(guī)則只能屬于設(shè)備的根。如下設(shè)置:tc qdisc add dev DEV root QDISC QDISC-PARAMETERS,如果一個接口沒有設(shè)置qdisc,則pfifo_fast是默認的缺省qdisc。 ?
?
CLASSFUL QDISC--分類隊列規(guī)則 ?
分類隊列規(guī)則包括以下隊列: CBQ ?是Class Based Queueing的簡寫,它實現(xiàn)了一個豐富的連接共享類別結(jié)構(gòu),既有限制帶寬能力又有帶寬優(yōu)先級管理能力。帶寬限制是通過計算連接的空閑時間完成的,空閑時間的計算標準是數(shù)據(jù)包離隊事件的頻率和下層連接的帶寬。 ?
HTB ?是?Hierarchy Token Bucket的簡寫,它實現(xiàn)了一個豐富的連接共享類別結(jié)構(gòu),使用HTB可以很容易的保證每個類的帶寬,同時也允許特定類可以突破上限,占用其他類等寬等。HTB通過TFB實現(xiàn)帶寬限制,也可以為類劃分優(yōu)先級。 ?
PRIO 不能限制帶寬,因為屬于不同類別的數(shù)據(jù)包是順序離隊的。使用PRIO qdisc可以很容易對流量進行優(yōu)先級管理,只有屬于高優(yōu)先級類別的數(shù)據(jù)包全部發(fā)送完畢,才會發(fā)送屬于低優(yōu)先級類別的數(shù)據(jù)包。為了方便管理,需要使用 iptables或者ipchains處理數(shù)據(jù)包的服務(wù)類型(Type Of Service,ToS)。 ?
?
CLASS ?
? ? 一些qdisc可以包含一些類,不同的類中又可以包含更深入的qdisc,通過這些細分的qdisc可以為進入隊列的數(shù)據(jù)包排隊,通過設(shè)置各種類數(shù)據(jù)包的離隊次序,可以設(shè)置網(wǎng)絡(luò)數(shù)據(jù)流量的優(yōu)先級。例如,我們要對不同的IP實施不同的流量控制策略,這時就需要用不同的類來控制。 ?
?
FILTER ?
? ? filter用于為數(shù)據(jù)包分類,決定數(shù)據(jù)包進入何種qdisc隊列,分類的方法有多種filter是一種方法,使用filter時內(nèi)核會調(diào)用屬于這個類的所有過濾器,直到返回一個決定,如果么有返回決定,就做進一步處理,處理方式和qdisc有關(guān)。filter是在qdisc內(nèi)部的。目前可用的過濾器有:u32、rsvp、fwmark等。 ?
?
?
?
操作原理 ?
? ? 類組成一個樹,每個類都只有一個父類,卻可以有多個子類,某些qdisc允許在運行時動態(tài)添加類,如cbq、htb,而有些qdisc在運行時不許動態(tài)添加類,如prio。允許動態(tài)添加類的qdisc可以有多個子類,由他們?yōu)閿?shù)據(jù)包排隊。每個類都有一個葉子qdisc,默認這個葉子qdisc使用pfifo的隊列,當然也可以用其他隊列替換,而且,這個qdisc可以再次包含其他類,但是每個類只能有一個葉子qdisc。當一個數(shù)據(jù)包進入一個qdisc時,可以使用三種方式為其分類:tc filters、Type of Service、skb->priority。但是并不是所有的qdisc都可以使用這三種方式。 ?
?
命名規(guī)則 ?
? ? 所有的qdiscs, classes and filters都有自己的ID,可以手動指定也可以自動獲取,ID包含一個主號碼和一個從號碼,用冒號分開。 ?
QDISC ? ? 一個qdisc會被分配一個主號碼,叫做handle,把從號碼作為類的命名空間,習(xí)慣上需要為有子類的qdisc分配一個handle。一個qdisc如果是根節(jié)點,則parent的值就是root,如果qdisc下面有劃分類,這時就需要指定handle,handle的值是major:minor格式的,對于root來說,格式是1:,后面不需要指定minor,要指定的話,qdisc的minor必須為0。非根的qdisc的handle的major可以自己設(shè)置,minor不用設(shè)置,非根的parent的值也是major:minor格式,值是一個已存在的類。 ?
CLASS ? ? 在同一個qdisc里面的類共享這個qdisc的主號碼,每個類都有自己的從號碼,叫做classid,classid只和父qdisc有關(guān),和父class無關(guān),parent值的格式也是major:minor的,major這個指定該類的父節(jié)點的handle的major值,父節(jié)點可以是class也可以是qdisc,如果是qdisc,則minor可以不用設(shè)置或者設(shè)置為0,如果是class,則parent的值是其父類的classid值,classid的值格式也是major:minor的,major是父qdisc的handle的major的值,minor值是自己設(shè)置。 ?
FILTER ? ? 過濾器的ID有三部分,只有在對過濾器進行散列組織才會用到。 ?
?
tc命令的語法如下 ?
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 ?spe‐cific parameters ] ? ? tc ?filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ] protocol protocol prio pri‐ority 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命令可以對qdisc、class、filter進行如下操作: add ?在一個節(jié)點上添加qdisc、class、filter,添加時,需要傳遞一個parent,傳遞參數(shù)時既可以用ID也可以使用設(shè)備的根,在建立qdisc和filter時,可以使用handle來命名,在建立class時可以使用classid來命名 ?
remove ?刪除某個handle指定的qdisc,也可刪除根qdisc。被刪除的qdisc上的所有子類以及過濾器都會被自動刪除。 ?
change ?以替代的方式修改某些條目,除了handle和parent不能被修改外,其余語法同add,change命令不能移除一個節(jié)點 ?
replace ?添加或者刪除一個節(jié)點,是一個原子操作,如果節(jié)點不存在,則建立節(jié)點。 ?
link ?只適用于qdisc,替代一個存在的節(jié)點。 ?
?
實施 主要是建立隊列、分類、過濾器三步。 1 給物理設(shè)備建立一個隊列qdisc 2 在相關(guān)隊列上建立分類,一般是在該qdisc上建立一個根分類,然后在此根分類上建立子類。 3 為每一個分類建立基于路由的過濾器,并把過濾規(guī)則與特定的路由結(jié)合。一般只需要針對根分類提供一個過濾器,然后為每個子類提供路由映射。 ?
?
關(guān)于各個策略的參數(shù)可以man ?tc-cbq ?tc-htb ?tc-sfq ?tc-red tc-tbf ?tc-pfifo ?tc-bfifo tc-pfifo_fast查看。
? ? TC是linux中的流量控制模塊,利用隊列規(guī)定建立起數(shù)據(jù)包隊列,并定義了隊列中數(shù)據(jù)包的發(fā)送方式,從而實現(xiàn)對流量的控制。
? ? TC在流量控制中使用的隊列分為兩類:1 無類隊列 ?2 有類隊列。無類隊列比較簡單,分類隊列則有分類和過濾器等概念,比較復(fù)雜。
? ? 無類隊列對進入網(wǎng)卡的數(shù)據(jù)流統(tǒng)一對待,不進行區(qū)分,無類隊列形成的隊列能夠接受數(shù)據(jù)包以及重新編排、延遲、丟包,它可以對網(wǎng)卡流量進行整形,但是不能細分各種情況,無類隊列規(guī)定主要有pfifo_fast、tbf、sfq等,無類隊列的流量整形手段主要是排序、限速、丟包。
? ? 有類隊列規(guī)定則是對進入網(wǎng)卡的數(shù)據(jù)包根據(jù)不同的需求以分類的方式區(qū)分對待的分類規(guī)定,數(shù)據(jù)包進入分類隊列后,通過過濾器對數(shù)據(jù)包進行分類,過濾器返回一個決定,隊列就根據(jù)這個返回的決定把數(shù)據(jù)包發(fā)送到相應(yīng)的某一類隊列中進行排隊。每個子類可以再次使用他們的過濾器進行進一步的分類,直到不需要分類為止,數(shù)據(jù)包才會進入相關(guān)類的隊列中進行排隊。 ??
TC流量控制方式 ?
SHAPING 限制--流量被限制時,它的傳輸速率就被控制在某個值以下,限制閾值可以大大的小于有效帶寬,這樣可以平滑網(wǎng)絡(luò)的突發(fā)流量,是網(wǎng)絡(luò)更穩(wěn)定,shaping適用于限制外出的流量。 ?
SCHEDULING 調(diào)度--通過調(diào)度數(shù)據(jù)包的傳輸,可以在帶寬范圍內(nèi)按照優(yōu)先級分配,也只適用于限制外出流量。 ?
POLICING 策略--用于處理接收到的數(shù)據(jù) ?
DROPPING 丟棄--如果流量超過設(shè)置的帶寬就丟棄數(shù)據(jù)包,向內(nèi)向外皆管用。 ?
?
TC流量控制處理對象 ?
流量的處理由三種對象控制,分別是:qdisc-排隊規(guī)則、class-類別、filter-過濾器。 ?
QDISC ?
? ? qdisc是流量控制的基礎(chǔ),無論何時,內(nèi)核如果需要通過某個網(wǎng)絡(luò)接口發(fā)送數(shù)據(jù)包,它都需要按照該接口配置的qdisc把數(shù)據(jù)包加入隊列中。內(nèi)核會盡可能多的從qdisc中取出數(shù)據(jù)包,然后交給網(wǎng)絡(luò)適配器進行處理。而qdisc又分為CLASSLESS QDisc--不可分類隊列規(guī)則、CLASSFUL QDISC--分類隊列規(guī)則。 ?
CLASSLESS QDisc--不可分類隊列規(guī)則 ?
無類qdisc包括以下隊列: [p|b]fifo ?最簡單的qdsic,先進先出策略,只有一個limit參數(shù)用來設(shè)置隊列長度,pfifo是以數(shù)據(jù)包個數(shù)為單位,bfifo是以字節(jié)數(shù)為單位。pfifo_fast包含三個波段,band0~band2,每個波段也使用先進先出策略,band0優(yōu)先級最高,band2最低,如果band0中有數(shù)據(jù)包,系統(tǒng)就不會去處理band1的數(shù)據(jù)包,直到band0的數(shù)據(jù)包處理完。同理band1和band2。 ?
red ?是Random Early Detection的簡寫--隨機早起檢測。當帶寬的占用接近指定帶寬時隨機的丟棄一些數(shù)據(jù)包。 ?
sfq ?是Stochastic Fairness Queueing的簡寫--隨機公平隊列,它會按照會話為流量進行排序,一般對應(yīng)于每個tcp或者udp數(shù)據(jù)流,然后循環(huán)發(fā)送每個會話的數(shù)據(jù)包。 ?
tbf ?是Token Bucket Filter的簡寫--xx 適合把速率降到某個值。 ?
如果沒有設(shè)置可分類隊列規(guī)則,則無分類隊列規(guī)則只能屬于設(shè)備的根。如下設(shè)置:tc qdisc add dev DEV root QDISC QDISC-PARAMETERS,如果一個接口沒有設(shè)置qdisc,則pfifo_fast是默認的缺省qdisc。 ?
?
CLASSFUL QDISC--分類隊列規(guī)則 ?
分類隊列規(guī)則包括以下隊列: CBQ ?是Class Based Queueing的簡寫,它實現(xiàn)了一個豐富的連接共享類別結(jié)構(gòu),既有限制帶寬能力又有帶寬優(yōu)先級管理能力。帶寬限制是通過計算連接的空閑時間完成的,空閑時間的計算標準是數(shù)據(jù)包離隊事件的頻率和下層連接的帶寬。 ?
HTB ?是?Hierarchy Token Bucket的簡寫,它實現(xiàn)了一個豐富的連接共享類別結(jié)構(gòu),使用HTB可以很容易的保證每個類的帶寬,同時也允許特定類可以突破上限,占用其他類等寬等。HTB通過TFB實現(xiàn)帶寬限制,也可以為類劃分優(yōu)先級。 ?
PRIO 不能限制帶寬,因為屬于不同類別的數(shù)據(jù)包是順序離隊的。使用PRIO qdisc可以很容易對流量進行優(yōu)先級管理,只有屬于高優(yōu)先級類別的數(shù)據(jù)包全部發(fā)送完畢,才會發(fā)送屬于低優(yōu)先級類別的數(shù)據(jù)包。為了方便管理,需要使用 iptables或者ipchains處理數(shù)據(jù)包的服務(wù)類型(Type Of Service,ToS)。 ?
?
CLASS ?
? ? 一些qdisc可以包含一些類,不同的類中又可以包含更深入的qdisc,通過這些細分的qdisc可以為進入隊列的數(shù)據(jù)包排隊,通過設(shè)置各種類數(shù)據(jù)包的離隊次序,可以設(shè)置網(wǎng)絡(luò)數(shù)據(jù)流量的優(yōu)先級。例如,我們要對不同的IP實施不同的流量控制策略,這時就需要用不同的類來控制。 ?
?
FILTER ?
? ? filter用于為數(shù)據(jù)包分類,決定數(shù)據(jù)包進入何種qdisc隊列,分類的方法有多種filter是一種方法,使用filter時內(nèi)核會調(diào)用屬于這個類的所有過濾器,直到返回一個決定,如果么有返回決定,就做進一步處理,處理方式和qdisc有關(guān)。filter是在qdisc內(nèi)部的。目前可用的過濾器有:u32、rsvp、fwmark等。 ?
?
?
?
操作原理 ?
? ? 類組成一個樹,每個類都只有一個父類,卻可以有多個子類,某些qdisc允許在運行時動態(tài)添加類,如cbq、htb,而有些qdisc在運行時不許動態(tài)添加類,如prio。允許動態(tài)添加類的qdisc可以有多個子類,由他們?yōu)閿?shù)據(jù)包排隊。每個類都有一個葉子qdisc,默認這個葉子qdisc使用pfifo的隊列,當然也可以用其他隊列替換,而且,這個qdisc可以再次包含其他類,但是每個類只能有一個葉子qdisc。當一個數(shù)據(jù)包進入一個qdisc時,可以使用三種方式為其分類:tc filters、Type of Service、skb->priority。但是并不是所有的qdisc都可以使用這三種方式。 ?
?
命名規(guī)則 ?
? ? 所有的qdiscs, classes and filters都有自己的ID,可以手動指定也可以自動獲取,ID包含一個主號碼和一個從號碼,用冒號分開。 ?
QDISC ? ? 一個qdisc會被分配一個主號碼,叫做handle,把從號碼作為類的命名空間,習(xí)慣上需要為有子類的qdisc分配一個handle。一個qdisc如果是根節(jié)點,則parent的值就是root,如果qdisc下面有劃分類,這時就需要指定handle,handle的值是major:minor格式的,對于root來說,格式是1:,后面不需要指定minor,要指定的話,qdisc的minor必須為0。非根的qdisc的handle的major可以自己設(shè)置,minor不用設(shè)置,非根的parent的值也是major:minor格式,值是一個已存在的類。 ?
CLASS ? ? 在同一個qdisc里面的類共享這個qdisc的主號碼,每個類都有自己的從號碼,叫做classid,classid只和父qdisc有關(guān),和父class無關(guān),parent值的格式也是major:minor的,major這個指定該類的父節(jié)點的handle的major值,父節(jié)點可以是class也可以是qdisc,如果是qdisc,則minor可以不用設(shè)置或者設(shè)置為0,如果是class,則parent的值是其父類的classid值,classid的值格式也是major:minor的,major是父qdisc的handle的major的值,minor值是自己設(shè)置。 ?
FILTER ? ? 過濾器的ID有三部分,只有在對過濾器進行散列組織才會用到。 ?
?
tc命令的語法如下 ?
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 ?spe‐cific parameters ] ? ? tc ?filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ] protocol protocol prio pri‐ority 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命令可以對qdisc、class、filter進行如下操作: add ?在一個節(jié)點上添加qdisc、class、filter,添加時,需要傳遞一個parent,傳遞參數(shù)時既可以用ID也可以使用設(shè)備的根,在建立qdisc和filter時,可以使用handle來命名,在建立class時可以使用classid來命名 ?
remove ?刪除某個handle指定的qdisc,也可刪除根qdisc。被刪除的qdisc上的所有子類以及過濾器都會被自動刪除。 ?
change ?以替代的方式修改某些條目,除了handle和parent不能被修改外,其余語法同add,change命令不能移除一個節(jié)點 ?
replace ?添加或者刪除一個節(jié)點,是一個原子操作,如果節(jié)點不存在,則建立節(jié)點。 ?
link ?只適用于qdisc,替代一個存在的節(jié)點。 ?
?
實施 主要是建立隊列、分類、過濾器三步。 1 給物理設(shè)備建立一個隊列qdisc 2 在相關(guān)隊列上建立分類,一般是在該qdisc上建立一個根分類,然后在此根分類上建立子類。 3 為每一個分類建立基于路由的過濾器,并把過濾規(guī)則與特定的路由結(jié)合。一般只需要針對根分類提供一個過濾器,然后為每個子類提供路由映射。 ?
?
關(guān)于各個策略的參數(shù)可以man ?tc-cbq ?tc-htb ?tc-sfq ?tc-red tc-tbf ?tc-pfifo ?tc-bfifo tc-pfifo_fast查看。
總結(jié)
以上是生活随笔為你收集整理的Traffic Controll的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ch8 电路噪声学习笔记(一)baker
- 下一篇: js数据类型: