IP 分段中的额外字节

Extra Bytes in IP Fragmentation

我目前正在浏览我的网络幻灯片,想知道是否有人可以帮助我了解碎片化的概念

所以我理解第一部分直到“108 字节”,但我不明白的是这个“8 字节 = 13.5 => 13 * 8 字节 = 104 字节"

这些额外的字节是什么?

剩下的就清楚了。

您必须在 eight-byte 边界上对数据包负载进行分段。对于 128 字节的 MTU,您可以拥有的最大负载片段是 104 字节,这比简单地从 MTU(108 字节)中减去 IP header 要小。文本告诉您从 MTU 中减去数据包 header 大小(20 字节),下一个可被 8 整除的较小片段大小是 104 字节。

RFC 791, Internet Protocol 完整描述了 IP 分片的工作原理:

Fragmentation

Fragmentation of an internet datagram is necessary when it originates in a local net that allows a large packet size and must traverse a local net that limits packets to a smaller size to reach its destination.

An internet datagram can be marked "don't fragment." Any internet datagram so marked is not to be internet fragmented under any circumstances. If internet datagram marked don't fragment cannot be delivered to its destination without fragmenting it, it is to be discarded instead.

Fragmentation, transmission and reassembly across a local network which is invisible to the internet protocol module is called intranet fragmentation and may be used [6].

The internet fragmentation and reassembly procedure needs to be able to break a datagram into an almost arbitrary number of pieces that can be later reassembled. The receiver of the fragments uses the identification field to ensure that fragments of different datagrams are not mixed. The fragment offset field tells the receiver the position of a fragment in the original datagram. The fragment offset and length determine the portion of the original datagram covered by this fragment. The more-fragments flag indicates (by being reset) the last fragment. These fields provide sufficient information to reassemble datagrams.

The identification field is used to distinguish the fragments of one datagram from those of another. The originating protocol module of an internet datagram sets the identification field to a value that must be unique for that source-destination pair and protocol for the time the datagram will be active in the internet system. The originating protocol module of a complete datagram sets the more-fragments flag to zero and the fragment offset to zero.

To fragment a long internet datagram, an internet protocol module (for example, in a gateway), creates two new internet datagrams and copies the contents of the internet header fields from the long datagram into both new internet headers. The data of the long datagram is divided into two portions on a 8 octet (64 bit) boundary (the second portion might not be an integral multiple of 8 octets, but the first must be). Call the number of 8 octet blocks in the first portion NFB (for Number of Fragment Blocks). The first portion of the data is placed in the first new internet datagram, and the total length field is set to the length of the first datagram. The more-fragments flag is set to one. The second portion of the data is placed in the second new internet datagram, and the total length field is set to the length of the second datagram. The more-fragments flag carries the same value as the long datagram. The fragment offset field of the second new internet datagram is set to the value of that field in the long datagram plus NFB.

This procedure can be generalized for an n-way split, rather than the two-way split described.

To assemble the fragments of an internet datagram, an internet protocol module (for example at a destination host) combines internet datagrams that all have the same value for the four fields: identification, source, destination, and protocol. The combination is done by placing the data portion of each fragment in the relative position indicated by the fragment offset in that fragment's internet header. The first fragment will have the fragment offset zero, and the last fragment will have the more-fragments flag reset to zero.

根据 IP header 中片段偏移字段的定义:

Fragment offset(13 bits): 对于分段的IP数据报,该字段包含从IP数据报开始的偏移量(以8字节为单位)。同样,该字段用于重组分段的 IP 数据报。

因此,即使负载大小可以是任何大小,偏移值也只能是 IP header 上 8 字节的倍数,因此负载大小是 8 字节的倍数。计算四舍五入 IP 负载大小。