蔡 超,陶智勇
(1.武漢郵電科學(xué)研究院 湖北 武漢 430074;2.光纖通信技術(shù)和網(wǎng)絡(luò)國(guó)家重點(diǎn)實(shí)驗(yàn)室 湖北 武漢 430074)
QoS(服務(wù)質(zhì)量)是保護(hù)網(wǎng)絡(luò)的一種安全機(jī)制,是用來(lái)解決網(wǎng)絡(luò)阻塞、延遲和掉包等問(wèn)題的一種通用技術(shù)手段。當(dāng)網(wǎng)絡(luò)過(guò)載甚至擁塞時(shí),QoS能夠?qū)χ匾臉I(yè)務(wù)進(jìn)行保護(hù),避免延遲或者丟棄,同時(shí)保證網(wǎng)絡(luò)的健康、穩(wěn)定運(yùn)行。要實(shí)現(xiàn)QoS,首先就得對(duì)數(shù)據(jù)進(jìn)行分類(lèi),將不同的數(shù)據(jù)打上不同的標(biāo)簽,然后根據(jù)標(biāo)簽將這些數(shù)據(jù)進(jìn)行處理,根據(jù)標(biāo)簽的不同進(jìn)行隊(duì)列調(diào)度、擁塞管理、流量控制等,以達(dá)到QoS的目的[1]。報(bào)文上面的分類(lèi)信息通常被網(wǎng)絡(luò)上的主機(jī)、路由器、交換機(jī)等設(shè)備賦予,可以按照不同的應(yīng)用策略或者按照?qǐng)?bào)文內(nèi)容的不同為報(bào)文打上類(lèi)別信息的印記。路由器、交換機(jī)或CMTS則會(huì)根據(jù)報(bào)文所攜帶的類(lèi)別信息,可以對(duì)各種交通流進(jìn)行不同優(yōu)先級(jí)別的傳輸,或者對(duì)特定的交通流進(jìn)行帶寬預(yù)留,或者適當(dāng)性的放棄某些報(bào)文、或者進(jìn)行不同的路徑選擇、或者采取針對(duì)性的操作等等。
很多路由器都能開(kāi)啟多個(gè)SSID,用戶可以設(shè)置不同的SSID支持不同的業(yè)務(wù),從而避免之間的相互干擾,這就是一個(gè)QoS的例子。本文則主要介紹了一種利用IP頭部的DSCP值來(lái)區(qū)分不同SSID的流分類(lèi)方法,該實(shí)驗(yàn)是在帶WiFi的Cable Modem和CMTS的環(huán)境下實(shí)現(xiàn)的,并采用MIB工具進(jìn)行測(cè)試和驗(yàn)證。
DSCP差分服務(wù)代碼點(diǎn) (Differentiated Services Code Point),是 IETF于 1998年 12月發(fā)布了 Diff-Serv的 QoS分類(lèi)標(biāo)準(zhǔn)。它在每個(gè)數(shù)據(jù)包IP頭部的服務(wù)類(lèi)別TOS標(biāo)識(shí)字節(jié)中,通過(guò)TOS不同的編碼值,在遵循DiffServ體系的網(wǎng)絡(luò)中,對(duì)包含不同分類(lèi)信息的報(bào)文采取不同的傳輸服務(wù)策略,以達(dá)到更好的QoS目的。在RFC2474中重新定義了IPv4的 TOS字段,但大小任然是8位,如圖1所示。
圖1 TOS字段Fig.1 TOS field
DSCP字段使用了前6比特,后2比特不使用,因此DSCP的值可以為0~63,可以定義64個(gè)不同的優(yōu)先級(jí)[2]。由于DSCP占據(jù)了TOS字段的高6位,而TOS字段任然是8位,所以它們的關(guān)系為T(mén)OS=DSCP<<2。TOS字段在Ipv4的數(shù)據(jù)包里默認(rèn)值都為0,在SSID的數(shù)據(jù)包中默認(rèn)值也都為0,因此可以利用DSCP值來(lái)區(qū)分不同的SSID。但本次設(shè)計(jì)并沒(méi)有利用到DSCP中不同的優(yōu)先級(jí)分類(lèi)標(biāo)準(zhǔn),而是通過(guò)手動(dòng)設(shè)置不同的DSCP數(shù)值,讓CMTS直接根據(jù)數(shù)值的不同區(qū)分SSID數(shù)據(jù)流。
家庭網(wǎng)關(guān)組網(wǎng)方式有多種,可以利用無(wú)線傳輸?shù)姆绞竭M(jìn)行家庭內(nèi)部的組網(wǎng),通過(guò)SSID技術(shù),一個(gè)無(wú)線局域網(wǎng)能夠分成幾個(gè)需要不同身份進(jìn)行驗(yàn)證的子網(wǎng)絡(luò),任何子網(wǎng)絡(luò)都需要獨(dú)立的、相應(yīng)的身份進(jìn)行驗(yàn)證,某些沒(méi)有被授權(quán)的用戶侵入本網(wǎng)絡(luò);采用多SSID技術(shù)的另外一個(gè)好處是可以實(shí)現(xiàn)虛擬AP功能??梢詫?duì)不同的SSID分配不同的認(rèn)證方式、訪問(wèn)權(quán)限或者其他驗(yàn)證,例如將局域網(wǎng)映射成為不同VLAN,達(dá)到對(duì)公共熱點(diǎn)和家庭內(nèi)部網(wǎng)絡(luò)進(jìn)行隔離的目的。本次試驗(yàn)中,已將帶wifi的Cable Modem AP虛擬為了8個(gè)SSID,且8個(gè)端口名稱為ra0到ra7。實(shí)現(xiàn)目的就是能夠在上層設(shè)置他們的DSCP值,給不同的SSID IP數(shù)據(jù)包做上不同的標(biāo)簽,達(dá)到流分類(lèi)的效果。
要想在上層修改DSCP值,就得有一個(gè)WEB前端,本次試驗(yàn)采用了JavaScript語(yǔ)言寫(xiě)了一個(gè)簡(jiǎn)單窗口,使之能夠在頁(yè)面輸入DSCP值,如圖2所示。然后將輸入的DSCP值從應(yīng)用層傳入驅(qū)動(dòng)層,進(jìn)行數(shù)據(jù)包的處理。
圖2 DSCP輸入窗口Fig.2 DSCP entry window
為了能夠在應(yīng)用層和驅(qū)動(dòng)層建立一個(gè)聯(lián)系,讓修改的值傳入驅(qū)動(dòng)層。于是首先建立了一個(gè)名為smc_proc_wifitos的PROC文件。應(yīng)用層要做的就是將WEB寫(xiě)入的值放入內(nèi)核已經(jīng)建立的文件,在應(yīng)用層代碼中是用簡(jiǎn)單的echo ra%d_dscp=%d>/proc/smc_proc_wifitos實(shí)現(xiàn)的。然后在驅(qū)動(dòng)層里面檢測(cè)smc_proc_wifitos文件的狀態(tài),一旦有文件寫(xiě)入時(shí),則說(shuō)明DSCP值被應(yīng)用層修改了。此時(shí)就可以讀取存入的存在/proc/smc_proc_wifitos里面的DSCP值,可以先將其存放在一個(gè)數(shù)組內(nèi)[3]。
在Wifi的驅(qū)動(dòng)層所要做的是過(guò)濾出所有SSID的IPv4數(shù)據(jù)包,然后根據(jù) switch (skb->dev->name[3])這條語(yǔ)句使數(shù)組內(nèi)取到的DSCP值與不同SSID數(shù)據(jù)包對(duì)應(yīng),再用函數(shù)ipv4_change_dsfield(iph,0, tmptos)將 DSCP 值寫(xiě)入 Ipv4數(shù)據(jù)包,如果取到的DSCP值為零,則不處理對(duì)應(yīng)的IPv4數(shù)據(jù)包。這樣通過(guò)wifi的每個(gè)SSID的數(shù)據(jù)包內(nèi)就攜帶了自己獨(dú)有的DSCP值[4]。部分代碼如下:
if(skb->protocol==htons(ETH_P_IP)) //檢測(cè) Ipv4 數(shù)據(jù)包
{
struct iphdr*iph=(struct iphdr*)(skb->data);
if(iph!=NULL)
{
if(strlen(skb->dev->name)==4)
{
switch (skb ->dev ->name [3]) //將DSCP值存入對(duì)應(yīng)的接口
{
case'0':
tmptos=smc_ssidtos[0];
break;
…………
CMTS 是線纜調(diào)制解調(diào)器終端系統(tǒng)的英文縮寫(xiě),是一個(gè)位于有線電視網(wǎng)前端的系統(tǒng)設(shè)備。為有線電視用戶提供數(shù)據(jù)接入服務(wù)。同時(shí)可以完成對(duì)IP數(shù)據(jù)包和數(shù)據(jù)信號(hào)的調(diào)制、解調(diào)、轉(zhuǎn)換和路由功能,又被稱為是有線路由器。本實(shí)驗(yàn)則使用了CMTS的路由過(guò)濾功能,通過(guò)配置CMTS的config文件,能夠使不同DSCP的數(shù)據(jù)包在CMTS內(nèi)走不同的路徑[5]。
使用configfileEditor工具對(duì)相應(yīng)的config文件進(jìn)行配置。首先,在原有的good.cfg上再配置兩條UsServiceFlow[24],使上行的UsServiceFlow達(dá)到三條,然后配置相應(yīng)的上行過(guò)濾范圍 UsPacketClassifier[22],使每條 UsServiceFlow[24]具有不同的TOS值范圍,進(jìn)而使每條不同的UsServiceFlow[24]根據(jù)對(duì)應(yīng)的范圍走不同的路徑。本次試驗(yàn)3條UsServiceFlow和2條DsServiceFlow,一共5條路徑,配置后的cfg文件如圖3。
圖3 配置后的configure文件Fig.3 Configure file after configuration
MIB是Management Information Base的英文縮寫(xiě),中文翻譯為“管理信息庫(kù)”,它也是網(wǎng)絡(luò)管理數(shù)據(jù)的一個(gè)標(biāo)準(zhǔn),該標(biāo)準(zhǔn)規(guī)定了網(wǎng)絡(luò)代理設(shè)備一定需要保存的數(shù)據(jù)類(lèi)型、數(shù)據(jù)項(xiàng)目、還有每個(gè)數(shù)據(jù)項(xiàng)目中允許的操作。當(dāng)對(duì)這些數(shù)據(jù)項(xiàng)目進(jìn)行存取訪問(wèn)時(shí),就可以獲取該網(wǎng)關(guān)的全部統(tǒng)計(jì)內(nèi)容。然后對(duì)多個(gè)網(wǎng)關(guān)統(tǒng)計(jì)內(nèi)容進(jìn)行綜合分析即可實(shí)現(xiàn)初步的網(wǎng)絡(luò)管理。MIB主要利用于SMNP對(duì)代理MIB中的相應(yīng)對(duì)象進(jìn)行查詢,獲取其值,實(shí)現(xiàn)對(duì)對(duì)網(wǎng)絡(luò)設(shè)備狀態(tài)的監(jiān)視[6]。本次實(shí)驗(yàn)則用MIB工具進(jìn)行檢測(cè),首先安裝MIB工具,然后安裝qos3.mib,在找到節(jié)點(diǎn)docsQosServiceFlowPkt,對(duì)其Walk一下,如圖4所示。
在圖中可以看到五條路徑,即我們配置的兩條DsServiceFlow和三條UsServiceFlow路徑,這5條路徑正是在CMTS里面配置的5條路徑。這說(shuō)明CMTS和MIB的配置都成功。
圖4 MIB的測(cè)試結(jié)果Fig.4 MIB test results
通過(guò)在WEB網(wǎng)頁(yè)上修改DSCP值,然后在利用MIB工具,會(huì)看到UsServiceFlow走不同的路徑。例如:
set DSCP=0x2a則 TOS值就為0xa8,上行數(shù)據(jù)會(huì)走第4條路徑,我們會(huì)看到第4條路徑的數(shù)值往上遞增;
set DSCP=0x01則TOS值就為 0x04,上行數(shù)據(jù)就會(huì)走第3條路徑,我們會(huì)看到第3條路徑后的數(shù)據(jù)往上遞增。
通過(guò)這些測(cè)試就說(shuō)明了能夠成功的修改每個(gè)SSID的DSCP值,并且CMTS能夠識(shí)別DSCP值,讓其走不同的路徑。
通過(guò)在WEB上修改DSCP值即可修改相應(yīng)SSID的數(shù)據(jù)包,因此也可以采用 Wireshark抓包軟件進(jìn)行抓包測(cè)試,通過(guò)抓到的包來(lái)看是否與修改的DSCP值相對(duì)應(yīng)。例如:在WEB網(wǎng)頁(yè)上設(shè)置某個(gè)SSID的DSCP值為0x2a,然后利用Wireshark在WAN側(cè)進(jìn)行抓包,找到對(duì)應(yīng)的包打開(kāi),就可以看這個(gè)數(shù)據(jù)包的TOS值。如圖5所示,可以看到TOS值為0xa8,而 TOS=DSCP<<2,
0xa8=0xa2<<2.所以就可以證明修改的DSCP值生效了。
圖5 抓包結(jié)果Fig.5 Packet capture results
通過(guò)本次試驗(yàn),證明在路由器[7]的WEB頁(yè)面上,也能改變通過(guò)每個(gè)SSID數(shù)據(jù)包的DSCP值,且CMTS能夠成功區(qū)分不同的SSID數(shù)據(jù)包。這符合本次試驗(yàn)的設(shè)計(jì)初衷,說(shuō)明這種流分類(lèi)方式在多SSID路徑中是可以實(shí)現(xiàn)的,并且這種設(shè)計(jì)使得流分類(lèi)的方式很方便簡(jiǎn)單,利用IP頭部的DSCP值也使得后面的流量控制、隊(duì)列調(diào)度、擁塞管理變得容易處理。
[1]方麗,任秀麗,張炎.支持QoS的流分類(lèi)在多層交換中的實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,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]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)[M].5版.北京:電子工業(yè)出版社,2008.
[3]王永綱,石江濤,戴雪龍,等.網(wǎng)絡(luò)包分類(lèi)算法仿真測(cè)試與比較研究[J].中國(guó)科學(xué)技術(shù)大學(xué)學(xué)報(bào),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.著,劉隆國(guó) 譯.Linux IP協(xié)議棧源碼分析[M].北京:機(jī)械工業(yè)出版社,2000.
[5]黨柱國(guó),劉捷.淺議有線電視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]區(qū)海平,壽國(guó)礎(chǔ).基于MIB定義的SNMP分析系統(tǒng)及實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,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ì)算機(jī)網(wǎng)絡(luò)路由器的應(yīng)用研究[J].現(xiàn)代電子技術(shù),2014(8):113-115.LI Zhong-wu,CHEN Li-qing.Application research of computer network router[J].Modern Electronics Technique,2014(8):113-115.