[摘要] 隨著Internet應用的迅猛發展,校園網帶寬管理日益成為網絡管理者不得不面對的問題。本文以Linux Traffic Control為工具,使用HTB作為層次式帶寬共享框架,以U32分類器作為包分類的工具,規劃和設計校園網帶寬管理,以提高網絡帶寬使用效率。
[關鍵詞] Tracfic control U32 HTB
如何將有限的帶寬資源做最有效分配是網絡管理者必須考慮的問題,由于成熟的商業帶寬管理產品動輒幾萬甚至數十萬以上,對于學校單位或小企業來講是一筆天文數字。如果能使用開源Linux平臺與普通計算機設備作為校園帶寬管理器,并以透明網橋的方式架設在校園網INTERNET出口做管理,對于學校單位或小企業有著很重要的價值,將大大減輕單位經費開支并有效增強網絡帶寬管理能力。
一、帶寬管理主要功能
網絡中各種信息流量是以數據包方式進行傳輸的,它們互相爭奪有限的網絡帶寬,當網絡帶寬足以滿足信息流量時并不會有影響,但是當包總流量超過網絡帶寬負載時就會發生擁塞,好比在道路上行駛的各種車輛,因互相爭奪車道造成整條道路嚴重塞車;但是如果每一車輛能夠按所分配的車道行駛,可能當汽車、貨車等車道發生擁塞時而公交車仍然能夠順暢行駛。
網絡帶寬管理概念與車道劃分觀念相相似,當網絡擁塞時仍可保障重要應用的網絡帶寬,通常把網絡帶寬切割成幾個不同的通道,把各種類型的流量控制在規定的帶寬中傳輸,這樣,就不會出現網絡擁塞時,各種流量互不相讓的情況。
帶寬管理器一般置于LAN與Internet的中間,如圖1所示,利用隊列算法調整包送出順序,讓優先級高包優先通過,延遲優先級低的包,以保證帶寬的服務,主要功能特性如下:
1.保證帶寬
事先設定帶寬管理規則,對帶寬的使用作適當規劃,當網絡發生擁塞時可提供基本帶寬保證;可依據網絡的使用特性預先規劃出重要用戶、重要部門或實時性應用等等,給予適當保證帶寬以確保其傳輸服務質量。
2.限制帶寬
對于一般非實時性的應用如 e- mail或 www、ftp則分配適量的限制頻寬,以免由于大量下載占用大量的帶寬而影響其他網路應用的進行。
3.帶寬共享/互借
不同類別的帶寬之間如何做帶寬共享與互借,除了依規劃分配帶寬外,更進一步將目前未使用帶寬提供給需要的類別,可避免帶寬浪費進而提高帶寬的使用率。
二、網絡帶寬共享架構
網絡帶寬共享架構一般可按下列方式組織:
1.以組織為單位
組織可為一個部門、某一段IP地址或網段,每一個組織可分配到保證帶寬,且當某一個組織所分配的帶寬有剩余時可供其它組織所使用。
2.以流量類型或服務類別為單位
根據不同流量類型(如 telnet、ftp、www、real- time audio與video)作不同的帶寬分配。在帶寬分配時可根據數據流量的重要性作帶寬占有率參考,如telnet、ftp、www類型數據無時間延遲的顧慮可配給較少保證帶寬;而 real-time audio與 video類型數據對時間延遲與包丟失有相當敏感性,應配置較高保證帶寬。
由于網絡應用日益豐富,數據流量類型亦趨復雜,可在上述各種的網絡帶寬分享類型基礎上,進一步規劃組合形成一較復雜的層次型網絡帶寬共享類型,如圖2所示,整體網絡帶寬由兩個部門所分享,而部門所占用的帶寬又分配各種不同服務類型去使用。
可將網絡帶寬規劃想象成一顆樹,其中樹干代表網絡可得到最大帶寬稱為root class,每一分枝(branch)稱為class,每一個class可使用其父節點分支帶寬,若有需求時可經由父節點借其兄弟姊妹class未使用的帶寬,整棵樹可表示網絡適配器的帶寬管理設定。
根據上述說明可總結網絡帶寬共享( Link- sharing)的主要原理為:
1.首先根據設定一初始的帶寬保證,每一個 interior或 leaf class能夠得到所分配的帶寬,當擁塞發生時這些 class將在保證帶寬范圍內。
2.當某些class未完全使用它所被分配的帶寬時,其剩余的帶寬不會任意分配給其它 class,必須遵循一套適當的指導方針去處理剩余帶寬。例如圖2中,當部門A所分配的FTP帶寬尚有剩余帶寬時將由WWW與其它帶寬類別所分享使用。
三、TC原理介紹
Linux操作系統中的流量控制器TC(Traffic Control)用于Linux內核的流量控制,主要是通過在輸出端口處建立一個隊列來實現流量控制。Linux流量控制的基本原理如下圖3所示。
數據包進來后,由Input De-Multiplexing進行判斷選擇:如該接收包的目的地是本地地址則將該封包送給上層協議(TCP/UDP)處理,否則將進入的數據包送至forwarding處理,forwarding也可能接受由本地產生經傳輸層所傳入的包,其主要是負責選擇輸出接口與處理查詢 routing table并決定該包的下一個目的地,最后則將送入 output queue中進行相關分類后排列輸出,一般我們只能限制網卡發送的數據包,不能限制網卡接收的數據包,所以我們可以通過改變發送次序來控制傳輸速率。Linux流量控制主要是在輸出接口排列時進行處理和實現的。
四、校園網帶寬管理實現
在校園網帶寬管理設計時采用Linux TC(Traffic Control)作為工具,并使用HTB作為層次型帶寬共享系統的主要技術組件,以U32分類器作為封包分類工具,而各類別帶寬內部隊列算法采用SFQ,希望借著公平性原則讓各個鏈接平均地分享帶寬。下面簡介實現的關鍵技術:
HTB : Hierarchy Token Bucket(層次型令牌桶)。是一個基于類的隊列規定算法。?它是CBQ的一個精簡改進版,繼承了CBQ的多項功能,去掉了一些復雜且不實用的部分。HTB可以實現帶寬分類、帶寬共享、設置優先級、設定突發流量等功能。更重要的是,HTB改變了限制帶寬的方法。它通過限制每個分隊列上數據包的發送速率來限制每個分類的帶寬。提高了帶寬限制的精確度。對于每一個網絡接口來說,同一時刻只能發送一個數據包,所以網絡接口處數據包的發送速率是一定的。HTB隊列規定通過在一個固定時間段內從每個分類的分隊列中取出的數據包個數來決定該分類的帶寬。取的數據包數越多,則分配給它的帶寬就越大。這就很好地解決了CBQ對帶寬限制不精確的問題。并且允許特定的類可以突破帶寬上限,占用其他類的帶寬,實現帶寬借用。HTB 可以通過TBF (Token Bucket Filter)實現帶寬限制,也能夠劃分類別的優先級。
SFQ : Stochastic Fairness Queuing(隨機公平隊列),SFQ隊列規定是公平隊列算法家族中的一個簡單實現。它將數據流分成相當多數量的FIFO隊列,每個隊列按照輪轉的方式發送,每個會話都按順序得到發送機會。需說其精確性不如其它方法,但這種方式非常公平,在實現高度公平的同時,需要的計算量卻最少。在校園網帶寬管理時可作為最底層類別的內部 qdisc,提供類別中各個連接平均分享該帶寬。
U32 filter:u32 是目前性能最優的過濾器。可根據源/目標IP地址、源/目標TCP/UDP端口、TOS和協議進行分類。u32有選擇子(Selector)和動作(Action)兩個部分。系統首先用每條準則的選擇子與數據包做比較,如果匹配成功,則把數據包轉發到定義好的HTB 類中。Selector定義了用于和數據包進行比較的匹配模式,目前有兩種形式的選擇子:通用(Generic)選擇子和特定(Specitic)選擇子。使用Generic可匹配IP頭或更高層的協議頭中的任何位,要求用戶對IP 數據包的內部結構非常了解。Specitic的形式相對直觀,最后系統內部還是轉化成Generic來匹配的。
五、結束語
在目前網絡環境下,適當地利用層次型網絡帶寬共享技術做帶寬管理,依照流量本身的特性或重要性,妥善地分類及分配各項流量帶寬,適當的帶寬管理策略規劃是解決學校或企業網絡出口瓶頸的關鍵。希望本文的討論能給學校或企業的網絡帶寬管理提供些參考,以便將目前有限的網絡帶寬作適當地規劃、有效地分配與分享,進而建置一個完全適合于自己網絡架構需求的帶寬管理策略。
參考文獻:
[1]Floyd,S,Jacobson,V. Link- sharing and Resource Management Models for Packet Networks.IEEE/ACM Transactions on Networking,1995,3(4).
[2]Almesberger,W. Linux Traffic Control- Implementation Overview.EPFL ICA,Nov 1998.
[3]Netherlabs BV,Gregory Maxwell,Remco van Mook, Martij n van Oosterhout,Paul B Schroeder and Jasper Spaans.Linux Advanced Routing Traffic Control HOWTO. 2002,7.