摘至
中國(guó)協(xié)議分析網(wǎng)一、前言 目前,網(wǎng)絡(luò)的速度發(fā)展非???,學(xué)習(xí)網(wǎng)絡(luò)的人也越來(lái)越多,稍有網(wǎng)絡(luò)常識(shí)的人都知道
TCP/IP
協(xié)議是網(wǎng)絡(luò)的基礎(chǔ),是Internet的語(yǔ)言,可以說(shuō)沒(méi)有
TCP/IP
協(xié)議就沒(méi)有互聯(lián)網(wǎng)的今天。目前號(hào)稱搞網(wǎng)的人非常多,許多人就是從一把夾線鉗,一個(gè)測(cè)線器聯(lián)網(wǎng)開(kāi)始接觸網(wǎng)絡(luò)的,如果只是聯(lián)網(wǎng)玩玩,知道幾個(gè)Ping之類的命令就行了,如果想在網(wǎng)絡(luò)上有更多的發(fā)展不管是黑道還是紅道,必須要把
TCP/IP
協(xié)議搞的非常明白。
學(xué)習(xí)過(guò)
TCP/IP
協(xié)議的人多有一種感覺(jué),這東西太抽象了,沒(méi)有什么數(shù)據(jù)實(shí)例,看完不久就忘了。本文將介紹一種直觀的學(xué)習(xí)方法,利用
協(xié)議分析工具學(xué)習(xí)
TCP/IP,在學(xué)習(xí)的過(guò)程中能直觀的看到數(shù)據(jù)的具體傳輸過(guò)程。
為了初學(xué)者更容易理解,本文將搭建一個(gè)最簡(jiǎn)單的網(wǎng)絡(luò)環(huán)境,不包含子網(wǎng)。
二、試驗(yàn)環(huán)境 1、網(wǎng)絡(luò)環(huán)境 如圖1所示

圖1
為了表述方便,下文中208號(hào)機(jī)即指地址為192.168.113.208的計(jì)算機(jī),1號(hào)機(jī)指地址為192.168.113.1的計(jì)算機(jī)。
2、操作系統(tǒng) 兩臺(tái)機(jī)器都為Windows 2000 ,1號(hào)機(jī)機(jī)器作為服務(wù)器,安裝
FTP服務(wù)
3、協(xié)議分析工具 Windows環(huán)境下常用的工具有:
Sniffer Pro、Natxray、Iris以及windows 2000自帶的網(wǎng)絡(luò)監(jiān)視器等。本文選用Iris作為
協(xié)議分析工具。
在客戶機(jī)208號(hào)機(jī)安裝IRIS軟件。
三、測(cè)試過(guò)程 1、測(cè)試?yán)樱簩?號(hào)機(jī)計(jì)算機(jī)中的一個(gè)文件通過(guò)
FTP下載到208號(hào)機(jī)中。
2、IRIS的設(shè)置。
由于IRIS具有網(wǎng)絡(luò)監(jiān)聽(tīng)的功能,如果網(wǎng)絡(luò)環(huán)境中還有其它的機(jī)器將抓很多別的數(shù)據(jù)包,這樣為學(xué)習(xí)帶來(lái)諸多不便,為了清楚地看清楚上述例子的傳輸過(guò)程首先將IRIS設(shè)置為只抓208號(hào)機(jī)和1號(hào)機(jī)之間的數(shù)據(jù)包。設(shè)置過(guò)程如下:
1)用熱鍵CTRL+B彈出如圖所示的地址表,在表中填寫(xiě)機(jī)器的IP地址,為了對(duì)抓的包看得更清楚不要添主機(jī)的名字(name),設(shè)置好后關(guān)閉此窗口。

圖2
2)用熱鍵CTRL+E彈出如圖所示過(guò)濾設(shè)置,選擇左欄“IP address”,右欄按下圖將address book中的地址拽到下面,設(shè)置好后確定,這樣就這抓這兩臺(tái)計(jì)算機(jī)之間的包。

圖3
3、抓包
按下IRIS工具欄中 開(kāi)始按鈕。在瀏覽器中輸入:
FTP://192.168.113.1,找到要下載的文件 ,鼠標(biāo)右鍵該文件,在彈出的菜單中選擇“復(fù)制到文件夾”開(kāi)始下載,下載完后在IRIS工具欄中按 按鈕停止抓包。圖4顯示的就是
FTP的整個(gè)過(guò)程,下面我們將詳細(xì)
分析這個(gè)過(guò)程。

圖4
說(shuō)明:為了能抓到ARP
協(xié)議的包,在WINDOWS 2000 中運(yùn)行arp –d 清除arp緩存。
四、過(guò)程分析 1、TCP/IP的基本原理 本文的重點(diǎn)雖然是根據(jù)實(shí)例來(lái)解析
TCP/IP,但要講明白下面的過(guò)程必須簡(jiǎn)要講一下
TCP/IP的基本原理。
A.網(wǎng)絡(luò)是分層的,每一層分別負(fù)責(zé)不同的通信功能。
TCP/IP通常被認(rèn)為是一個(gè)四層
協(xié)議系統(tǒng),
TCP/IP
協(xié)議族是一組不同的
協(xié)議組合在一起構(gòu)成的
協(xié)議族。盡管通常稱該
協(xié)議族為
TCP/IP,但
TCP和IP只是其中的兩種
協(xié)議而已,如表1所示。每一層負(fù)責(zé)不同的功能:

表1
分層的概念說(shuō)起來(lái)非常簡(jiǎn)單,但在實(shí)際的應(yīng)用中非常的重要,在進(jìn)行網(wǎng)絡(luò)設(shè)置和排除故障時(shí)對(duì)網(wǎng)絡(luò)層次理解得很透,將對(duì)工作有很大的幫助。例如:設(shè)置路由是網(wǎng)絡(luò)層IP
協(xié)議的事,要查找MAC地址是鏈路層ARP的事,常用的Ping命令由ICMP
協(xié)議來(lái)做的。
圖5顯示了各層
協(xié)議的關(guān)系,理解它們之間的關(guān)系對(duì)下面的
協(xié)議分析非常重要。

圖5
b.數(shù)據(jù)發(fā)送時(shí)是自上而下,層層加碼;數(shù)據(jù)接收時(shí)是自下而上,層層解碼。
當(dāng)應(yīng)用程序用
TCP傳送數(shù)據(jù)時(shí),數(shù)據(jù)被送入
協(xié)議棧中,然后逐個(gè)通過(guò)每一層直到被當(dāng)作一串比特流送入網(wǎng)絡(luò)。其中每一層對(duì)收到的數(shù)據(jù)都要增加一些首部信息(有時(shí)還要增加尾部信息),該過(guò)程如圖6所示。
TCP傳給IP的數(shù)據(jù)單元稱作
TCP報(bào)文段或簡(jiǎn)稱為
TCP段。I P傳給網(wǎng)絡(luò)接口層的數(shù)據(jù)單元稱作IP數(shù)據(jù)報(bào)。 通過(guò)
以太網(wǎng)傳輸?shù)谋忍亓鞣Q作幀(Frame)。
數(shù)據(jù)發(fā)送時(shí)是按照?qǐng)D6自上而下,層層加碼;數(shù)據(jù)接收時(shí)是自下而上,層層解碼。

圖6
c. 邏輯上通訊是在同級(jí)完成的
垂直方向的結(jié)構(gòu)層次是當(dāng)今普遍認(rèn)可的數(shù)據(jù)處理的功能流程。每一層都有與其相鄰層的接口。為了通信,兩個(gè)系統(tǒng)必須在各層之間傳遞數(shù)據(jù)、指令、地址等信息,通信的邏輯流程與真正的數(shù)據(jù)流的不同。雖然通信流程垂直通過(guò)各層次,但每一層都在邏輯上能夠直接與遠(yuǎn)程計(jì)算機(jī)系統(tǒng)的相應(yīng)層直接通信。
從圖7可以看出,通訊實(shí)際上是按垂直方向進(jìn)行的,但在邏輯上通信是在同級(jí)進(jìn)行的。

圖7
2、過(guò)程描述 為了更好的
分析協(xié)議,我們先描述一下上述例子數(shù)據(jù)的傳輸步驟。如圖8所示:
1)
FTP客戶端請(qǐng)求
TCP用服務(wù)器的IP地址建立連接。
2)
TCP發(fā)送一個(gè)連接請(qǐng)求分段到遠(yuǎn)端的主機(jī),即用上述IP地址發(fā)送一份IP數(shù)據(jù)報(bào)。
3) 如果目的主機(jī)在本地網(wǎng)絡(luò)上,那么IP數(shù)據(jù)報(bào)可以直接送到目的主機(jī)上。如果目的主機(jī)在一個(gè)遠(yuǎn)程網(wǎng)絡(luò)上,那么就通過(guò)IP選路函數(shù)來(lái)確定位于本地網(wǎng)絡(luò)上的下一站路由器地址,并讓它轉(zhuǎn)發(fā)IP數(shù)據(jù)報(bào)。在這兩種情況下,IP數(shù)據(jù)報(bào)都是被送到位于本地網(wǎng)絡(luò)上的一臺(tái)主機(jī)或路由器。
4) 本例是一個(gè)
以太網(wǎng),那么發(fā)送端主機(jī)必須把32位的IP地址變換成48位的
以太網(wǎng)地址,該地址也稱為MAC地址,它是出廠時(shí)寫(xiě)到網(wǎng)卡上的世界唯一的硬件地址。把IP地址翻譯到對(duì)應(yīng)的MAC地址是由ARP
協(xié)議完成的。
5) 如圖的虛線所示,ARP發(fā)送一份稱作ARP請(qǐng)求的
以太網(wǎng)數(shù)據(jù)幀給
以太網(wǎng)上的每個(gè)主機(jī),這個(gè)過(guò)程稱作廣播。ARP請(qǐng)求數(shù)據(jù)幀中包含目的主機(jī)的IP地址,其意思是“如果你是這個(gè)IP地址的擁有者,請(qǐng)回答你的硬件地址。”
6) 目的主機(jī)的ARP層收到這份廣播后,識(shí)別出這是發(fā)送端在尋問(wèn)它的IP地址,于是發(fā)送一個(gè)ARP應(yīng)答。這個(gè)ARP應(yīng)答包含I P地址及對(duì)應(yīng)的硬件地址。
7) 收到ARP應(yīng)答后,使ARP進(jìn)行請(qǐng)求—應(yīng)答交換的IP數(shù)據(jù)包現(xiàn)在就可以傳送了。
8) 發(fā)送IP數(shù)據(jù)報(bào)到目的主機(jī)。

圖8
3、實(shí)例分析 下面通過(guò)
分析用iris捕獲的包來(lái)
分析一下
TCP/IP的工作過(guò)程,為了更清晰的解釋數(shù)據(jù)傳送的過(guò)程,我們按傳輸?shù)牟煌A段抓了四組數(shù)據(jù),分別是查找服務(wù)器、建立連接、數(shù)據(jù)傳輸和終止連接。每組數(shù)據(jù),按下面三步進(jìn)行解釋。
顯示數(shù)據(jù)包
解釋該數(shù)據(jù)包
按層
分析該包的頭信息
第一組 查找服務(wù)器 1)下圖顯示的是1、2行的數(shù)據(jù)

圖9
2)解釋數(shù)據(jù)包 這兩行數(shù)據(jù)就是查找服務(wù)器及服務(wù)器應(yīng)答的過(guò)程。
在第1行中,源端主機(jī)的MAC地址是00:50:FC:22:C7:BE。目的端主機(jī)的MAC地址是FF:FF:FF:FF:FF:FF,這個(gè)地址是十六進(jìn)制表示的,F(xiàn)換算為二進(jìn)制就是1111,全1的地址就是廣播地址。所謂廣播就是向本網(wǎng)上的每臺(tái)網(wǎng)絡(luò)設(shè)備發(fā)送信息,電纜上的每個(gè)
以太網(wǎng)接口都要接收這個(gè)數(shù)據(jù)幀并對(duì)它進(jìn)行處理,這一行反映的是步驟5)的內(nèi)容,ARP發(fā)送一份稱作ARP請(qǐng)求的
以太網(wǎng)數(shù)據(jù)幀給
以太網(wǎng)上的每個(gè)主機(jī)。網(wǎng)內(nèi)的每個(gè)網(wǎng)卡都接到這樣的信息“誰(shuí)是192.168.113.1的IP地址的擁有者,請(qǐng)將你的硬件地址告訴我”。
第2行反映的是步驟6)的內(nèi)容。在同一個(gè)
以太網(wǎng)中的每臺(tái)機(jī)器都會(huì)"接收"到這個(gè)報(bào)文,但正常狀態(tài)下除了1號(hào)機(jī)外其他主機(jī)應(yīng)該會(huì)忽略這個(gè)報(bào)文,而1號(hào)的主機(jī)的ARP層收到這份廣播報(bào)文后,識(shí)別出這是發(fā)送端在尋問(wèn)它的IP地址,于是發(fā)送一個(gè)ARP應(yīng)答。告知自己的IP地址和MAC地址。第2行可以清楚的看出1號(hào)回答的信息__自己的MAC地址00:50:FC:22:C7:BE。
這兩行反映的是數(shù)據(jù)鏈路層之間一問(wèn)一答的通信過(guò)程。這個(gè)過(guò)程就像我要在一個(gè)坐滿人的教室找一個(gè)叫“張三”的人,在門(mén)口喊了一聲“張三”,這一聲大家都聽(tīng)見(jiàn)了,這就叫廣播。張三聽(tīng)到后做了回應(yīng),別人聽(tīng)到了沒(méi)做回應(yīng),這樣就與張三取得了聯(lián)系。
3)頭信息分析 如下圖左欄所示,第1數(shù)據(jù)包包含了兩個(gè)頭信息:
以太網(wǎng)(
Ethernet)和ARP。

圖10
下表2是
以太網(wǎng)的頭信息,括號(hào)內(nèi)的數(shù)均為該字段所占字節(jié)數(shù),
以太網(wǎng)報(bào)頭中的前兩個(gè)字段是
以太網(wǎng)的源地址和目的地址。目的地址為全1的特殊地址是廣播地址。電纜上的所有
以太網(wǎng)接口都要接收廣播的數(shù)據(jù)幀。兩個(gè)字節(jié)長(zhǎng)的
以太網(wǎng)幀類型表示后面數(shù)據(jù)的類型。對(duì)于ARP請(qǐng)求或應(yīng)答來(lái)說(shuō),該字段的值為0806。
第2行中可以看到,盡管ARP請(qǐng)求是廣播的,但是ARP應(yīng)答的目的地址卻是1號(hào)機(jī)的(00 50 FC 22 C7 BE)。ARP應(yīng)答是直接送到請(qǐng)求端主機(jī)的。

表2
下表3是ARP
協(xié)議的頭信息。硬件類型字段表示硬件地址的類型。它的值為1即表示
以太網(wǎng)地址。
協(xié)議類型字段表示要映射的
協(xié)議地址類型。它的值為0800即表示IP地址。它的值與包含I P數(shù)據(jù)報(bào)的
以太網(wǎng)數(shù)據(jù)幀中的類型字段的值相同。接下來(lái)的兩個(gè)1字節(jié)的字段,硬件地址長(zhǎng)度和
協(xié)議地址長(zhǎng)度分別指出硬件地址和
協(xié)議地址的長(zhǎng)度,以字節(jié)為單位。對(duì)于
以太網(wǎng)上IP地址的ARP請(qǐng)求或應(yīng)答來(lái)說(shuō),它們的值分別為6和4。Op即操作(Opoperation),1是ARP請(qǐng)求、2是ARP應(yīng)答、3是RARP請(qǐng)求和4為RARP應(yīng)答,第二行中該字段值為2表示應(yīng)答。接下來(lái)的四個(gè)字段是發(fā)送端的硬件地址、發(fā)送端的IP地址、目的端的硬件地址和目的端IP地址。注意,這里有一些重復(fù)信息:在
以太網(wǎng)的數(shù)據(jù)幀報(bào)頭中和ARP請(qǐng)求數(shù)據(jù)幀中都有發(fā)送端的硬件地址。對(duì)于一個(gè)ARP請(qǐng)求來(lái)說(shuō),除目的端硬件地址外的所有其他的字段都有填充值。
表3的第2行為應(yīng)答,當(dāng)系統(tǒng)收到一份目的端為本機(jī)的ARP請(qǐng)求報(bào)文后,它就把硬件地址填進(jìn)去,然后用兩個(gè)目的端地址分別替換兩個(gè)發(fā)送端地址,并把操作字段置為2,最后把它發(fā)送回去。

表3
第二組 建立連接 1)下圖顯示的是3-5行的數(shù)據(jù)

圖11
2)解釋數(shù)據(jù)包
這三行數(shù)據(jù)是兩機(jī)建立連接的過(guò)程。
這三行的核心意思就是
TCP協(xié)議的三次握手。
TCP的數(shù)據(jù)包是靠IP
協(xié)議來(lái)傳輸?shù)摹5獻(xiàn)P
協(xié)議是只管把數(shù)據(jù)送到出去,但不能保證IP數(shù)據(jù)報(bào)能成功地到達(dá)目的地,保證數(shù)據(jù)的可靠傳輸是靠
TCP協(xié)議來(lái)完成的。當(dāng)接收端收到來(lái)自發(fā)送端的信息時(shí),接受端詳發(fā)送短發(fā)送一條應(yīng)答信息,意思是:“我已收到你的信息了?!钡谌M數(shù)據(jù)將能看到這個(gè)過(guò)程。
TCP是一個(gè)面向連接的
協(xié)議。無(wú)論哪一方向另一方發(fā)送數(shù)據(jù)之前,都必須先在雙方之間建立一條連接。建立連接的過(guò)程就是三次握手的過(guò)程。
這個(gè)過(guò)程就像要我找到了張三向他借幾本書(shū),第一步:我說(shuō):“你好,我是擔(dān)子”,第二步:張三說(shuō):“你好,我是張三”,第三步:我說(shuō):“我找你借幾本書(shū)?!边@樣通過(guò)問(wèn)答就確認(rèn)對(duì)方身份,建立了聯(lián)系。
下面來(lái)
分析一下此例的三次握手過(guò)程。
1))請(qǐng)求端208號(hào)機(jī)發(fā)送一個(gè)初始序號(hào)(SEQ)987694419給1號(hào)機(jī)。
2))服務(wù)器1號(hào)機(jī)收到這個(gè)序號(hào)后,將此序號(hào)加1值為987694419作為應(yīng)答信號(hào)(ACK),同時(shí)隨機(jī)產(chǎn)生一個(gè)初始序號(hào)(SEQ)1773195208,這兩個(gè)信號(hào)同時(shí)發(fā)回到請(qǐng)求端208號(hào)機(jī),意思為:“消息已收到,讓我們的數(shù)據(jù)流以1773195208這個(gè)數(shù)開(kāi)始?!?
3))請(qǐng)求端208號(hào)機(jī)收到后將確認(rèn)序號(hào)設(shè)置為服務(wù)器的初始序號(hào)(SEQ)1773195208加1為1773195209作為應(yīng)答信號(hào)。
以上三步完成了三次握手,雙方建立了一條通道,接下來(lái)就可以進(jìn)行數(shù)據(jù)傳輸了。
下面
分析TCP頭信息就可以看出,在握手過(guò)程中
TCP頭部的相關(guān)字段也發(fā)生了變化。
3)頭信息
分析 如圖12所示,第3數(shù)據(jù)包包含了三頭信息:
以太網(wǎng)(
Ethernet)和IP和
TCP。
頭信息少了ARP多了IP、
TCP,下面的過(guò)程也沒(méi)有ARP的參與,可以這樣理解,在局域網(wǎng)內(nèi),ARP負(fù)責(zé)的是在眾多聯(lián)網(wǎng)的計(jì)算機(jī)中找到需要找的計(jì)算機(jī),找到工作就完成了。
以太網(wǎng)的頭信息與第1、2行不同的是幀類型為0800,指明該幀類型為IP。

圖12
IP
協(xié)議頭信息
IP是
TCP/IP
協(xié)議族中最為核心的
協(xié)議。從圖5可以看出所有的
TCP、
UDP、ICMP及IGMP數(shù)據(jù)都以IP數(shù)據(jù)報(bào)格式傳輸?shù)?,有個(gè)形象的比喻IP
協(xié)議就像運(yùn)貨的卡車,將一車車的貨物運(yùn)向目的地。主要的貨物就是
TCP或
UDP分配給它的。需要特別指出的是IP提供不可靠、無(wú)連接的數(shù)據(jù)報(bào)傳送,也就是說(shuō)I P僅提供最好的傳輸服務(wù)但不保證IP數(shù)據(jù)報(bào)能成功地到達(dá)目的地。看到這你會(huì)不會(huì)擔(dān)心你的E_MAIL會(huì)不會(huì)送到朋友那,其實(shí)不用擔(dān)心,上文提過(guò)保證數(shù)據(jù)正確到達(dá)目的地是
TCP的工作,稍后我們將詳細(xì)解釋。
如表4是IP
協(xié)議的頭信息。

表4 IP數(shù)據(jù)報(bào)格式及首部中的各字段
圖12中所宣布分45 00—71 01為IP的頭信息。這些數(shù)是十六進(jìn)制表示的。一個(gè)數(shù)占4位,例如:4的二進(jìn)制是0100
4位版本:表示目前的
協(xié)議版本號(hào),數(shù)值是4表示版本為4,因此IP有時(shí)也稱作
IPv4;
4位首部長(zhǎng)度:頭部的是長(zhǎng)度,它的單位是32位(4個(gè)字節(jié)),數(shù)值為5表示IP頭部長(zhǎng)度為20字節(jié)。
8位服務(wù)類型(TOS):00,這個(gè)8位字段由3位的優(yōu)先權(quán)子字段,現(xiàn)在已經(jīng)被忽略,4位的TOS子字段以及1 位的未用字段(現(xiàn)在為0)構(gòu)成。4位的TOS子字段包含:最小延時(shí)、最大吞吐量、最高可靠性以及最小費(fèi)用構(gòu)成,這四個(gè)1位最多只能有一個(gè)為1,本例中都為0,表示是一般服務(wù)。
16位總長(zhǎng)度(字節(jié)數(shù)):總長(zhǎng)度字段是指整個(gè)IP數(shù)據(jù)報(bào)的長(zhǎng)度,以字節(jié)為單位。數(shù)值為00 30,換算為十進(jìn)制為48字節(jié),48字節(jié)=20字節(jié) 的IP頭+28字節(jié)的
TCP頭,這個(gè)數(shù)據(jù)報(bào)只是傳送的控制信息,還沒(méi)有傳送真正的數(shù)據(jù),所以目前看到的總長(zhǎng)度就是報(bào)頭的長(zhǎng)度。
16位標(biāo)識(shí):標(biāo)識(shí)字段唯一地標(biāo)識(shí)主機(jī)發(fā)送的每一份數(shù)據(jù)報(bào)。通常每發(fā)送一份報(bào)文它的值就會(huì)加1,第3行為數(shù)值為30 21,第5行為30 22,第7行為30 23。分片時(shí)涉及到標(biāo)志字段和片偏移字段,本文不討論這兩個(gè)字段。
8位生存時(shí)間(TTL):TTL(time-to-live)生存時(shí)間字段設(shè)置了數(shù)據(jù)報(bào)可以經(jīng)過(guò)的最多路由器數(shù)。它指定了數(shù)據(jù)報(bào)的生存時(shí)間。ttl的初始值由源主機(jī)設(shè)置,一旦經(jīng)過(guò)一個(gè)處理它的路由器,它的值就減去1??筛鶕?jù)TTL值判斷服務(wù)器是什么系統(tǒng)和經(jīng)過(guò)的路由器。本例為80,換算成十進(jìn)制為128,WINDOWS操作系統(tǒng)TTL初始值一般為128,UNIX操作系統(tǒng)初始值為255,本例表示兩個(gè)機(jī)器在同一網(wǎng)段且操作系統(tǒng)為WINDOWS。
8位
協(xié)議:表示
協(xié)議類型,6表示傳輸層是
TCP協(xié)議。
16位首部檢驗(yàn)和:當(dāng)收到一份I P數(shù)據(jù)報(bào)后,同樣對(duì)首部中每個(gè)16 位進(jìn)行二進(jìn)制反碼的求和。由于接收方在計(jì)算過(guò)程中包含了發(fā)送方存在首部中的檢驗(yàn)和,因此,如果首部在傳輸過(guò)程中沒(méi)有發(fā)生任何差錯(cuò),那么接收方計(jì)算的結(jié)果應(yīng)該為全1。如果結(jié)果不是全1,即檢驗(yàn)和錯(cuò)誤,那么IP就丟棄收到的數(shù)據(jù)報(bào)。但是不生成差錯(cuò)報(bào)文,由上層去發(fā)現(xiàn)丟失的數(shù)據(jù)報(bào)并進(jìn)行重傳。
32位源IP地址和32位目的IP地址:實(shí)際這是IP
協(xié)議中核心的部分,但介紹這方面的文章非常多,本文搭建的又是一個(gè)最簡(jiǎn)單的網(wǎng)絡(luò)結(jié)構(gòu),不涉及路由,本文對(duì)此只做簡(jiǎn)單介紹,相關(guān)知識(shí)請(qǐng)參閱其它文章。32位的IP地址由一個(gè)網(wǎng)絡(luò)ID和一個(gè)主機(jī)ID組成。本例源IP地址為C0 A8 71 D0,轉(zhuǎn)換為十進(jìn)制為:192.168.113.208; 目的IP地址為C0 A8 71 01,轉(zhuǎn)換為十進(jìn)制為:192.168.113.1。網(wǎng)絡(luò)地址為192.168.113,主機(jī)地址分別為1和208,它們的網(wǎng)絡(luò)地址是相同的所以在一個(gè)網(wǎng)段內(nèi),這樣數(shù)據(jù)在傳送過(guò)程中可直接到達(dá)。
TCP協(xié)議頭信息
如表5是ICP
協(xié)議的頭信息。

表5
TCP包首部
第三行
TCP的頭信息是:04 28 00 15 3A DF 05 53 00 00 00 00 70 02 40 00 9A 8D 00 00 02 04 05 B4 01 01 04 02
端口號(hào):常說(shuō)
FTP占21端口、HTTP占80端口、
TELNET占23端口等,這里指的端口就是
TCP或
UDP的端口,端口就像通道兩端的門(mén)一樣,當(dāng)兩機(jī)進(jìn)行通訊時(shí)門(mén)必須是打開(kāi)的。源端口和目的端口各占16位,2的16次方等于65536,這就是每臺(tái)電腦與其它電腦聯(lián)系所能開(kāi)的“門(mén)”。一般作為服務(wù)一方每項(xiàng)服務(wù)的端口號(hào)是固定的。本例目的端口號(hào)為00 15,換算成十進(jìn)制為21,這正是
FTP的默認(rèn)端口,需要指出的是這是
FTP的控制端口,數(shù)據(jù)傳送時(shí)用另一端口,第三組的
分析能看到這一點(diǎn)??蛻舳伺c服務(wù)器聯(lián)系時(shí)隨機(jī)開(kāi)一個(gè)大于1024的端口,本例為04 28,換算成十進(jìn)制為1064。你的電腦中了木馬也會(huì)開(kāi)一個(gè)服務(wù)端口。觀察端口非常重要,不但能看出本機(jī)提供的正常服務(wù),還能看出不正常的連接。Windows察看端口的命令時(shí)netstat。
32位序號(hào):也稱為順序號(hào)(Sequence Number),簡(jiǎn)寫(xiě)為SEQ,從上面三次握手的
分析可以看出,當(dāng)一方要與另一方聯(lián)系時(shí)就發(fā)送一個(gè)初始序號(hào)給對(duì)方,意思是:“讓我們建立聯(lián)系吧?”,服務(wù)方收到后要發(fā)個(gè)獨(dú)立的序號(hào)給發(fā)送方,意思是“消息收到,數(shù)據(jù)流將以這個(gè)數(shù)開(kāi)始?!庇纱丝煽闯觯?A target=_blank>TCP連接完全是雙向的,即雙方的數(shù)據(jù)流可同時(shí)傳輸。在傳輸過(guò)程中雙方數(shù)據(jù)是獨(dú)立的,因此每個(gè)
TCP連接必須有兩個(gè)順序號(hào)分別對(duì)應(yīng)不同方向的數(shù)據(jù)流。
32位確認(rèn)序號(hào):也稱為應(yīng)答號(hào)(Acknowledgment Number),簡(jiǎn)寫(xiě)為ACK。在握手階段,確認(rèn)序號(hào)將發(fā)送方的序號(hào)加1作為回答,在數(shù)據(jù)傳輸階段,確認(rèn)序號(hào)將發(fā)送方的序號(hào)加發(fā)送的數(shù)據(jù)大小作為回答,表示確實(shí)收到這些數(shù)據(jù)。在第三組的
分析中將看到這一過(guò)程。
4位首部長(zhǎng)度:。這個(gè)字段占4位,它的單位時(shí)32位(4個(gè)字節(jié))。本例值為7,
TCP的頭長(zhǎng)度為28字節(jié),等于正常的長(zhǎng)度2 0字節(jié)加上可選項(xiàng)8個(gè)字節(jié)。,
TCP的頭長(zhǎng)度最長(zhǎng)可為60字節(jié)(二進(jìn)制1111換算為十進(jìn)制為15,15*4字節(jié)=60字節(jié))。
6個(gè)標(biāo)志位。
URG 緊急指針,告訴接收
TCP模塊緊要指針域指著緊要數(shù)據(jù)
ACK 置1時(shí)表示確認(rèn)號(hào)(為合法,為0的時(shí)候表示數(shù)據(jù)段不包含確認(rèn)信息,確認(rèn)號(hào)被忽略。
PSH 置1時(shí)請(qǐng)求的數(shù)據(jù)段在接收方得到后就可直接送到應(yīng)用程序,而不必等到緩沖區(qū)滿時(shí)才傳送。
RST 置1時(shí)重建連接。如果接收到RST位時(shí)候,通常發(fā)生了某些錯(cuò)誤。
SYN 置1時(shí)用來(lái)發(fā)起一個(gè)連接。
FIN 置1時(shí)表示發(fā)端完成發(fā)送任務(wù)。用來(lái)釋放連接,表明發(fā)送方已經(jīng)沒(méi)有數(shù)據(jù)發(fā)送了。
圖13的3個(gè)圖分別為3-5行
TCP協(xié)議的頭信息,這三行是三次握手的過(guò)程,我們看看握手的過(guò)程標(biāo)志位發(fā)生了什么?
如圖13-1請(qǐng)求端208號(hào)機(jī)發(fā)送一個(gè)初始序號(hào)(SEQ)987694419給1號(hào)機(jī)。標(biāo)志位SYN置為1。
如圖13-2服務(wù)器1號(hào)機(jī)收到這個(gè)序號(hào)后,將應(yīng)答信號(hào)(ACK)和隨機(jī)產(chǎn)生一個(gè)初始序號(hào)(SEQ)1773195208發(fā)回到請(qǐng)求端208號(hào)機(jī),因?yàn)橛袘?yīng)答信號(hào)和初始序號(hào),所以標(biāo)志位ACK和SYN都置為1。
如圖13-3請(qǐng)求端208號(hào)機(jī)收到1號(hào)機(jī)的信號(hào)后,發(fā)回信息給1號(hào)機(jī)。標(biāo)志位ACK置為1,其它標(biāo)志為都為0。注意此時(shí)SYN值為0,SYN是標(biāo)示發(fā)起連接的,上兩部連接已經(jīng)完成。

16位窗口大小:
TCP的流量控制由連接的每一端通過(guò)聲明的窗口大小來(lái)提供。窗口大小為字節(jié)數(shù),起始于確認(rèn)序號(hào)字段指明的值,這個(gè)值是接收端正期望接收的字節(jié)。窗口大小是一個(gè)16字節(jié)字段,因而窗口大小最大為65535字節(jié)。
16位檢驗(yàn)和:檢驗(yàn)和覆蓋了整個(gè)的
TCP報(bào)文段:
TCP首部和
TCP數(shù)據(jù)。這是一個(gè)強(qiáng)制性的字段,一定是由發(fā)端計(jì)算和存儲(chǔ),并由收端進(jìn)行驗(yàn)證。
16位緊急指針:只有當(dāng)U R G標(biāo)志置1時(shí)緊急指針才有效。緊急指針是一個(gè)正的偏移量,和序號(hào)字段中的值相加表示緊急數(shù)據(jù)最后一個(gè)字節(jié)的序號(hào)。
選項(xiàng):圖13-1和圖13-2有8個(gè)字節(jié)選項(xiàng),圖13-3沒(méi)有選項(xiàng)。最常見(jiàn)的可選字段是最長(zhǎng)報(bào)文大小,又稱為MSS (Maximum Segment Size)。每個(gè)連接方通常都在握手的第一步中指明這個(gè)選項(xiàng)。它指明本端所能接收的最大長(zhǎng)度的報(bào)文段。圖13-1可以看出208號(hào)機(jī)可以接受的最大字節(jié)數(shù)為1460字節(jié),1460也是
以太網(wǎng)默認(rèn)的大小,在第三組的數(shù)據(jù)
分析中可以看到數(shù)據(jù)傳送正是以1460字節(jié)傳送的。
握手小結(jié)
上面我們分開(kāi)講了三次握手,看著有點(diǎn)散,現(xiàn)在小結(jié)一下。
第三組 數(shù)據(jù)傳輸 1)下圖顯示的是57-60行的數(shù)據(jù)

圖14
2)解釋數(shù)據(jù)包
這四行數(shù)據(jù)是數(shù)據(jù)傳輸過(guò)程中一個(gè)發(fā)送一個(gè)接收的過(guò)程。
前文說(shuō)過(guò),
TCP提供一種面向連接的、可靠的字節(jié)流服務(wù)。當(dāng)接收端收到來(lái)自發(fā)送端的信息時(shí),接受端要發(fā)送一條應(yīng)答信息,表示收到此信息。數(shù)據(jù)傳送時(shí)被
TCP分割成認(rèn)為最適合發(fā)送的數(shù)據(jù)塊。一般
以太網(wǎng)在傳送時(shí)
TCP將數(shù)據(jù)分為1460字節(jié)。也就是說(shuō)數(shù)據(jù)在發(fā)送方被分成一塊一塊的發(fā)送,接受端收到這些數(shù)據(jù)后再將它們組合在一起。
57行顯示1號(hào)機(jī)給208號(hào)機(jī)發(fā)送了大小為1514字節(jié)大小的數(shù)據(jù),注意我們前文講過(guò)數(shù)據(jù)發(fā)送時(shí)是層層加
協(xié)議頭的,1514字節(jié)=14字節(jié)
以太網(wǎng)頭 + 20字節(jié)IP頭 + 20字節(jié)
TCP頭 + 1460字節(jié)數(shù)據(jù)
58行顯示的應(yīng)答信號(hào)ACK為:1781514222,這個(gè)數(shù)是57行得SEQ序號(hào)1781512762加上傳送的數(shù)據(jù)1460,208號(hào)機(jī)將這個(gè)應(yīng)答信號(hào)發(fā)給1號(hào)機(jī)說(shuō)明已收到發(fā)來(lái)的數(shù)據(jù)。
59、60行顯示的是繼續(xù)傳送數(shù)據(jù)的過(guò)程。
這個(gè)過(guò)程就像我向張三借書(shū),借給我?guī)妆疚乙f(shuō):“我已借了你幾本了。”,他說(shuō):“知道了”。
3)頭信息
圖15-1和圖15-2分別是57行和58行的頭信息,解釋參考第二組。
第四組 終止連接 1)下圖顯示的是93-96行的數(shù)據(jù)

圖16
2)解釋數(shù)據(jù)包
93-96是兩機(jī)通訊完關(guān)閉的過(guò)程。
建立一個(gè)連接需要三次握手,而終止一個(gè)連接要經(jīng)過(guò)4次握手。這是因?yàn)橐粋€(gè)
TCP連接是全雙工(即數(shù)據(jù)在兩個(gè)方向上能同時(shí)傳遞),每個(gè)方向必須單獨(dú)地進(jìn)行關(guān)閉。4次握手實(shí)際上就是雙方單獨(dú)關(guān)閉的過(guò)程。
本例文件下載完后,關(guān)閉瀏覽器終止了與服務(wù)器的連接圖16的93-96行顯示的就是終止連接所經(jīng)過(guò)4次握手過(guò)程。
93行數(shù)據(jù)顯示的是關(guān)閉瀏覽器后,如圖17-1所示208號(hào)機(jī)將FIN置1連同序號(hào)(SEQ)987695574發(fā)給1號(hào)機(jī)請(qǐng)求終止連接。
94行數(shù)據(jù)和圖17-2顯示1號(hào)機(jī)收到FIN關(guān)閉請(qǐng)求后,發(fā)回一個(gè)確認(rèn),并將應(yīng)答信號(hào)設(shè)置為收到序號(hào)加1,這樣就終止了這個(gè)方向的傳輸。
95行數(shù)據(jù)和圖17-3顯示1號(hào)機(jī)將FIN置1連同序號(hào)(SEQ)1773196056發(fā)給208號(hào)機(jī)請(qǐng)求終止連接。
96行數(shù)據(jù)和圖17-4顯示208號(hào)機(jī)收到FIN關(guān)閉請(qǐng)求后,發(fā)回一個(gè)確認(rèn),并將應(yīng)答信號(hào)設(shè)置為收到序號(hào)加1,至此
TCP連接徹底關(guān)閉。
3)頭信息

六、掃描實(shí)例 下面我們?cè)倥e個(gè)ping的實(shí)例,測(cè)試某臺(tái)計(jì)算機(jī)是否通,最常用的命令就是ping命令。Ping 一臺(tái)計(jì)算機(jī),出現(xiàn)如圖18所示界面就是通,出現(xiàn)如圖19所示界面就是不通,不通有兩種情況,一是該計(jì)算機(jī)不存在或沒(méi)接網(wǎng)線,二是該計(jì)算機(jī)安裝了防火墻并設(shè)置為不允許ping。如何區(qū)別這兩種情況呢?下面還是利用iris跟蹤上述情況。

圖18

圖19
如圖20是ping通的情況。
如圖21是ping不通該計(jì)算機(jī)不存在的情況。從圖可以看出ARP請(qǐng)求沒(méi)有回應(yīng)。
如圖22是ping不通,該計(jì)算機(jī)存在但安裝了防火墻的情況。從圖可以看出ARP請(qǐng)求有回應(yīng)。但I(xiàn)CMP請(qǐng)求沒(méi)回應(yīng)。
從
分析可以看出雖然后兩種情況的表面現(xiàn)象是一樣的,但實(shí)質(zhì)確是截然相反的。通過(guò)頭信息可以清楚的看出PING是
ICMP
協(xié)議來(lái)完成的,通訊過(guò)程是在第三層完成的,沒(méi)有用到第四層的
TCP協(xié)議。

圖20

圖21

圖22
七、后記 本文不是個(gè)教程,許多問(wèn)題都沒(méi)有涉及到,比如TCP重發(fā)、IP分解、路由等,只是提出個(gè)學(xué)習(xí)思路,希望能起到拋磚引玉的作用。TCP/IP協(xié)議族是非常復(fù)雜的,但只要理解了還是不難學(xué)的。最后向感興趣的朋友提個(gè)問(wèn)題:分別telnet三臺(tái)機(jī)器,一臺(tái)正常23端口開(kāi)放,一臺(tái)網(wǎng)是通的但23端口沒(méi)開(kāi)放,另外一臺(tái)是不存在的。用我們學(xué)過(guò)的方法跟蹤一下,比較三個(gè)的不同。其實(shí)這就是用TCP掃描判斷對(duì)方機(jī)器是否在線的一種方法。