WireShark捕獲報文理解TCP協議

TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議。在OSI模型的第四層傳輸層。這裏寫圖片描述

  1. TCP協議三次握手

三次握手協議指的是在發送數據的準備階段,服務器端和客戶端之間需要進行三次交互。
第一次握手:客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶的syn(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。連接建立後,客戶端和服務器就可以開始進行數據傳輸了。

  1. TCP報文

理解以上三次握手,我們需要看看TCP的協議報文
這裏寫圖片描述
1:source port :源端口
2:desctination port:目的端口
3: Sequence Number :序號
4: Acknowledgment Number :確認序列號
5: Offset:偏移量
6: Flag :標誌位
7: Checksum:校驗和
8: Urgent Pointer:緊急指針
需要重點說一下Flag(標誌位):
Flag(標誌位):主要是用於操控TCP的狀態機的,依次爲URG,ACK,PSH,RST,SYN,FIN。
•URG:此標誌表示TCP包的緊急指針域有效,用來保證TCP連接不被中斷,並且督促中間層設備要儘快處理這些數據;
•ACK:此標誌表示應答域有效,就是說前面所說的TCP應答號將會包含在TCP數據包中;有兩個取值:0和1,爲1的時候表示應答域有效,反之爲0;
•PSH:這個標誌位表示Push操作。所謂Push操作就是指在數據包到達接收端以後,立即傳送給應用程序,而不是在緩衝區中排隊;
•RST:這個標誌表示連接復位請求。用來複位那些產生錯誤的連接,也被用來拒絕錯誤和非法的數據包;
•SYN:表示同步序號,用來建立連接。
•FIN: 表示發送端已經達到數據末尾,也就是說雙方的數據傳送完成,沒有數據可以傳送了,發送FIN標誌位的TCP數據包後,連接將被斷開。這個標誌的數據包也經常被用於進行端口掃描。
需要特別主要不要將Flag標誌位中的ACK和確認序列號ack搞混淆

  1. WireShark抓包
    先來看一下三次握手的流程圖,很經典的一張圖。從其他地方Copy過來的
    這裏寫圖片描述

通過wireShar捕獲的報文來理解上圖

通過上圖我們可以看到通過發送三次報文來建立了客戶端和服務端的連接客戶端–>客戶端 第一次發送標誌位(SYN=1)和序列號(Seq=0)
這裏寫圖片描述
服務端–>客戶端 第二次發送標誌位(SYN=1,ACK=1 )確認序列號(Ack=1),序列號(Seq=0)
這裏寫圖片描述
客戶端–>服務端 第三次發送標誌位(ACK=1) 確認序列號(Ack=1)
這裏寫圖片描述

四次揮手斷開連接:
這裏寫圖片描述

服務端–>客戶端 :第一次發送標誌位(FIN=1,ACK=1 )確認序列號(Ack=397),序列號(Seq=717 )

客戶端–>服務端 :第二次發送標誌位(ACK=1)確認序列號(Ack=718),序列號(Seq=397)

服務端–>客戶端 :第三次發送標誌位(FIN=1,ACK=1 )確認序列號(Ack=718),序列號(Seq=397 )

客戶端–>服務端 :第四次發送標誌位(FIN=1,ACK=1 )確認序列號(Ack=718),序列號(Seq=398 )

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章