文章導航綠軟下載站軟件下載安卓資源蘋果資源專題

您當前所在位置:首頁操作系統LINUX → linux tc實現ip流量限制

linux tc實現ip流量限制

時間:2015/6/28來源:IT貓撲網作者:網管聯盟我要評論(0)

  tc是個配置Linux內核流量控制的工具

  名字

  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 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

  簡介

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

  SHAPING(限制)

  當流量被限制,他的傳輸速率就被控制在某個值以下。限制值能夠大大小于有效帶寬,這樣能夠平滑突發數據流量,使網絡更為穩定。shaping(限制)只適用于向外的流量。

  SCHEDULING(調度) bitsCN.Com

  通過調度數據包的傳輸,能夠在帶寬范圍內,按照優先級分配帶寬。SCHEDULING(調度)也只適于向外的流量。

  POLICING(策略)

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

  DROPPING(丟棄)

  假如流量超過某個設定的帶寬,就丟棄數據包,不管是向內還是向外。

  流量的處理由三種對象控制,他們是:qdisc(排隊規則)、class(類別)和filter(過濾器)。

  QDISC(排隊規則)

  QDisc(排隊規則)是queueing discipline的簡寫,他是理解流量控制(traffic control)的基礎。無論何時,內核假如需要通過某個網絡接口發送數據包,他都需要按照為這個接口配置的qdisc(排隊規則)把數據包加入隊列。然后,內核會盡可能多地從qdisc里面取出數據包,把他們交給網絡適配器驅動模塊。

  最簡單的QDisc是pfifo他不對進入的數據包做任何的處理,數據包采用先入先出的方式通過隊列。但是,他會保存網絡接口一時無法處理的數據包。

  CLASS(類)

  某些QDisc(排隊規則)能夠包含一些類別,不同的類別中能夠包含更深入的QDisc(排隊規則),通過這些細分的QDisc還能夠為進入的隊列的數據包排隊。通過配置各種類別數據包的離隊次序,QDisc能夠為配置網絡數據流量的優先級。 中國網管論壇

  FILTER(過濾器)

  filter(過濾器)用于為數據包分類,決定他們按照何種QDisc進入隊列。無論何時數據包進入一個劃分子類的類別中,都需要進行分類。分類的方法能夠有多種,使用fileter(過濾器)就是其中之一。使用filter(過濾器)分類時,內核會調用附屬于這個類(class)的任何過濾器,直到返回一個判決。假如沒有判決返回,就作進一步的處理,而處理方式和QDISC有關。

  需要注意的是,filter(過濾器)是在QDisc內部,他們不能作為主體。

  CLASSLESS QDisc(不可分類QDisc)

  無類別QDISC包括:

  [p|b]fifo

  使用最簡單的qdisc,純粹的先進先出。只有一個參數:limit,用來配置隊列的長度,pfifo是以數據包的個數為單位;bfifo是以字節數為單位。

  pfifo_fast

  在編譯內核時,假如打開了高級路由器(Advanced Router)編譯選項,pfifo_fast就是系統的標準QDISC。他的隊列包括三個波段(band)。在每個波段里面,使用先進先出規則。而三個波段(band)的優先級也不相同,band 0的優先級最高,band 2的最低。假如band里面有數據包,系統就不會處理band 1里面的數據包,band 1和band 2之間也是相同。數據包是按照服務類型(Type of Service,TOS)被分配多三個波段(band)里面的。 [url]www.bitsCN.com[/url]

  red

  red是Random Early Detection(隨機早期探測)的簡寫。假如使用這種QDISC,當帶寬的占用接近于規定的帶寬時,系統會隨機地丟棄一些數據包。他很適合高帶寬應用。

  sfq

  sfq是Stochastic Fairness Queueing的簡寫。他按照會話(session--對應于每個TCP連接或UDP流)為流量進行排序,然后循環發送每個會話的數據包。

  tbf

  tbf是Token Bucket Filter的簡寫,適合于把流速降低到某個值。

  不可分類QDisc的配置

  假如沒有可分類QDisc,不可分類QDisc只能附屬于設備的根。他們的用法如下:

  tc qdisc add dev DEV root QDISC QDISC-PARAMETERS

  要刪除一個不可分類QDisc,需要使用如下命令:

  tc qdisc del dev DEV root

  一個網絡接口上假如沒有配置QDisc,pfifo_fast就作為缺省的QDisc。

  CLASSFUL QDISC(分類QDisc)

#p#副標題#e#

  可分類的QDisc包括:

  CBQ

  CBQ是Class Based Queueing(基于類別排隊)的縮寫。他實現了一個豐富的連接共享類別結構,既有限制(shaping)帶寬的能力,也具備帶寬優先級管理的能力。帶寬限制是通過計算連接的空閑時間完成的?臻e時間的計算標準是數據包離隊事件的頻率和下層連接(數據鏈路層)的帶寬。

  [url]www.bitsCN.com[/url]

  HTB

  HTB是Hierarchy Token Bucket的縮寫。通過在實踐基礎上的改進,他實現了一個豐富的連接共享類別體系。使用HTB能夠很容易地確保每個類別的帶寬,雖然他也允許特定的類能夠突破帶寬上限,占用別的類的帶寬。HTB能夠通過TBF(Token Bucket Filter)實現帶寬限制,也能夠劃分類別的優先級。

  PRIO

  PRIO QDisc不能限制帶寬,因為屬于不同類別的數據包是順序離隊的。使用PRIO QDisc能夠很容易對流量進行優先級管理,只有屬于高優先級類別的數據包全部發送完畢,才會發送屬于低優先級類別的數據包。為了方便管理,需要使用iptables或ipchains處理數據包的服務類型(Type Of Service,ToS)。

  操作原理

  類(Class)組成一個樹,每個類都只有一個父類,而一個類能夠有多個子類。某些QDisc(例如:CBQ和HTB)允許在運行時動態添加類,而其他的QDisc(例如:PRIO)不允許動態建立類。

  允許動態添加類的QDisc能夠有零個或多個子類,由他們為數據包排隊。

  此外,每個類都有一個葉子QDisc,默認情況下,這個葉子QDisc使用pfifo的方式排隊,我們也能夠使用其他類型的QDisc代替這個默認的QDisc。而且,這個葉子葉子QDisc有能夠分類,但是每個子類只能有一個葉子QDisc。 bitsCN_com

  當一個數據包進入一個分類QDisc,他會被歸入某個子類。我們能夠使用以下三種方式為數據包歸類,但是不是任何的QDisc都能夠使用這三種方式。

  tc過濾器(tc filter)

  假如過濾器附屬于一個類,相關的指令就會對他們進行查詢。過濾器能夠匹配數據包頭任何的域,也能夠匹配由ipchains或iptables做的標記。

  服務類型(Type of Service)

  某些QDisc有基于服務類型(Type of Service,ToS)的內置的規則為數據包分類。

  skb->priority

  用戶空間的應用程式能夠使用SO_PRIORITY選項在skb->priority域配置一個類的ID。

  樹的每個節點都能夠有自己的過濾器,但是高層的過濾器也能夠直接用于其子類。

  假如數據包沒有被成功歸類,就會被排到這個類的葉子QDisc的隊中。相關細節在各個QDisc的手冊頁中。

  命名規則

  任何的QDisc、類和過濾器都有ID。ID能夠手工配置,也能夠有內核自動分配。

  ID由一個主序列號和一個從序列號組成,兩個數字用一個冒號分開。

  QDISC

  一個QDisc會被分配一個主序列號,叫做句柄(handle),然后把從序列號作為類的命名空間。句柄采用象10:相同的表達方式。習慣上,需要為有子類的QDisc顯式地分配一個句柄。

  www_bitscn_com

  類(CLASS)

  在同一個QDisc里面的類分享這個QDisc的主序列號,但是每個類都有自己的從序列號,叫做類識別符(classid)。類識別符只和父QDisc有關,和父類無關。類的命名習慣和QDisc的相同。

  過濾器(FILTER)

  過濾器的ID有三部分,只有在對過濾器進行散列組織才會用到。詳情請參考tc-filters手冊頁。

  單位

  tc命令的任何參數都能夠使用浮點數,可能會涉及到以下計數單位。

  帶寬或流速單位:

  kbps

  千字節/秒

  mbps

  兆字節/秒

  kbit

  KBits/秒

  mbit

  MBits/秒

  bps或一個無單位數字

  字節數/秒

  數據的數量單位:

  kb或k

  千字節

  mb或m

  兆字節

  mbit

  兆bit

  kbit

  千bit

  b或一個無單位數字

  字節數

#p#副標題#e#

  時間的計量單位:

  s、sec或secs

  秒

  ms、msec或msecs

  分鐘

  us、usec、usecs或一個無單位數字

  微秒

  TC命令

  tc能夠使用以下命令對QDisc、類和過濾器進行操作:

  add

  bitsCN_com

  在一個節點里加入一個QDisc、類或過濾器。添加時,需要傳遞一個祖先作為參數,傳遞參數時既能夠使用ID也能夠直接傳遞設備的根。假如要建立一個QDisc或過濾器,能夠使用句柄(handle)來命名;假如要 關鍵詞標簽:linux,ip流量限制

相關閱讀

文章評論
發表評論

熱門文章 使用Clonezilla遷移到虛擬Linux環境使用Clonezilla遷移到虛擬Linux環境Linux服務器:設計高性能網站架構-LLMPLinux服務器:設計高性能網站架構-LLMP安裝配置MRTG監控Linux網絡安裝配置MRTG監控Linux網絡Linux下的Root權限控制Linux下的Root權限控制

相關軟件

人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址linux tc實現ip流量限制dmidecode命令查看內存型號linux下解壓rar文件安裝紅帽子RedHat Linux9.0操作系統教程Ubuntu linux 關機、重啟、注銷 命令lcx.exe、nc.exe、sc.exe入侵中的使用方法查看linux服務器硬盤IO讀寫負載

野心不大怎样赚钱呢 股票行情今天大盘分析 广东11选五28期开奖结果 手机彩票平台 好运快三平台首页 普通人炒股能赚到钱吗 股票只买跌和涨的吗 同花顺怎么新手买股票 正常体育彩票中奖金额多少 云南快十一选五跨度走势图 北京快3人大小精准计划