Wireshark實戰分析之TCP協議

(1) TCP是怎麼樣的協議?

       TCP(Transmission Control Protocol)傳輸控制協議,是一種面向連接的,可靠的,基於IP的傳輸層協議。它的主要目地是爲數據提供可靠的端到端的傳輸。


(2) TCP協議的由來?

      上一節學習了UDP協議,可以知道UDP協議非常簡單,而且容易實現。但是其可靠性較差,一旦將數據包發出,將無法知道對方是否收到。爲了解決這個問題,TCP協議就誕生了。使用TCP協議,可以提供網絡的安全性。因爲使用TCP協議傳輸數據時,每發出一個數據包都要求確認。如果其中有一個數據包丟失,就收不到確定包,發送方就知道應該重發這個數據包。這樣TCP協議就保證了數據的安全性。


(3)TCP三次握手

      

          上圖就是TCP協議三次握手建議的連接。 其中Seq表示請求序列號,Ack表示確認序列號,SYN和ACK爲控制位


        1.   第一次握手

         

          第一次握手建立連接時,客戶端向服務器發送SYN報文(Seq=x, SYN=1),客戶端進去SYN_SENT狀態, 等待服務器確定。

          2. 第2次握手

          

         首先,服務器收到客戶端的請求,向客戶端回覆一個確認信息(Ack = x + 1)

         其次,服務器再次向客戶端發送一個SYN包(seq=y)建立連接請求,此時服務器進去SYN_RECV狀態

        3.   第3次握手

         

          第三次握手客戶端收到服務器的回覆(SYN+ACK報文)。此時,客戶端向服務器端發送ACK,此包發送完畢後客戶端和服務器端進入ESTABLISHED狀態。完成三次握手

(4) TCP四次斷開

       在TCP通信中,當每次通信完畢後都會終止連接。該過程包含4個數據包,並且用一個FIN標誌來表明連接的終結。

        

           TCP斷開需要四個步驟:

           a.       客戶端通過發送一個設置了FIN和ACK標誌的TCP數據包,告訴服務器通信已經完成

           b.      服務器收到客戶端的數據後,發送一個ACK數據包來響應客戶端

           c.      服務器再次向客戶端傳輸一個自己的FIN/ACK數據包

           d.     客戶端手動啊服務器的FIN/ACK包後,響應服務器一個ACK數據包。然後結束通信。


(5)有人機會問, 爲什麼建立連接只需3步,而斷開需要4步?

         答:   因爲在客戶端與服務器建立連接時,當收到客戶端發送 的SYN數據後,是把ACK/SYN放在一起發送給客戶端的。 但是當斷開連接時,當收到客戶端發送的FIN數據後,只能說明數據發送完畢,客戶端不再發送數據,但是服務還是連接的。只能說明客戶端沒有數據發送給服務端了,但不代表服務端沒有數據要發送給客戶端了。當服務器所有的數據都發送完畢後,纔會發送FIN/ACK數據,請求斷開連接。


(1)TCP首部格式

         

          源端口:   用來傳輸數據報的端口

          目標端口: 數據包將要發送到的端口

          序號:      用來表示一個TCP片段。這個值用來表示數據流中的部分數據沒有丟失

          確認號:  表示通信中希望從另一個設備得到的下一個數據包的序號

          數據偏移: 表示此塊數據在整塊數據中的偏移

          保留: 包括Reserved, Nonce, CWR和ECN-Echo,共6個比特位

          標記:用來表示所傳輸的TCP數據包類型。該字段中可用的標記包括URG, ACK, PSH, RST,    SYN, FIN

          窗口: TCP接受者緩衝區的大小

          檢驗和: 用來保證TCP首部和數據部分的完整性

         緊急指針: 如果設置了URG位,這個值將被檢查作爲額外的指令

         選項: 各種可選的域,可以在TCP數據包中進行指定


         上面提到了TCP傳輸時,可用的標記有URG, ACK, PSH, RST, SYN, FIN。 下面分別介紹這幾個標記

         URG:    緊急標誌。此標誌表示TCP包的緊急指針域有效,用來保證TCP連接補被中斷。

         ACK:     確認標誌。此標誌表示應答域有效。1表示應答域有效,0表示無效

         PSH:    此標誌表示Push操作,所謂Push操作就是指在數據包到達接收端以後,立刻傳送到應用程序,而不在緩衝區排隊。

         RST:    該標誌表示連接復位請求。

         SYN:    表示同步序號,用來建立連接。SYN標誌位和ACK標誌位搭配使用。當連接請求時SYN=1, ACK=0。 當連接被響應的時候,SYN=1, ACK=1.

         FIN:     表示發送端已經達到數據的末尾,也就是說雙方的數據傳輸完成,沒有數據可以傳輸了。此時發送FIN標誌位的TCP數據包後,連接將被斷開。

(2) 捕獲TCP數據包

       

        上圖是捕獲的TCP數據包。接下來對三次握手和四次揮手做詳細說明

(3) 第一次握手(分析461幀)

        

         從以上的分析可以看出,客戶端向服務器發送請求建立連接,當前的序列號爲0。

(4)第二次握手(分析462幀)

       

      從第二次的分析可以看到,服務器收到客戶端的請求建立連接後,發送給客戶端確定包(ACK=1)已經請求建立(SYN=1),當前的序列號爲0,並且希望下一次的系列號爲1.

(5)第三次握手(分析463幀)

       

      當第三次握手成功後,客戶端和服務端就可以建立連接了,就可以傳輸數據了。

      可能這部分有點不好懂,我建議大家實際操作分析,並結合下圖分析

      


(1)捕獲TCP四次揮手數據包

     

(2)接下來分析四次揮手的過程,第一次揮手(分析524幀,通過FIN/ACK標誌確定這個客戶端提出揮手的第一次)

      

        通過第一次揮手客戶端發送FIN和ACK標誌,表示本次通信已經結束,請求結束連接

(3)分析第二次揮手,也就是525幀

       

(4)分析第三次揮手,也就是526幀

      

 (5)第四次揮手分析,也就是527幀

       

        到這裏TCP四次揮手分析完畢,大家可以實際操作爲主,同時結合下圖分析




發佈了93 篇原創文章 · 獲贊 16 · 訪問量 151萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章