Wireshark 圖解三次握手
某一天有個叫
vasks
的朋友留言讓我講講Wireshark抓包tcp三次握手
, 今天就安排出來。當然後臺也有很多網友留言講講其它的知識, 感謝支持, 都在陸續安排。
什麼是三次握手
客戶端和服務器在發送數據之前會進行三次交互建立連接, 然後再發送數據。
三次交互過程
-
- 客戶端發送
SYN=1
(表示建立連接), 同時發送一個隨機數Seq=x
- 客戶端發送
-
- 服務器收到請求後回覆
Ack=x+1
, 同時發送一個隨機數Seq=y
- 服務器收到請求後回覆
-
- 客戶端收到響應後回覆
Ack=y+1
, 同時發送Seq=x+1
- 客戶端收到響應後回覆
爲什麼是三次握手
TCP 是一種可靠的全雙工傳輸方式, 三次握手保證了客戶端和服務端的序列號都能保證確認。
Wireshark 抓包分析三次握手
1. 打開 Wireshark
選擇你的上網網卡, 我選的是
WI-FI: en0
2. 過濾請求
ip.addr == 106.15.55.64 && tcp 表示根據源 ip 目標 ip 和 tcp 協議進行過濾。
106.15.55.64
就是服務器的地址。
4. 瀏覽器訪問 http://tshici.com
紅框就是三次握手的過程
本來想用
https://rumenz.com
做演示, 但是因爲使用了https
協議, 抓包就比較複雜。爲了說明問題就使用了http://tshici.com
進行了演示。
紅框 No 212
客戶端主動發起建立連接的請求。
Syn=1
相對序列號
Seq=0
實際序列號
Seq=348969744
紅框 No 219
藍色框的序號是服務器給的序列號 (相對序列號
Seq=0
, 實際序列號Seq=502372503
), 目的是讓客戶端進行確認。
紅框是服務器確認前面客戶端的請求序列。
相對回覆值
Ack=1
實際回覆值
Ack=348969745
就是上一步的實際 Seq+1
紅框 No 220
image-20220718102606889
客戶端回覆服務器的響應, 並確認了上一步的序列號
相對回覆值
Ack=1
實際回覆值
Ack=502372504
就是上一步的實際 Seq+1(上一步的實際序列號是
Seq=502372503
)
到此客戶端已經和服務器建立的鏈接, 下面就可以傳輸網頁數據了。
補充
上面我提到了 SYN,ACK。在 TCP 協議裏面有
控制位
結構, 一共有 6 個標誌位如下:
-
URG (Urgent Bit):值爲 1 時,緊急指針生效
-
ACK (Acknowledgment Bit):值爲 1 時,確認序號生效
-
PSH (Push Bit):接收方應儘快將這個報文段交給應用層
-
RST (Reset Bit):發送端遇到問題,想要重建連接
-
SYN (Synchronize Bit):同步序號,用於發起一個連接
-
FIN (Finish Bit):發送端要求關閉連接
入門小站 全棧入門知識
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/9NWND3XfuMpeggj9vRqXGw