1. 程式人生 > 實用技巧 >流量控制--7.總結

流量控制--7.總結

8. 流量控制的規則、準則和方法

8.1. Linux流量控制的通用規則

可以使用如下通用規則來學習Linux流量控制。可以使用tcngtc進行初始化配置Linux下的流量控制結構。

  • 任何執行整流功能的路由器都應該成為鏈路的瓶頸,並且應該調整為略低於最大可用的鏈路頻寬。通過整流可以防止在其他路由器中形成佇列,從而最大程度地控制到整流裝置的報文的延遲/延期。
  • 一個裝置可以對其傳輸的流量進行調整。由於已經在輸入介面上接收到流量,因此無法調整這類流量。 解決此問題的傳統方法是使用ingress策略。
  • 每個介面必須包含一個qdisc。當沒有明確附加其他qdisc時會使用預設的qdisc( pfifo_fast
    qdisc)。
  • 如果一個介面附加了classful qdiscs ,但沒有任何子類,這種情況會無意義地消耗CPU。
  • 任何新建立的類都包含一個 FIFO。可以使用任何qdisc來替換這個qdisc。當一個子類附加到該類時,會隱式地刪除FIFO qdisc。
  • 直接附加到root qdisc的類可以模擬虛擬電路。
  • 可以在類或任意一種classful qdiscs上附加過濾器。

8.2. 處理已知頻寬的鏈路

當一個鏈路已知頻寬時,HTB是一個理想的qdisc,因為可以給最內層的(最根)類設定給定連結上的最大可用頻寬。流量後續會被分割到子類中,用於保證特定型別的流量的頻寬或允許優先選擇特定型別的流量。

8.3. 處理已知可變頻寬的鏈路

理論上,PRIO是一個理想的用於處理可變頻寬的排程器,因為它是一個連續工作的qdisc(這意味著它不提供整流)。在頻寬未知或波動的鏈路中,PRIO 排程器更喜歡優先將具有最高優先順序的band中的所有報文出佇列,然後再處理較低優先順序的佇列中。

8.4. 基於流的頻寬共享和分割

在多種型別的網路頻寬競爭中,這通常是比較容易處理的競爭型別之一。通過使用SFQ,特定佇列中的流量可以分為多條流,然後公平地處理該佇列中的每條流。表現良好的應用程式(和使用者)會發現,使用SFQ和ESFQ足以滿足大多數共享需求。

這些公平排隊演算法的致命弱點是無法抵禦行為不端的使用者或應用程式同時開啟很多連線(例如,eMule, eDonkey, Kazaa)。通過建立大量獨立的流,應用程式可以控制公平排隊演算法中的時間間隙。重申一下,公平排隊演算法不知道單個應用程式會生成大多數流,並且不會懲罰使用者。 需要依賴其他方法。

8.5. 基於IP的頻寬共享和分割

對於許多管理員來說,這是在使用者之間劃分頻寬的理想方法。不幸的是,沒有簡單的解決方案,而且隨著共享網路連線的機器數量的增加,它變得越來越複雜。

為了在N個IP地址之間公平地分配頻寬,必須有N個類。

9. 使用QoS/流量控制的指令碼

9.1. wondershaper

更多參見 wondershaper.

9.2. ADSL Bandwidth HOWTO script (myshaper)

更多參見myshaper.

9.3. htb.init

更多參見htb.init.

9.4. tcng.init

更多參見 tcng.init.

9.5. cbq.init

更多參見 cbq.init.