为什么单个 TCP 数据包在这里被分成多个 PDU 单元?

为什么单个 TCP 数据包在这里被分成多个 PDU 单元?

图片相关:替代文本

为什么这些段被标记为单独的数据包(所有 Ack,Seq=509)?为什么数据包被拆分?

答案1

我猜你指的是 56-78 范围内的可见帧。
让我们按这个顺序来处理,

  1. 关于:“ TCP segment of a reassembled PDU
    这意味着 wireshark(ethereal?)将 TCP 段重新组合在一起以供您查看。
    因此,您可以忽略此字符串,它没有任何危害。
    我已在下面的第 4 点详细说明了这些帧是什么。
  2. 关于:不同的帧具有相同的“ seq”编号。
    帧 58、60、62、64 等显示相同的序列号。
    但是,请注意,这些是不是单个数据包“标记为单独的数据包”——没有拆分。
    这些数据包仅设置了“ ACK”标志,您将看到 ACK 编号在递增。
    这些是不同的 TCP 段到达您的计算机时从您的计算机发送到 HTTP 服务器的 ACK。
  3. ' ACK' 序列在1帧中以 开始,在 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. 您的浏览器通过三次 TCP 握手开始连接 HTTP 服务器。
  2. 它通过此连接向服务器发送了一个 HTTP 请求
  3. 服务器以 9 KB 的响应回复此信息,该响应分布在多个 TCP/IP 数据包中,如下所示(TCP 段
  4. 浏览器计算机上的 TCP/IP 堆栈确认从服务器收到的每个 TCP 数据包
  5. 最后,它以数据包开始关闭连接FIN
    我预计在第 78 帧之后还会有更多FIN数据ACK包(或单个RST数据包)。

您可以在以下位置阅读更多有关 Wireshark TCP 重组处理的信息Wireshark 维基

答案2

我看不到图片,但是较低级别的协议(例如,以太网)可以根据其 MTU(最大传输单元)的大小将较高级别的协议(例如,TCP 数据包)分解为片段。

答案3

维基百科定义协议数据单元如下 :

在电信中,术语“协议数据单元(PDU)”具有以下含义:

  1. 在网络的对等实体之间作为一个单元传递的信息,可能包含控制信息、地址信息或数据。
  2. 在分层系统中,在给定层的协议中指定的数据单元,由协议控制信息和可能该层的用户数据组成。例如:桥接 PDU 或 iSCSI PDU1

PDU 与协议的前 4 层相关。OSI 模型(第 5 层及以上称为数据)。

因此,实际上 PDU 只是一个数据单元,在其自己的上下文中定义。

了解 WireShark

有时数据包不会完整地到达。相反,数据包会以多个协议数据单元 (PDU) 的形式到达。WireShark 将尝试将这些单元重新组合成单​​个数据包。这样的数据包称为重组 PDU。

当使用重组的 PDU 时,显示效果不会像常规数据包那样好。响应的标头位于图 2.11 的底部窗格中。

这意味着这些是 TCP/IP 消息的片段,并且通常只有最后一段包含有关 TCP/IP 消息的有意义且完整的信息。

Wireshark 重组 PDU 的 TCP 段

您可以通过取消选中 TCP 协议首选项中的“允许子解析器对 TCP 流进行分段”来禁用 TCP 段的重组。这样,应用程序 PDU 的所有部分都将单独显示。

这种方法可以确保所有段都包含有意义地显示 TCP/IP 段所需的所有信息,而不仅仅是最后一个数据包。

相关内容