图片相关:
为什么这些段被标记为单独的数据包(所有 Ack,Seq=509)?为什么数据包被拆分?
答案1
我猜你指的是 56-78 范围内的可见帧。
让我们按这个顺序来处理,
- 关于:“
TCP segment of a reassembled PDU
”
这意味着 wireshark(ethereal?)将 TCP 段重新组合在一起以供您查看。
因此,您可以忽略此字符串,它没有任何危害。
我已在下面的第 4 点详细说明了这些帧是什么。 - 关于:不同的帧具有相同的“
seq
”编号。
帧 58、60、62、64 等显示相同的序列号。
但是,请注意,这些是不是单个数据包“标记为单独的数据包”——没有拆分。
这些数据包仅设置了“ACK
”标志,您将看到 ACK 编号在递增。
这些是不同的 TCP 段到达您的计算机时从您的计算机发送到 HTTP 服务器的 ACK。 - '
ACK
' 序列在1
帧中以 开始,在 FIN 帧中52
以 结束。 在此期间,从浏览器到 HTTP 服务器的所有帧都在重复上次发送的序列号(即)——这是正常的 TCP 协议行为。浏览器在其第一个 HTTP 请求(帧) 之后不会再发送任何数据。HTTP 服务器在帧 中确认了这一点。9646
78
609
52
54
- 我预计帧
54
是 (wireshark) 重新组装的服务器响应,它由标记为“重新组装的 PDU 的 TCP 段”的帧组成。
因此,所有以这种方式标记的后续帧都是从 HTTP 服务器到客户端的
(由于您清除了“源”和“目标”列,因此该细节在您的图片中不可见)。
如果您重新检查原始捕获文件,您应该发现具有 TCP 源端口 80(用于 HTTP)的帧 54 到 67 将加起来为来自 HTTP 服务器的 9646 字节响应数据。
您在这里看到的是来自 HTTP 服务器的 9KB 回复以几个 MTU 受限的 TCP 段的形式到达您的浏览器,每个段都得到了您操作系统的 TCP 堆栈的确认。
这是高层次的沟通序列。
- 您的浏览器通过三次 TCP 握手开始连接 HTTP 服务器。
- 它通过此连接向服务器发送了一个 HTTP 请求
- 服务器以 9 KB 的响应回复此信息,该响应分布在多个 TCP/IP 数据包中,如下所示(TCP 段)
- 浏览器计算机上的 TCP/IP 堆栈确认从服务器收到的每个 TCP 数据包
- 最后,它以数据包开始关闭连接
FIN
。
我预计在第 78 帧之后还会有更多FIN
数据ACK
包(或单个RST
数据包)。
您可以在以下位置阅读更多有关 Wireshark TCP 重组处理的信息Wireshark 维基。
答案2
我看不到图片,但是较低级别的协议(例如,以太网)可以根据其 MTU(最大传输单元)的大小将较高级别的协议(例如,TCP 数据包)分解为片段。
答案3
维基百科定义协议数据单元如下 :
在电信中,术语“协议数据单元(PDU)”具有以下含义:
- 在网络的对等实体之间作为一个单元传递的信息,可能包含控制信息、地址信息或数据。
- 在分层系统中,在给定层的协议中指定的数据单元,由协议控制信息和可能该层的用户数据组成。例如:桥接 PDU 或 iSCSI PDU1
PDU 与协议的前 4 层相关。OSI 模型(第 5 层及以上称为数据)。
因此,实际上 PDU 只是一个数据单元,在其自己的上下文中定义。
有时数据包不会完整地到达。相反,数据包会以多个协议数据单元 (PDU) 的形式到达。WireShark 将尝试将这些单元重新组合成单个数据包。这样的数据包称为重组 PDU。
当使用重组的 PDU 时,显示效果不会像常规数据包那样好。响应的标头位于图 2.11 的底部窗格中。
这意味着这些是 TCP/IP 消息的片段,并且通常只有最后一段包含有关 TCP/IP 消息的有意义且完整的信息。
您可以通过取消选中 TCP 协议首选项中的“允许子解析器对 TCP 流进行分段”来禁用 TCP 段的重组。这样,应用程序 PDU 的所有部分都将单独显示。
这种方法可以确保所有段都包含有意义地显示 TCP/IP 段所需的所有信息,而不仅仅是最后一个数据包。