0 引言
隨著計(jì)算機(jī)網(wǎng)絡(luò),、視頻壓縮等關(guān)鍵技術(shù)的快速發(fā)展,,網(wǎng)絡(luò)流媒體技術(shù)目前已成為繼文字和圖片之后,,互聯(lián)網(wǎng)信息傳播的主要形式,。通過網(wǎng)絡(luò)流媒體技術(shù),用戶可以方便地存取,、查閱和播放網(wǎng)絡(luò)上的流媒體數(shù)據(jù),。如何從海量的網(wǎng)絡(luò)數(shù)據(jù)中快速發(fā)現(xiàn)流媒體數(shù)據(jù),是進(jìn)行網(wǎng)絡(luò)視頻服務(wù)質(zhì)量監(jiān)測,、網(wǎng)絡(luò)流量統(tǒng)計(jì),、網(wǎng)絡(luò)視頻用戶行為分析及視頻內(nèi)容監(jiān)管等服務(wù)的前提和基礎(chǔ),。
網(wǎng)絡(luò)流媒體服務(wù)為應(yīng)用層服務(wù),,其數(shù)據(jù)傳輸主要采用專有應(yīng)用層協(xié)議RTP/RTCP。因此,,對網(wǎng)絡(luò)視頻數(shù)據(jù)流的發(fā)現(xiàn)首先是識別應(yīng)用層協(xié)議,。針對應(yīng)用層協(xié)議的識別,文獻(xiàn)提出了一種以協(xié)議中出現(xiàn)頻率最高的字段作為特征串來識別協(xié)議的方法,,且采用一個特征串來標(biāo)識一種協(xié)議,。文獻(xiàn)提出了基于簽名字串的方法來識別應(yīng)用層協(xié)議,其主要針對的是P2P協(xié)議的范圍,,且需要對整個報文通過匹配多個特征串來識別一種P2P協(xié)議,,時間效率偏低。文獻(xiàn)提出了基于先分類后分組的識別應(yīng)用層協(xié)議及流量的方法,,但此方法的本質(zhì)還是基于某些固定端口的,,若對于通過隨機(jī)選擇端口而實(shí)現(xiàn)的應(yīng)用層協(xié)議,,此方法就缺乏準(zhǔn)確性和靈活性。
本文通過分析網(wǎng)絡(luò)流媒體交互過程的特征,,以應(yīng)用層傳輸協(xié)議對應(yīng)的關(guān)鍵特征字串為判斷依據(jù),,設(shè)計(jì)了一種基于Winpcap的網(wǎng)絡(luò)視頻流識別算法,實(shí)現(xiàn)了對網(wǎng)絡(luò)流媒體的發(fā)現(xiàn),,并通過實(shí)驗(yàn)對本文設(shè)計(jì)的算法性能進(jìn)行了分析和驗(yàn)證,。
1 Winpeap簡介
Winpcap是由伯克利分組捕獲庫派生而來的分組捕獲庫,它在Windows操作平臺上實(shí)現(xiàn)對底層包的截取過濾,。
Winpcap是BPF模型和Libpcap函數(shù)庫在Windows平臺下網(wǎng)絡(luò)數(shù)據(jù)包捕獲和網(wǎng)絡(luò)狀態(tài)分析的一種體系結(jié)構(gòu),,這個體系結(jié)構(gòu)是由一個核心的包過濾驅(qū)動程序,一個底層的動態(tài)連接庫Packet.dll和一個高層的獨(dú)立于系統(tǒng)的函數(shù)庫Libpcap組成,。底層的包捕獲驅(qū)動程序?qū)嶋H為一個協(xié)議網(wǎng)絡(luò)驅(qū)動程序,,通過對NDIS中函數(shù)的調(diào)用為Windows 95/98/NT/2000提供一類似于UNIX系統(tǒng)下Berkeley Packet Filter的捕獲和發(fā)送原始數(shù)據(jù)包的能力。Packet.dll是對這個BPF驅(qū)動程序進(jìn)行訪問的API接口,,同時它有一套符合Libpcap接口 (UNIX下的捕獲函數(shù)庫)的函數(shù)庫,。
Winpcap包括三部分:第一個模塊NPF(NetgroupPacket Filter),是一個虛擬設(shè)備驅(qū)動程序文件,。它的功能是過濾數(shù)據(jù)包,,并把這些數(shù)據(jù)包原封不動地傳給用戶態(tài)模塊,這個過程中包括了一些操作系統(tǒng)特有的代碼,。第二個模塊Packet.dll為Win32平臺提供了一個公共的接口,。不同版本的Windows系統(tǒng)都有自己的內(nèi)核模塊和用戶層模塊。 Packet.dll用于解決這些不同,。調(diào)用Packet.dll的程序可以運(yùn)行在不同版本的windows平臺上,,而無需重新編譯。第三個模塊 wpcap.dll是不依賴于操作系統(tǒng)的,,它提供了更加高層,、抽象的函數(shù)。
Winpcap提供了一套標(biāo)準(zhǔn)的編程接口,,與libpcap兼容,,可使得原來許多UNIX平臺下的網(wǎng)絡(luò)分析工具快速移植過來便于開發(fā)各種網(wǎng)絡(luò)分析工具,充分考慮了各種性能和效率的優(yōu)化,,包括對于NPF內(nèi)核層次上的過濾器支持,,支持內(nèi)核態(tài)的統(tǒng)計(jì)模式,提供了發(fā)送數(shù)據(jù)包的能力,。
2 應(yīng)用層協(xié)議RTP/RTCP
RTP/RFCP是一種應(yīng)用型的傳輸層協(xié)議,,它沒有連接的概念,既可以建立在面向連接的底層協(xié)議上,又可以建立在面向無連接的底層協(xié)議上,,因此RTP對傳輸層是獨(dú)立的,。由于網(wǎng)絡(luò)流媒體的傳輸實(shí)時性要求較高,UDP的傳輸延時低于TCP,,能與音頻和視頻流很好地匹配,,所以,在實(shí)際應(yīng)用中,,RFP/RTCP/UDP是流媒體傳輸?shù)闹饕獏f(xié)議,,其結(jié)構(gòu)如圖l所示。
實(shí)時傳輸協(xié)議RTP是為實(shí)時數(shù)據(jù)提供端到端傳遞服務(wù)的協(xié)議,,能夠傳遞時間信息和實(shí)現(xiàn)流同步,。但RTP本身并不能為按順序傳送數(shù)據(jù)包提供可靠的傳輸機(jī)制,也不提供流量控制或擁塞控制,,它依靠RTP控制協(xié)議RTCP配合實(shí)現(xiàn)控制服務(wù),。在RTP會話期間,各參與者周期性地交互RTCP包,,RFCP包中含有己發(fā)送的數(shù)據(jù)包的數(shù)量,、丟失的數(shù)據(jù)包的數(shù)量等統(tǒng)計(jì)資料,會話方可以利用這些信息動態(tài)地改變傳輸速率,,甚至改變有效型,。RTP數(shù)據(jù)包結(jié)構(gòu)如圖2所示。
從圖2可以看出,,RTP數(shù)據(jù)包由12個字節(jié)的固定RTP頭和不定長的連續(xù)多媒體數(shù)據(jù)組成,,其中的多媒體數(shù)據(jù)可以是壓縮后數(shù)據(jù)。
其中比較重要的幾個域及其意義如下:
版本(V):2b,,此域定義了RTP的版本,,此協(xié)議定義的版本是2。
填料(P):1b,,填料可能用于某些具有固定長度的加密算法,,或者在底層數(shù)據(jù)單元中傳輸多個RTP包。
擴(kuò)展(X):1b,,若設(shè)置擴(kuò)展比特,,表示固定頭(僅)后面跟隨一個頭擴(kuò)展,。CSRC計(jì)數(shù)(CC):4b,,CSRC計(jì)數(shù)包含了跟在固定頭后面CSRC識別符的數(shù)目。
標(biāo)志(M):1b,,標(biāo)志用來允許在比特流中標(biāo)記重要的事件,,如幀范圍。
負(fù)載類型(PT):7b,此域定義了負(fù)載的格式,,由具體應(yīng)用決定其解釋,。協(xié)議可以規(guī)定負(fù)載類型碼和負(fù)載格式之間一個默認(rèn)的匹配。其他的負(fù)載類型碼可以通過非RTP方法動態(tài)定義,,RTP發(fā)射機(jī)在任意給定時間發(fā)出一個單獨(dú)的RTP負(fù)載類型,。
序列號(SN):16b,每發(fā)送一個RTP數(shù)據(jù)包,,序列號加一,,接收機(jī)可以據(jù)此檢測丟包和重建包。序列號的初始值是隨機(jī)的,。
時間標(biāo)志:32b,,時間標(biāo)志反映了RTP數(shù)據(jù)包中第一個比特的抽樣瞬間。時間標(biāo)志的起始值是隨機(jī)的,。
SSRC:32b,,SSRC域用以識別同步源。標(biāo)識符被隨機(jī)生成,,以使在同一個RTP會話期中沒有任何兩個同步源有相同的SSRC識別符,。
CSRC列表:0~15項(xiàng),每項(xiàng)32b,。CSRC列表識別在此包中負(fù)載的有貢獻(xiàn)源,。識別符的數(shù)目在CC域中給定。
通過對RTP協(xié)議的分析,,總結(jié)出以下幾條“流特征”:
(1)UDP負(fù)荷頭兩個比特是0x10(RTP的版本號是2),。
(2)RTP流負(fù)載類型PT值保持不變。即同一流媒體數(shù)據(jù)包RTP頭的9~15b的值保持不變,。
(3)RTP流的SN值為遞增,。
(4)RTP包的SSRC值為定值,同一流媒體數(shù)據(jù)各包的SSRC值保持不變,。
3 算法實(shí)現(xiàn)
首先通過Winpcap過濾器對數(shù)據(jù)包進(jìn)行捕獲,,識別其中的握手?jǐn)?shù)據(jù)包,然后分析呼叫信令的內(nèi)容,,獲取傳輸流媒體的源,、目的地址和端口號,再通知給過濾器針對該源,、目的地址和端口號進(jìn)行數(shù)據(jù)捕捉,;識別其中的UDP數(shù)據(jù)包進(jìn)行分析,根據(jù)“流特征”進(jìn)行分析,,確定所要捕捉的RTP數(shù)據(jù)流,。
采用以上4條作為判斷RTP流量的必要條件,當(dāng)對每一個UDP數(shù)據(jù)流,如能連續(xù)檢出4個包符合上述策略,,則認(rèn)定其滿足為RTP數(shù)據(jù)流的充分條件,。
經(jīng)過大量實(shí)際數(shù)據(jù)的測試,該算法可以有效識別網(wǎng)絡(luò)流媒體,。
4 結(jié)語
在分析網(wǎng)絡(luò)流媒體傳輸協(xié)議的基礎(chǔ)上,,利用Winpcap實(shí)現(xiàn)了一個網(wǎng)絡(luò)流媒體識別算法。經(jīng)試驗(yàn)證明,,該算法能夠有效識別流媒體,,對網(wǎng)絡(luò)流媒體的應(yīng)用具有積極的作用。