QoS,ToS和DiffServ

 

本文檔的Copyleft歸yfydz所有,使用GPL發佈,可以自由拷貝,轉載,轉載時請保持文檔的完整性,嚴禁用於任何商業用途。
msn: [email protected]
來源:http://yfydz.cublog.cn

0. 摘要

QoS是目前網絡技術中一個比較熱的話題,本文就討論實現QoS的一些底層的技術。

1. 概述

QoS(Quality of Service,服務質量)是用來描述網絡的服務質量和數據優先權的。在互連網早期,各

種數據都是平等的,網絡帶寬屬於先來先得的自由搶佔資源。隨着互聯網上數據類型的增加,對數據優

先級需求也開始提出,比如對音頻數據的實時性就要比視頻數據高;而且付費用戶希望自己數據的發送

優先權也要高於免費用戶。這些種種需求,促使了QoS的進一步研究和發展。

2. ToS (RFC 1349)

要實現QoS,首先就要對數據進行分類,而且分類標誌就要在IP頭的字段中,方便路由設備識別。對於

IPv4包來說,有一個字段是用於描述數據包服務類型的,就是ToS(Type of Service)字段,8位,在

RFC791中,該字段幾乎還沒有很明確的功能描述,可能是太超前了吧,當時還想不到會有掃描用。真

正開始描述ToS字段的是RFC1349。

ToS的取值不是任意的,在RFC1349中定義如下:

              76543210
              00010000   --   minimize delay           0x10
              00001000   --   maximize throughput      0x08
              00000100   --   maximize reliability     0x04
              00000010   --   minimize monetary cost   0x02
              00000000   --   normal service           0x00

minimize delay:最小延遲,如telnet,FTP等
maximize throughput:最大吞吐量,如FTP的數據通道等
maximize reliability:最大可靠性,如SNMP等
minimize monetary cost:最小費用,如NNTP等

上面這4位最多只能有一位爲1,最後一位必須爲0。前3位用來表示數據優先級,但在一般網絡實現中很

少用,也一般爲0,而在NetScreen防火牆中,使用ToS的前3位作爲數據優先權的表示,所以可以設置0

~7共8個優先級。

RFC1349定義的ToS功能相對較弱,不過不少路由協議如OSPF都可以根據ToS進行路由決策。

在IPv6(RFC2460)中,也有一個8位字段Traffic Class,用於區分數據優先級,但功能定義不遵守

RFC1349。

2. DiffServ (RFC2474, 2475)

在RFC2474中重新定義了IPv4的TOS字段,並更名爲DS字段,大小還是8位,廢除了TFC1349中的定義。
RFC2474中的定義:

       0     1    2   3    4   5    6   7
      +---+---+---+---+---+---+---+---+---+
      |         DSCP              |  CU   |
      +---+---+---+---+---+---+---+---+---+

        DSCP: differentiated services codepoint
        CU:   currently unused

只有低6位有效,是一個大小不超過63的數。

這個定義同時支持IPv4(ToS字段)和IPv6(Traffic Class字段)。

在RFC2475中,詳細描述了差別服務的體系結構。

3. QoS

有了數據級別,剩下的就是路由設備如何根據數據級別來轉發數據包了,算法有簡單的也有複雜的,理

論用的最多的就是排隊論了,俺一個大學同學後來出國讀博士的題目就是和QoS有關的,他的論文俺也

沒看過,不過數學太深的俺也看不懂了。

在linux內核中,有了多種QoS分配算法,在net/sched目錄下,算法包括:CBQ、HTB、CSZ、ATM、RED

、SFQ、TEQL、TBF、GRED等。在用戶空間,可通過iproute2來進行控制,詳細見Advance Routing

Howto.

在netfilter中,也有關於TOS目標用於ToS字段的修改等處理,可以配合iproute2實現數據分級控制。

4. 總結

QoS真正的難點還是在於數據的分發,但用Linux現有的open source的東西,也能做成一個相當不錯的

帶QoS功能的路由器了。

發佈了48 篇原創文章 · 獲贊 2 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章