wireshark:包重组

数据包重组

是什么

网络协议通常需要传输自身完整的大块数据,比如在传输文件时。底层协议可能无法处理数据块大小(例如网络数据包大小的限制),或者是基于流的协议,比如TCP,它根本不知道数据块。

在这种情况下,网络协议必须自己处理块边界,并且(如果需要的话还要)将数据分散到多个数据包上。显然,它还需要一种机制来确定接收端的边界。

wireshark将这种机制叫做数据报重组,尽管特定的协议规范可能对此使用不同的术语(例如,去分段、碎片整理等)。

wireshark是如何处理的

对于wireshark知道的一些网络协议,实现了一种机制来查找、解码和显示这些数据块。wireshark将尝试查找此区块的相应数据包,并在“数据包字节”窗格中将组合数据显示为附加页面
在这里插入图片描述
重组可能发生在多个协议层,因此“数据包字节”窗格中可能会出现多个选项卡。(注意您将在块的最后一个包中找到重新组合的数据。)

比如,在HTTP GET响应中,返回请求的数据(比如HTML页面)。wireshark会在“packet bytes(数据包字节)”窗格的新标签“uncompressed entity body(未压缩实体体)”中显示十六进制转储数据。

默认情况下,重新组装在首选项中是启用的,但可以在相关协议的首选项中禁用。启用或禁用协议的重新组装设置通常需要两件事:

  • 低级协议(如TCP)必须支持重新组装。通常可以通过协议首选项启用或禁用这种重新组合。
  • 更高层的协议(例如HTTP)必须使用重组机制来组装碎片化的协议数据。这通常也可以通过协议首选项来启用或禁用。

高级协议设置的工具提示将通知您是否还必须考虑低级别协议设置。

TCP重组

HTTP或者TLS扥协议可能跨越多个TCP段。TCP协议首选项“Allow subdissector to reassemble TCP streams(允许重新组装TCP流)”默认启用,使得wireshark能够收集TCP段的连续序列并将其移交给更高级别的协议(比如,重建完整的HTTP消息)。在数据包列表中,除了最后一个数据段之外,所有数据段都将标记为【重组的PUD的TCP数据段】

如果您只关心TCP序列号分析,请禁用此首选项以减少内存和处理开销。但请记住,较高级别的协议可能被错误的分解。比如,HTTP消息显示“Continuation”,TLS记录显示“Ignored Unknown Record”。如果在TCP连接已启用或者TCP段丢失或者传输顺序不正确时启动捕获,也可以观察到这样的结果。

要重新组装无序的TCP段,除了之前的首选项之外,还必须启用TCP协议首选项“重新组装无序段”(当前默认禁用)。如果按顺序接收所有数据包,则此选项将不起作用。否则(如果在顺序处理数据包捕获时遇到丢失的段),则假定新的和丢失的段属于同一PDU。注意事项:

  • 丢失的数据包被认为是无序接收或稍后重新传输的。应用程序通常会重新传输数据段,直到这些数据段被确认,但是如果数据包捕获丢弃了数据包,那么Wireshark将无法构建TCP流。在这种情况下,您可以尝试禁用此首选项,希望对每个TCP段进行部分解剖,而不是只看到“[TCP segment of a reassembled PDU]”。
  • 在监控模式(ieee802.11)下进行捕获时,由于信号接收问题,数据包更可能丢失。在这种情况下,建议禁用该选项。
  • 如果新的和丢失的片段实际上是不同PDU的一部分,那么当前的处理将被延迟,直到没有更多的片段丢失,即使丢失的片段的开始部分完成了一个PDU。例如,假设有6个segment组成两个PDU ABC和DEF,当接收到作为ABECDF的PDU时,应用程序可以开始处理第一个收到ABEC的PDU。然而,Wireshark也需要接收丢失的段D。这个问题将在将来解决。
  • 在图形用户界面和两次解剖过程中(tshark -2),上一个场景将在最后一个段的数据包中显示两个PDU(F)ratherthan在第一个包中显示它,该包具有最后丢失的aPDU段。这一问题将在今后得到解决。
  • 启用时,诸如SMB“从请求开始的时间”等字段(smb.time)如果请求遵循其他无序段(此反射应用程序行为),则可能会更糟。但是,如果发生前一个场景,则请求的时间基于接收到所有缺失片段的帧。

不管这两个与重组相关的首选项的设置如何,您都可以使用“Follow TCP Stream”选项以预期的顺序显示段。

おすすめ

転載: blog.csdn.net/zhizhengguan/article/details/121861565