天天看點

wireshark分析tcp協定(一)三次握手【理論 + 實操】

在開始前,請確定你已經安裝了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協定

wireshark分析tcp協定(一)三次握手【理論 + 實操】

此時,用戶端産生資料,需要發送出來,但是此時并不知道需要請求的端口号

于是有了,資料控制層

資料在應用層産生後,對應的應用會有其對應的端口号——源端口号

資料在産生後,需要清楚需要通路伺服器上的哪個端口的程序(也就是将資料給哪個程式)

在有了

源端口号

目标端口号

後,我們還是無法進行請求,因為不知道真實的伺服器位址在哪裡

網絡層

在知道了兩個對應的應用程式後,浏覽器知道了自己要請求哪個端口,但是需要将本機IP和目的IP添加上去

到這裡,浏覽器就能确定你需要通路的哪個位置了,在經過鍊路層後,打包成0/1資料流傳遞到伺服器的對應端口上。

wireshark分析tcp協定(一)三次握手【理論 + 實操】

至此,浏覽器就知道了我們是需要通路哪個位置的,而且隻會将你所需要的資料傳回給你,而不是别人,因為你告訴了伺服器,你的本機IP

是以,我們大概就知道了到底什麼是傳輸控制協定?

傳輸控制協定,見名知意,當然就是用于

控制傳輸

的協定,在過程中,涉及到

端口号

對應ip

問題三:為什麼tcp是面向連接配接的,是可靠的?

  • 校驗和
  • 應答确認
  • 逾時重傳
  • 流量控制
  • 亂序重排
  • 丢棄重複資料

在這其中,應答确認就是保證消息傳遞可靠性的關鍵手段,即三次握手

三次握手

,就是存在三次互動,存在三次TCP封包的傳輸。

wireshark分析tcp協定(一)三次握手【理論 + 實操】

你需要和一個你看不見的人建立聯系。

  • 首先,你需要給對方發送一個

    資訊

    ——第一次握手
    此時,你并不知道對方到底有沒有收到
  • 然後,對方也會發送一個

    資訊

    回來(中間包括你發送過去的)——第二次握手

    這時候,你知道對方收到了你的資訊了,因為他把你的資訊+1了

    此時,對方也發送了一個

    他的資訊

    給你,因為他不知道你有沒有收到他的資訊
  • 此時,你最後回複一句,我也收到你的消息拉——第三次握手

這樣,你們就可以開始互動資料,因為此時你們已經确定你->他,和他->你,兩端的通信是沒有問題的。

三次握手操作步驟

1.确認目前活動的網絡

打開wireshark軟體後,出現以下頁面

wireshark分析tcp協定(一)三次握手【理論 + 實操】

這裡将會顯示目前你電腦中所有的曾儲存過的網絡配置,選擇一個目前正在活動的網絡

在這裡,我一直在波動的就是以太網了

一般情況下,連接配接了網線直接選擇

以太網

即可

當出現一直在跳動的連接配接時,表示已經成功

wireshark分析tcp協定(一)三次握手【理論 + 實操】

2.确認你所需要分析的網站位址

這裡我直接對區域網路 内部署的網站進行分析

注意點1:ping
ping www.baidu.com
           

若需要分析如百度等位址的,需要進行ping指令,發現其真實ip位址

注意點2:keep-alive

這裡可能出現的一個問題就是當你通路這個位址時,沒有發送tcp的三次握手包

因為在TCP協定中存在

keep-alive

的機制,無需每次都先建立連接配接後通路(建立連接配接後,可保持一段時間)

3.過濾顯示目前連接配接情況

在知道你所要通路的ip位址後,在wireshark上,輸入

ip.addr == ip位址 && tcp
           

例如,目前我确定的IP位址為

10.6.3.104

,是以限制為

wireshark分析tcp協定(一)三次握手【理論 + 實操】

4.通路網站,進行分析

在選擇過濾好ip位址後,切換至浏覽器通路位址

切換會

wireshark

觀察資料的變化

wireshark分析tcp協定(一)三次握手【理論 + 實操】

一般情況下頭部的三個為tcp的三次握手過程

5.第一次握手——請求連接配接(syn) SYN_SENT

在第一次握手時,我們主動向對應的位址發送連接配接請求

我們輕按兩下檢視第一條封包

這裡會顯示目前網絡中每一層的資料

  • 應用層
  • 傳輸控制層——加上源端口 + 目的端口
  • 網絡層——加上源IP + 目的IP
  • 資料鍊路層——轉換成二進制流,确定MAC位址
wireshark分析tcp協定(一)三次握手【理論 + 實操】

我們開始分析傳輸控制層的具體資訊

wireshark分析tcp協定(一)三次握手【理論 + 實操】
  • 源端口:7347,目的端口:8080

打開後,我們檢視目前協定中的

Flags

wireshark分析tcp協定(一)三次握手【理論 + 實操】

此時syn為1,是一個發起連接配接請求

  • 同步位SYN = 1
  • 初始序号Seq = 627790078
  • 不能攜帶資料,消耗一個序号

6.第二次握手——伺服器響應請求(syn,ack)SYN_RCVD

我們輕按兩下點開第二個封包

wireshark分析tcp協定(一)三次握手【理論 + 實操】
  • 源端口号:8080,目的端口号:7347
  • 伺服器相對seq = 0——第一次發送
  • 伺服器絕對seq = 239445313
  • ack = 1
  • ACK = 上一次發送過去的seq(627790078) + 1 = 627790079
wireshark分析tcp協定(一)三次握手【理論 + 實操】

此時syn = 1 ,ack = 1,是一個确認接受連接配接請求

  • 同步位SYN = 1
  • 服務端初始序号 = 239445313
  • ACK = 1
  • 确認号ack = 627790079 = (627790078) + 1

7.第三次握手——伺服器确認請求(ack)ESTABLISHED

我們輕按兩下打開第三個封包

wireshark分析tcp協定(一)三次握手【理論 + 實操】
  • 源端口:7347,目的端口:8080
  • 用戶端 相對seq = 1——第二次發送封包
  • 用戶端 絕對seq = 627790079
  • ACK = 1
  • ack = 服務端seq(239445313) + 1 = 239445314
wireshark分析tcp協定(一)三次握手【理論 + 實操】

此時ack = 1 ,是一個确認請求

自此,服務端與用戶端可以進行正常的資料傳輸了

根據上面的三次握手,我們可以得到目前TCP三向交握的真實示意圖

wireshark分析tcp協定(一)三次握手【理論 + 實操】

8.驗證資料傳輸——http封包

在完成三次握手後,本機通過

GET

方法請求HTTP封包

我們點選第四個封包進行檢視

wireshark分析tcp協定(一)三次握手【理論 + 實操】

繼續閱讀