Wireshark 可以跟蹤網路協議的通訊過程,本節在了解 Wireshark 通過 TCP 協議的使用的基礎上,回顧了 TCP 協議的通訊過程。
TCP(傳輸控制協議)是一種面向連線、可靠、基於位元組流的傳輸層通訊協議。
TCP 旨在適應支援多網路應用程式的分層協議層次結構,依靠 TCP 在連線到不同但互連的計算機通訊網路的主機中的配對程序之間提供可靠的通訊服務。 從網路模型-協議對映表中,TCP 協議位於傳輸層。
從 Wireshark 介面圖中可以看出,資料包是建立 TCP 連線的三向握手過程。
1.第一次握手(syn=1,seq=x):客戶端傳送乙個資料包,位置 1 處帶有 TCP 的 SYN 標誌,指示客戶端打算連線的伺服器的埠,以及初始序列號 X,該序列號儲存在資料包標頭的序列號欄位中。 傳送完成後,客戶端進入 SYN SEND 狀態。
2.第二次握手(syn=1, ack=1, seq=y, acknum=x+1):伺服器發回確認資料包 (ACK) 作為響應。 也就是說,SYN 標誌和 ACK 標誌均為 1。 在伺服器上,選擇您的 ISN 序列號,將其放入 SEQ 欄位中,並將確認編號設定為客戶的 ISN 加 1,即 X+1。 傳送完成後,伺服器進入 SYN RCVD 狀態。
3.第三次握手(ACK=1,ACKNUM=Y+1):客戶端再次傳送確認報文(ACK),SYN標誌為0,ACK標誌為1,在OK欄位中將服務端傳送的ACK的序列號欄位+1傳送給對方,並在資料段中寫入ISN的+1。 資料包傳送後,客戶端進入建立狀態,當伺服器收到資料包時,也進入建立狀態,tcp握手結束。
從 Wireshark 介面圖中可以看出,資料包 80 是刪除 TCP 連線的四次波次過程。
1.第一波(fin=1,seq=x):客戶端傳送乙個 fin 位置為 1 的資料包,表示它沒有資料要傳送,但仍然可以接受資料。 傳送完成後,客戶端進入 fin wait 1 狀態。
2.第二波(ack=1,acknum=x+1):伺服器確認客戶端的 fin 資料包,並傳送確認資料包,表明它已收到客戶端關閉連線的請求,但尚未準備好關閉連線。 訊息傳送後,伺服器進入關閉等待狀態,客戶端收到確認報文後,進入 fin wait 2 狀態,等待伺服器關閉連線。
3.第三波(fin=1,seq=y):當伺服器準備關閉連線時,它向客戶端傳送結束連線的請求,並將 fin 設定為 1。 傳送完成後,伺服器進入最後一次確認狀態,等待客戶端的最後一次確認。
4.第四波(ack=1, acknum=y+1):客戶端收到來自伺服器的關閉請求,傳送確認報文,進入時間等待狀態,等待可能的ACK報文重傳。 伺服器收到確認報文後,關閉連線,進入關閉狀態。 在等待固定時間段(2MSL 和 2 個最大 Segment 生存期)後,客戶端沒有收到來自伺服器的 ACK,並認為伺服器已正常關閉連線。
通過上面的通訊過程分析,我們可以加深對TCP協議通訊過程的理解,也可以加強Wireshark對分組支援的理解。
TCP 通過以下機制確保可靠性:
1.確認和重傳:接收方在收到資料包時確認資料包,傳送方在一段時間後重新傳送資料包而沒有收到確認。
2.資料驗證。
3.對資料進行適當的分片和排序:
4.流量控制:當接收方沒有時間處理傳送方的資料時,可以提示傳送方降低傳送速率,防止丟包。
5.擁塞控制:當網路擁塞時,減少資料的傳送。