IP数据报分片和重组

最大传输单元:

IP数据报在互联网上传输时,可能要经过多个物理网络才能从源端传输到目的端。不同的网络由于链路层和介质的物理特性不同,因此在进行数据传输时,对数据帧的最大长度都有一个限制,这个限制值即最大传输单元MTU(Maximum Transmission Unit).

同一个网络上的两台主机之间通信时,该网络的MTU值是确定的,不存在分片问题。分片问题一般只存在于具有不同MTU值的互联网中。由于现在互联网主要使用路由器进行网络连接,因此分片工作通常由路由器负责。

当两台主机之间的通信要通过多个具有不同MTU值的网络时,MTU的瓶颈是通信路径上最小的MTU值,它被称为路径MTU。由于路由选择不一定是对称的(从A到B的路由可能与从B到A的路由不同),因此,路径MTU在两个方向上不一定是一致的,下表是几种常用网络的MTU值:

分片:

把一个数据报为了适合网络传输而分成多个数据报的过程称为分片,被分片后的各个IP数据报可能经过不同的路径到达目标主机。

一个IP数据报在传输过程中可能被分片,也可能不被分片。如果被分片,分片后的IP数据报和原来没有分片的IP数据报结构是相同的,即也是由IP头部和IP数据区两个部分组成:

分片后的IP数据报,数据区是原IP数据报数据区的一个连续部分,头部是原IP数据报头部的复制,但与原来未分片的IP数据报头部有两点主要不同:标志和片偏移:

扫描二维码关注公众号,回复: 8014130 查看本文章

(1)—标志:在IP数据报头部有一个叫“标志”的字段,用3位二进制数表示:

不分片DF(Do not Fragment)标志如果被置1,则数据报在传输过程中不能被分片,如网络连通性测试命令ping就可以用-F参数设置为在数据传输时不分片,但这样当数据不能通过MTU较小的网络时,将产生数据不可达的错误。

片未完MF(More Fragment)标志如果被置1,说明该数据报不是分片后的最后一个数据报,最后一个数据报的该位被置0。

(2)—片偏移:IP数据报被分片后,各片数据区在原来IP数据区中的位置用13位片偏移来表示。上图中分片1的偏移为0;分片2的偏移为600;分片3的偏移为1200实际在IP地址中,由于偏移是以8个字节为单位进行计算的,因而在IP数据报中分片1的偏移是0;分片2的偏移是75;分片3的偏移是150。

重组:

当分了片的IP数据报到达最终目标主机时,目标主机对各分片进行组装,恢复成源主机发送时的IP数据报,这个过程叫做IP数据报的重组。

在IP数据报头部中,标识用16位二进制数表示,它唯一地标识主机发送的每一份数据报。在一个数据报被分片时,每个分片仅把数据报“标识”字段的值原样复制一份,所以一个数据报的所有分片具有相同的标识。

目标端主机重组数据报的原理是:

(1)—根据“标识”字段可以确定收到的分片属于原来哪个IP数据报;

(2)—根据“标志”字段的“片未完MF”子字段可以确定分片是不是最后一个分片;

(3)—根据“偏移量”字段可以确定分片在原数据报中的位置。

========================IP数据报选项========================

IP数据报“选项”主要有两大功能:

1)用来实现对数据报传输过程中的控制,如规定数据报要经过的路由;

2)进行网络测试,如一个数据报传输过程中经过了哪些路由器。

IP“选项“域共分为四大类,每类分为若干个选项,每个选项有确定的编号:

IP数据报“选项”由三个部分组成:选项码、选项长度和选项数据。选项码和选项长度各占一个字节,中,选项长度用于确定整个选项部分的长度;选项码又分为复制、选项类和选项号:

复制:占一位,用来控制一个带有选项的IP数据报被分片后对选项的处理方式。该位置1时将选项复制到所有分片中;置0时将选项仅复制到第一个分片中。

选项类和选项号用于确定该选项是哪类选项中的哪个选项,其实就是确定该选项的功能。

1)源路由选择:是指IP数据报在互联网中传输时,所经过的路由是由发出IP数据报的源主机指定的,以区别于数据报在互联网中传输时由路由器的IP层自动寻径所得到的路由。

通过设置源路由选择选项,可以测试网络中指定路由的连通性,以使数据报绕开出错的网络,也可用于测试特定网络的吞吐量。源路由选择可分为两类:严格源路由选择和宽松源路由选择。

(1)—严格源路由选择有发送端规定IP数据报必须经过的路径上的每一个路由器,相邻路由器之间不得有中间路由器,并且所经过的路由器的顺序不可更改。如果一个路由器发送源路由所指定的下一个路由器不在其直接连接的网络上,那么它就返回一个“源路由失败”的ICMP差错报文。严格源路由选择选项格式如下:

选项码字段为100 01001(0x89),即为0类9号选项。选项长度最大为39,可存放9个IP地址。因为IP头部长度字段只有4位二进制数,所以整个IP头部最长只能包括15(<24)个32位长的字(即60个字节)。由于IP头部固定长度为20字节,选项码、选项长度和指针共用去3个字节,因此剩下60-20-3=37个字节来存放IP地址清单,因而只能存放9个IP地址。

(2)—宽松源路由选择:由发送方指明一个数据报经过的IP地址清单,但是在数据报传输的路径上,在选项中指定的两个IP地址之间可以有其他IP地址的路由器。格式与严格的相同,只是选项码字段值为0x83。

2)记录路由:通过设置记录路由选项,IP数据报就可以记录数据报从源主机传输到目标主机时,所经过路径上的各个路由器的IP地址。记录路由选项的数据格式和严格源路由选择格式相同,但选项码字段值为0x87,指针初值为4,指向存放第一个IP地址的位置。每个路由器的IP地址存入选项的数据区中,指针字段的值也随着增加(从4开始到8,12,16,最大到36),它始终指向下一个存放IP地址的位置。当记录了9个IP地址后,指针字段的值为40,表示数据区已满。

3)记录时间戳:就是IP数据报每经过一个路由器都记下它的IP地址和时间。时间戳中的时间以ms为单位,时间戳取值一般为格林威治时间(UT,Universal Time)自午夜开始计时的毫秒数时间戳选项格式如下:

时间戳选项的选项码是0x44。选项长度表示选项的总长度(一般为36或40),指针指向下一个可用空间的指针(值为5、9、13等)。

“溢出OF”字段表示因时间戳选项数据区空间不够而未能记录下来的时间戳个数;

“标志FL”字段用于控制时间戳选项的格式,取值如下:

猜你喜欢

转载自www.cnblogs.com/zjy0806/p/11956336.html