Next Previous Contents

2. 背景

2.1 必要條件

要點: 這些方法儘管沒有在其它的發行版中試驗過,我想它正常工作大概沒什麼問題.下面是運行的環境:

Note: Previous versions of this document specified a method of bandwidth control that involved patching the existing sch_prio queue. It was found later that this patch was entirely unnecessary. Regardless, the newer methods outlined in this document will give you better results (although at the writing of this document 2 kernel patches are now necessary. :) Happy patching.)

2.2 佈局

化繁為簡,所有的設定依照下面這個佈局進行:


  <-- 128kbit/s      --------------     <-- 10Mbit -->
  Internet <--------------------> | ADSL Modem | <--------------------
                1.5Mbit/s -->     --------------                     |
                                                                     | eth0
                                                                     V
                                                         -----------------
                                                         |               |
                                                         | Linux Router  |
                                                         |               |
                                                         -----------------
                                                          | .. | eth1..ethN
                                                          |    |
                                                          V    V
                   
                                                       Local Network
      

2.3 Packet Queues(數據包隊列)

Packet Queues是一個容器, 當數據不能被網絡設備立既送走的時候, Packet Queues 負責暫時收留它們. 除非被設定成另外一種方式,否則數據包是按 FIFO (first in, first out 最早進入Queues的數據將被最快發送走) 進行排隊.

The Upstream(向上傳輸)

ADSL的帶寬由不對稱的 1.5Mbit/s downstream(向下傳輸)和128kbit/sec upstream(向上傳輸)組成. Linux 路由器(主機)同ADSL modem的連結速率在10Mbits/s左右.如果 Linux 路由器同 Local Network(本地網絡) 的連結速率也在10Mbits/s左右,路由器和Local Network(本地網絡)的Queues(隊列)就不會存在.但以10Mbits/s到達ADSL modem的數據包卻要以128kbit/sec 傳輸到Internet.因此數據包將在ADSL modem形成Queues,ADSL modem將不能應付而產生數據包丟失現象. TCP就是用來控制類似這樣的情況,它調整傳輸窗口的大小以達到利用帶寬的最佳效果.

TCP控制Queues(隊列)以利用帶寬. 較大的FIFO Queues將延長數據包的傳送時間.

另一種同FIFO有點相似的Queues(隊列)是 n-band priority queue, 它取代FIFO只有一個隊列的做法, 數據包分級別排出多個FIFO Queues(隊列), 每一個Queues都有優先級別的設定, 總是從級別高的Queues將數據dequeued(出列). 使用這種方法,FTP和telnet同時上載數據包的時候, telnet的數據包將得到更高的優先級別.單獨的telnet數據包將被立既發送.

Linux 使用一種新的Queues: Hierarchical Token Bucket (HTB 譯為分級型式的隊列容器). 它有點像n-band priority queue, 但n-band priority queue在每個級別中只有限制數據通訊的能力. HTB有一項更加先進的功能:在已有的級別之上能夠建立一個新的級別通訊.更多的資訊請參照: http://www.lartc.org/

The Downstream(向下傳輸)

從Internet發送至ADSL modem的數據包入站和數據包出站的Queues大至相同. 不管怎樣, queue 會集在您的ISP那裡. 因為這樣您大概不能直接控制數據包如何排隊或以哪種形式分配優先權. 只有一種方法來縮短這裡的反應時間:期望向您發送數據包的時候不要太快. 不幸的是,您無法直接控制數據包的到達速度. 這裡有一些方法將發送者的速度減慢:


Next Previous Contents