為什麼單一(?)TCP 封包會被分割成多個 PDU 單元?

為什麼單一(?)TCP 封包會被分割成多個 PDU 單元?

圖片相關:替代文字

為什麼這些段被標記為單獨的資料包(所有 Ack,Seq=509)?為什麼資料包會被分割?

答案1

我認為您指的是 56-78 範圍內的可見影格。
讓我們按這個順序處理事情,

  1. 關於:「TCP segment of a reassembled PDU
    這意味著wireshark(ethereal?)將TCP Segment重新組裝在一起以供您查看。
    所以,你可以忽略這個字串,這意味著沒有什麼壞處。
    我在下面的第 4 點中詳細闡述了這些框架的含義。
  2. 關於:具有相同“ ”編號的不同幀seq
    幀 58、60、62、64 等顯示相同的序號。
    但請注意,這些是不是單一資料包「標記為單獨的資料包」—不拆分。
    這些封包僅設定了「ACK」標誌,您將看到 ACK 編號正在遞增。
    這些是當不同的 TCP 段到達時從您的電腦傳送到 HTTP 伺服器的 ACK。
  3. ' ACK' 序列從1in 幀開始,到FIN 幀52結束。 在此期間,從瀏覽器到 HTTP 伺服器的所有訊框都會重複傳送的最後一個序號(即)-這是正常的 TCP 協定行為。瀏覽器在第一個 HTTP 請求(幀) 之後不再發送任何進一步的資料。 HTTP 伺服器在 幀 中確認了這一點。964678
    609
    52
    54
  4. 我期望幀54是(wireshark)重新組裝的伺服器回應,它是由標記為「重新組裝的 PDU 的 TCP 段」的幀形成的。
    因此,所有以這種方式標記的後續幀都是從 HTTP 伺服器到客戶端的
    (由於您擦洗了「來源」和「目標」列,因此在圖片中看不到該詳細資訊)。

如果您重新檢查原始擷取文件,您應該會發現具有 TCP 來源連接埠 80(對於 HTTP)的訊框 54 到 67 將總計來自 HTTP 伺服器的 9646 位元組回應資料。

您在這裡看到的是來自 HTTP 伺服器的 9KB 回复,作為多個 MTU 限制的 TCP 段到達您的瀏覽器,每個段都被作業系統的 TCP 堆疊確認。

這是高級別的通信序列。

  1. 您的瀏覽器透過 3 路 TCP 握手開始連線到 HTTP 伺服器。
  2. 它在此連接上向伺服器發送了一個 HTTP 請求
  3. 伺服器以 9 KB 的回應對此進行回复,該響應分佈在多個 TCP/IP 封包中,如下所示(TCP 段
  4. 當從伺服器接收到每個 TCP 封包時,瀏覽器電腦上的 TCP/IP 堆疊會對其進行確認
  5. 最後,它關閉了以資料包開頭的連接FIN。我預計在第 78 幀(或單一資料包)之後
    還有更多FIN資料包。ACKRST

您可以在以下位置閱讀有關 Wireshark TCP 重組處理的更多信息Wireshark 維基

答案2

我看不到圖片,但是較低級別的協定(例如乙太網路)可以根據其 MTU(最大傳輸單元)的大小將較高層級的協定(例如 TCP 封包)分成片段。

答案3

維基百科定義協定資料單元如下 :

在電信中,術語協定資料單元 (PDU) 具有以下含義:

  1. 作為網路的對等實體之間的單元傳遞的訊息,並且可以包含控制訊息、位址資訊或資料。
  2. 在分層系統中,在給定層的協定中指定的資料單元,並且由該層的協定控制資訊和可能的使用者資料組成。例如:橋接 PDU 或 iSCSI PDU1

PDU 與前 4 層中的每一層相關。開放系統互連模型(第5層以上稱為數據)。

因此,實際上 PDU 只是一個資料單元,在其自己的上下文中定義。

了解 WireShark:

有時,包裹不會整塊到達。相反,資料包以多個協定資料單元 (PDU) 的形式到達。 WireShark 將嘗試將這些單元重新組裝成單一資料包。這樣的資料包稱為重組的 PDU。

使用重新組裝的 PDU 時,顯示效果將不如常規資料包那麼好。回應的標題位於圖 2.11 的底部窗格中。

這意味著這些是 TCP/IP 訊息的片段,並且通常只有最後一個片段具有有關 TCP/IP 訊息的有意義且完整的資訊。

重組 PDU 的 Wireshark TCP 段:

您可以透過取消選取 TCP 協定首選項中的「允許細分器對 TCP 流進行分段」來停用 TCP 分段的重組。這樣,應用程式 PDU 的所有部分都將單獨顯示。

這是一種確保所有段都包含有意義地顯示 TCP/IP 段所需的所有資訊的方法,而不僅僅是最後一個封包。

相關內容