摘 要: 網(wǎng)絡數(shù)據(jù)分類是網(wǎng)絡應用的一個基礎功能,用于正確解析網(wǎng)絡數(shù)據(jù)的類型和詳細內容,提供給網(wǎng)絡應用軟件進行后續(xù)處理。本文設計了一個通用化的網(wǎng)絡數(shù)據(jù)分類方法,具有較強的適應性,可以完成多種格式的網(wǎng)絡數(shù)據(jù)幀的分類處理。
關鍵詞: 網(wǎng)絡數(shù)據(jù)分類 通用化 設計
1.引言
目前,高速以太網(wǎng)等計算機網(wǎng)絡技術得到了廣泛應用。通過以太網(wǎng),各種設備之間的互聯(lián)和數(shù)據(jù)交換變得簡單、快捷、可靠,非常適合于解決設備間的兼容和互操作問題。[1]以太網(wǎng)一個主要的特點是簡單,在實踐中,簡單性帶來了可靠、廉價、易于維護等特性,因此,以太網(wǎng)具有強大的生命力。
以太網(wǎng)可以在同一總線上運行不同的傳輸協(xié)議,從而能夠建立公共網(wǎng)絡平臺或基礎架構。TCP/IP協(xié)議是最常見的網(wǎng)絡互連協(xié)議,通常被定義為七層網(wǎng)絡模型,用戶可以根據(jù)實際需要,在應用層自定義數(shù)據(jù)幀格式。[2]通過自定義數(shù)據(jù)幀,用戶可以方便地擴展數(shù)據(jù)通信功能,或者加強數(shù)據(jù)通信控制,滿足不同的業(yè)務需求。這為網(wǎng)絡應用帶來了極大的靈活性,但同時也帶來了一些不便。由于網(wǎng)絡上傳輸?shù)臄?shù)據(jù)多種多樣,因此用戶需要將接收到的網(wǎng)絡數(shù)據(jù)進行分類,不同的業(yè)務應用使用不同的數(shù)據(jù)信息,這樣才不會產(chǎn)生混淆,避免后續(xù)的數(shù)據(jù)處理出現(xiàn)錯誤。通常,網(wǎng)絡數(shù)據(jù)分類由網(wǎng)絡應用軟件完成,由軟件開發(fā)人員根據(jù)規(guī)定的數(shù)據(jù)幀格式編制相應的數(shù)據(jù)分類模塊,實現(xiàn)網(wǎng)絡數(shù)據(jù)的分類。隨著自定義數(shù)據(jù)幀格式的增多,需要編制的數(shù)據(jù)分類模塊也不斷增加,大大降低了軟件開發(fā)的效率。
網(wǎng)絡數(shù)據(jù)分類是網(wǎng)絡應用的一個基礎功能,通用化的網(wǎng)絡數(shù)據(jù)分類方法可以提高網(wǎng)絡應用開發(fā)的效率,具有較高的實用價值。本文分析了現(xiàn)有網(wǎng)絡數(shù)據(jù)分類方法的共同點,設計了一個具有較強通用性的分類方法,可以在盡可能小的改動下,實現(xiàn)各種網(wǎng)絡數(shù)據(jù)的分類。
2.接收網(wǎng)絡數(shù)據(jù)的場景類型
在實際應用中,網(wǎng)絡設備從網(wǎng)絡上接收數(shù)據(jù)幀,然后進行處理。雖然網(wǎng)絡數(shù)據(jù)的格式多種多樣,但網(wǎng)絡設備接收網(wǎng)絡數(shù)據(jù)幀總可以歸納為以下三個場景。
2.1網(wǎng)絡上所有設備都只發(fā)送一種格式的數(shù)據(jù)幀。這種情況下,數(shù)據(jù)源與數(shù)據(jù)幀的類型是一一對應的,知道了該數(shù)據(jù)幀是某個設備發(fā)送來的,即明確數(shù)據(jù)幀的來源,就可以知道該數(shù)據(jù)幀的類型。這個場景下的網(wǎng)絡數(shù)據(jù)分類就是區(qū)分是“XX設備發(fā)送來的數(shù)據(jù)”。
2.2網(wǎng)絡上所有設備發(fā)送多種格式的數(shù)據(jù)幀且?guī)愋痛a不重復。通常,在幀格式中會定義一個幀類型碼,對所有類型的數(shù)據(jù)幀進行編碼,這樣,通過幀類型碼就可以區(qū)分各個類型的數(shù)據(jù)幀。如果幀類型碼是統(tǒng)一編碼,就可以保證所有數(shù)據(jù)幀在幀類型碼上不會重復。這種情況下,通過數(shù)據(jù)源不足以區(qū)分開各種類型的數(shù)據(jù)幀,但可以通過幀類型碼區(qū)分各種數(shù)據(jù)幀。這個場景下的網(wǎng)絡數(shù)據(jù)分類就是區(qū)分是“YY類型的數(shù)據(jù)”。
2.3網(wǎng)絡上所有設備發(fā)送多種格式的數(shù)據(jù)幀且?guī)愋痛a有重復。在某些應用中,幀類型碼的編碼與設備是相互獨立的,不同的設備可以發(fā)送同一幀類型碼的數(shù)據(jù)幀。在這種情況下,單獨考慮數(shù)據(jù)源或幀類型碼都不能準確區(qū)分數(shù)據(jù)幀的類型,需要綜合考慮數(shù)據(jù)源及幀類型碼,才能正確區(qū)分數(shù)據(jù)幀。這個場景下的網(wǎng)絡數(shù)據(jù)分類就是區(qū)分是“XX設備發(fā)送的YY類型的數(shù)據(jù)”。
3.網(wǎng)絡數(shù)據(jù)分類的方法及要素
3.1網(wǎng)絡數(shù)據(jù)分類的方法
對應于上述三個接收網(wǎng)絡數(shù)據(jù)幀的場景,可以采用如下方法進行網(wǎng)絡數(shù)據(jù)分類。
3.1.1源IP分類:用于第一個場景下的數(shù)據(jù)分類,區(qū)分是“XX設備發(fā)送來的數(shù)據(jù)”。在網(wǎng)絡上,網(wǎng)絡設備通常用設備的IP地址標識,源IP即表示了網(wǎng)絡數(shù)據(jù)幀的來源。明確了數(shù)據(jù)源IP,就可以明確接收的數(shù)據(jù)幀是從哪個設備發(fā)送來的。
3.1.2幀ID分類:用于第二個場景下的數(shù)據(jù)分類,區(qū)分是“YY類型的數(shù)據(jù)”。幀類型碼通常簡稱為幀ID,如果所有的幀ID是統(tǒng)一編碼的,編碼值沒有重復,則幀ID與數(shù)據(jù)幀類型一一對應,采用幀ID即可區(qū)分所有數(shù)據(jù)類型。幀ID是數(shù)據(jù)幀中的一項,獲取幀ID需要對網(wǎng)絡數(shù)據(jù)幀進行“解幀”,也就是在數(shù)據(jù)幀中找到幀ID所在位置,并獲取其值。
3.1.3混合分類:用于第三個場景下的數(shù)據(jù)分類,綜合使用源IP和幀ID,區(qū)分是“XX設備發(fā)送的YY類型數(shù)據(jù)”。
3.2網(wǎng)絡數(shù)據(jù)分類的要素
網(wǎng)絡數(shù)據(jù)幀格式是網(wǎng)絡數(shù)據(jù)分類的基礎和依據(jù)。圖1給出一個自定義網(wǎng)絡數(shù)據(jù)幀的格式,下文將以此為例進行描述。該幀格式基于TCP/IP協(xié)議進行定義,關于TCP/IP協(xié)議的論著很多,本文不再贅述。
在上圖中,用戶關心的是應用層數(shù)據(jù),可以根據(jù)需要自行定義應用層數(shù)據(jù)的格式。圖中給出了格式定義的一個實例,數(shù)據(jù)幀由多個數(shù)據(jù)子幀組成,每個子幀都遵循相同的格式定義,其各個組成項目的作用如表1所示。
上述三種網(wǎng)絡數(shù)據(jù)分類方法的目的,都是從數(shù)據(jù)幀中獲取源地址、幀ID等信息,從而確定數(shù)據(jù)幀的類型。不難發(fā)現(xiàn),這三種方法中都有幾個不可或缺的要素。
3.2.1源IP:即數(shù)據(jù)幀的源IP地址,表示該數(shù)據(jù)幀是哪個設備發(fā)送的。源IP主要用在第一和第三個場景中,明確是“XX設備”。
3.2.2幀ID:即數(shù)據(jù)幀的幀類型碼,主要用在第二和第三個場景中,明確數(shù)據(jù)幀的類型,即明確是“YY類型的數(shù)據(jù)”。
3.2.3應用層數(shù)據(jù)的幀結構信息:表示應用層數(shù)據(jù)格式的定義,說明“總幀長”、“幀ID”、“幀長度”、“有效數(shù)據(jù)”等項目的位置、數(shù)據(jù)類型、字節(jié)數(shù)等信息。在解幀過程中,可以根據(jù)該幀結構信息,定位到數(shù)據(jù)幀的各個項目,并獲取項目的值。
4.網(wǎng)絡數(shù)據(jù)解幀的通用方法
在網(wǎng)絡數(shù)據(jù)接收的第二和第三個場景中,都需要獲取幀ID才能完成數(shù)據(jù)的分類。獲取幀ID通過對網(wǎng)絡數(shù)據(jù)幀進行“解幀”操作完成。解幀就是按照數(shù)據(jù)幀格式定義,在數(shù)據(jù)幀中的相應位置找到各個項目,獲取項目的值,或解析項目內容。
網(wǎng)絡數(shù)據(jù)幀格式多種多樣,解幀的關鍵在于正確解析數(shù)據(jù)幀頭。數(shù)據(jù)幀頭指有效數(shù)據(jù)之外的數(shù)據(jù)信息,通常包含了各種輔助信息,用于幫助控制通信過程和解析數(shù)據(jù)內容。圖1中,“幀類型碼”、“日期”、“時間”、“幀長度”、“保留”這幾個項目組成了數(shù)據(jù)幀頭。幀頭中包含了多個信息,解幀時必須考慮三個因素:第一是幀類型碼,這是判別幀類型的重要標識,知道了幀類型碼,就可以判斷該數(shù)據(jù)幀是否需要;第二是幀長度(包括總幀長和各個子幀長),這是控制解幀操作結束的標準,知道了幀長度,就可以在解幀到幀尾時停止解幀操作,防止誤操作緩沖區(qū);第三是有效數(shù)據(jù)的位置,以便對有效的數(shù)據(jù)進行處理。
無論網(wǎng)絡數(shù)據(jù)幀格式如何變化,只要知道了上述信息,就可以正確解幀,獲取幀ID及有效數(shù)據(jù)。基于這種思路的解幀方法與幀格式定義沒有關系,可以作為一種通用的解幀算法。圖2給出了網(wǎng)絡數(shù)據(jù)解幀通用方法的處理流程。
5.網(wǎng)絡數(shù)據(jù)分類的通用方法
當網(wǎng)絡設備接收網(wǎng)絡數(shù)據(jù)幀時,可以同時獲取該數(shù)據(jù)幀的源IP,從而知道發(fā)送該數(shù)據(jù)幀的源設備。每個源設備發(fā)送的數(shù)據(jù)幀格式是預先約定的,按照其幀結構信息,采用上文所述的通用化解幀方法,可以獲取幀ID,從而確定數(shù)據(jù)幀的類型。也就是說,網(wǎng)絡數(shù)據(jù)分類的要素都可以獲取。在此基礎上,再對照接收網(wǎng)絡數(shù)據(jù)的場景,采用相應的數(shù)據(jù)分類方法,即可完成網(wǎng)絡數(shù)據(jù)的分類。
圖3描述了網(wǎng)絡數(shù)據(jù)分類的通用化處理流程。該處理流程只需要知道數(shù)據(jù)幀的源IP,以及幀ID、幀長度、有效數(shù)據(jù)的格式信息,可以適應多種數(shù)據(jù)幀格式定義,完成數(shù)據(jù)幀的分類操作,具有較強的通用性。
6.結語
本文概括了網(wǎng)絡設備接收網(wǎng)絡數(shù)據(jù)的三個典型場景,分析了在三個場景中進行數(shù)據(jù)分類不可缺少的共同要素。在此基礎上,設計了三種網(wǎng)絡數(shù)據(jù)分類的方法,分別用于相應的場景。對于數(shù)據(jù)分類過程中涉及的解幀操作,設計了通用化的網(wǎng)絡數(shù)據(jù)解幀方法,其關鍵在于正確的解析網(wǎng)絡數(shù)據(jù)幀頭。
最后,本文綜合運用三種網(wǎng)絡數(shù)據(jù)分類方法,設計了通用化的數(shù)據(jù)分類算法。該算法可以在統(tǒng)一的處理流程中,適應大部分數(shù)據(jù)幀格式定義,完成各種網(wǎng)絡數(shù)據(jù)的分類,具有較強的通用性。這種網(wǎng)絡數(shù)據(jù)分類算法應用在我開發(fā)的多個軟件中,不需修改軟件代碼,即可對不同格式的網(wǎng)絡數(shù)據(jù)幀進行準確分類,提高了軟件開發(fā)的效率,取得了較好的實用效果。
由于時間關系,本文只是對網(wǎng)絡數(shù)據(jù)分類的方法作了初步探討,很多詳細的技術問題還需要在以后深入研究和驗證,文中錯誤之處,敬請批評指正。
參考文獻:
[1]劉曉輝等.以太網(wǎng)組網(wǎng)技術大全.清華大學出版社,2001.
[2]Andrew S. Tanenbaum 著.潘愛民譯.計算機網(wǎng)絡(4). 清華大學出版社,2004.