基于Winpcap的網(wǎng)絡(luò)流媒體識(shí)別算法研究與實(shí)現(xiàn)
從圖2可以看出,RTP數(shù)據(jù)包由12個(gè)字節(jié)的固定RTP頭和不定長的連續(xù)多媒體數(shù)據(jù)組成,其中的多媒體數(shù)據(jù)可以是壓縮后數(shù)據(jù)。
其中比較重要的幾個(gè)域及其意義如下:
版本(V):2b,此域定義了RTP的版本,此協(xié)議定義的版本是2。
填料(P):1b,填料可能用于某些具有固定長度的加密算法,或者在底層數(shù)據(jù)單元中傳輸多個(gè)RTP包。
擴(kuò)展(X):1b,若設(shè)置擴(kuò)展比特,表示固定頭(僅)后面跟隨一個(gè)頭擴(kuò)展。
CSRC計(jì)數(shù)(CC):4b,CSRC計(jì)數(shù)包含了跟在固定頭后面CSRC識(shí)別符的數(shù)目。
標(biāo)志(M):1b,標(biāo)志用來允許在比特流中標(biāo)記重要的事件,如幀范圍。
負(fù)載類型(PT):7b,此域定義了負(fù)載的格式,由具體應(yīng)用決定其解釋。協(xié)議可以規(guī)定負(fù)載類型碼和負(fù)載格式之間一個(gè)默認(rèn)的匹配。其他的負(fù)載類型碼可以通過非RTP方法動(dòng)態(tài)定義,RTP發(fā)射機(jī)在任意給定時(shí)間發(fā)出一個(gè)單獨(dú)的RTP負(fù)載類型。
序列號(hào)(SN):16b,每發(fā)送一個(gè)RTP數(shù)據(jù)包,序列號(hào)加一,接收機(jī)可以據(jù)此檢測丟包和重建包。序列號(hào)的初始值是隨機(jī)的。
時(shí)間標(biāo)志:32b,時(shí)間標(biāo)志反映了RTP數(shù)據(jù)包中第一個(gè)比特的抽樣瞬間。時(shí)間標(biāo)志的起始值是隨機(jī)的。
SSRC:32b,SSRC域用以識(shí)別同步源。標(biāo)識(shí)符被隨機(jī)生成,以使在同一個(gè)RTP會(huì)話期中沒有任何兩個(gè)同步源有相同的SSRC識(shí)別符。
CSRC列表:0~15項(xiàng),每項(xiàng)32b。CSRC列表識(shí)別在此包中負(fù)載的有貢獻(xiàn)源。識(shí)別符的數(shù)目在CC域中給定。
通過對(duì)RTP協(xié)議的分析,總結(jié)出以下幾條“流特征”:
(1)UDP負(fù)荷頭兩個(gè)比特是0x10(RTP的版本號(hào)是2)。
(2)RTP流負(fù)載類型PT值保持不變。即同一流媒體數(shù)據(jù)包RTP頭的9~15b的值保持不變。
(3)RTP流的SN值為遞增。
(4)RTP包的SSRC值為定值,同一流媒體數(shù)據(jù)各包的SSRC值保持不變。
3 算法實(shí)現(xiàn)
首先通過Winpcap過濾器對(duì)數(shù)據(jù)包進(jìn)行捕獲,識(shí)別其中的握手?jǐn)?shù)據(jù)包,然后分析呼叫信令的內(nèi)容,獲取傳輸流媒體的源、目的地址和端口號(hào),再通知給過濾器針對(duì)該源、目的地址和端口號(hào)進(jìn)行數(shù)據(jù)捕捉;識(shí)別其中的UDP數(shù)據(jù)包進(jìn)行分析,根據(jù)“流特征”進(jìn)行分析,確定所要捕捉的RTP數(shù)據(jù)流。
采用以上4條作為判斷RTP流量的必要條件,當(dāng)對(duì)每一個(gè)UDP數(shù)據(jù)流,如能連續(xù)檢出4個(gè)包符合上述策略,則認(rèn)定其滿足為RTP數(shù)據(jù)流的充分條件。
經(jīng)過大量實(shí)際數(shù)據(jù)的測試,該算法可以有效識(shí)別網(wǎng)絡(luò)流媒體。
4 結(jié)語
在分析網(wǎng)絡(luò)流媒體傳輸協(xié)議的基礎(chǔ)上,利用Winpcap實(shí)現(xiàn)了一個(gè)網(wǎng)絡(luò)流媒體識(shí)別算法。經(jīng)試驗(yàn)證明,該算法能夠有效識(shí)別流媒體,對(duì)網(wǎng)絡(luò)流媒體的應(yīng)用具有積極的作用。
評(píng)論