一種即時(shí)通信監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
2、數(shù)據(jù)采集及存儲
系統(tǒng)采用基于網(wǎng)絡(luò)嗅探技術(shù)的數(shù)據(jù)采集方法,以WinPcap 4.0.1作為開發(fā)工具,Windows平臺下使用WinPcap從網(wǎng)絡(luò)適配器嗅探數(shù)據(jù)十分方便,圖3是使用WinPeap捕獲網(wǎng)絡(luò)數(shù)據(jù)包的基本流程。
使用WinPcap開發(fā)應(yīng)用程序除可以捕獲數(shù)據(jù)包外,最大的優(yōu)點(diǎn)在于WinPcap可以對數(shù)據(jù)包進(jìn)行過濾。WinPeap從網(wǎng)絡(luò)適配器上嗅探到 的是最原始的數(shù)據(jù)幀,這包括了所有流經(jīng)的數(shù)據(jù)。如果不對數(shù)據(jù)包進(jìn)行相應(yīng)的過濾,將會捕獲到許多無關(guān)的數(shù)據(jù),這會增加系統(tǒng)的負(fù)擔(dān),使系統(tǒng)工作效率降低。
圖3 WinPcap數(shù)據(jù)采集流程
在數(shù)據(jù)采集之后,采用什么樣的存儲策略來存儲數(shù)據(jù),以最大限度地保證采集到的網(wǎng)絡(luò)數(shù)據(jù)包(Pack.et)不丟失,是系統(tǒng)設(shè)計(jì)中必須面對的一個(gè) 重要問題。網(wǎng)絡(luò)丟包的原因可能有很多,包括內(nèi)存緩沖技術(shù)、磁盤I/O能力、包過濾及處理技術(shù)、數(shù)據(jù)流量大小、網(wǎng)絡(luò)接口性能、CPU處理能力等諸多方面。
網(wǎng)絡(luò)丟包的指標(biāo)一般采用丟包率(Rate of PacketLoss,RPL)。計(jì)算公式為:L=((發(fā)送的數(shù)據(jù)包數(shù)一接收到的數(shù)據(jù)包數(shù))/發(fā)送的數(shù)據(jù)包數(shù))×100%。
眾所周知。頻繁的磁盤I/O顯然會影響到系統(tǒng)的性能和效率,這在大的數(shù)據(jù)流量下尤為明顯。為了避免頻繁的磁盤I/O,需要在數(shù)據(jù)存儲時(shí)引入內(nèi)存 緩沖處理技術(shù)。在基于WinPcap的網(wǎng)絡(luò)數(shù)據(jù)采集中,系統(tǒng)使用了多級內(nèi)存緩沖,內(nèi)核緩沖器和用戶緩沖器的大小分別設(shè)置為6MB和1MB,并設(shè)置內(nèi)核緩沖 器和用戶緩沖器之間一次傳送的最小數(shù)據(jù)塊的大小為512kB。
3、數(shù)據(jù)分析與處理
數(shù)據(jù)分析與處理分為四部分。首先是Ethernet數(shù)據(jù)幀處理,主要完成鏈路層數(shù)據(jù)驗(yàn)證、拆包,并將數(shù)據(jù)提交給IP層進(jìn)行處理。IP數(shù)據(jù)報(bào)的處 理主要完成IP層數(shù)據(jù)驗(yàn)證、拆包,并將數(shù)據(jù)提交給傳輸層進(jìn)行處理。TCP分組的處理主要完成TCP層數(shù)據(jù)的驗(yàn)證、拆分及TCP重復(fù)和無序分組的處理,完成 TCP會話重建,并將重組后的應(yīng)用層數(shù)據(jù)提交至協(xié)議分析層處理。協(xié)議分析主要完成應(yīng)用層數(shù)據(jù)和最終用戶數(shù)據(jù)的處理。對應(yīng)用層數(shù)據(jù)主要進(jìn)行命令解析和協(xié)議數(shù) 據(jù)重組,對最終用戶數(shù)據(jù)的處理包括聊天信息的提取、顯示圖片和自定義表情的提取、文件傳輸?shù)奶崛〉?。MSNP協(xié)議分析模型如圖4所示。
3.1、命令解析
命令解析的本質(zhì)就是分析字符串的含義,它類似計(jì)算機(jī)高級語言編譯器中詞法分析的功能。MSNP協(xié)議涉及多達(dá)幾十個(gè)命令,服務(wù)器和客戶端使用的命 令也不相同。系統(tǒng)對涉及信息傳輸?shù)拿钸M(jìn)行了重點(diǎn)解析,主要包括握手命令和數(shù)據(jù)傳輸命令。對于客戶端命令。主要解析“ANS”和“MSG”。服務(wù)器端主要 解析“IRO”、“USR”、“JOI”和“MSG”。
圖4 MSNP協(xié)議分析模型
3.2、協(xié)議數(shù)據(jù)重組
協(xié)議數(shù)據(jù)重組主要針對P2P消息,當(dāng)二進(jìn)制頭和二進(jìn)制尾之間的消息內(nèi)容大小超過1202字節(jié)時(shí)。消息會被分片傳輸。通常被拆分的P2P消息包括 MSNSLP消息和實(shí)際傳輸?shù)母鞣N數(shù)據(jù)(如文件、表情)。二進(jìn)制頭中共有9個(gè)字段,其中“Data Offset”、“Total Data Size”和“Message Length”3個(gè)字段和消息分片密切相關(guān)。這3個(gè)字段分別表示“總數(shù)據(jù)大小”、“數(shù)據(jù)偏移量”和“本條消息長度”。由于TCP處理模塊已對重復(fù)和無序的 數(shù)據(jù)流進(jìn)行了處理,協(xié)議分析模塊的輸入是順序的數(shù)據(jù)流。按順序?qū)?shù)據(jù)取出即可。如圖5所示。
評論