基于Winpcap的網絡流媒體識別算法研究與實現
隨著計算機網絡、視頻壓縮等關鍵技術的快速發展,網絡流媒體技術目前已成為繼文字和圖片之后,互聯網信息傳播的主要形式。通過網絡流媒體技術,用戶可以方便地存取、查閱和播放網絡上的流媒體數據。如何從海量的網絡數據中快速發現流媒體數據,是進行網絡視頻服務質量監測、網絡流量統計、網絡視頻用戶行為分析及視頻內容監管等服務的前提和基礎。
網絡流媒體服務為應用層服務,其數據傳輸主要采用專有應用層協議RTP/RTCP。因此,對網絡視頻數據流的發現首先是識別應用層協議。針對應用層協議的識別,文獻提出了一種以協議中出現頻率最高的字段作為特征串來識別協議的方法,且采用一個特征串來標識一種協議。文獻提出了基于簽名字串的方法來識別應用層協議,其主要針對的是P2P協議的范圍,且需要對整個報文通過匹配多個特征串來識別一種P2P協議,時間效率偏低。文獻提出了基于先分類后分組的識別應用層協議及流量的方法,但此方法的本質還是基于某些固定端口的,若對于通過隨機選擇端口而實現的應用層協議,此方法就缺乏準確性和靈活性。
本文通過分析網絡流媒體交互過程的特征,以應用層傳輸協議對應的關鍵特征字串為判斷依據,設計了一種基于Winpcap的網絡視頻流識別算法,實現了對網絡流媒體的發現,并通過實驗對本文設計的算法性能進行了分析和驗證。
1 Winpeap簡介
Winpcap是由伯克利分組捕獲庫派生而來的分組捕獲庫,它在Windows操作平臺上實現對底層包的截取過濾。
Winpcap是BPF模型和Libpcap函數庫在Windows平臺下網絡數據包捕獲和網絡狀態分析的一種體系結構,這個體系結構是由一個核心的包過濾驅動程序,一個底層的動態連接庫Packet.dll和一個高層的獨立于系統的函數庫Libpcap組成。底層的包捕獲驅動程序實際為一個協議網絡驅動程序,通過對NDIS中函數的調用為Windows 95/98/NT/2000提供一類似于UNIX系統下Berkeley Packet Filter的捕獲和發送原始數據包的能力。Packet.dll是對這個BPF驅動程序進行訪問的API接口,同時它有一套符合Libpcap接口(UNIX下的捕獲函數庫)的函數庫。
Winpcap包括三部分:第一個模塊NPF(NetgroupPacket Filter),是一個虛擬設備驅動程序文件。它的功能是過濾數據包,并把這些數據包原封不動地傳給用戶態模塊,這個過程中包括了一些操作系統特有的代碼。第二個模塊Packet.dll為Win32平臺提供了一個公共的接口。不同版本的Windows系統都有自己的內核模塊和用戶層模塊。Packet.dll用于解決這些不同。調用Packet.dll的程序可以運行在不同版本的windows平臺上,而無需重新編譯。第三個模塊wpcap.dll是不依賴于操作系統的,它提供了更加高層、抽象的函數。
Winpcap提供了一套標準的編程接口,與libpcap兼容,可使得原來許多UNIX平臺下的網絡分析工具快速移植過來便于開發各種網絡分析工具,充分考慮了各種性能和效率的優化,包括對于NPF內核層次上的過濾器支持,支持內核態的統計模式,提供了發送數據包的能力。
2 應用層協議RTP/RTCP
RTP/RFCP是一種應用型的傳輸層協議,它沒有連接的概念,既可以建立在面向連接的底層協議上,又可以建立在面向無連接的底層協議上,因此RTP對傳輸層是獨立的。由于網絡流媒體的傳輸實時性要求較高,UDP的傳輸延時低于TCP,能與音頻和視頻流很好地匹配,所以,在實際應用中,RFP/RTCP/UDP是流媒體傳輸的主要協議,其結構如圖l所示。
評論