Networking 确定IPv4数据包是否分段

Networking 确定IPv4数据包是否分段,networking,ip,ipv4,ip-fragmentation,Networking,Ip,Ipv4,Ip Fragmentation,测试IP数据包是否为片段的正确方法是什么? 目前我只查看IPv4报头中的MF(更多片段)位。足够吗?这是不够的,因为最后一个数据包片段没有设置MF标志。您还必须查看片段偏移量字段,但这本身是不够的,因为第一个数据包片段将该字段设置为0 如果片段偏移量字段>0,则它是一个数据包片段,或者如果片段偏移量字段=0且设置了MF标志,则它是一个片段数据包。这是不够的,因为最后一个数据包片段不会设置MF标志。您还必须查看片段偏移量字段,但这本身是不够的,因为第一个数据包片段将该字段设置为0 如果片段偏移量字

测试IP数据包是否为片段的正确方法是什么?

目前我只查看IPv4报头中的
MF
(更多片段)位。足够吗?

这是不够的,因为最后一个数据包片段没有设置MF标志。您还必须查看片段偏移量字段,但这本身是不够的,因为第一个数据包片段将该字段设置为0


如果片段偏移量字段>0,则它是一个数据包片段,或者如果片段偏移量字段=0且设置了MF标志,则它是一个片段数据包。

这是不够的,因为最后一个数据包片段不会设置MF标志。您还必须查看片段偏移量字段,但这本身是不够的,因为第一个数据包片段将该字段设置为0


如果片段偏移量字段>0,则它是一个数据包片段,或者如果片段偏移量字段=0且设置了MF标志,则它是一个片段数据包。

我不理解问题上的TCP标记。TCP与IPv4数据包碎片无关。如果IPv4对数据包进行分段,则TCP完全不知道,因为数据包是在TCP接收之前重新组装的。不要将TCP分段与IPv4分段混淆,因为它们是两个完全独立且不相关的东西。@RonMaupin,感谢您的更正,我修复了标记。@RonMaupin,如果我处理PCAP文件(这意味着它们可能是IP分段的,也可能是TCP分段的,数据包可能是无序的,重复的等等),这是否意味着我应该:a)重新组装IP片段;和b)重新组装TCP段?TCP不会断开。TCP是一种对流进行分段的流协议,这与IPv4分段完全不同。IPv4将获得一个TCP段,它将转发该段,而对TCP或其分段一无所知。如果路径中的MTU收缩,如果未设置DF标志,则IPv4数据包将变得支离破碎。TCP对此一无所知。目标IPv4将在向TCP发送数据包片段之前重新组装数据包片段,因此TCP对IPv4片段一无所知。IPv4片段和TCP之间的重新组装。我无法准确解释像这样的应用程序是如何进行操作的(大多数IDS是专有的,不会披露如何进行操作),但是如果您捕获到第3层以下的内容,那么您需要重新组装数据包片段以首先获得片段,即重新组装片段。对于IPv6,不存在路径碎片,但可能存在使用碎片扩展头的预碎片。现代网络大多使用PMTUD来防止路径碎片(IPv6的一项要求),TCP可以使用PMTUD来正确设置MSS以完全防止预碎片。我不理解这个问题上的TCP标签。TCP与IPv4数据包碎片无关。如果IPv4对数据包进行分段,则TCP完全不知道,因为数据包是在TCP接收之前重新组装的。不要将TCP分段与IPv4分段混淆,因为它们是两个完全独立且不相关的东西。@RonMaupin,感谢您的更正,我修复了标记。@RonMaupin,如果我处理PCAP文件(这意味着它们可能是IP分段的,也可能是TCP分段的,数据包可能是无序的,重复的等等),这是否意味着我应该:a)重新组装IP片段;和b)重新组装TCP段?TCP不会断开。TCP是一种对流进行分段的流协议,这与IPv4分段完全不同。IPv4将获得一个TCP段,它将转发该段,而对TCP或其分段一无所知。如果路径中的MTU收缩,如果未设置DF标志,则IPv4数据包将变得支离破碎。TCP对此一无所知。目标IPv4将在向TCP发送数据包片段之前重新组装数据包片段,因此TCP对IPv4片段一无所知。IPv4片段和TCP之间的重新组装。我无法准确解释像这样的应用程序是如何进行操作的(大多数IDS是专有的,不会披露如何进行操作),但是如果您捕获到第3层以下的内容,那么您需要重新组装数据包片段以首先获得片段,即重新组装片段。对于IPv6,不存在路径碎片,但可能存在使用碎片扩展头的预碎片。现代网络大多使用PMTUD来防止路径碎片(IPv6的一项要求),TCP可以使用PMTUD来正确设置MSS以完全防止预碎片。