win7系統(tǒng)下載
當前位置: 首頁 > 網(wǎng)絡技術教程 > 詳細頁面

抓包區(qū)分TCP三次握手過程詳細說明

發(fā)布時間:2024-04-12 文章來源:深度系統(tǒng)下載 瀏覽:

我們都知道TCP的連接的建立是通過三次握手,連接的斷開是通過四次揮手完成。大部分人是從大學網(wǎng)絡老師的講課中得知,或者從baidu或者google搜索學習這一過程。但是這些都是理論的,并且很難被記住。

 

今天我們就通過抓包的方式,用抓到的實際的包來分析這一過程的建立。

 

我們所使用的抓包工具是:

Microsoft Network Monitor 3.4.

 

硬件環(huán)境是:

一臺筆記本,一臺pc.

 

網(wǎng)絡環(huán)境是:

筆記本通過無線連接網(wǎng)絡, pc通過有線連接網(wǎng)絡。

 

軟件環(huán)境:

兩臺都是xp, 有兩個簡單的測試程序,tcp 的服務器S和客戶端C。服務器部署在pc上,客戶端部署在筆記本上。

Network Monitor運行在客戶端,也就是筆記本上。

服務端IP:192.168.200.128, 監(jiān)聽端口6001

客戶端IP:192.168.200.107

 

好了,我們現(xiàn)在開始。啟動抓包工具,start new capture, 在filter中輸入, Tcp.SrcPort==6001 || Tcp.DstPort==6001, 然后apply, 接下來我們就可以啟動抓包了。

 

啟動服務器S,然后用客戶端C去連接。

很快我們就可以看到總共有3個包進出:

 

184    9:42:45 2011-4-29    22.2968750    TestTCPClient.exe    192.168.200.107    192.168.200.128    TCP      TCP:Flags=……S., SrcPort=1086, DstPort=6001, PayloadLen=0, Seq=278035085, Ack=0, Win=16384 (  ) = 16384    {TCP:33,
IPv4:32}

 

185    9:42:45 2011-4-29    22.2968750    TestTCPClient.exe    192.168.200.128    192.168.200.107    TCP    TCP:Flags=…A..S., SrcPort=6001, DstPort=1086, PayloadLen=0, Seq=3353324968, Ack=278035086, Win=65535 ( Scale factor
not supported ) = 65535    {TCP:33, IPv4:32}

 

186    9:42:45 2011-4-29    22.2968750    TestTCPClient.exe    192.168.200.107    192.168.200.128    TCP    TCP:Flags=…A…., SrcPort=1086, DstPort=6001, PayloadLen=0, Seq=278035086, Ack=3353324969, Win=17520 (scale factor 0x0)
= 17520    {TCP:33, IPv4:32}

 

第一個包是從客戶端(192.168.200.107)發(fā)出,當然是這樣,因為連接的建立肯定是由客戶端想服務端發(fā)起,目的地址就是我們的服務器所在的pc的ip 地址和端口,服務器的端口是我們事先設定的,而客戶端的端口則是tcp協(xié)議棧分配的,這里可以看出,客戶端通訊端口的分配時在第一次發(fā)包時就已經(jīng)確定好了的,其實這個過程在rfc在有個專門的術語來描述,TCB的建立(transmit control block)。這也就是我們在學校老師講的第一次握手。

為了更好的分析這個包,我們引入tcp的包結構:

抓包分析TCP三次握手過程詳解本站

 

以及整個包的二進制表示:

00 1A A0 C6 BC 79 00 13 02 4A 3A 8A 08 00 45 00 00 30 09 F6 40 00 80 06 DE 94 C0 A8 C8 6B C0 A8 C8 80 04 3E 17 71 10 92 7A 8D 00 00 00 00 70 02 40 00 8A 13 00 00 02 04 05 B4 01 01 04 02

 

這個包里面其實包含了Ethernet header, IP header, TCP header. 為了更加清晰對這個包分析,我么順帶也把其他兩個包的格式列出:

抓包分析TCP三次握手過程詳解本站

                                     IP包格式

 

 

 

抓包分析TCP三次握手過程詳解本站

 

好了有了這些東西我們就分析包里面的東西,我是以圖片的形式展示給大家:

(抱歉,可能圖片有點丑,因為我是用微軟的畫圖程序畫的)

抓包分析TCP三次握手過程詳解本站

 

 

上面的以太網(wǎng)頭部分我們只是標出它的位置,并不做詳細的分析,IP包頭部分我們只看里面的最后8個字節(jié),分別為源IP地址,這里看到正是我們的客戶端,也就是筆記本的Ip地址;還有目的IP地址,正是我們的服務端的Ip地址,也就是pc的Ip地址。

糾正一下:上圖中端口0186應為1086,屬于筆誤。

對于TCP的包頭結構,我做了詳細的分析,只有’Data offset, reserved and flag’這四個字節(jié)需要進一步的說明,因為幾個部分不是字節(jié)對齊的,reserved and flag都是6bit,所以不能簡單一眼看出,需要把他們轉換成二進制表示:

 

1100000000000010

 

紅色部分表示偏移量:1010剛好是5,注意這里的5,并不是5個字節(jié),而是5個偏移量單位,而偏移量單位為4個字節(jié),這樣總偏移量就剛好是我們tcp包頭的大小20個字節(jié)。

藍色部分是保留部分,必須全是0.

綠色部分是標志位,分別代表:

緊急比特URG——當URG=1時,表明緊急指針字段有效。它告訴系統(tǒng)此報文段中有緊急數(shù)據(jù),應盡快傳送(相當于高優(yōu)先級的數(shù)據(jù))。

確認比特ACK——只有當ACK=1時確認號字段才有效。當ACK=0時,確認號無效。

PSH—

復位比特RST(Reset) —— 當RST=1時,表明TCP連接中出現(xiàn)嚴重差錯(如由于主機崩潰或其他原因),必須釋放連接,然后再重新建立運輸連接。
同步比特SYN——同步比特SYN置為1,就表示這是一個連接請求或連接接受報文。
終止比特FIN(FINal)—用來釋放一個連接。當FIN=1時,表明此報文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放運輸連接。

可以看到,第一個請求包,只有SYN標志位是置為1的,其他均為0,表示發(fā)起一個連接。

 

到此第一個包我們就分析完畢。接下來用同樣的方法來分析剩下的兩個包。

第二個包:

00 1A A0 C6 BC 79 00 13 02 4A 3A 8A 08 00 45 00 00 30 09 F6 40 00 80 06 DE 94 C0 A8 C8 6B C0 A8 C8 80 04 3E 17 71 10 92 7A 8D 00 00 00 00 70 02 40 00 8A 13 00 00 02 04 05 B4 01 01 04 02

 

源IP變成了192.168.200.128,端口是6001; 而目的IP變成了192.168.200.107,端口是1086.可以看出這是服務器那邊的機器發(fā)給客戶端的包。

然后看flag部分是:

 

1110000000010010

 

對照tcp包結構就可以看出這個包中,ACK和SYN均置為1,其余均為0.

也就是服務器回應給發(fā)起連接的客戶端的包中ACK和SYN均被置位。

 

第三個包:

1A A0 C6 BC 79 00 13 02 4A 3A 8A 08 00 45 00 00 28 09 F7 40 00 80 06 DE 9B C0 A8 C8 6B C0 A8 C8 80
 04 3E 17 71 10 92 7A 8E C7 DF AD A9 50 10 44 70 3C CE 00 00

源IP:192.168.200.107,端口1086;

目的IP:192.168.200.128,端口6001;

flag部分是:

 

1110000000010000

 

只有SYN置為1,其余均為0,包括ACK。

 

這樣整個連接就建立了。

 

下面用圖示的方式簡單的表示我們上面分析的結果:

抓包分析TCP三次握手過程詳解本站


 

 

到此結束。

本文章關鍵詞: 抓包區(qū)分 TCP三次握手