摘要:隨著互聯(lián)網(wǎng)信息技術(shù)的不斷發(fā)展,其應(yīng)用已涉及到社會(huì)的方方面面。本文介紹了INTERNET網(wǎng)絡(luò)各層協(xié)議的特點(diǎn)。重點(diǎn)論述了用Visual C++編程實(shí)現(xiàn)Internet信號(hào)的協(xié)議分析及處理,以還原其高層應(yīng)用數(shù)據(jù)。同時(shí)也介紹了TCP/IP協(xié)議中數(shù)據(jù)重組的具體過程以達(dá)到輔助教學(xué)的目的.
關(guān)鍵詞:互聯(lián)網(wǎng);協(xié)議分析;TCP/IP協(xié)議;數(shù)據(jù)重組
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-098X(2015)04(a)-0000-00
1.引 言
網(wǎng)絡(luò)協(xié)議將位于各個(gè)不同地點(diǎn)的,不同的操作系統(tǒng)和用戶連接起來,并且規(guī)定它們之間如何進(jìn)行的相互通信的一系列正式的規(guī)則,協(xié)定和數(shù)據(jù)結(jié)構(gòu)。不同的計(jì)算機(jī)和計(jì)算機(jī)網(wǎng)絡(luò)之間要相互通信,必須支持相同的網(wǎng)絡(luò)協(xié)議。通信協(xié)議規(guī)定了通信雙方之間的通信過程,包括通信過程中傳輸?shù)臄?shù)據(jù),必須采用彼此能識(shí)別的特定格式。
在典型的網(wǎng)絡(luò)結(jié)構(gòu)中,網(wǎng)絡(luò)協(xié)議和通信采用的是分層式設(shè)計(jì)方案[1]。
國際標(biāo)準(zhǔn)組織ISO制定了開放互聯(lián)OSI模型[2]。OSI模型分為七層。應(yīng)用層,表示層,會(huì)話層,傳輸層,網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層,物理層。
本文所涉及的TCP/IP協(xié)議并不完全符合OSI的七層參考模型,TCP/IP通訊協(xié)議采用了4層的層級(jí)結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。這4層分別為:應(yīng)用層、傳輸層、互連網(wǎng)絡(luò)層、網(wǎng)絡(luò)接口層[3]。
網(wǎng)絡(luò)協(xié)議識(shí)別是指通過程序分析網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議頭部和尾部,從而了解其傳遞的信息和相關(guān)的數(shù)據(jù)包在產(chǎn)生和傳輸過程中的行為[4]。協(xié)議解析就是一層一層處理下層網(wǎng)絡(luò)協(xié)議封裝的頭部和尾部的連續(xù)過程[5]。通過對(duì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行協(xié)議解析后,就可以根據(jù)不同的協(xié)議進(jìn)行協(xié)議數(shù)據(jù)的還原。協(xié)議還原技術(shù)的理論基礎(chǔ)是網(wǎng)絡(luò)協(xié)議規(guī)范,根據(jù)各種不同網(wǎng)絡(luò)協(xié)議格式化的特點(diǎn),并結(jié)合高速數(shù)據(jù)包捕獲,數(shù)據(jù)解碼,會(huì)話重組技術(shù),從通信雙方傳輸?shù)膮f(xié)議數(shù)據(jù)中分析通訊雙方交互的過程,還原協(xié)議會(huì)話。它根據(jù)協(xié)議規(guī)范的規(guī)定,分析網(wǎng)絡(luò)上的數(shù)據(jù)流,將網(wǎng)絡(luò)數(shù)據(jù)還原出原始數(shù)據(jù)語義[6]。
本文是在已接收下來的網(wǎng)絡(luò)信號(hào)基礎(chǔ)上,利用Visual C++編程,對(duì)信號(hào)進(jìn)行協(xié)議解析,以還原其高層應(yīng)用數(shù)據(jù)。本文詳細(xì)論述了對(duì)網(wǎng)絡(luò)信號(hào)進(jìn)行分層處理的全過程,并且將數(shù)據(jù)報(bào)組報(bào)的過程顯示出來,這樣有利于教員教學(xué),也可以使學(xué)員在學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)時(shí)對(duì)數(shù)據(jù)報(bào)的組報(bào)過程有更加直觀和具體的了解。
2 鏈路層協(xié)議分析
主機(jī)與公用電話交換網(wǎng)(PSTN)相連時(shí),鏈路層一般采用PPP協(xié)議。與ISDN相連時(shí),鏈路層為PPP、FR協(xié)議。點(diǎn)對(duì)點(diǎn)專線連接(路由器加專線組網(wǎng))鏈路層為PPP、FR、X.25、Cisco PPP協(xié)據(jù)。議。本文采用的數(shù)據(jù)為PPP協(xié)議數(shù)
PPP幀以固定的 0xff+0x03+0x21起始,隨后是IP數(shù)據(jù)報(bào)部分,最后是兩個(gè)字節(jié)CRC校驗(yàn)。而Cisco PPP幀一般以0x0f+0x00+0x08+0x00起始,最后加上兩個(gè)字節(jié)的CRC校驗(yàn)。
本程序可以處理任意長(zhǎng)度的固定幀頭、幀尾的數(shù)據(jù)。這里在操作界面上設(shè)立了一個(gè)文本框,在操作時(shí)可以根據(jù)實(shí)際數(shù)據(jù)報(bào)的報(bào)頭輸入幀頭(起始位)和幀尾長(zhǎng)度,缺省值分別為4和2。
在處理前應(yīng)該先開辟一個(gè)緩沖區(qū),在CFile這個(gè)類中,用Read函數(shù)把整個(gè)數(shù)據(jù)讀入緩沖區(qū)中。因?yàn)槊繋琁P數(shù)據(jù)報(bào)的首部中都記錄了該幀的長(zhǎng)度,所以把表示幀長(zhǎng)度的字節(jié)轉(zhuǎn)換成十進(jìn)制數(shù)。分別把每一幀數(shù)據(jù)付給一個(gè)CString字符串,將該字符串設(shè)置到編輯框中,調(diào)用UpdateData函數(shù),將原始數(shù)據(jù)報(bào)顯示在該編輯框中 。
可以利用與上述相似方法,丟棄幀頭和幀尾幾個(gè)字節(jié),再將數(shù)據(jù)寫到編輯框中,這樣就達(dá)到去掉幀頭幀尾,只顯示IP數(shù)據(jù)報(bào)的目的。
這里使用CString字符串可以避免使用普通字符串?dāng)?shù)組所帶來的一般編程錯(cuò)誤。但是這是以犧牲性能為代價(jià)的。首先,CString對(duì)象是傳遞數(shù)值的;其次,臨時(shí)CString對(duì)象通常在CString表達(dá)式中創(chuàng)建。上面兩點(diǎn)都會(huì)導(dǎo)致大量的不必要的數(shù)據(jù)移動(dòng)。因此在這里,只能把一部分?jǐn)?shù)據(jù)賦給CString字符串,所以在編輯框中只顯示了一部分?jǐn)?shù)據(jù)報(bào),但這完全可以滿足教學(xué)的需要。IP協(xié)議處理
3 IP協(xié)議分析與處理
網(wǎng)際互連協(xié)議(IP)最基本的任務(wù)是提供一個(gè)非可靠的、盡最大努力去完成任務(wù)的、無連接的分組投遞系統(tǒng)。說它非可靠,是因?yàn)镮P所要求的投遞不能保證成功,分組可能丟失或投遞無序或重復(fù)投遞,而IP并不檢測(cè)這些情況,這些情況也不通知發(fā)送者或接收者;說它無連接,是因?yàn)槊恳粋€(gè)分組的處理都獨(dú)立于其它分組,可以經(jīng)由不同路徑到達(dá)目的主機(jī),也可能部分分組丟失,而其它分組仍然被投遞,但I(xiàn)P盡最大努力去投遞分組,不輕易拋棄分組,僅當(dāng)資源用盡或下層物理網(wǎng)失效時(shí)才會(huì)發(fā)生不可靠的現(xiàn)象。
數(shù)據(jù)報(bào)經(jīng)過去掉幀頭、幀尾后,在IP層的處理主要是將報(bào)文按源、目的IP地址以及源、目的端口號(hào)進(jìn)行重組。在重組后分別以一對(duì)IP地址和端口號(hào)為文件名建立文件,然后將屬于該文件的報(bào)文寫入該文件,文件名后綴與源文件一致。由于原來開辟的緩沖區(qū)沒有變,所以可以在原來緩沖區(qū)中進(jìn)行操作。
具體步驟如下:
一:建立一個(gè)地址鏈表,用來存放文件名。其數(shù)據(jù)結(jié)構(gòu)如下:
typedef struct node
{CString data;//存放文件名
struct node *next;//指針域
}linkstring;//建立地址鏈表
二:讀一幀數(shù)據(jù),找到該數(shù)據(jù)首部的IP地址和端口號(hào),將它們轉(zhuǎn)換成十進(jìn)制數(shù),寫該幀數(shù)據(jù)的文件名。文件名保存格式為:
源IP地址-目的IP地址(源端口)-(目的端口).DAT
如:216.115.107.182-202.41.85.80(80)-(61697).DAT
三:查找地址鏈表,看鏈表中是否有與該幀相同的文件名,若有,則把該幀數(shù)據(jù)寫到該文件中,若沒有,則將該文件名寫入地址鏈表,再建立一個(gè)以上述文件名為名的文件,再把數(shù)據(jù)寫入文件。
四:重復(fù)第二步與第三步的操做,直到將數(shù)據(jù)讀完。
4 TCP協(xié)議分析與處理
TCP協(xié)議被稱作一種端對(duì)端協(xié)議。這是因?yàn)樗鼮閮膳_(tái)計(jì)算機(jī)之間的連接起了重要作用:當(dāng)一臺(tái)計(jì)算機(jī)需要與另一臺(tái)遠(yuǎn)程計(jì)算機(jī)連接時(shí),TCP協(xié)議會(huì)讓它們建立一個(gè)連接、發(fā)送和接收資料以及終止連接。
傳輸控制協(xié)議TCP協(xié)議利用重發(fā)技術(shù)和擁塞控制機(jī)制,向應(yīng)用程序提供可靠的通信連接,使它能夠自動(dòng)適應(yīng)網(wǎng)上的各種變化。即使在 Internet 暫時(shí)出現(xiàn)堵塞的情況下,TCP也能夠保證通信的可靠。 TCP報(bào)文格式如下:
經(jīng)過了IP層處理的數(shù)據(jù)已經(jīng)按照指定的地址分好類,而且每對(duì)通信地址都建立了一個(gè)文件。到了TCP層就要根據(jù)工作需要來處理指定的一對(duì)通信地址的數(shù)據(jù),這可以根據(jù)文件名來打開需要的的數(shù)據(jù),這也需要我們重新開辟一個(gè)緩沖區(qū),把文件讀到緩沖區(qū)里。TCP層的主要工作是把每一幀數(shù)據(jù)報(bào)按照發(fā)送序號(hào)排序。然后再將TCP首部去掉,這樣就能得到最后的報(bào)文。
具體操作步驟如下:
一:開辟一個(gè)緩沖區(qū),將文件讀進(jìn)來。
二:去掉IP首部,再把數(shù)據(jù)顯示在編輯框中。處理方法與網(wǎng)絡(luò)接口層去掉幀頭的方法相似。
三:建立發(fā)送序號(hào)鏈表。這個(gè)鏈表里每個(gè)單元分別記錄了發(fā)送序號(hào),偏移量,每幀長(zhǎng)度。其數(shù)據(jù)結(jié)構(gòu)如下:
偏移量是指每幀的首字節(jié)在整個(gè)緩沖區(qū)中的位置,幀長(zhǎng)是指每一幀在去掉TCP頭后的每幀的長(zhǎng)度。
四:按照發(fā)送序號(hào)把數(shù)據(jù)在鏈表中排序,形成新的鏈表。建立一個(gè)名為“l(fā)ast.DAT”的新文件,然后將排好序的每一幀數(shù)據(jù)去掉TCP頭寫進(jìn)文件。這樣得到的就是最后需要的報(bào)文。
五:將最后形成的報(bào)文顯示在編輯框中。
最后形成的文件就是應(yīng)用數(shù)據(jù)。可以按照不同端口送往應(yīng)用層處理。
5結(jié)論
本文詳細(xì)論述了網(wǎng)絡(luò)數(shù)據(jù)從鏈路層到傳輸層處理的詳細(xì)過程,對(duì)實(shí)際工作還是有一定價(jià)值的,尤其在教學(xué)方面,對(duì)老師有很大的幫助。本程序?qū)?shù)據(jù)報(bào)分析得十分具體,這就使得學(xué)生在上課時(shí)對(duì)數(shù)據(jù)包組報(bào)過程有一個(gè)很直觀的印象,對(duì)學(xué)習(xí)IP以及TCP協(xié)議有很大的幫助。
參考文獻(xiàn)
[1]陳亮,龔儉,徐選.應(yīng)用層算法協(xié)議識(shí)別算法綜述[J].計(jì)算機(jī)科學(xué).2007,7.34(7).73-75
[2]Douglas E.Comer著.林瑤,蔣惠,杜蔚軒等譯.用TCP/IP進(jìn)行網(wǎng)際互聯(lián)(卷1)[M].北京:電子工業(yè)出版社,2001
[3]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)(第四版)[M].北京:電子工業(yè)出版社,2005:170-194.
[4]徐龍.網(wǎng)絡(luò)協(xié)議分析系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦編程技巧與維護(hù).2009,8.74-76.
[5] RFC793.Internet工程任務(wù)組.Transmission Control Protocol[s].1981
[6] 戴宗昆,羅萬伯.信息系統(tǒng)安全[M].北京:電子工業(yè)出版社,2002