Wireshark抓包分析TCP「三次握手,四次揮手」
1.目的
客戶端與伺服器之間建立TCP/IP連接,我們知道是通過三次握手,四次揮手實現的,但是很多地方對這個知識的描述僅限於理論層面,這次我們通過網路抓包的方式來看一下實際的TCP/IP傳輸過程。
2.什麼是抓包?
網路傳輸資訊是通過層層打包,最終到達客戶端物理層,經過網線等設備傳輸到伺服器端後,再進行層層拆包,最後獲取資訊。而抓包的「包」就是這個打包了資訊的「包。抓包(packet capture)就是將網路傳輸發送與接收的數據包進行截獲,來進行分析的過程。
3.如何進行抓包?
我們可以利用現成的網路抓包軟體Wireshark,進行抓包,從而分析TCP/IP傳輸過程。
Wireshark軟體下載:Wireshark軟體官網下載,一定要下載下圖中的」Windows Installer(64-bit)
4.抓包分析TCP/IP傳輸過程(「三次握手」)
4.1第一步:瀏覽器打開網頁//www.hit.edu.cn/ (其他的網頁也沒問題)
4.2第二步:打開命令行窗口,輸入:ping www.tencent.com,查看IP地址(切記:千萬不要把https/http加進去)
這裡我們得到的IP地址是61.167.60.70
4.3第三步:打開Wireshark軟體
4.3.1先雙擊「WLAN」
4.3.2得到下圖
4.3.3在下圖方框位置輸入:ip.addr==61.167.60.70,按下回車鍵,稍等片刻
(如果沒反應,重新在瀏覽器輸入網址,並重新獲取IP地址,也就是重複1,2步操作)
4.3.4顯示如下圖所示
注意!!:如果第一步訪問的是一些比較大的網站,例如騰訊之類的,這步會出不來,因為這些大網站往往有多個主機,你用ping訪問到的ip地址和瀏覽器訪問到的ip地址會出現不一致的情況,導致這一步只有ping的包。也就是說建議大家不要選擇大網站測試,可以像我這樣,用自己學校網址或者一些小的網站測試。
5.分析「三次握手」抓包結果
首先是抓包結果圖(把上一步得到的結果划到最上面看)如下:
方框處也就是「三次握手的結果。
- 第一次的標誌是「[SYN]」,序列號seq為0, 代表客戶端請求建立連接
- 第二次的標誌是「[SYN, ACK]」,序列號Seq為0,Ack值為客戶端發送過來的Seq加1,也就是1,表示伺服器可以正常接收客戶端數據包。
- 第三次的標誌是「[ACK]」,客戶端表示可以正常接收伺服器數據包,這是為了保證可以全雙工通訊,接下來就可以正常發送數據。
6.「四次揮手」抓包及分析
首先我們需要把瀏覽器的頁面關閉,也就是斷開TCP/IP連接,之後等待幾分鐘。會出現下面的畫面,方框就是「揮手」過程。
四次揮手標誌分別為:
- “[FIN, ACK]”
- “[ACK]”
- “[FIN, ACK]”
- “[ACK]”
這裡,我們需要注意兩點:
(1)客戶端與伺服器端傳輸時全雙工的,因此斷開請求既可以由客戶端發起,也可以由伺服器端發起。只要找准第一次出現”[FIN, ACK]”的位置,就是第一次揮手位置。
(2)為什麼我們抓包抓到的不是「四次揮手」,而是「三次揮手」呢?
這裡涉及到LInux的TCP時延機制,當被揮手端(這裡是443埠)第一次收到揮手端(這裡是12672埠)的「FIN」請求時,並不會立即發送ACK,而是會經過一段延遲時間後再發送,但是此時被揮手端也沒有數據發送,就會向揮手端發送「FIN”請求,這裡就可能造成被揮手端發送的「FIN」與「ACK」一起被揮手端收到,導致出現「第二、三次揮手」合併為一次的現象,也就最終呈現出「三次揮手」的情況。