鄭航飛,張顯峰,周成龍
(1.武漢郵電科學研究院,湖北武漢 430073;2.烽火通信科技股份有限公司,湖北武漢 430073)
隨著通信技術(shù)的發(fā)展,網(wǎng)絡已經(jīng)自然而深刻地融入人類的日常生活和工作。人們希望借助于網(wǎng)絡,隨時隨地通過語音、圖像以及視頻等多種方式進行靈活通信。隨著網(wǎng)絡的普及性越來越高,網(wǎng)絡的用戶群體也在逐漸擴大,這些用戶群體對網(wǎng)絡使用過程中的滿意度是很重要的。因此對網(wǎng)絡中的數(shù)據(jù)流量進行分析也成了至關(guān)重要的一個環(huán)節(jié)。
傳統(tǒng)的網(wǎng)絡流量分類都是通過傳輸層的端口號進行區(qū)分不同的業(yè)務,但是隨著網(wǎng)絡的不斷發(fā)展,網(wǎng)絡中的業(yè)務急速增長,傳統(tǒng)的網(wǎng)絡流量分類已經(jīng)滿足不了移動互聯(lián)網(wǎng)中大量業(yè)務的解析,進而有了深度報文檢測技術(shù),這種技術(shù)能夠更深層次地對報文進行解析,從而能夠更精確地對網(wǎng)絡中的數(shù)據(jù)流量進行識別分類。但是,深度報文分析能做到的只是對網(wǎng)絡流量進行識別,無法對識別到的數(shù)據(jù)流量進行分析計算。
該文基于PON 接入系統(tǒng),提出了一種網(wǎng)絡質(zhì)差分析方法,該方法與傳統(tǒng)報文檢測方法不同的是,在網(wǎng)絡流量經(jīng)過OLT(光線路終端)時,對現(xiàn)網(wǎng)中的網(wǎng)絡流量進行動態(tài)分析,通過特征庫將網(wǎng)絡中的流量分為視頻流量、線上辦公流量、游戲流量、在線教育流量等,進一步對這些數(shù)據(jù)流量進行計算,從而精確地得出相關(guān)的網(wǎng)絡問題[1-4]。
質(zhì)差分析方法架構(gòu)圖如圖1 所示,系統(tǒng)部署在OLT 上,用戶上網(wǎng)的網(wǎng)絡流量會經(jīng)過OLT 的主控盤交換芯片的鏡像功能進行鏡像,將所有的網(wǎng)絡流量鏡像到網(wǎng)絡資源板卡。
圖1 質(zhì)差分析方法架構(gòu)設計圖
在網(wǎng)絡質(zhì)差分析設備的底層收包,采用了DPDK(Data Plane Development Kit)架構(gòu),DPDK 的主要職責是管理網(wǎng)卡,將網(wǎng)卡收到的數(shù)據(jù)包進行處理。在傳統(tǒng)的網(wǎng)絡協(xié)議棧中,網(wǎng)絡報文會通過網(wǎng)卡接收和發(fā)送,傳統(tǒng)的報文接收發(fā)送都需要向CPU 發(fā)送中斷,而且每次中斷都需要保存、恢復處理器狀態(tài),同時運行中斷程序,這樣的操作會消耗大量的時間,對于這樣數(shù)據(jù)量大、高性能的方法,處理速度將會成為整個方法的性能瓶頸。因此,在底層收包的處理上選用了DPDK,其采用輪詢模式驅(qū)動的方式直接操作網(wǎng)卡的接收和發(fā)送隊列,將報文直接拷貝到用戶內(nèi)存空間[5-9]。
在DPDK 收包處理之后,原始的數(shù)據(jù)報文會進入到網(wǎng)絡流量質(zhì)差分析方法中進行深度報文分析以及相關(guān)網(wǎng)絡指標的計算,在程序運行的過程中,會將計算的結(jié)果上報到主控盤的CPU,然后輸出計算的結(jié)果。
方法模塊圖如圖2 所示,首先在現(xiàn)網(wǎng)中獲取到一些應用的域名,然后將這些域名手動配置進特征庫,在DPDK 做了收包處理以后,首先會結(jié)合配置的特征庫對該數(shù)據(jù)流進行識別,在將數(shù)據(jù)流進行了初步識別之后,將收到的數(shù)據(jù)包進行深度報文解析,根據(jù)不同報文的端口、標識號不同等特點,進行不同的解析。解析部分分為DNS 報文解析以及MAC 地址同步。在將數(shù)據(jù)報文深度解析得到需要的數(shù)據(jù)之后,就進入到最重要的網(wǎng)絡KPI計算部分,該部分用到了一些現(xiàn)階段比較優(yōu)秀的算法,根據(jù)特征庫配置的應用來進行計算[10-11],然后將分析計算出來的數(shù)據(jù)存放在共享內(nèi)存中,最后將計算結(jié)果上報到主控盤。
2.1.1 MAC地址同步
整個網(wǎng)絡流量分析方法部署在OLT,OLT 的主控盤會定時向網(wǎng)絡流量分析資源板卡發(fā)送MAC 地址同步報文,這種報文采用的是UDP 報文格式。在OLT 上進行組包時,只打包了OLT 下所掛的ONU(光網(wǎng)絡單元)的基本信息,如OLT 的IP 地址,ONU 的MAC地址,所屬的OLT編號、槽位號以及VLAN號等。
在DPDK 收包處理以后,報文解析模塊會收到原始報文,在經(jīng)過深度報文分析,可以解析獲得OLT封裝在報文中的ONU 信息。
2.1.2 DNS解析
DNS 解析是很重要的一個部分,在這個部分,DNS 解析模塊同樣能收到網(wǎng)絡中的原始報文,在這個模塊會根據(jù)DNS 報文的特點,逐層解包。根據(jù)數(shù)據(jù)報文的格式,在收到報文后,先將報文中的以太頭剝離,獲取到數(shù)據(jù)報文中的源Mac 地址和目的Mac地址,同時還將獲取數(shù)據(jù)包的類型。DNS 數(shù)據(jù)報文屬于UDP 數(shù)據(jù)報文的一種,因此在進行DNS 解析時,會優(yōu)先過濾掉其他類型的報文,提高后續(xù)的處理效率。
在經(jīng)過多次剝離報文后,DNS 數(shù)據(jù)報文中攜帶的DNS 信息會暴露出來,然后將報文中的數(shù)據(jù)解析出來。主要需要獲取的指標有該DNS 交互的ONU的MAC 地址、域名、IP 地址列表以及響應時間。在獲取到ONU 的MAC 地址后,根據(jù)上述的MAC 地址同步獲取到ONU 信息,并更新DNS 信息,將DNS 信息與對應的ONU 信息綁定。完成了DNS 解析后,將解析所獲取的IP 地址列表回填到特征庫。
與傳統(tǒng)的深度報文檢測不同的是流處理,對網(wǎng)絡指標進行計算。流處理階段將計算現(xiàn)網(wǎng)中的用戶在對不同的應用進行訪問時,所產(chǎn)生的不同的丟包、時延、抖動等指標。
在這個模塊中,根據(jù)不同的協(xié)議類型在網(wǎng)絡中傳輸?shù)奶攸c,分別計算丟包、時延、抖動。在收到數(shù)據(jù)報文以后,會初步將報文分為TCP、UDP、ICMP 三種報文。在分包處理時,由于TCP 傳輸會進行三次握手,并且有報文順序等特點,所以這里只對正常報文之間的時延以及抖動進行計算,將其他的重傳報文、亂序報文不作計算時延抖動的處理,而這些重傳亂序報文將會進行丟包計算的處理。而對所有的UDP、ICMP 報文都只計算時延與抖動[12]。
2.2.1 時延、抖動計算
在計算算法方面,三種報文對于時延抖動的計算采用的是一種計算方法。主要計算的指標有平均往返時延(rtt_mean)、平均往返時延抖動(rtt_jitter)以及TCP 數(shù)據(jù)流的超時重傳時間(Retrans_rto)。當數(shù)據(jù)經(jīng)過報文解析的數(shù)據(jù)報文進入到流處理模塊時,首先在提前創(chuàng)建好的數(shù)據(jù)流中查詢這個數(shù)據(jù)報文的上一個符合要求的數(shù)據(jù)報文進行計算,這里先計算出兩個報文之間的采樣時間,即往返時間(SampleRTT),如果在數(shù)據(jù)流中沒有找到符合要求的數(shù)據(jù)報文,那么當前處理的這個數(shù)據(jù)報文將繼續(xù)掛在數(shù)據(jù)流尾部供下面到來的數(shù)據(jù)報文進行計算。
計算表達式如下[13]:
1)平均往返時延:
2)平均往返時延抖動:
3)采用滾動迭代的方法對兩種參數(shù)進行計算,初始時,rtt_mean=SampleRTT,后續(xù)每計算出一次SampleRTT 就更新得出一次rtt_mean,直到統(tǒng)計周期結(jié)束,得出最終rtt_mean。對于抖動,同樣也是采用滾動迭代的方式進行計算,初始時,rtt_jitter=1/2 SampleRTT,后續(xù)每計算出一次SampleRTT 就更新一次,直到最終計算出rtt_jitter。
對于TCP 數(shù)據(jù)報文,還會存在重傳超時時間,對于重傳超時時間,計算表達式如下:
根據(jù)RFC6289,并經(jīng)過多次測試計算,在參數(shù)α取1/8,β取1/4,μ取1,γ取4 時,計算結(jié)果最佳。
2.2.2 丟包計算
從數(shù)據(jù)報文的特點出發(fā),主要計算TCP 數(shù)據(jù)報文的丟包率。根據(jù)現(xiàn)網(wǎng)中數(shù)據(jù)流的方向可以初步將網(wǎng)絡流量分成上下行,如果收到的數(shù)據(jù)報文的目的MAC 地址為網(wǎng)絡側(cè)的MAC 地址,則判斷為上行數(shù)據(jù)報文,如果收到的數(shù)據(jù)報文源MAC 地址為網(wǎng)絡側(cè)的MAC 地址,則判斷為下行數(shù)據(jù)報文。
其次,對于網(wǎng)絡故障定位功能來說,僅做上下行判斷的準確性遠遠不夠,因此,除了判斷上下行之外,還對丟包做了更加精確的定位處理。以監(jiān)測點為基準,除了將數(shù)據(jù)報文分為上下行外,還在上下行的基礎(chǔ)上將數(shù)據(jù)報文分為網(wǎng)絡側(cè)和用戶側(cè),網(wǎng)絡側(cè)數(shù)據(jù)報文即監(jiān)測點到服務器之間的數(shù)據(jù)報文,用戶側(cè)數(shù)據(jù)報文即監(jiān)測點到客戶端之間的數(shù)據(jù)報文。從而可以將數(shù)據(jù)報文更精確地分為上行用戶側(cè)數(shù)據(jù)報文、上行網(wǎng)絡側(cè)數(shù)據(jù)報文、下行用戶側(cè)數(shù)據(jù)報文、下行網(wǎng)絡側(cè)數(shù)據(jù)報文。因此,基于監(jiān)測點,丟包可以分為上行用戶側(cè)丟包、上行網(wǎng)絡側(cè)丟包、下行用戶側(cè)丟包、下行網(wǎng)絡側(cè)丟包。
下行數(shù)據(jù)丟包分為下行網(wǎng)絡側(cè)丟包和下行用戶側(cè)丟包,即發(fā)送端為Client 端時,發(fā)送的報文丟失,為下行數(shù)據(jù)丟包。下行網(wǎng)絡側(cè)丟包如圖3 所示,當1 號報文發(fā)生下行網(wǎng)絡側(cè)丟包時,User 端會在未收到1號報文的情況下,會持續(xù)向服務器發(fā)送0 號報文的Ack 報文,Client 端在持續(xù)收到三個0 號報文的Ack報文后,重新發(fā)送1 號數(shù)據(jù)報文,此時,設置的監(jiān)測點上就會檢測到1 號報文的重傳報文。下行用戶側(cè)丟包如圖4 所示,1 號報文在監(jiān)測點與User 端發(fā)生了丟失,此時監(jiān)測點能檢測到一次1 號數(shù)據(jù)報文,但是User 端還是會向Client 端發(fā)送0 號數(shù)據(jù)報文的Ack報文,Client 繼而重發(fā)1 號數(shù)據(jù)報文,那么在監(jiān)測點就能再次檢測到1 號數(shù)據(jù)報文。
同理,上行數(shù)據(jù)丟包也分為上行網(wǎng)絡側(cè)丟包和上行用戶側(cè)丟包,即發(fā)送端為User 端時,發(fā)送的報文丟失,為下行數(shù)據(jù)丟包[14-15]。
根據(jù)TCP 數(shù)據(jù)報文存在IP 首部ID 號(ID(i))、TCP報文首部序號(seq(i))以及超時重傳,基于方法中對于各種丟包的定義,在判定TCP 報文是否發(fā)生丟包之前,先定義如下表達式[16]:
①seq(i) 圖3 下行網(wǎng)絡側(cè)丟包 圖4 下行用戶側(cè)丟包 ②seq(i)=seq(j) ③T(i,j)>Retrans_rto(Retrans_rto 為上述重傳超時時間,T(i,j)為兩個數(shù)據(jù)報文之間的時間間隔) ④ID(i)-ID(j)>=3(ID為對應報文IP 首部的ID號) 如果當前處理的數(shù)據(jù)報文使表達式①and{③or④}為真時,那么對于上行數(shù)據(jù)報文來說就是產(chǎn)生上行用戶側(cè)丟包,對于下行數(shù)據(jù)報文來說就是產(chǎn)生了下行網(wǎng)絡側(cè)丟包。如果當前處理的數(shù)據(jù)報文使表達式②and{③or④}為真時,對于上行就是產(chǎn)生上行網(wǎng)絡側(cè)丟包,對于下行就是產(chǎn)生下行用戶側(cè)丟包。 實驗環(huán)境主要依賴于OLT,實驗拓撲環(huán)境如圖5 所示,首先搭建模擬現(xiàn)網(wǎng)中的上網(wǎng)環(huán)境,在網(wǎng)關(guān)下面連接OLT,在OLT 下面連接多個ONU,然后在每個ONU 下面掛多個終端進行上網(wǎng),產(chǎn)生上網(wǎng)流量,然后將檢測點設置到OLT 上,使用OLT 的鏡像功能,將OLT 正常的上網(wǎng)流量全部鏡像到質(zhì)差分析系統(tǒng)上,然后DPDK 進行收包處理,之后開始對這些數(shù)據(jù)流量進行分析。 圖5 實驗拓撲環(huán)境 網(wǎng)絡流量質(zhì)差分析方法基于上述網(wǎng)絡拓撲進行了實際的測試,在對數(shù)據(jù)流量進行了初步的識別之后,統(tǒng)計并列舉出訪問域名的一些識別信息,如圖6所示。 結(jié)果顯示,該網(wǎng)絡流量質(zhì)差分析方法能將從OLT 經(jīng)過的網(wǎng)絡流量進行識別分類,每個域名會對應多個IP 地址,同時這種方法可以統(tǒng)計訪問該域名的次數(shù)以及成功的次數(shù)與未響應的次數(shù),然后對每一種應用的數(shù)據(jù)流進行時延、抖動計算。并對這些流量進行TCP 的丟包、重傳的計算,部分結(jié)果數(shù)據(jù)如圖7 所示。 在將數(shù)據(jù)流初步識別之后,將每一種應用的數(shù)據(jù)流進行分類,然后根據(jù)分類后的數(shù)據(jù)流進行計算,最后得出訪問不同的應用時,網(wǎng)絡出現(xiàn)的丟包、時延、抖動等參數(shù)指標。 基于PON 接入系統(tǒng),該文提出了一種網(wǎng)絡流量質(zhì)差分析方法,對現(xiàn)網(wǎng)中的數(shù)據(jù)流量進行質(zhì)差分析,能將網(wǎng)絡流量根據(jù)業(yè)務類型進行分類,該方法在對數(shù)據(jù)報文識別分類的基礎(chǔ)上能計算出這些數(shù)據(jù)流量的時延、抖動、丟包等網(wǎng)絡性能參數(shù),并能定位到出現(xiàn)網(wǎng)絡故障的地方。同時用到了幾種參數(shù)的計算算法,這些算法能夠很好地解決在計算時延、抖動、丟包等方面的問題。 盡管該方法能夠識別出現(xiàn)網(wǎng)中大部分類型的流量,但是還存在許多不足,比如目前只支持IPv4 數(shù)據(jù)報文的解析與識別,暫不支持IPv6 的數(shù)據(jù)報文進行識別。同時,參數(shù)計算準確率還有待提高。在后續(xù),將針對IPv6 業(yè)務進行完善,并改進計算算法,以提高參數(shù)計算的準確率。 圖6 流量識別信息截圖(部分) 圖7 流量KPI計算結(jié)果截圖(部分)3 實驗結(jié)果分析
3.1 實驗拓撲環(huán)境
3.2 實驗結(jié)果數(shù)據(jù)分析
4 結(jié)束語