网络协议经常需要传输较大的数据块,在传输时,底层协议可能不支持这样大的数据块(比如网络包大小的限制),或者是像像TCP一样的流数据,TCP流完全不知道数据分块情况。(原文为:or is stream-based like TCP, which doesn't know data chunks at all.)
在这种情况下,网络协议必须确定数据块分段的边界,并(如果有必要)将数据块分割为多个包。很明显在接受端也需要有找到数据块分段边界的机制。
提示 | |
---|---|
在Wireshark里面,这个机制/方法被称为合并/reasembling,在特定协议的描述可能不尽相同(例如:desegmentation, defragmentation, ...) |
对那些可以被Wireshark识别的协议,Wireshark通常处理过程为:查找、解码、显示数据块。Wireshark会尝试查找数据块对应的包,在"Packet Bytes"面板的附加页面显示合并以后的数据。(关于“Packet Bytes”面板的详细介绍,见第 4.7 节 “"View"菜单”)
注意 | |
---|---|
合并可能发生在多个协议层,所以在"Packet Bytes"面板可能会见到多个附加页选项卡 |
注意 | |
---|---|
你会在数据块的最后一个包看到合并后的数据。 |
以HTTP Get应答为例:请求数据(例如一个HTML页面)返回时。Wireshark会显示一个16进制转储数据在"Packet Bytes"面板的一个名为"Uncompressed entity body"新选项卡。
默认情况下,首选项中合并功能被设置为允许。在2005年9月之前默认值是不允许。如果你的首选项是在200年9月之前设置的,你得确认一下,合并包选项的设置。合并包对分析网络包作用非常大。
允许和禁止合并包设置对协议来说还有两项要求。
下层的协议(如:TCP)必须支持合并。通常协议支持合并与否都是通过协议的参数设置的。
高层协议协议(如:HTTP)必须使用合并机制来合并分片的数据。这些也同样可以通过协议参数来允许或禁止。
在设置高层协议的时候tooltip会提醒你同样需要考虑低层的协议设置。