在開始前,請確定你已經安裝了wireshark
安裝參考位址:wireshark 安裝與使用
wireshark分析tcp協定(一)三次握手
-
- 知識背景
-
- **問題一:什麼是tcp?**
- **問題二:什麼是傳輸控制協定?**
- **問題三:為什麼tcp是面向連接配接的,是可靠的?**
- 三次握手操作步驟
-
- 1.确認目前活動的網絡
- 2.确認你所需要分析的網站位址
- 3.過濾顯示目前連接配接情況
- 4.通路網站,進行分析
- 5.第一次握手——請求連接配接(syn) SYN_SENT
- 6.第二次握手——伺服器響應請求(syn,ack)SYN_RCVD
- 7.第三次握手——伺服器确認請求(ack)ESTABLISHED
- 8.驗證資料傳輸——http封包
知識背景
問題一:什麼是tcp?
tcp全稱為傳輸控制協定(Transmission Control Protocol),是一種 面向連接配接、可靠的 ,基于位元組流的傳輸層協定。
問題二:什麼是傳輸控制協定?
要想了解傳輸控制協定,我們就需要知道網絡之間到底是怎麼通信的?當你在浏覽器輸入URL之後,是怎麼
擷取到頁面的?也就是說浏覽器是怎麼知道你要通路哪個位置的?為什麼他就能傳回給你,而不是其他人?
首先,在 用戶端 和 伺服器 間的通信協定就是
TCP/IP協定
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL5kDM4YGZwImYhVWZhVWMidjNlRDO2EWYyQTOkJmZ4czLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
此時,用戶端産生資料,需要發送出來,但是此時并不知道需要請求的端口号
于是有了,資料控制層
資料在應用層産生後,對應的應用會有其對應的端口号——源端口号
資料在産生後,需要清楚需要通路伺服器上的哪個端口的程序(也就是将資料給哪個程式)
在有了
源端口号
和
目标端口号
後,我們還是無法進行請求,因為不知道真實的伺服器位址在哪裡
網絡層
在知道了兩個對應的應用程式後,浏覽器知道了自己要請求哪個端口,但是需要将本機IP和目的IP添加上去
到這裡,浏覽器就能确定你需要通路的哪個位置了,在經過鍊路層後,打包成0/1資料流傳遞到伺服器的對應端口上。
至此,浏覽器就知道了我們是需要通路哪個位置的,而且隻會将你所需要的資料傳回給你,而不是别人,因為你告訴了伺服器,你的本機IP
是以,我們大概就知道了到底什麼是傳輸控制協定?
傳輸控制協定,見名知意,當然就是用于
控制傳輸
的協定,在過程中,涉及到
端口号
和
對應ip
問題三:為什麼tcp是面向連接配接的,是可靠的?
- 校驗和
- 應答确認
- 逾時重傳
- 流量控制
- 亂序重排
- 丢棄重複資料
在這其中,應答确認就是保證消息傳遞可靠性的關鍵手段,即三次握手
三次握手
,就是存在三次互動,存在三次TCP封包的傳輸。
你需要和一個你看不見的人建立聯系。
- 首先,你需要給對方發送一個
——第一次握手資訊
此時,你并不知道對方到底有沒有收到
- 然後,對方也會發送一個
回來(中間包括你發送過去的)——第二次握手資訊
這時候,你知道對方收到了你的資訊了,因為他把你的資訊+1了
此時,對方也發送了一個
給你,因為他不知道你有沒有收到他的資訊他的資訊
- 此時,你最後回複一句,我也收到你的消息拉——第三次握手
這樣,你們就可以開始互動資料,因為此時你們已經确定你->他,和他->你,兩端的通信是沒有問題的。
三次握手操作步驟
1.确認目前活動的網絡
打開wireshark軟體後,出現以下頁面
這裡将會顯示目前你電腦中所有的曾儲存過的網絡配置,選擇一個目前正在活動的網絡
在這裡,我一直在波動的就是以太網了
一般情況下,連接配接了網線直接選擇
即可
以太網
當出現一直在跳動的連接配接時,表示已經成功
2.确認你所需要分析的網站位址
這裡我直接對區域網路 内部署的網站進行分析
注意點1:pingping www.baidu.com
若需要分析如百度等位址的,需要進行ping指令,發現其真實ip位址
注意點2:keep-alive
這裡可能出現的一個問題就是當你通路這個位址時,沒有發送tcp的三次握手包
因為在TCP協定中存在
的機制,無需每次都先建立連接配接後通路(建立連接配接後,可保持一段時間)
keep-alive
3.過濾顯示目前連接配接情況
在知道你所要通路的ip位址後,在wireshark上,輸入
ip.addr == ip位址 && tcp
例如,目前我确定的IP位址為
10.6.3.104
,是以限制為
4.通路網站,進行分析
在選擇過濾好ip位址後,切換至浏覽器通路位址
切換會
wireshark
觀察資料的變化
一般情況下頭部的三個為tcp的三次握手過程
5.第一次握手——請求連接配接(syn) SYN_SENT
在第一次握手時,我們主動向對應的位址發送連接配接請求
我們輕按兩下檢視第一條封包
這裡會顯示目前網絡中每一層的資料
- 應用層
- 傳輸控制層——加上源端口 + 目的端口
- 網絡層——加上源IP + 目的IP
- 資料鍊路層——轉換成二進制流,确定MAC位址
我們開始分析傳輸控制層的具體資訊
- 源端口:7347,目的端口:8080
打開後,我們檢視目前協定中的
Flags
此時syn為1,是一個發起連接配接請求
- 同步位SYN = 1
- 初始序号Seq = 627790078
- 不能攜帶資料,消耗一個序号
6.第二次握手——伺服器響應請求(syn,ack)SYN_RCVD
我們輕按兩下點開第二個封包
- 源端口号:8080,目的端口号:7347
- 伺服器相對seq = 0——第一次發送
- 伺服器絕對seq = 239445313
- ack = 1
- ACK = 上一次發送過去的seq(627790078) + 1 = 627790079
此時syn = 1 ,ack = 1,是一個确認接受連接配接請求
- 同步位SYN = 1
- 服務端初始序号 = 239445313
- ACK = 1
- 确認号ack = 627790079 = (627790078) + 1
7.第三次握手——伺服器确認請求(ack)ESTABLISHED
我們輕按兩下打開第三個封包
- 源端口:7347,目的端口:8080
- 用戶端 相對seq = 1——第二次發送封包
- 用戶端 絕對seq = 627790079
- ACK = 1
- ack = 服務端seq(239445313) + 1 = 239445314
此時ack = 1 ,是一個确認請求
自此,服務端與用戶端可以進行正常的資料傳輸了
根據上面的三次握手,我們可以得到目前TCP三向交握的真實示意圖
8.驗證資料傳輸——http封包
在完成三次握手後,本機通過
GET
方法請求HTTP封包
我們點選第四個封包進行檢視