7.5. 合并包

7.5.1. 什么是合并包

网络协议经常需要传输较大的数据块,在传输时,底层协议可能不支持这样大的数据块(比如网络包大小的限制),或者是像像TCP一样的流数据,TCP流完全不知道数据分块情况。(原文为:or is stream-based like TCP, which doesn't know data chunks at all.)

在这种情况下,网络协议必须确定数据块分段的边界,并(如果有必要)将数据块分割为多个包。很明显在接受端也需要有找到数据块分段边界的机制。

[提示]提示

在Wireshark里面,这个机制/方法被称为合并/reasembling,在特定协议的描述可能不尽相同(例如:desegmentation, defragmentation, ...)

7.5.2. 如何用Wireshark合并包

对那些可以被Wireshark识别的协议,Wireshark通常处理过程为:查找、解码、显示数据块。Wireshark会尝试查找数据块对应的包,在"Packet Bytes"面板的附加页面显示合并以后的数据。(关于“Packet Bytes”面板的详细介绍,见第 4.7 节 “"View"菜单”)

图 7.2. 带有合并包附加选项卡"Packet Bytes面板"

带有合并包附加选项卡"Packet Bytes面板"

[注意]注意

合并可能发生在多个协议层,所以在"Packet Bytes"面板可能会见到多个附加页选项卡

[注意]注意

你会在数据块的最后一个包看到合并后的数据。

以HTTP Get应答为例:请求数据(例如一个HTML页面)返回时。Wireshark会显示一个16进制转储数据在"Packet Bytes"面板的一个名为"Uncompressed entity body"新选项卡。

默认情况下,首选项中合并功能被设置为允许。在2005年9月之前默认值是不允许。如果你的首选项是在200年9月之前设置的,你得确认一下,合并包选项的设置。合并包对分析网络包作用非常大。

允许和禁止合并包设置对协议来说还有两项要求。

  1. 下层的协议(如:TCP)必须支持合并。通常协议支持合并与否都是通过协议的参数设置的。

  2. 高层协议协议(如:HTTP)必须使用合并机制来合并分片的数据。这些也同样可以通过协议参数来允许或禁止。

在设置高层协议的时候tooltip会提醒你同样需要考虑低层的协议设置。