1. 程式人生 > >使用 WireShark 分析 TCP/IP 三次握手 和 四次揮手

使用 WireShark 分析 TCP/IP 三次握手 和 四次揮手

vertical 客戶端 我們 訪問 out 完成 strong 開始 概覽

TCP 三次握手 示意圖

技術分享圖片

Wireshark 抓包註意事項

為了演示一個TCP三次握手建立連接的過程,我們通過 Chrome 訪問一個網頁。
已知 HTTP 協議就是建立在TCP鏈接上的

比如訪問以下的網址:
http://toutiao.newmedia139.net/

通過 Cmd 的 ping 命令獲取 這個網站對應的 IP地址 183.136.236.13
技術分享圖片

確定 這個IP 有一個非常重要的好處,就是我們只需要

電腦 -> 網站 的數據包

網站->電腦 的數據包

所以,可以使用Wireshark的顯示過濾規則,只顯示我們需要的數據,不然你一定看著滿屏幕的數據抓狂的。

過濾規則如下:

ip.src==183.136.236.13 or ip.dst==183.136.236.13

截圖:

技術分享圖片

分析TCP握手包

概覽

技術分享圖片

通過圖片,可以看到 先 進行了 TCP 三次傳輸 然後才 開始 HTTP 傳輸

第一次 客戶端發送 SYN 報文 到服務器

技術分享圖片

第二次 ,服務器接收到 客戶端的SYN 報文,回復 SYN + ACK 報文

技術分享圖片

第三次 ,客戶端接收到服務端的 SYN+ACK 報文後,回復 ACK報文

技術分享圖片

註意:

這裏有個坑:Wireshark 顯示的 Syn Ack的數目是不準確的

技術分享圖片

理論上,Syn 應該初始值是個隨機數的,後面的要根據初始值增加
技術分享圖片

TCP 三次握手總結

建立一個穩定的 雙向 連接,最少需要 幾次 通信呢?
以打電話為例
小明 給小紅 打電話
小明 : 餵,小紅 聽得到麽?
小紅: 嗯,我聽到你說話了,你能聽到我麽?
小明:我能聽到你。

只有這三個傳輸都正確了,才能保障雙方是 連通的

TCP 四次揮手

由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個 FIN只意味著這一方向上沒有數據流動,一個TCP連接在收到一個FIN後仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

CP的連接的拆除需要發送四個包,因此稱為四次揮手(four-way handshake)。客戶端或服務器均可主動發起揮手動作,在socket編程中,任何一方執行close()操作即可產生揮手操作。

(1)客戶端A發送一個FIN,用來關閉客戶A到服務器B的數據傳送。

(2)服務器B收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號。

(3)服務器B關閉與客戶端A的連接,發送一個FIN給客戶端A。

(4)客戶端A發回ACK報文確認,並將確認序號設置為收到序號加1。

TCP采用四次揮手關閉連接如圖2所示。

技術分享圖片

抓包截圖

技術分享圖片

其中 183.136.236.13 是服務器的ip
可以看到 這一次揮手是由 服務器 發起的

第一次揮手 FIN +ACK

技術分享圖片

第二次揮手 ACK

技術分享圖片

第三次揮手 FIN +ACK

技術分享圖片

第四次揮手 ACK

技術分享圖片

總結

TCP 由於是全雙工的,斷開鏈接需要四次揮手

使用 WireShark 分析 TCP/IP 三次握手 和 四次揮手