蔡 超,陶智勇
(1.武漢郵電科學研究院 湖北 武漢 430074;2.光纖通信技術和網絡國家重點實驗室 湖北 武漢 430074)
QoS(服務質量)是保護網絡的一種安全機制,是用來解決網絡阻塞、延遲和掉包等問題的一種通用技術手段。當網絡過載甚至擁塞時,QoS能夠對重要的業務進行保護,避免延遲或者丟棄,同時保證網絡的健康、穩定運行。要實現QoS,首先就得對數據進行分類,將不同的數據打上不同的標簽,然后根據標簽將這些數據進行處理,根據標簽的不同進行隊列調度、擁塞管理、流量控制等,以達到QoS的目的[1]。報文上面的分類信息通常被網絡上的主機、路由器、交換機等設備賦予,可以按照不同的應用策略或者按照報文內容的不同為報文打上類別信息的印記。路由器、交換機或CMTS則會根據報文所攜帶的類別信息,可以對各種交通流進行不同優先級別的傳輸,或者對特定的交通流進行帶寬預留,或者適當性的放棄某些報文、或者進行不同的路徑選擇、或者采取針對性的操作等等。
很多路由器都能開啟多個SSID,用戶可以設置不同的SSID支持不同的業務,從而避免之間的相互干擾,這就是一個QoS的例子。本文則主要介紹了一種利用IP頭部的DSCP值來區分不同SSID的流分類方法,該實驗是在帶WiFi的Cable Modem和CMTS的環境下實現的,并采用MIB工具進行測試和驗證。
DSCP差分服務代碼點 (Differentiated Services Code Point),是 IETF于 1998年 12月發布了 Diff-Serv的 QoS分類標準。它在每個數據包IP頭部的服務類別TOS標識字節中,通過TOS不同的編碼值,在遵循DiffServ體系的網絡中,對包含不同分類信息的報文采取不同的傳輸服務策略,以達到更好的QoS目的。在RFC2474中重新定義了IPv4的 TOS字段,但大小任然是8位,如圖1所示。

圖1 TOS字段Fig.1 TOS field
DSCP字段使用了前6比特,后2比特不使用,因此DSCP的值可以為0~63,可以定義64個不同的優先級[2]。由于DSCP占據了TOS字段的高6位,而TOS字段任然是8位,所以它們的關系為TOS=DSCP<<2。TOS字段在Ipv4的數據包里默認值都為0,在SSID的數據包中默認值也都為0,因此可以利用DSCP值來區分不同的SSID。但本次設計并沒有利用到DSCP中不同的優先級分類標準,而是通過手動設置不同的DSCP數值,讓CMTS直接根據數值的不同區分SSID數據流。
家庭網關組網方式有多種,可以利用無線傳輸的方式進行家庭內部的組網,通過SSID技術,一個無線局域網能夠分成幾個需要不同身份進行驗證的子網絡,任何子網絡都需要獨立的、相應的身份進行驗證,某些沒有被授權的用戶侵入本網絡;采用多SSID技術的另外一個好處是可以實現虛擬AP功能。可以對不同的SSID分配不同的認證方式、訪問權限或者其他驗證,例如將局域網映射成為不同VLAN,達到對公共熱點和家庭內部網絡進行隔離的目的。本次試驗中,已將帶wifi的Cable Modem AP虛擬為了8個SSID,且8個端口名稱為ra0到ra7。實現目的就是能夠在上層設置他們的DSCP值,給不同的SSID IP數據包做上不同的標簽,達到流分類的效果。
要想在上層修改DSCP值,就得有一個WEB前端,本次試驗采用了JavaScript語言寫了一個簡單窗口,使之能夠在頁面輸入DSCP值,如圖2所示。然后將輸入的DSCP值從應用層傳入驅動層,進行數據包的處理。

圖2 DSCP輸入窗口Fig.2 DSCP entry window
為了能夠在應用層和驅動層建立一個聯系,讓修改的值傳入驅動層。于是首先建立了一個名為smc_proc_wifitos的PROC文件。應用層要做的就是將WEB寫入的值放入內核已經建立的文件,在應用層代碼中是用簡單的echo ra%d_dscp=%d>/proc/smc_proc_wifitos實現的。然后在驅動層里面檢測smc_proc_wifitos文件的狀態,一旦有文件寫入時,則說明DSCP值被應用層修改了。此時就可以讀取存入的存在/proc/smc_proc_wifitos里面的DSCP值,可以先將其存放在一個數組內[3]。
在Wifi的驅動層所要做的是過濾出所有SSID的IPv4數據包,然后根據 switch (skb->dev->name[3])這條語句使數組內取到的DSCP值與不同SSID數據包對應,再用函數ipv4_change_dsfield(iph,0, tmptos)將 DSCP 值寫入 Ipv4數據包,如果取到的DSCP值為零,則不處理對應的IPv4數據包。這樣通過wifi的每個SSID的數據包內就攜帶了自己獨有的DSCP值[4]。部分代碼如下:
if(skb->protocol==htons(ETH_P_IP)) //檢測 Ipv4 數據包
{
struct iphdr*iph=(struct iphdr*)(skb->data);
if(iph!=NULL)
{
if(strlen(skb->dev->name)==4)
{
switch (skb ->dev ->name [3]) //將DSCP值存入對應的接口
{
case'0':
tmptos=smc_ssidtos[0];
break;
…………
CMTS 是線纜調制解調器終端系統的英文縮寫,是一個位于有線電視網前端的系統設備。為有線電視用戶提供數據接入服務。同時可以完成對IP數據包和數據信號的調制、解調、轉換和路由功能,又被稱為是有線路由器。本實驗則使用了CMTS的路由過濾功能,通過配置CMTS的config文件,能夠使不同DSCP的數據包在CMTS內走不同的路徑[5]。
使用configfileEditor工具對相應的config文件進行配置。首先,在原有的good.cfg上再配置兩條UsServiceFlow[24],使上行的UsServiceFlow達到三條,然后配置相應的上行過濾范圍 UsPacketClassifier[22],使每條 UsServiceFlow[24]具有不同的TOS值范圍,進而使每條不同的UsServiceFlow[24]根據對應的范圍走不同的路徑。本次試驗3條UsServiceFlow和2條DsServiceFlow,一共5條路徑,配置后的cfg文件如圖3。

圖3 配置后的configure文件Fig.3 Configure file after configuration
MIB是Management Information Base的英文縮寫,中文翻譯為“管理信息庫”,它也是網絡管理數據的一個標準,該標準規定了網絡代理設備一定需要保存的數據類型、數據項目、還有每個數據項目中允許的操作。當對這些數據項目進行存取訪問時,就可以獲取該網關的全部統計內容。然后對多個網關統計內容進行綜合分析即可實現初步的網絡管理。MIB主要利用于SMNP對代理MIB中的相應對象進行查詢,獲取其值,實現對對網絡設備狀態的監視[6]。本次實驗則用MIB工具進行檢測,首先安裝MIB工具,然后安裝qos3.mib,在找到節點docsQosServiceFlowPkt,對其Walk一下,如圖4所示。
在圖中可以看到五條路徑,即我們配置的兩條DsServiceFlow和三條UsServiceFlow路徑,這5條路徑正是在CMTS里面配置的5條路徑。這說明CMTS和MIB的配置都成功。

圖4 MIB的測試結果Fig.4 MIB test results
通過在WEB網頁上修改DSCP值,然后在利用MIB工具,會看到UsServiceFlow走不同的路徑。例如:
set DSCP=0x2a則 TOS值就為0xa8,上行數據會走第4條路徑,我們會看到第4條路徑的數值往上遞增;
set DSCP=0x01則TOS值就為 0x04,上行數據就會走第3條路徑,我們會看到第3條路徑后的數據往上遞增。
通過這些測試就說明了能夠成功的修改每個SSID的DSCP值,并且CMTS能夠識別DSCP值,讓其走不同的路徑。
通過在WEB上修改DSCP值即可修改相應SSID的數據包,因此也可以采用 Wireshark抓包軟件進行抓包測試,通過抓到的包來看是否與修改的DSCP值相對應。例如:在WEB網頁上設置某個SSID的DSCP值為0x2a,然后利用Wireshark在WAN側進行抓包,找到對應的包打開,就可以看這個數據包的TOS值。如圖5所示,可以看到TOS值為0xa8,而 TOS=DSCP<<2,
0xa8=0xa2<<2.所以就可以證明修改的DSCP值生效了。

圖5 抓包結果Fig.5 Packet capture results
通過本次試驗,證明在路由器[7]的WEB頁面上,也能改變通過每個SSID數據包的DSCP值,且CMTS能夠成功區分不同的SSID數據包。這符合本次試驗的設計初衷,說明這種流分類方式在多SSID路徑中是可以實現的,并且這種設計使得流分類的方式很方便簡單,利用IP頭部的DSCP值也使得后面的流量控制、隊列調度、擁塞管理變得容易處理。
[1]方麗,任秀麗,張炎.支持QoS的流分類在多層交換中的實現[J].計算機應用研究,2003(8):145-147.FANG Li,REN Xiu-li,ZHANG Yan.Achieved the support QoS flow classification in multilayer switching[J].Application Research of Computers,2003(8):145-147.
[2]謝希仁.計算機網絡[M].5版.北京:電子工業出版社,2008.
[3]王永綱,石江濤,戴雪龍,等.網絡包分類算法仿真測試與比較研究[J].中國科學技術大學學報,2004,34(4):400-409.WANG Yong-gang,SHI Jiang-tao,DAI Xue-long,et al.Network packet classification test and simulation of algorithm Comparative Study.[J].University of Science and Technology of China Journal,2004,34(4):400-409.
[4]Stachell S.T,Clifford H.B.J.著,劉隆國 譯.Linux IP協議棧源碼分析[M].北京:機械工業出版社,2000.
[5]黨柱國,劉捷.淺議有線電視CMTS和Cable Modem[J].西部廣播電視,2002(09):46-48.DANG Zhu-guo,LIU Jie.Discussion on cable CMTS and cable modem[J].Western Radio and Television,2002(9):46-48.
[6]區海平,壽國礎.基于MIB定義的SNMP分析系統及實現[J].計算機應用,2009(1):38-41.QU Hai-ping,SHOU Guo-chu.SNMP analysis system and implementation based on MIB definition[J].Computer Applications,2009(1):38-41.
[7]李忠武,陳麗清.計算機網絡路由器的應用研究[J].現代電子技術,2014(8):113-115.LI Zhong-wu,CHEN Li-qing.Application research of computer network router[J].Modern Electronics Technique,2014(8):113-115.