抓包分析TCP的三次握手和四次握手

2022-08-25 00:03:12 字數 1793 閱讀 6724

1、tcp建立連線的三次握手

1、1前言:介紹三次握手之前,先介紹tcp層的幾個flags欄位,這個欄位有如下的幾種標示

syn表示建立連線,

fin表示關閉連線,

ack表示響應,

psh表示有 data資料傳輸,

rst表示連線重置。

1、2 三次握手的步驟

第一次握手:主機a傳送位碼為syn=1,隨機產生seq number=1234567的資料報到伺服器,主機b由syn=1知道,a要求建立聯機;

第二次握手:主機b收到請求後要確認聯機資訊,向a傳送ack number=(主機a的seq+1),syn=1,ack=1,隨機產生seq=7654321的包;

第三次握手:主機a收到後檢查ack number是否正確,即第一次傳送的seq number+1,以及位碼ack是否為1,若正確,主機a會再傳送ack number=(主機b的seq+1),ack=1,主機b收到後確認seq值與ack=1則連線建立成功。

完成三次握手,主機a與主機b開始傳送資料。

從抓包分析中可以很清晰的看到tcp三次握手,下圖就是完整的三次握手,客戶端41826埠和伺服器的80埠建立了連線

2、tcp斷開連線的四次握手

tcp斷開連線有兩種方式,第一種是正常的四次握手斷開的,第二種是rst異常斷開的

2、1 正常斷開的四次握手:

下圖來自網路

假設client端發起中斷連線請求,也就是傳送fin報文。server端接到fin報文後,意思是說"我client端沒有資料要發給你了",但是如果你還有資料沒有傳送完成,則不必急著關閉socket,可以繼續傳送資料。所以你先傳送ack,"告訴client端,你的請求我收到了,但是我還沒準備好,請繼續你等我的訊息"。這個時候client端就進入fin_wait狀態,繼續等待server端的fin報文。當server端確定資料已傳送完成,則向client端傳送fin報文,"告訴client端,好了,我這邊資料發完了,準備好關閉連線了"。client端收到fin報文後,"就知道可以關閉連線了,但是他還是不相信網路,怕server端不知道要關閉,所以傳送ack後進入time_wait狀態,如果server端沒有收到ack則可以重傳。「,server端收到ack後,"就知道可以斷開連線了"。client端等待了2msl後依然沒有收到回覆,則證明server端已正常關閉,那好,我client端也可以關閉連線了。ok,tcp連線就這樣關閉了!

2、2 用抓包來看斷開連線的四次握手

下圖中的四個箭頭就是標準的四次握手了。

首先伺服器80埠想41826埠發出fin的斷開連線請求

然後第二個箭頭41826收到請求之後想伺服器80埠回覆了乙個ack

接著第三個箭頭41826向伺服器80埠傳送斷開請求fin

最後第四個箭頭,伺服器80向客戶端傳送斷開的回覆ack

這樣四次握手之後,伺服器和客戶端都確認了斷開連線,可以看到斷開連線是雙向的。

2、3 rst異常關閉連線

有時候也會出現異常斷開連線的情況,也就是rst,比如說下圖,伺服器80向客戶端32875傳送斷開請求fin,客戶端也通過這條鏈路回覆了ack,但是此時還有資料需要傳送,所以沒有急著回覆fin,而是先將get請求傳送出去,傳送了get請求之後再傳送的斷開請求fin,但是此時伺服器不知道什麼原因在沒有確認客戶端的確認前就斷開了,所以在接到get請求之後,返回了乙個rst,異常斷開了這條鏈路。

結論:tcp的三次握手和四次握手平時看書本看起來很生澀難懂,但是通過一次http的抓包分析之後,對於tcp的七次握手有了新的了解和認識。

這些理論知識我還是了解的不夠深入,只是學以致用,用來分析網路抓包。不過要想做好網路應用,還是很有必要對tcp,http做深入一點的了解

tcp三次握手和四次握手

建立tcp需要三次握手才能建立,而斷開連線則需要四次握手。整個過程如下圖所示 先來看看如何建立連線的。首先client端傳送連線請求報文,server段接受連線後回覆ack報文,並為這次連線分配資源。client端接收到ack報文後也向server段發生ack報文,並分配資源,這樣tcp連線就建立了...

TCP三次握手和四次握手

ip 網路層 不穩定性。硬體聯絡緊密 傳輸層 1.完全不彌補 udp 無連線不可靠報文傳輸 2.完全彌補 tcp 面向連線的可靠資料報傳遞 tcp傳送資料就包含了tcp三次握手建立連線和關閉連線的四次握手 建立連線用syn傳送,用ack應答 所謂三次握手就是客戶端與伺服器之間的三次應答。伺服器是一直...

TCP 三次握手 四次握手

http常見狀態碼 200 ok 伺服器成功處理了請求 301 302 moved permanently 重定向 response中應該包含乙個location url,說明資源現在所處的位置 304 not modified 未修改 客戶的快取資源是最新的,要客戶端使用快取 404 not fo...