我目前正在浏览我的网络幻灯片,想知道是否有人可以帮助我解决碎片化的概念
所以我理解第一部分直到“108 字节”,但我不明白的是这个“8 字节 = 13.5 => 13 * 8 字节 = 104 字节”
这些额外的字节是什么?
其余的很清楚。
您必须在八字节边界上对数据包有效负载进行分段。对于 128 字节的 MTU,您可以拥有的最大有效负载片段为 104 字节,这比简单地从 MTU 中减去 IP 标头(108 字节)要小。文本告诉您从 MTU 中减去数据包标头大小(20 字节),下一个可被 8 整除的较小片段大小为 104 字节。
RFC 791,互联网协议对 IP 分片的工作方式有完整的描述:
碎片化
当互联网数据报起源于允许大数据包大小的本地网络并且必须遍历将数据包限制为较小大小的本地网络以到达其目的地时,互联网数据报的分段是必要的。
可以将 Internet 数据报标记为“不分段”。如此标记的任何互联网数据报在任何情况下都不应被互联网分割。如果标记为不分段的 Internet 数据报在不分段的情况下无法传递到其目的地,则将其丢弃。
跨局域网的分段、传输和重组对 Internet 协议模块不可见,称为 Intranet 分段,可以使用 [6]。
互联网分段和重组过程需要能够将数据报分解成几乎任意数量的片段,以便以后重新组装。分片的接收方使用标识字段来保证不同数据报的分片不会混在一起。片段偏移字段告诉接收者片段在原始数据报中的位置。片段偏移量和长度决定了该片段所覆盖的原始数据报的部分。more-fragments 标志指示(通过被重置)最后一个片段。这些字段为重组数据报提供了足够的信息。
标识字段用于区分一个数据报的片段与另一个数据报的片段。互联网数据报的发起协议模块将标识字段设置为一个值,该值对于该源-目的地对和协议必须是唯一的,以便数据报在互联网系统中处于活动状态。完整数据报的始发协议模块将more-fragments 标志设置为零,并将片段偏移量设置为零。
为了对长互联网数据报进行分段,互联网协议模块(例如,在网关中)创建两个新的互联网数据报,并将互联网报头字段的内容从长数据报复制到两个新的互联网报头中。长数据报的数据在 8 个八位字节(64 位)边界上分为两部分(第二部分可能不是 8 个八位字节的整数倍,但第一部分必须是)。在第一部分 NFB 中调用 8 个八位字节块的数量(对于 Fragment Blocks 的数量)。数据的第一部分放在第一个新的互联网数据报中,总长度字段设置为第一个数据报的长度。more-fragments 标志设置为 1。数据的第二部分放在第二个新的互联网数据报中,总长度字段设置为第二个数据报的长度。more-fragments 标志携带与长数据报相同的值。第二个新互联网数据报的片段偏移字段设置为长数据报中该字段的值加上 NFB。
这个过程可以推广到 n 路拆分,而不是描述的双向拆分。
为了组装互联网数据报的片段,互联网协议模块(例如在目标主机上)将互联网数据报组合在一起,这些互联网数据报的四个字段都具有相同的值:标识、源、目标和协议。通过将每个片段的数据部分放置在该片段的 Internet 标头中的片段偏移指示的相对位置来完成组合。第一个片段的片段偏移量为零,最后一个片段的更多片段标志重置为零。
根据 IP 标头中 Fragment offset 字段的定义:
片段偏移量(13 位):在分段 IP 数据报的情况下,该字段包含从 IP 数据报开始的偏移量(以 8 字节为单位)。同样,该字段用于重新组装分段的 IP 数据报。
因此,即使有效负载大小可以是任意大小,偏移值也只能是 IP 标头上 8 个字节的倍数,因此有效负载大小是 8 个字节的倍数。该计算将 IP 有效负载大小四舍五入。