为除最后一个片段之外的所有片段设置了更多片段标志。一个数据包可能被分成两个以上的片段,并且除了最后一个片段之外的每个片段都必须设置标志以告诉目标主机需要更多的片段。
例如,路由器可以在 MTU 为 4500 的串行接口上接收全尺寸数据包,并需要将其发送到 MTU 为 1500 的以太网接口。这将导致多个片段,所有这些片段除了最后一个片段,将设置 MF 标志。
完整的 IPv4 分段过程(IPv6 不允许中间设备分段数据包)在RFC 791, Internet Protocol中进行了说明。这是主要的解释,但整个 RFC 都有关于分片的详细信息(分片是 IPv4 的主要特性之一):
碎片化
当互联网数据报起源于允许大数据包大小的本地网络并且必须遍历将数据包限制为较小大小的本地网络以到达其目的地时,互联网数据报的分段是必要的。
可以将 Internet 数据报标记为“不分段”。如此标记的任何互联网数据报在任何情况下都不应被互联网分割。如果标记为不分段的 Internet 数据报在不分段的情况下无法传递到其目的地,则将其丢弃。
跨局域网的分段、传输和重组对 Internet 协议模块不可见,称为 Intranet 分段,可以使用 [6]。
互联网分段和重组过程需要能够将数据报分解成几乎任意数量的片段,以便以后重新组装。分片的接收方使用标识字段来保证不同数据报的分片不会混在一起。片段偏移字段告诉接收者片段在原始数据报中的位置。片段偏移量和长度决定了该片段所覆盖的原始数据报的部分。more-fragments 标志指示(通过被重置)最后一个片段。这些字段为重组数据报提供了足够的信息。
标识字段用于区分一个数据报的片段与另一个数据报的片段。互联网数据报的原始协议模块将标识字段设置为一个值,该值对于该源-目的地对和协议必须是唯一的,以便数据报在互联网系统中处于活动状态。完整数据报的始发协议模块将more-fragments 标志设置为零,并将片段偏移量设置为零。
为了对长互联网数据报进行分段,互联网协议模块(例如,在网关中)创建两个新的互联网数据报,并将互联网报头字段的内容从长数据报复制到两个新的互联网报头中。长数据报的数据在 8 个八位字节(64 位)边界上分为两部分(第二部分可能不是 8 个八位字节的整数倍,但第一部分必须是)。在第一部分 NFB 中调用 8 个八位字节块的数量(对于 Fragment Blocks 的数量)。数据的第一部分放在第一个新的互联网数据报中,总长度字段设置为第一个数据报的长度。more-fragments 标志设置为 1。数据的第二部分放在第二个新的互联网数据报中,总长度字段设置为第二个数据报的长度。more-fragments 标志携带与长数据报相同的值。第二个新互联网数据报的片段偏移字段设置为长数据报中该字段的值加上 NFB。
这个过程可以推广到 n 路拆分,而不是描述的双向拆分。
为了组装互联网数据报的片段,互联网协议模块(例如在目标主机上)将互联网数据报组合在一起,这些互联网数据报的四个字段都具有相同的值:标识、源、目标和协议。通过将每个片段的数据部分放置在该片段的 Internet 标头中的片段偏移指示的相对位置来完成组合。第一个片段的片段偏移量为零,最后一个片段的更多片段标志重置为零。
片段也可能需要在路径的后面进一步分段。执行进一步分片的路由器将以相同的方式对分片进行分片。
这里有问题的答案可以解释这一点。例如:这个问题和这个问题。