相關TCP三次握手的知識和面試題總結:
https
wireshark分析tcp的三次握手
- 實驗環境:
- 抓包分析
- 實驗步驟
- 相對序列號
- 參考資料:
實驗環境:
windows10
wiresahrk
抓包分析
實驗步驟
1.打開wireshark,開始過濾;瀏覽器中訪問www.baidu.com,
2.過濾出http

3.選中其中一條,右鍵點擊選中 追蹤流 > tcp流;
會得到如下圖:

可以發現,這時候已經截獲到了tcp三次握手的包,三次握手成功后,第四次才是http連接,說明http連接是建立在三次握手基礎上的!
第一次握手分析:
客戶端發送一個TCP,標志位為SYN,序列號為0, 代表客戶端請求建立連接, 如下圖
從中我們還可以得到那些資訊?
http 80埠
第二次握手:
服務器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(syn=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
服務器發回確認包, 標志位為 SYN,ACK.
將確認序號(Acknowledgement Number)設定為客戶的I S N加1以.即0+1=1, 如下圖

第三次握手:
客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手,
客戶端再次發送確認包(ACK) SYN標志位為0,ACK標志位為1.并且把服務器發來ACK的序號欄位+1,放在確定欄位中發送給對方.并且在資料段放寫ISN的+1, 如下圖

就這樣通過了TCP三次握手,建立了連接!
相對序列號
本段參考:https://www.jianshu.com/p/e779f12ac809
有人可能對三次握手程序中的 +1可能有疑問,說明如下:
TCP會話的每一端都包含一個32位(bit)的序列號,該序列號被用來跟蹤該端發送的資料量,每一個包中都包含序列號,在接收端則通過確認號用來通知發送端資料成功接收
當某個主機開啟一個TCP會話時,他的初始序列號是隨機的,可能是0和4,294,967,295之間的任意值,然而,像Wireshark這種工具,通常顯示的都是相對序列號/確認號,而不是實際序列號/確認號,相對序列號/確認號是和TCP會話的初始序列號相關聯的,這是很方便的,因為比起真實序列號/確認號,跟蹤更小的相對序列號/確認號會相對容易一些
比如,在“包1”中,最初的相對序列號的值是0,但是最下方面板中的ASCII碼顯示真實序列號的值是0xf61c6cbe,轉化為10進制為4129057982
如果想要關閉相對序列號/確認號,可以選擇Wireshark選單欄中的 Edit -> Preferences ->protocols ->TCP,去掉Relative sequence number后面勾選框中的√即可

然后就會看到

參考資料:
《2019 Wireshark基本原理與操作實戰視頻課程》https://www.bilibili.com/video/BV1fE411Q7xY?from=search&seid=4018939837949226902
《wireshark抓包分析tcp的三次握手詳細程序》https://www.jianshu.com/p/e779f12ac809
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/272589.html
標籤:其他
下一篇:windows記憶體泄露定位方法
