用wireshark抓包分析TCP三次握手、四次揮手以及TCP實現可靠傳輸的機制


  關於TCP三次握手和四次揮手大家都在《計算機網絡》課程里學過,還記得當時高超老師耐心地講解。大學里我遇到的最好的老師大概就是這位了,雖然他只給我講過《java程序設計》和《計算機網絡》,但每次課幾乎都動手敲代碼或者當場做實驗。好了不扯了,下面進入正題。

     關於三次握手和四次揮手的理論部分可以在很多資料上找到,我今天動手抓了幾個包驗證書上的理論,畢竟那些字段和整個通信的過程學起來很枯燥。

一、三次握手:

      我用wireshark抓取的數據包如下:

 

觀察其中紅色方框內的3條數據包就是一次TCP建立連接的過程,客戶端首先向服務器發一個數據包syn位置1,5774->80,嘿,哥們兒,您我想訪問你的web資源,能不能把你的80端口打開;服務器向客戶端返回一個數據包syn位置1,ack位置1,80->5774,可以啊,我已經把80端口打開了,但是為了保證待會兒可靠傳輸,你也把你的5774端口打開唄;最后,客戶端會再向服務器端發送一個數據包ack位置1,5774->80,沒問題我也把的5774端口打開了,好的到此一次TCP連接就此建立。下面具體分析數據包的各個字段。

 

在wireshark的這個界面中,左邊這個框框是對數據包各個層的概述和詳細信息,右邊的框框是真實的數據包,我調成用16進制顯示,最右邊還有一堆亂七八糟的符號,其實就是16進制數據的ascii碼解釋,0000,0010,0020,0030就是16進制的地址,如果對匯編比較熟的話右邊的框框應該很容易看明白。左邊的框框第一行是數據包整體概述,第二行是以太網這一層(鏈路層)的詳細信息,最主要的是雙方的mac地址,第三行是網絡層(網際層)的詳細信息,最主要的是雙方的IP地址,第四行是傳輸層的詳細信息,最主要的是雙方的端口號。

  每一層都有一個字段指向上一層,表明上一層是什么協議。這大概是因為發包的時候會在數據上依次加上應用層、傳輸層、網絡層、鏈路層的頭部,但是對方收到數據包后是從最底層(鏈路層)開始層層剝去頭部解包的,所以在每層上有一個字段指向上層表明上層的協議,對方就知道下一步該怎么解包了。說了這么多,可能又要被噴了,no picture you say a J8 a !

由於建立TCP連接用不到應用層協議,所以傳輸層就沒有相應的指明上層(應用層)的字段了。

  下面更直觀地感受一下,三次握手過程中標志位的變化情況,首先客戶端發送的數據包syn位置1,然后服務器端回復的數據包syn位置1,ack位置1,最后客戶端發送的數據包ack位置1.以下三幅圖分別為TCP三次握手的數據包中傳輸層的標志位字段

 

 

二、四次揮手:

  這次抓到的包和書本上分析的過程有點不一樣,過程就不贅述了,直接看圖分析

關於可靠傳輸好像沒抓到合適的包啊,下次有機會再寫一篇博客,今天太晚了。

三、抓取telnet明文傳輸的值

  眾所周知,telnet在網上是明文傳輸,因為這樣技術出現比較早,當時的人心里也沒那么黑暗,想不到去盜取別人賬號密碼什么的,現在不同了,用telnet這種遠程登錄方式是很不安全的,如果黑客通過一定方式把你的流量欺騙到他的電腦,再通過抓包軟件分析你的賬號和密碼,那就.........。所以,建議使用ssh,畢竟安全一點。

   我這次是用telnet遠程登錄美國的一台開放的路由器telnet   route-server.ip.att.net。賬號:rviews,密碼:rviews。用wireshark抓包並過濾后發現了密碼和賬號。還是那句話,no picture you say a J8 a!由於telnet是一個字符一個字符的傳的,所以截的圖可能會有點多。先用戶名部分:

  可見,將這些字符連起來就可以得到rviews,也就是用戶名。而且最后傳送的'\r\n'還可以推斷作者用的是windows系統,因為linux下的換行是'\n',而windows下是'\r\n'。密碼部分只上傳部分截圖:

  關於可靠傳輸也找到了一個好點的例子,沒錯,就是telnet,TCP通過每個數據包的seq序列號+len長度都等於下個數據包的seq序列號,如果不等說明中間丟了比特,下次會從新的seq位開始傳一定長度的數據。telnet每次好像都傳1比特,傳2比特的是'\r\n'字符。

 

 

 

 

 


免責聲明!

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



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