Wireshark TS | 異常 ACK 數據包處理

問題背景

來自于學習群里群友討論的一個數據包跟蹤文件,在其中涉及到兩處數據包異常現象,而產生這些現象的實際原因是數據包亂序。由于這兩處數據包異常,都有點特別,本篇也就其中一個異常現象單獨展開說明。

問題信息

數據包跟蹤文件基本信息如下:

λ capinfos test0609.pcapng
File name:           test0609.pcapng
File type:           Wireshark/... - pcapng
File encapsulation:  Ethernet
File timestamp precision:  microseconds (6)
Packet size limit:   file hdr: (not set)
Packet size limit:   inferred: 66 bytes
Number of packets:   44
File size:           5096 bytes
Data size:           4010 bytes
Capture duration:    0.959479 seconds
First packet time:   2024-06-03 19:32:20.136281
Last packet time:    2024-06-03 19:32:21.095760
Data byte rate:      4179 bytes/s
Data bit rate:       33 kbps
Average packet size: 91.14 bytes
Average packet rate: 45 packets/s
SHA256:              6d472bd621d89b2330ceb61a9b14756c7991e157b1e9e8960580379129275bf8
SHA1:                c849b01ccdbe4ed131a3c67ac4bb768f7ac680fc
Strict time order:   True
Capture application: Editcap (Wireshark) 4.2.5 (v4.2.5-0-g4aa814ac25a1)
Capture comment:     Sanitized by TraceWrangler v0.6.8 build 949
Number of interfaces in file: 1
Interface #0 info:Encapsulation = Ethernet (1 - ether)Capture length = 262144Time precision = microseconds (6)Time ticks per second = 1000000Time resolution = 0x06Number of stat entries = 0Number of packets = 44

數據包文件根據 IP 通訊對做過一定過濾,按 66 字節長度做了截斷,并且經過 TraceWrangler 匿名化軟件處理。捕獲總時長 0.95 秒,數據包數量 44 個,速率 33 kbps 。

關于 TraceWrangler 匿名化軟件簡介,可以查看之前的文章《Wireshark 提示和技巧 | 如何匿名化數據包》。

專家信息如下,僅有一個 Dup ACK 信息,需要進一步分析。

問題分析

數據包跟蹤文件展開詳細信息如下,粗看下來,除了 TCP Dup ACK ,感覺沒有其他什么問題。

什么是 TCP Dup ACK ,簡單看下 Wireshark 官方文檔對此的定義如下:

  • TCP 段大小為 0
  • 窗口大小非零且沒有改變,或者有有效的 SACK 數據
  • Next Seq Num 和最后一次看到的 ACK Num 是非 0 的(即連接已經建立)
  • 沒有設置 SYN、FIN、RST
Set when all of the following are true:The segment size is zero.
The window size is non-zero and hasn’t changed, or there is valid SACK data.
The next expected sequence number and last-seen acknowledgment number are non-zero (i.e., the connection has been established).
SYN, FIN, and RST are not set.

明白了什么是 TCP Dup ACK 之后,我們繼續研究為什么會產生 TCP Dup ACK ,先簡單的就數據包展開說明:

  1. No.10 和 No.11 為服務器端所發送的數據包,其中 No.10 為數據段,Seq Num 70 + Len 12,No.11 為純 ACK;
  2. No.12 為客戶端對接收到的 No.10 數據包做出的 ACK 響應,ACK Num 為 82;
  3. 但 No.13 ACK 數據包是什么為什么會被觸發出來?同樣的 ACK Num 82 表明并沒有確認新數據,而且從上面服務器端發包來看,實際也沒有其他數據,所以這個 ACK 符合了 TCP Dup ACK 代碼的判斷,因此標識。

難道 No.13 是對 No.11 ACK 數據包的 ACK ,也就是 ACK 了一個純 ACK??? 從常理上來說是不可能的。但為什么會產生這樣反常的現象呢,合理還是不合理。

探究 No.13 的由來,就得去找觸發的原因,首先還是問題背景章節中提到的數據包亂序,在這里服務器端所發送的 No.10 和 No.11,在客戶端接收時已經是亂序了。兩個地方說明,一是標準的 Seq Num,如果正常的順序,No.11 ACK 的 Seq Num 應該為 82 ,但實際為 70 ,說明應該出現在 No.10 之前;二是 ip.id 輔助判斷,理論是順序遞增的,而 No.11 的 4916 反而小于 No.10 4917,也說明發生了亂序。

亂序比較常見,但一個純 ACK 在前,一個數據段在后,單獨兩者之間出現亂序,確實比較少見,這也是之后觸發生成 No.13 比較少見的原因。

繼續分析 No.13 TCP Dup ACK ,實際在一開始討論時,我就表達了這個觀點,這個 Dup ACK 的產生比較突兀,ACK 了純 ACK,這個現象不合理,如果需要用 ACK 來確認 ACK ,那實際在 TCP 數據包中的交互上永遠沒有停止的時候了。

再之后仔細琢磨了下,確實不會,確實不會出現 ACK 一個 ACK,但這里有一個前提,后一個 ACK 得是正常的,或者說是有效的。而實際上 No.11 對于客戶端上來說并不是有效的,因為先收到 No.10 之后,客戶端接收窗口已經確認收到了 82 之前的所有數據了,而 No.11 Seq Num 70 小于 82,判斷為異常,因此產生出一個 TCP Dup ACK

為了驗證上述結論,通過 packetdrill 以下代碼做了相關測試,結果也符合預期。

# cat dupack.pkt
0   socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
+0  setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
+0  bind(3, ..., ...) = 0
+0  listen(3, 1) = 0+0  < S 0:0(0) win 10000 <mss 1460>
+0  > S. 0:0(0) ack 1 <...>
+0.01 < . 1:1(0) ack 1 win 10000
+0 accept(3, ..., ...) = 4+0.01 write(4, ..., 1000) = 1000
+0.01 < . 1:1(0) ack 1001 win 10000
+0.01 < P. 1:11(10) ack 1001 win 10000
+0 < . 1:1(0) ack 1001 win 10000+0 `sleep 10`

問題總結

存在即合理,數據包分析也會有這樣的一個觀點,不是嘛。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79332.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79332.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79332.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【React】項目的搭建

create-react-app 搭建vite 搭建相關下載 在Vue中搭建項目的步驟&#xff1a;1.首先安裝腳手架的環境&#xff0c;2.通過腳手架的指令創建項目 在React中有兩種方式去搭建項目&#xff1a;1.和Vue一樣&#xff0c;先安裝腳手架然后通過腳手架指令搭建&#xff1b;2.npx create-…

深入淺出 NVIDIA CUDA 架構與并行計算技術

&#x1f407;明明跟你說過&#xff1a;個人主頁 &#x1f3c5;個人專欄&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目錄 一、引言 1、CUDA為何重要&#xff1a;并行計算的時代 2、NVIDIA在…

pytorch學習02

自動微分 自動微分模塊torch.autograd負責自動計算張量操作的梯度&#xff0c;具有自動求導功能。自動微分模塊是構成神經網絡訓練的必要模塊&#xff0c;可以實現網絡權重參數的更新&#xff0c;使得反向傳播算法的實現變得簡單而高效。 1. 基礎概念 張量 Torch中一切皆為張…

Java虛擬機(JVM)平臺無關?相關?

計算機的概念模型 計算機實際上就是實現了一個圖靈機模型。即&#xff0c;輸入參數&#xff0c;根據程序計算&#xff0c;輸出結果。圖靈機模型如圖。 Tape是輸入數據&#xff0c;Program是針對這些數據進行計算的程序&#xff0c;中間橫著的方塊表示的是機器的狀態。 目前使…

satoken的奇奇怪怪的錯誤

發了 /user/getBrowseDetail和/user/getResponDetail&#xff0c;但為什么進入handle里面有三次&#xff1f;且第一次的handle類型是AbstractHandleMapping$PreFlightHttpRequestHandlerxxx,這一次進來的時候flag為false&#xff0c;StpUtils.checkLogin拋出了異常 第二次進來的…

【KWDB 創作者計劃】_上位機知識篇---SDK

文章目錄 前言一、SDK的核心組成API(應用程序接口)庫文件(Libraries)開發工具文檔與示例依賴項與環境配置二、SDK的作用簡化開發流程確保兼容性與穩定性加速產品迭代功能擴展與定制三、SDK的典型應用場景硬件設備開發操作系統與平臺云服務與API集成游戲與圖形開發四、SDK與…

golang處理時間的包time一次性全面了解

本文旨在對官方time包有個全面學習了解。不鉆摳細節&#xff0c;但又有全面了解&#xff0c;重點介紹常用的內容&#xff0c;一些低頻的可能這輩子可能都用不上。主打一個花最少時間辦最大事。 Duration對象: 兩個time實例經過的時間,以長度為int64的納秒來計數。 常見的durati…

PyCharm Flask 使用 Tailwind CSS 配置

使用 Tailwind CSS 步驟 1&#xff1a;初始化項目 在 PyCharm 終端運行&#xff1a;npm init -y安裝 Tailwind CSS&#xff1a;npm install -D tailwindcss postcss autoprefixer初始化 Tailwind 配置文件&#xff1a;npx tailwindcss init這會生成 tailwind.config.js。 步…

【英語語法】基本句型

目錄 前言一&#xff1a;主謂二&#xff1a;主謂賓三&#xff1a;主系表四&#xff1a;主謂雙賓五&#xff1a;主謂賓補 前言 英語基本句型是語法體系的基石&#xff0c;以下是英語五大基本句型。 一&#xff1a;主謂 結構&#xff1a;主語 不及物動詞 例句&#xff1a; T…

隔離DCDC輔助電源解決方案與產品應用科普

**“隔離”與“非隔離的區別** 隔離&#xff1a; 1、AC-DC&#xff0c;也叫“一次電源”&#xff0c;人可能會碰到的應用場合&#xff0c;起安全保護作用&#xff1b; 2、為了抗干擾&#xff0c;通過隔離能有效隔絕干擾信號傳輸。 非隔離&#xff1a; 1、“安全特低電壓&#…

DS-SLAM 運動一致性檢測的源碼解讀

運動一致性檢測是Frame.cc的Frame::ProcessMovingObject(const cv::Mat &imgray)函數。 對應DS-SLAM流程圖Moving consistency check的部分 把這個函數單獨摘出來&#xff0c;寫了一下對兩幀檢測&#xff0c;查看效果的程序&#xff1a; #include <opencv2/opencv.hpp…

安全測試的全面知識體系及實現路徑

以下是安全測試的全面知識體系及實現路徑,結合最新工具和技術趨勢(截至2025年): 一、安全測試核心類型與工具 1. 靜態應用安全測試(SAST) 知識點: 通過分析源代碼、字節碼或二進制文件識別漏洞(如SQL注入、緩沖區溢出)支持早期漏洞發現,減少修復成本,適合白盒測試場…

GPT-4o Image Generation Capabilities: An Empirical Study

GPT-4o 圖像生成能力:一項實證研究 目錄 介紹研究背景方法論文本到圖像生成圖像到圖像轉換圖像到 3D 能力主要優勢局限性與挑戰對比性能影響與未來方向結論介紹 近年來,圖像生成領域發生了巨大的變化,從生成對抗網絡 (GAN) 發展到擴散模型,再到可以處理多種模態的統一生成架…

Redis之全局唯一ID

全局ID生成器 文章目錄 全局ID生成器一、全局ID生成器的定義定義核心作用 二、全局ID生成器需滿足的特征1. 唯一性&#xff08;Uniqueness&#xff09;?2. 高性能&#xff08;High Performance&#xff09;?3. 可擴展性&#xff08;Scalability&#xff09;?4. 有序性&#…

nginx中的代理緩存

1.緩存存放路徑 對key取哈希值之后&#xff0c;設置cache內容&#xff0c;然后得到的哈希值的倒數第一位作為第一個子目錄&#xff0c;倒數第三位和倒數第二位組成的字符串作為第二個子目錄&#xff0c;如圖。 proxy_cache_path /xxxx/ levels1:2 2.文件名哈希值

靜態時序分析STA——8.1 時序檢查(建立時間檢查)

文章目錄 一、時序路徑組二、建立時間檢查1. 觸發器到觸發器路徑1&#xff09;時鐘單元UCKBUF0的延遲計算2&#xff09;時鐘源延遲&#xff08;clock source latency&#xff09; 2. 輸入到觸發器路徑1) 虛擬時鐘的輸入路徑2) 具有實際時鐘的輸入路徑 3. 觸發器到輸出路徑4. 輸…

了解高速設計的信號完整性仿真

高速設計需要精確的信號傳輸&#xff0c;以確保最佳性能。信號完整性差會導致關鍵應用中的誤碼、數據損壞甚至系統故障等問題。介電常數、損耗角正切和插入損耗等因素會顯著影響信號質量。通過使用信號完整性仿真&#xff0c;您可以及早發現并解決這些挑戰。這種主動方法有助于…

RAGFlowwindows本地pycharm運行

Python環境準備 1. 安裝pipx。如已經安裝&#xff0c;可跳過本步驟&#xff1a; python -m pip install --user pipxpython -m pipx ensurepath## 驗證安裝pipx --version2. 安裝 uv。如已經安裝&#xff0c;可跳過本步驟&#xff1a; pipx install uv ## 設置為阿里云 PyPI…

STM32-FreeRTOS的詳細配置

配置FreeRTOS 原文鏈接&#xff1a;https://ydamooc.github.io/posts/c9defcd/ 1.1 下載FreeRTOS 打開FreeRTOS官網&#xff1a;https://www.freertos.org/ 點擊下載&#xff0c;并且選擇"FreeRTOS 202212.01"版本&#xff0c;再點擊Download按鈕下載官方的資源包…

Linux筆記---動靜態庫(原理篇)

1. ELF文件格式 動靜態庫文件的構成是什么樣的呢&#xff1f;或者說二者的內容是什么&#xff1f; 實際上&#xff0c;可執行文件&#xff0c;目標文件&#xff0c;靜態庫文件&#xff0c;動態庫文件都是使用ELF文件格式進行組織的。 ELF&#xff08;Executable and Linkable…