熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

在Linux中實現流量控制

2013-11-13 22:22:52  來源: Oracle 

  摘要: Linux從kernel 開始支持QOS不過需要重新編譯內核運行make config時將EXPERIMENTAL _OPTIONS設置成y並且將Class Based Queueing (CBQ) Token Bucket Flow Traffic Shapers 設置為 y 運行 make dep; make clean; make bzilo生成新的內核
  Linux從kernel 開始支持QOS不過需要重新編譯內核運行make config時將EXPERIMENTAL _OPTIONS設置成y並且將Class Based Queueing (CBQ) Token Bucket Flow Traffic Shapers 設置為 y 運行 make dep; make clean; make bzilo生成新的內核
  
    在Linux操作系統中流量控制器(TC)主要是在輸出端口處建立一個隊列進行流量控制控制的方式是基於路由亦即基於目的IP地址或目的子網的網絡號的流量控制流量控制器TC其基本的功能模塊為隊列分類和過濾器Linux內核中支持的隊列有Class Based Queue Token Bucket Flow CSZ First In First Out Priority TEQL SFQ ATM RED這裡我們討論的隊列與分類都是基於CBQ(Class Based Queue)的而過濾器是基於路由(Route)的
  
    配置和使用流量控制器TC主要分以下幾個方面分別為建立隊列建立分類建立過濾器和建立路由另外還需要對現有的隊列分類過濾器和路由進行監視
  
    其基本使用步驟為
  
    ) 針對網絡物理設備(如以太網卡eth)綁定一個CBQ隊列
  
    ) 在該隊列上建立分類
  
    ) 為每一分類建立一個基於路由的過濾器
  
    ) 最後與過濾器相配合建立特定的路由表
  
    先假設一個簡單的環境
  
    流量控制器上的以太網卡(eth) 的IP地址為在其上建立一個CBQ隊列假設包的平均大小為字節包間隔發送單元的大小為字節可接收沖突的發送最長包數目為字節
  
    假如有三種類型的流量需要控制:
  
    ) 是發往主機其IP地址為其流量帶寬控制在Mbit優先級為
  
    ) 是發往主機其IP地址為其流量帶寬控制在Mbit優先級為
  
    ) 是發往子網其子網號為子網掩碼為流量帶寬控制在Mbit優先級為
  
     建立隊列
  
    一般情況下針對一個網卡只需建立一個隊列
  
    將一個cbq隊列綁定到網絡物理設備eth其編號為:網絡物理設備eth的實際帶寬為 Mbit包的平均大小為字節包間隔發送單元的大小為字節最小傳輸包大小為字節
  
    ·tc qdisc add dev eth root handle : cbq bandwidth Mbit avpkt cell mpu
  
     建立分類
  
    分類建立在隊列之上一般情況下針對一個隊列需建立一個根分類然後再在其上建立子分類對於分類按其分類的編號順序起作用編號小的優先一旦符合某個分類匹配規則通過該分類發送數據包則其後的分類不再起作用
  
    ) 創建根分類:分配帶寬為Mbit優先級別為
  
    ·tc class add dev eth parent : classid : cbq bandwidth Mbit rate Mbit maxburst allot prio avpkt cell weight Mbit
  
    該隊列的最大可用帶寬為Mbit實際分配的帶寬為Mbit可接收沖突的發送最長包數目為字節最大傳輸單元加MAC頭的大小為字節優先級別為包的平均大小為字節包間隔發送單元的大小為字節相應於實際帶寬的加權速率為Mbit
  
    )創建分類:其父分類為:分配帶寬為Mbit優先級別為
  
    ·tc class add dev eth parent : classid : cbq bandwidth Mbit rate Mbit maxburst allot prio avpkt cell weight Kbit split : bounded
  
    該隊列的最大可用帶寬為Mbit實際分配的帶寬為 Mbit可接收沖突的發送最長包數目為字節最大傳輸單元加MAC頭的大小為字節優先級別為包的平均大小為字節包間隔發送單元的大小為字節相應於實際帶寬的加權速率為Kbit分類的分離點為:且不可借用未使用帶寬
  
    )創建分類:其父分類為:分配帶寬為Mbit優先級別為
  
    ·tc class add dev eth parent : classid : cbq bandwidth Mbit rate Mbit maxburst allot prio avpkt cell weight Kbit split :
  
    該隊列的最大可用帶寬為Mbit實際分配的帶寬為 Mbit可接收沖突的發送最長包數目為字節最大傳輸單元加MAC頭的大小為字節優先級別為包的平均大小為字節包間隔發送單元的大小為字節相應於實際帶寬的加權速率為Kbit分類的分離點為:
  
    )創建分類:其父分類為:分配帶寬為Mbit優先級別為
  
    ·tc class add dev eth parent : classid : cbq bandwidth Mbit rate Mbit maxburst allot prio avpkt cell weight Kbit split :
  
    該隊列的最大可用帶寬為Mbit實際分配的帶寬為 Kbit可接收沖突的發送最長包數目為字節最大傳輸單元加MAC頭的大小為字節優先級別為包的平均大小為字節包間隔發送單元的大小為字節相應於實際帶寬的加權速率為Kbit分類的分離點為:
  
     建立過濾器
  
    過濾器主要服務於分類一般只需針對根分類提供一個過濾器然後為每個子分類提供路由映射
  
    ) 應用路由分類器到cbq隊列的根父分類編號為:過濾協議為ip優先級別為過濾器為基於路由表
  
    ·tc filter add dev eth parent : protocol ip prio route
  
    ) 建立路由映射分類: : :
  
    ·tc filter add dev eth parent : protocol ip prio route to flowid :
  
    ·tc filter add dev eth parent : protocol ip prio route to flowid :
  
    ·tc filter add dev eth parent : protocol ip prio route to flowid :
  
    建立路由
  
    該路由是與前面所建立的路由映射一一對應
  
    ) 發往主機的數據包通過分類轉發(分類的速率Mbit)
  
    ·ip route add dev eth via realm
  
    ) 發往主機的數據包通過分類轉發(分類的速率Mbit)
  
    ·ip route add dev eth via realm
  
    )發往子網/的數據包通過分類轉發(分類的速率Mbit)
  
    ·ip route add / dev eth via realm
  
    注一般對於流量控制器所直接連接的網段建議使用IP主機地址流量控制限制不要使用子網流量控制限制如一定需要對直連子網使用子網流量控制限制則在建立該子網的路由映射前需將原先由系統建立的路由刪除才可完成相應步驟
  
     監視
  
    主要包括對現有隊列分類過濾器和路由的狀況進行監視
  
    )顯示隊列的狀況
  
    簡單顯示指定設備(這裡為eth)的隊列狀況
  
  ·tc qdisc ls dev eth
  qdisc cbq : rate Mbit (boundedisolated) prio notransmit
  
    詳細顯示指定設備(這裡為eth)的隊列狀況
  
  ·tc s qdisc ls dev eth
  qdisc cbq : rate Mbit (boundedisolated) prio notransmit
  Sent bytes pkts (dropped overlimits )
  borrowed overactions avgidle undertime
  
    這裡主要顯示了通過該隊列發送了個數據包數據流量為個字節丟棄的包數目為超過速率限制的包數目為
  
    )顯示分類的狀況
  
    簡單顯示指定設備(這裡為eth)的分類狀況
  
  ·tc class ls dev eth
  class cbq : root rate Mbit (boundedisolated) prio notransmit
  class cbq : parent : rate Mbit prio notransmit #notransmit表示優先級為
  class cbq : parent : rate Mbit prio
  class cbq : parent : rate Mbit prio
  class cbq : parent : rate Mbit prio
  
    詳細顯示指定設備(這裡為eth)的分類狀況
  
  ·tc s class ls dev eth
  class cbq : root rate Mbit (boundedisolated) prio notransmit
  Sent bytes pkts (dropped overlimits )
  borrowed overactions avgidle undertime
  class cbq : parent : rate Mbit prio notransmit
  Sent bytes pkts (dropped overlimits )
  borrowed overactions avgidle undertime
  class cbq : parent : rate Mbit prio
  Sent bytes pkts (dropped overlimits )
From:http://tw.wingwit.com/Article/program/Oracle/201311/18945.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.