本站小編為你精心準(zhǔn)備了網(wǎng)絡(luò)流量統(tǒng)計模塊及實驗結(jié)果分析參考范文,愿這些范文能點燃您思維的火花,激發(fā)您的寫作靈感。歡迎深入閱讀并收藏。

摘要:路由器是接人網(wǎng)絡(luò)的關(guān)鍵設(shè)備,為了防止網(wǎng)絡(luò)流量過大而造成網(wǎng)絡(luò)擁塞的狀況,設(shè)計了一種在路由器上的網(wǎng)絡(luò)流量控制系統(tǒng)。DD-WRT是一種開源的路由器固件,對DD-WRT重新定制開發(fā),可以實現(xiàn)用戶自己想要的一些功能。介紹了一種基于DD-WRT實現(xiàn)的網(wǎng)絡(luò)流量統(tǒng)計和控制系統(tǒng),介紹了系統(tǒng)捕包、流量統(tǒng)計和流量控制的一般流程,同時著重介紹了針對網(wǎng)絡(luò)應(yīng)用的流量統(tǒng)計和控制方法。系統(tǒng)采用嵌人式Linux編程,實現(xiàn)了在開源路由器中對網(wǎng)絡(luò)流量進行控制的功能,并有效地防止了網(wǎng)絡(luò)擁塞。
關(guān)鍵詞:開源路由器流量統(tǒng)計流量控制網(wǎng)絡(luò)應(yīng)用網(wǎng)絡(luò)擁塞
目前,在局域網(wǎng)接人互聯(lián)網(wǎng)的方式中,接人路由器是其中的一種關(guān)鍵設(shè)備,所以在接人路由器中實現(xiàn)對局域網(wǎng)訪問外網(wǎng)的流量進行控制是一種較為有效的方法。雖然商業(yè)路由器能夠?qū)崿F(xiàn)流量控制的基本功能,但固件的更新慢,可擴展性差,不能適應(yīng)因網(wǎng)絡(luò)應(yīng)用不斷豐富而對流量控制個性化實現(xiàn)的要求。而且,商業(yè)路由器源代碼不公開,因此不能由第三方軟件開發(fā)者開發(fā)特定軟件。而目前出現(xiàn)了多種開源的路由器軟件,可以運行在某些特定型號的路由器上。因此可以在開源路由器軟件的基礎(chǔ)上,根據(jù)需求實現(xiàn)流量控制功能的定制開發(fā)。
DD一WRT,就是其中一種開放性的路由器固件,它其實就是一個供無線路由器使用的嵌人版Linux,它可以采用Broadcom公司CPU的小型無線路由器實現(xiàn)數(shù)千元的商用無線路由器功能,而且人們甚至可以自行編譯程序,自由擴展無線路由器功能。
本系統(tǒng)在DD一WRT原有功能的基礎(chǔ)上擴展開發(fā)了流量統(tǒng)計和控制的功能,通過查看網(wǎng)絡(luò)流量狀態(tài),并對帶寬進行分配來控制網(wǎng)絡(luò)流量,從而有效地解決了網(wǎng)絡(luò)擁塞的問題。
1、總體方案設(shè)計
現(xiàn)在一些小區(qū)、樓層、小的企事業(yè)單位,由于人們大量的下載上傳以及P2P的普遍使用,并且缺乏一種規(guī)范的管理機制,所以經(jīng)常導(dǎo)致網(wǎng)絡(luò)流量激增,甚至擁塞。因此針對這種情況,設(shè)計一種能查看網(wǎng)絡(luò)流量狀態(tài),并對其進行有效控制的基于開源路由器的流量控制系統(tǒng)。
系統(tǒng)主要分成三個部分設(shè)計:數(shù)據(jù)包捕包模塊、流量統(tǒng)計模塊和流量控制模塊。為了有效捕獲數(shù)據(jù)包,捕包模塊采用pf_ring的環(huán)形緩沖區(qū)捕包機制。流量統(tǒng)計功能可按IP地址、端口號和應(yīng)用協(xié)議三種方案進行統(tǒng)計。當(dāng)網(wǎng)絡(luò)發(fā)生擁塞時,在流量控制模塊中動態(tài)地調(diào)用TC(TrafficControl)來對網(wǎng)絡(luò)流量進行控制。系統(tǒng)的基本流程如圖1所示。
2、關(guān)鍵技術(shù)
2.1pf_ring捕包機制
針對傳統(tǒng)libpcap}捕包處理時間長、效率低的缺點,采用了一種新的基于環(huán)形緩沖區(qū)的套接字模型pf_ring。它的主要工作原理如下所述:
采用PF_RING技術(shù),操作系統(tǒng)將包采用DMA方式拷貝到內(nèi)核緩沖區(qū)的環(huán)形隊列中,再把網(wǎng)卡緩沖區(qū)中收到的這些包丟棄,不把它們傳人內(nèi)核協(xié)議棧緩存區(qū)中進行排隊。環(huán)形緩存區(qū)在每個套接字被建立時分配,直到套接字關(guān)閉時,環(huán)形緩存區(qū)才被釋放。每次由網(wǎng)卡緩存區(qū)拷人內(nèi)核環(huán)形緩存區(qū)時,不會進行分配和去配的操作,而是新到的包按環(huán)形的方式,將原有的包覆蓋。PF_RING技術(shù)還提供了對MMAP技術(shù)的支持。該技術(shù)將用戶應(yīng)用程序空間映射到內(nèi)核緩存區(qū),從而省略了將數(shù)據(jù)從內(nèi)核緩存區(qū)向用戶緩存區(qū)的拷貝操作。這樣可以節(jié)省一次拷貝所占用的系統(tǒng)資源和縮短包處理的時間,從而提高了捕包的效率。
2.2流量統(tǒng)計方案
(1)按照IP地址匯聚。
系統(tǒng)對源和目的IP地址進行流量匯聚,統(tǒng)計出各IP地址單位時間內(nèi)的上行流量和下行流量。這種統(tǒng)計方式能反映出本地各主機、各網(wǎng)段的網(wǎng)絡(luò)負(fù)載情況,系統(tǒng)可以此為依據(jù),進行路由調(diào)整及流量控制。
(2)按照端口號匯聚。
TCPiLJDF''''的端口號代表網(wǎng)絡(luò)上的不同應(yīng)用(HTTP,F"IP,P2P等,按照單位時間內(nèi)訪問的TCP/UDI〕端口來統(tǒng)計流量,可以查看各端口的流量分布情況,當(dāng)網(wǎng)絡(luò)出現(xiàn)異常時,可按照端口號來進行流量控制。
(3)按照網(wǎng)絡(luò)應(yīng)用匯聚。
常規(guī)的網(wǎng)絡(luò)應(yīng)用一般通過常用的端口就可以識別,并進行流量統(tǒng)計,然而P2P技術(shù)不斷地發(fā)展演進,其拓?fù)浣Y(jié)構(gòu)從最初的集中式發(fā)展到純分布式再到目前的混和式架構(gòu),其端口特性也由最初的固定端口發(fā)展到隨機動態(tài)端口再到偽裝端口。所以,系統(tǒng)對應(yīng)用進行統(tǒng)計,主要是對P2P應(yīng)用的解析統(tǒng)計。
對P2P應(yīng)用的解析,首先是經(jīng)過以太網(wǎng)解析,獲取IP數(shù)據(jù)包,然后再通過網(wǎng)絡(luò)層和傳輸層解析,得到源目的IP地址、源目的端口、傳輸層協(xié)議類型和完整的payload信息。由于P2P協(xié)議一般動態(tài)使用非知名端口進行通信,因此僅僅根據(jù)端口來檢測P2P流是不準(zhǔn)確的,必須進行應(yīng)用層協(xié)議識別。在應(yīng)用層識別過程中,根據(jù)協(xié)議格式以及消息里的特征字符串,采用深度包檢測(DPI)方法來識別P2P業(yè)務(wù)。深度包檢測時采用模式匹配方法查找特征字符串。例如,可以根據(jù)特征字符串“0x13BitTorrentprotocol”檢測出Bit-Torrent協(xié)議數(shù)據(jù)包,根據(jù)特征字符串“Oxe319010000"檢測出eDonkey2000協(xié)議數(shù)據(jù)包。根據(jù)網(wǎng)絡(luò)應(yīng)用統(tǒng)計流量就是要按照這些特征字符串來進行流量匯聚。同時,解析P2P協(xié)議,也為按應(yīng)用進行流量控制提供了一種可靠的手段。
2.3帶寬分配機制
Linux內(nèi)核提供了強大的帶寬管理代碼,它主要使用規(guī)則過濾工具netfilter/ipbrs和路由工具包的流量控制命令TC相結(jié)合的方式來進行帶寬控制。
netfilter/ipbrsIP信息包過濾系統(tǒng)實際上是由兩個組件netfilter和ipbrs組成的。netfilter組件被稱為內(nèi)核空間(Kernel印ace),是內(nèi)核的一部分,主要由一些信息包過濾表組成,這些表中包含內(nèi)核用來控制信息包過濾處理的規(guī)則集。ipbrs組件則是一種規(guī)則過濾工具,它稱為用戶空間(UserSpace),主要用于插人、修改和除去信息包過濾表中的規(guī)則。
TC是Linux環(huán)境下一種功能強大的網(wǎng)絡(luò)流量控制軟件,它可以分為三個部分:隊列策略((,lueueDisci-pline)、分類器(Classifier)和過濾器(Filter)。隊列策略實質(zhì)是一些算法,控制如何處理進入隊列的報文。隊列策略算法主要有FIFO(先進先出),RED(隨機早期探測)、CBQ(類基隊列)和HTB層次令牌桶)等。過濾器按照過濾條件,將數(shù)據(jù)報進行分類處理。一般來說,數(shù)據(jù)報的處理步驟如下:隊列策略對數(shù)據(jù)報文進行調(diào)度,過濾器根據(jù)報文信息來決定把它放人到哪一個類中。在不同的類中,每個類也包含一個隊列策略,同樣進行調(diào)度、分類,將報文按照既定的規(guī)則排序發(fā)送出去。
3、系統(tǒng)實現(xiàn)
3.1捕包模塊
模塊采用pf_ring套接字的方式,用戶層通過調(diào)用socket(PF_RING,SOCK一RAW,tons(ETH_P_ALL))建立一個PF_RING類型的、ket,并返回一個套接字描述符。接著調(diào)用bind(fd,(structsockaddr*)&sa,sizeof(sa))將。cket綁定到本地IP和端口。sock-et和bind實際上分別調(diào)用了ring_create和ring_bind,而這兩個函數(shù)的作用就是為套接字創(chuàng)建一個環(huán)形緩沖區(qū),然后將其綁定到一個設(shè)備上。通過建立的PF_RING套接字就可以進行數(shù)據(jù)傳輸了。由于用戶空間采用了直接訪問內(nèi)核空間的環(huán)形緩沖區(qū)的方式,所以效率比原來的libpcap有了明顯提高。之所以稱之為環(huán)形緩沖區(qū)是因為在連續(xù)的內(nèi)存中有一個F1owSlotIn-fo結(jié)構(gòu),該結(jié)構(gòu)中包含了描述環(huán)狀緩存的基本信息,插人刪除都是循環(huán)操作的。當(dāng)有數(shù)據(jù)包被網(wǎng)卡接收時,通過add_skb_t。一ring來實現(xiàn)將sk_buff插人到環(huán)形緩沖區(qū),從skb一>data中讀取一個數(shù)據(jù)包頭結(jié)構(gòu),然后使用~cpy直接將insert_slot處內(nèi)存覆蓋。
3.2流量統(tǒng)計模塊
通過捕包模塊獲取數(shù)據(jù)包及其信息。通過IP地址,統(tǒng)計出各IP以及各IP網(wǎng)段的網(wǎng)絡(luò)數(shù)據(jù)流量,并統(tǒng)計出總的上行和下行流量。通過端口,統(tǒng)計出TCP/UDP源和目的端口的流量。通過應(yīng)用層payload字段的字符串特征符來統(tǒng)計相應(yīng)網(wǎng)絡(luò)應(yīng)用的流量。當(dāng)總體流量超過一定的限定值,而引起網(wǎng)絡(luò)擁塞時,根據(jù)具體情況,選擇以上流量統(tǒng)計中的一種作為依據(jù),動態(tài)地調(diào)用TC,對網(wǎng)絡(luò)流量進行控制。
3.3流量控制模塊
流量控制的基本步驟為:(1)針對網(wǎng)卡建立一個隊列;(2)取出數(shù)據(jù)包源/目的地址、源/目的端口、協(xié)議類型五元組信息;(3)通過DPI對到達的數(shù)據(jù)包進行識別;(4)根據(jù)用戶要求,使用netfilter/ipbrs匹配功能,為匹配到的數(shù)據(jù)包打上mark值;(5)在這個建立的隊列上再建立分類;(6)設(shè)置過濾器為每一分類建立選路,使數(shù)據(jù)流進人相應(yīng)隊列,并分配帶寬;(7)數(shù)據(jù)包調(diào)度。
以下是對BT流量控制〔12]進行設(shè)置的一個例子。
ipbrs設(shè)置:
ipbrs一APREROUTING一tmangle一ptcp一mBT一J一set一mark1//''''"}BT連接標(biāo)記為“1"
TC設(shè)置:
tcqdiscadddeveth0handle1:0roothtb//創(chuàng)建HTB的根隊列策略
tcclassadddeveth0parent1:0classid1:1htbrate95000kbpscell95000kbps//設(shè)置主類帶寬
tcclassadddeveth0parent1:1classid1:2htbratelOkbpsceil80kbpsprio3//建立一個BT子類,設(shè)置帶寬在l0k到80k之間
tcqdiscadddeveth0parent1:2handle1:2:1pfifo//對BT、子類建立FIFO隊列策略
tcfilteradddeveth0parent1:0protocolipprio100handle1fwclassid1:2//設(shè)置過濾器,將標(biāo)記為“1”的BT包送到1:2這個類中
采用HTB規(guī)則為以太網(wǎng)卡綁定一個主隊列,并創(chuàng)建根分類,然后可以選擇通過IP地址、端口號或網(wǎng)絡(luò)應(yīng)用分出子類,之后結(jié)合ipbrs的mark值進行過濾,數(shù)據(jù)流進人相應(yīng)分類的隊列。但是為了保證網(wǎng)絡(luò)用戶的基本使用,系統(tǒng)對一些常規(guī)的業(yè)務(wù)直接輸出,而不作控制。流量控制流程圖如圖2所示
4、DD一wRT的流量控制功能定制
定制步驟如下:
1)下載固件解壓和壓縮工具的源代碼fimiware_moc}一tools.tar.gz,解壓并編譯這個工具;
2)下載固件dd一wrt.v24_std_generic.bin,使用firmware_tools解壓,生成目錄dd-wrt;mod
$/extract_firmware.shdd一wrt.v24_std-generic.bindd一wrt/
3)修改dd一wrt固件,將流量控制程序添加進dd一wrt目錄中;
在目錄dd-wrt中有兩個目錄文件,一個是im-age_parts,一個是~tfs。其中image_parts中保存的是固件的引導(dǎo)內(nèi)核,rootfs中保存的是固件中的文件。直接在roots中添加流量控制程序。
4)重新打包dd一wrt固件,將其保存到new_ddwrt中;
$./build_firmware.shnew_ddwrt/dd一wrt/
5)將定制好的DD一WRT固件下載到路由器中,刷新路由器固件;
6)重新啟動路由器就可以實現(xiàn)路由器的新功能了。
在實驗中,根據(jù)流量統(tǒng)計數(shù)據(jù),分別畫出控制前和控制后的總體流量、P2P流量和HTTP流量曲線圖。
根據(jù)控制前后圖像對比,系統(tǒng)有效地控制了網(wǎng)絡(luò)數(shù)據(jù)流量,并且保證了常規(guī)數(shù)據(jù)流的通信。
6、結(jié)束語
本系統(tǒng)通過對DD一WRT的重新定制,添加了流量統(tǒng)計和流量控制功能。系統(tǒng)的主要創(chuàng)新點在于:添加了對網(wǎng)絡(luò)應(yīng)用流量進行統(tǒng)計和控制的功能,這在一定程度上有效地控制了異常流量的發(fā)生,并且保證了常規(guī)流量的正常通信。