wireshark抓包分析tcp連接與斷開


  其實對於網絡通信的學習,最好還是能夠自己抓到包詳細地看一下,不然只單單通過文字和圖的描述印象不夠深刻。本文通過實際的抓包操作來看一下tcp的連接與斷開是怎樣的。

  首先需要去https://www.wireshark.org/下載wireshark對應你機器位數的版本,也可以用這個連接直接下載(64位)http://sw.bos.baidu.com/sw-search-sp/software/16fb23dbe1547/Wireshark-win32-2.4.3.0.exe。

  安裝完成后打開,會看到如下頁面:

  

 

  下面這兩個以太網指的是你電腦上不同的網卡,選擇一個可以跑的網卡,雙擊。

  打開之后你會看到各種各樣顏色的包,這里就是wireshark抓到的包了,我們需要做的就是過濾出我們想看的tcp包。這里我們過濾器欄輸入過濾條件,過濾出我們想要的。本文以PC和www.baidu.com作為通信的雙方,百度其中一個ip為14.215.177.38。在過濾器欄中輸入如下內容:(ip.src==XXX.XXX.XXX.XXX and ip.dst==14.215.177.38) or (ip.src==14.215.177.38 and ip.dst==XXX.XXX.XXX.XXX),其中XXX.XXX.XXX.XXX為你本機的地址。我們要看tcp連接和斷開,需要的是本機發送給百度的包和百度發送給本機的包,所以過濾條件就是剛才輸入的,當看到過濾欄為綠,即說明輸入語法正確。

  接着打開一個瀏覽器,建議選擇無痕模式的瀏覽器。然后啟動抓包:

  啟動抓包之后,在瀏覽器的地址欄輸入14.215.177.38,回車,這時候你會看到類似於:

  

  那么紅框內的前三條就是tcp的握手了。對比一下前后兩圖,客戶端即本機source的60055端口發送一個包給14.215.177.38(百度)的80端口,內容為SYN=1,seq=0(第一次握手)。百度接收到請求后,返回一個包給本機,內容為SYN=1,ACK=1,seq=0,ack=1(第二次握手),這里大寫的為標志位,小寫的為數據。本機接收到百度返回的包之后,也發送一個包給百度,內容為ACK=1,seq=1,ack=1(第三次握手),到這里三次握手全部完成,連接建立。發現下面一行的包是http的,這也驗證了http是基於tcp協議的,需要先建立tcp連接http才能啟動。

  

  繼續分析后面的包:

  

  上面說到本機向百度發送了一個http請求,請求的是百度的主頁面,百度收到這個請求后返回兩個包,第二個即為整個html頁面,即紅框中的第二個其標志位為PSH,ACK。拿到html頁面不算結束,因為我們直到html頁面需要css、js、圖片來渲染,所以需要繼續從百度那邊拿到css、js、圖片回來才行。這樣就可以解釋為什么我們網慢的時候會出現頁面結構不一樣或者圖片加載不出來,因為我們只從服務端拿到了html代碼而沒有拿到其他東西。可以看一下PSH,ACK包中的內容:

  

 

  再往下就是從百度繼續拿取資源,都是成對出現的。本機發一個過去,百度返回一個回來,tcp中的傳輸數據就是這樣,直到資源拿取結束(比如這里的http拿取結束):

  

  狀態碼200,表示成功,即該http請求成功並返回給本機。

  由於我們用的是瀏覽器直接訪問,所以我們無法手動斷開連接(可能是我不會吧 滑稽臉),但是百度那邊會自動斷開:

  

  

  這里看到的是tcp斷開四次揮手,由於實際操作原因這里只出現了3次,后面會有解釋。

  看紅框中第一行知道時百度發出的斷開連接請求,再看紅框的上一行,對比一下第二列會發現正好差60,單位秒,因為訪問百度的人很多,如果你沒有實際操作不可能給你一直占用資源,所以當超過60s也就是一分鍾還無操作的時候百度就會自動發起斷開請求。也正因為時百度發起的斷開請求導致了我們只有三次揮手。

  百度發起請求FIN,ACK(第一次揮手),本機接收到並返回兩個包,一個為ACK(第二次揮手),另一個為FIN,ACK(第三次揮手)。接着應該是百度發一個ACK返回給本機(第四次揮手)然后結束,但是由於百度單方面強制關閉了,並且不再接收本機的數據包,導致第三次揮手無法送法,也就有了下面深紅色的TCP Retransmission(TCP重傳),因為第三次揮手發給百度的包一直沒有回應,本機啟動超時重傳機制。重傳幾次之后仍然沒有回應,發送一個RST,ACK包,RST為復位,即表示TCP整個連接(這里連接是名詞)中出現了重大差錯(如服務器崩潰或其他原因,也就是百度強制關閉了),必須釋放連接。至此連接關閉,希望可以找到方法來讓客戶端主動發送斷開請求,這樣可以出現四次握手。

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM