IP数据报的分片和组装原理

一份数据从一个主机通过路由器发送给另一个主机时,要经过很多路由层转发的。过程比较复杂,那么IP在路由层到底是以怎样的形式转发和目的主机这份数据报的时候又是如何处理的?

首先我们需要了解数据报的格式:

IP的转发和控制都是由IP数据报的头部决定

4位首部长度的数值是以 4字节为单位的,最小值为 5,也就是说首部长度最小是 4x5=20字节 ,

也就是不带任何选项的 IP首部 ,4位能表表示的最大值是 15,也就是说首部长度最大是 60字 节

8位TOS字段有 3个位用来指定IP数据报的优先级 (目前已经废弃不用 ),还有4个位表示可选

的服务类型 (最小延迟、最大呑吐量、最大可靠性、最小成本 ),还有一个位总 是0。

16位总长度是整个数据报 (包括IP首部和 IP层payload)的字节数。

每传一个 IP数据报 ,16 位的标识加1,可用于分片和重新组装数据报。

3位标志和13位片偏移用于分片 。

TTL(Time to live) 是这样用的 :源主机为数据包设定一个生存时间 ,比如 64,每过一个路由器

就把该值减 1,如果减到 0就表示路由已经太长了仍然找不到目的主机的网络 ,就丢弃该包 ,因此

这个生存时间的单位不是秒 ,而是跳 (hop)。

协议字段指示上层协议是 TCP、 UDP、 ICMP还是 IGMP。

然后是 校验和, 只校验IP首部 ,数据的校验由更高层协议负责。

IPv4的IP地址长度为 32位。

在IP数据报中总长度是16位的字段,一次数据 报的最大长度为2^16-1,虽然尽可能长的数据报能够提高传输效率,但是很少 有超过 1500字节的;所以在这里只要超过1500字节,就认为此数据报该分片了。IP数据报被分片以后,各分片分别组成一个具有IP首部的分组,并各自独立的路由,分别抵达目的主机后,目的主机的IP层会在传送给传输层之前将收到的所有分片重新组装成一个数据报。

一.IP分片

1.IP分片原理:

分片和重新组装的过程对于传输层是透明的,原因是IP数据报进行分片以后,只有它到达下一站时才可以 进行重新组装,且它是由目的端的IP层来完成的,分片之后的数据报根据需要可以再次 分片;

IP分片和完整的报文差不多拥有相同的IP头,ID域对美英分片都是一致的,这样才能在进行组装的时候识别出来 同一个IP数据报文分片。在IP头里面,16位识别号唯一记录了一个IP报的ID,具有同一个ID的IP分片将会重新进行组装;而13位片偏移则记录了某IP片相对于整个包的位置;这两个表中间的3位标志则标志着该分片后面是否还有新的分片。这三个域组成了IP分片的所有信息,接受方可以利用这些信息对IP数据进行重新组装。

(1)标志字段的作用

0   DF  MF

标志字段共三位,最高位为0,该值必须复制到 所有 分组中

不分片(Do not Fragment ,DF)值必须复制。DF=1表示 接受主机不能对分组进行分片。如果分组的长度超过 MTU,又不可以分片,那么这个分组只能丢弃,并要用ICMP差错报文向源主机报告 。DF=0,表示可以分片

分片(MF)表示分片是不是最后一个分片,MF=1表示接受分片不是 最后一个分片,MF=0表示 接受分片时是最后一个分片

故意发送部分IP分片而不是全部,则会导致目标主机总是等待分片消耗并占用系统资源。

2.MTU(最大传输 单元)原理

当两台远程CP互联的时候,他们的数据要穿过很多的路由器和各种各样的网络媒介才能到达对端

,网络中不同媒介的MTU各不相同,就好比一长段的水管,由不同粗细的水管组成(MTU不同 )通过这段水管最大水量就要由中间最细的水管决定。

对于网络层的上层协议而言(这里以TCP/IP协议簇为例)他们对水管的粗细不在意因为他们认为 这是网络的事情。网络层IP协议会检测每个从上层协议下来的数据报包的大小 ,并根据本机的MTU大小决定是否分片处理。分片最大的坏处就是降低了传输性能,本来可以一次搞定的事情,分成多次。所以在网络的更高一层(传输层的实现)往往会对此加以注意,因为有些高层因为某些原因可能就要求不能对分组进行分片,索引会在IP数据报的包头加上一个标签:DF这样IP数据包在一大段网络传输的时候,如果遇到MTU小于 数据包的情况,转发设备会根据情况丢掉这个数据包。然后返回一个错误信息给 发送者,这往往会造成通讯上的问题,不过幸运的是大部分网络链路MTU都是1500或者大于 1500

对于UDP而言,这个协议本身是无连接的协议,对数据包的到达顺序是否正确并不关心,所以一般UDP对分片没有多大要求

对于TCP就不一样了,这个协议是面向连接的协议,对于 TCP而言它非常在意数据包的到达顺序

以及在传输过程中是否有错误发生,所以有些TCP应用对分片有要求---不能分片

3.MSS(最大报文段长度 )原理

MSS就是TCP数据包每次能够传输的最大数据分段,为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方MSS的值,这个值TCP协议在实现的时候用MTU代替(要减去IP数据包的包头大小20bites和TCP数据段的包头20BITES)所以MSS大小往往为1460,双方会根据提供的MSS最小值 确定这次连接的MSS最大值

二.IP分片步骤

一个未分片的数据报的分片信息字段全为0,即多个分片标志位为 0,并且偏移量 为0,分片一个数据报需要经过一下步骤

(1)检查DF标志位,查看是否允许分片,如果设置了该位,则数据报将被丢弃 ,并将ICMP错误返回给源端

(2)基于MTU值,把数据字段分成两个或对个部分,除了最后的数据 部分外,所有新建的数据选项 长度必须为8字节的倍数

(3)每个数据被放入一个IP数据报,这些数据报的包头略微改了原先的报文头

(4)除了最后的数据报分片外,所有的分片都设置了多个分片标志位

(5)每个分片中的片偏移量字段设为这个数据部分在原来数据报中所占的位置,这个位置相对于原来未分片数据报中的开头处。
(6)如果在原来的数据报中包括了选项,则选项类型字节的高位字节决定了这个信息是被复制到所有分片数据报,还是只复制到第一个数据报。
(7) 设置新数据报的报文头字段及总长度字段。
(8)重新计算报文头部校验和字段。

此时这些分片数据报如一个完整的IP数据报一样被转发,IP独立的处理每个数据报分片,数据报分片能够通过不同的路由 ,到达目的,如果他们通过了那些规定了更小的MTU路由,还能够进一步对他们进行分片

在目的主机上,数据被 重新组合成原来的数据报 ,发送主机设置的标示字段与数据报中的袁IP地址和目的IP地址一起使用,分片过程不改变这个字段

三 .重组

为了重新组合这些数据报分片,接受主机在第一个分片到达时分配一个存储缓冲区。这个主机还将启动一个计时器。当数据报的后续分片到达时,数据被复制到缓冲区存储器中片偏移量指定的位置,当所有分片都到达时,完整的未分片的原始数据报就被恢复了。

如果计时器超时并且分片保持尚未认可状态,则数据将被丢弃。这个计时器的初始值为IP数据报的生存期值,它依赖于实现的,一些实现允许对他进行配置。

重组步骤

在接受方,一个由发送方发出的原始数据IP报,将所有的分片重新组合,才能够提交到上一层协议,每一个将被重组的IP数据报都用一个ipq结构来表示

为了能够有效提高组装分片,用于保存分片的结构必须做到以下几点

(1)快速定位某一个数据报的一组分组

(2)在属于某一个数据报的一组分片中快速插入新的分片

(3)有效的判断一个数据报的所有分片是否已经被全部接收

(4)具有重组超时机制,如果在重组完成之前超时溢出,则删除该数据报的所有内容

时间: 2024-10-13 10:35:19

IP数据报的分片和组装原理的相关文章

IP数据报的分片和组装

一.IP数据报的格式 IP数据报的首部长度和数据长度都是可变长的,但总是4字节的整数倍. (1)对于IPv4 ,4位版本字段是4. (2)4位首部长度的数值是以4字节为单位的,最小值为5,也就是说首部长度最小是4x5=20字节, 也就是不带任何选项的IP首部,4位能表示的最大值是15,也就是说首部长度最大是60字节. (3)8位TOS字段有3个位用来指定IP数据报的优先级(目前已经废弃不用),还有4个位表示可选的服务类型(最小延迟.最大呑吐量.最大可靠性.最小成本),还有一个位总是0. (4)1

数据报的分片与组装

1.IP数据报格式 2.MTU MTU(最大传输单元):帧格式中的数据字段的最大长度. 3.分片 1)分片的条件 数据报长度超过网络所允许的最大传输单元MTU时,必须把过长的数据报进行分片后才能在网络上传输. 2)如何分片 对于发送端发送的每份IP数据报来说,其标识字段都包含一个唯一值.该值在数据报分片时被复制到每个片中.标志字段用其中一个比特来表示"更多的片".除了最后一片外,其他每个组成数据报的片都要把该比特置1.片偏移字段指的是该片偏移原始数据报开始处的位置.另外,当数据报被分片

网络基础之--IP数据报、分片策略、路由表

IP 数据报的格式 一个 IP 数据报由首部和数据两部分组成. 首部的前一部分是固定长度共 20 字节是所有 IP 数据报必须具有的. 在首部的固定部分的后面是一些可选字段其长度是可变的. IP 数据报首部的固定部分中的各字段 版本--占 4 位指 IP 协议的版本目前的 IP 协议版本号为 4 (即 IPv4) 首部长度--占 4 位可表示的最大数值是 15 个单位(一个单位为 4 字节)因此 IP 的首部长度的最大值是 60 字节. 区分服务--占 8 位用来获得更好的服务在旧标准中叫做服务

浅谈IP分片和组装的原理

分片是分组交换的思想体现,也是IP协议解决的两个主要问题之一.在IP协议中的分片算法主要解决不同物理网络最大传输单元(MTU) 的不同造成的传输问题.但是分组在传输过程中不断地分片和重组会带来很大的工作量还会增加一些不安全的因素.IP分片是网络上传输IP报文的一种技术手段.IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组.这一过程称为分片(fragmentation).每一种物理网络都会规定链路层数据帧的最大长度,称为链路层MTU(Maximum Transmiss

IP的分片与组装学习笔记

IP的分片与组装 当要发送的IP数据报的长度超出了最大传输单位MTU,且允许分片时,就会进行IP分片.通常,使用UDP协议发送的数据报很容易导致IP分片,而TCP协议是基于流的传输,通常不会产生分片. IP数据报被分片以后,各分片(fragment)分别组成一个具有IP首部的分组,并各自独立地选择路由,在其分别抵达目的主机后,目的主机的IP层会在传送给传输层之前将接收到的所有分片重装成一个IP数据报.可以怎么理解,IP数据报是IP层端到端的传输单元(在分片之前和重组之后),分组是指在IP层和链路

TCP/IP协议中分包与重组原理介绍

[原文链接] 引言 分片是分组交换的思想体现,也是IP协议解决的两个主要问题之一.在IP协议中的分片算法主要解决不同物理网络最大传输单元(MTU) 的不同造成的传输问题.但是分组在传输过程中不断地分片和重组会带来很大的工作量还会增加一些不安全的因素.我们将在这篇小论文中讨论IP分片的原因.原理.实现以及引起的安全问题. 一.什么是IP分片 IP分片是网络上传输IP报文的一种技术手段.IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组.这一过程称为分片(fragment

IP数据报分片、组装过程以及路由表的建立过程

1)IP分组 中3位标志 标志位共三位 最高位为0 该值必须复制到所有的分组中 DF(Do not Fragment) DF 值为1 表示不能分片 如果分组的长度超过MTU 又不可以分片 则这个分组丢弃 并用ICMP差错报文向主机报告 0 表示可以分片 MF (More Fragment) MF 值为1 表示接收的不是最后一个分片 0 表示 接收的是最后一个分片 2)分片.组装 过程 描述 IP分组头中 ,与分组和组装相关的 字段有: 标识(16位).标志(3位).片偏移(13位). 最大传输单

转自:Tsihang 三层网络设备对于IP报文的分片和重组处理原理

三层网络设备对于IP报文的分片和重组处理原理 对于网络分片,我一年前就想整理出来,虽然说网络上的资料很多,但是真正掌握精髓的除非真正做过分片程序,不然很难将协议栈整体联系起来理解.这篇文章,包括设计分片原理图,耗时一小时完成,算是记录一点理解. 三层网络设备,即能够基于IP头信息对报文进行识别和处理的网络设备,在转发IP报文的时候,经常会遇到来自上层的数据包过长,从而导致打上MAC头的帧不符合IEEE802.3标准规定的最大帧长,造成不能被转发和对端解析的问题.这样就需要在三层进行分片,将过长的

IP数据报格式,路由表

IP数据报格式 MTU最大传输单元:数据帧中的有效载荷的最大长度,不包括首部的长度,若大于MTU,则需要分片,分片是由IP层完成的.组装也是由IP层自行完成. 在IP分组头中,与分组的分片与组长有关的字段有:16位标识,3位标志,13位片位移 16位标识: 分组可能通过不同的传输路径到达目的主机.属于同一分组的不同片会出现乱序,或者与其他分组混合在一起.若将属于一个分组的所有片分配一个标识值ID,则目的主机可根据标识值将属于同一分组的片挑出来,重新组装.标识ID是片识别的标记. 3位标志: 标志