IPv4和IPv6报文格式介绍和对比

IPv4数据报

IPv4和IPv6报文格式介绍和对比

IPv4报文详解

  • 版本Version:Version域记录了数据报属于哪一个版本的协议。不同版本的报文的格式都是不同的。这里的值永远是4。
  • 头部长度IHL:IHL域指明了该头部有多长(以32位字的长度为单位)。IHL的最短长度为5,此时头部没有加入可选项;最大值为15,限制了头部的最大长度为60字节,那么意味着可选项部分最多为40字节。
  • 服务类型TOS:这6位组合起来表示服务类型。这些类别包括4个排队优先级、3种丢弃可能性和一些历史类别。
  • 总长度Total Length:表示包括报头和数据在内的报文的总长度,以字节为单位。因此IP数据报的最大长度为65535字节,但是由于MTU的限制,长度超出MTU的数据报都将被分片传输,所以实际传输的数据报长度都远远没达到最大长度。
  • 标识Identification:主机每发出一个数据报,那么生成唯一一个值,此数据报的分片
    都将复制这个标识值,这样目标主机就可以将分片组合起来接受一个完整的数据报。
  • 保留位:不用多说。
  • DF(Don’t Fragment):假如这个位设置了值,那么分片将会被禁止,那么假如报文长度超出了MTU,IP模块将此报文将丢弃,并返回ICMP差错报文。
  • MF(More Fragment):除了最后一个分段之外,其他的分片都要将这个位置置为1。它的意义在于,接收方可以通过这个值来判断什么时候已经将所有分片都接收了。
  • 分段偏移Fragment Offset:该域指明了本分段在报文的什么位置。除了一个数据报的最后一个分段之外,其他的分段都必须是8字节的倍数,这里的8字节是基本的分段单位。由于该域有13位,所以每个数据报最多有8192个分段,65536字节,比TotalLength域还要大1。
  • 生命周期TTL:数据报达到目的地之前与需经过的最大跳数。数据报在传输过程中,每经过一个路由器,这个值就减1,当此值变为0时,路由器将数据包丢弃并返回源主机ICMP差错报文。TTL可以有效防止数据包长时间逗留在网络中陷入路由器循环。
  • 协议Protocol:网络层组装成一个完整的数据报之后,需要知道如何对它进行处理,此字段指明了将数据报交给哪个处理进程,1交给ICMP,6交给TCP,17交给UDP。
  • 头部校验和Header Checksum:只校验头部,一般使用CRC算法,来确保报文在传播过程中没有损坏。
  • 源地址和目标地址
  • 选项:可选项包括一些安全相关的信息和路径设置等内容,如下图所示:IPv4和IPv6报文格式介绍和对比

IPv6数据报

IPv4和IPv6报文格式介绍和对比

IPv6报文详解

  • 版本Version:和IPv4中的作用相同,对于IPv6报文来说,这里永远是6。
  • 流量类别Traffic Class:类似于IPv4中的ToS(服务类型)字段,通信分类字段用来标识对应IPv6的通信流类别,或者说是优先级别。
  • 流标签Flow Label:IPv6数据报中新增的一个字段,占20位。通过该域,源端和目标端可以建立一个具有特殊属性和需求的伪连接。举个栗子,源端和目的端之间的传输有严格的延迟要求,需要预留带宽。这时候就可以提前建立一个流Flow,当一个Flow Label域非0的分组出现的时候,路由器检查内部表,根据已经记录的Flow Label值来确定给予它什么样的特殊待遇。这个的意义在于,保证了数据报子网的灵活性和质量。另外,每个流是通过源地址、目的地址和流编号来指定的,所以一对给定的IP之间可以有很多活动的流标签。
  • 净荷长度Payload Length:指明了跟在头部之后还有多少字节,类似于IPv4中的Total Length,区别在于,Total Length还包括了报头部分。
  • 下一个头Next Header:IPv6灵活性的体现,这里引入了扩展头,该域指明了当前头部之后还有扩展头的话,是哪一种头部(6种),如果当前头部是最后一个,那么这个域指明该分组该给哪一个传输协议处理器,类似于IPv4的Protocol域。
  • 跳数限制Hop Limit:和IPv4中的TTL相同,这里直接表明限制跳数。
  • 源地址和目的地址。
  • 扩展头部:有些省略掉的IPv4头部有时候还会有用,所以IPv6引入了扩展头部(extension header)的概念。这些头部有时可以提供一些额外的信息,但是它的编码方式更加高效。现在已经定义了6种扩展头。IPv6扩展报头附加在IPv6报头目的IP地址字段后面,如果有多个扩展头出现的话,最好要用表中的顺序列出:IPv4和IPv6报文格式介绍和对比

扩展头部详解

  • 逐跳选项头部(Hop-by-hop Options Header):本扩展报头类型值为0(在IPv6报头下一个头部字段中定义,下同)。此扩展报头须被转发路径所有节点处理。目前在路由告警(RSVP和MLDv1)与Jumbo帧处理中使用了逐跳选项头,因为路由告警需要通知到转发路径中所有结点,而Jumbo帧是长度超过65535字节的报文,传输这种报文需要转发路径中所有结点都能正常处理。

  • 目标选项头部(Destination Options Header):类型值为60,加入这一可选头部最初其实是为了“充数”,利用这个项可以将一个头部拉长到8字节的倍数。现在移动IPv6中使用了目的选项头,称为家乡地址选项。家乡地址选项由目的选项头携带,用以移动结点离开“家乡”后通知接受节点此移动结点对应的家乡地址。接受节点收到带有家乡地址选项的报文后,会把家乡地址选项中的源地址(移动节点的家乡地址)和报文中源地址(移动节点的转交地址)交换,这样上层协议始终认为是在和移动节点的家乡地址通信,实现了移动漫游功能。

  • 路由扩展头部(Routing Header):类型值为43,列出了在通向目标的途中需要经过的一台或者多台路由器,类似于IPv4中可选项的Loose source routing字段。

  • 分段扩展头(Fragment extension header):类型值为44,类似于IPv4中分段控制相关的字段,当源节点发送的报文超过传输链路MTU(源节点和目的节点之间传输路径的MTU)时,需要对报文进行分段时使用。与IPv4不同的是,IPv6只有源主机才能对数据报进行分段。

  • 认证扩展头部(Authentication header):类型值为51,用于IPSec,提供报文验证,完整性检查。它提供了一种“让分组的接收方确定分组返送方身份”的机制,只有真正的接收方才能完整读取分组内容。

  • 加密的安全负荷头:本扩展头类型值为50,用于IPSec,提供报文验证、完整性检查差和加密。

IPv4和IPv6报文详细对比

下面对两者的报文做一个充分、详尽的对比:

  • 整体对比:IPv4和IPv6报文格式介绍和对比
    IPv4中的主要字段都已经被IPv6继承了,而删去的字段都以可选扩展头部的形式出现在IPv6报文里。
  • TOS和Traffic ClassIPv4和IPv6报文格式介绍和对比
    两者功能几乎一致,标识对应的通信流类别,或者说是优先级别。
  • Total Length和Payload LengthIPv4和IPv6报文格式介绍和对比
    这两者是有区别的:IPv4中的Total Length包括了头部和数据:IPv4和IPv6报文格式介绍和对比而IPv6中的Payload Length只是包括了除去默认头部之外的字段长度:IPv4和IPv6报文格式介绍和对比
  • MTU:MTU的不同IPv4和IPv6报文格式介绍和对比
  • Protocol和Next HeaderIPv4和IPv6报文格式介绍和对比
    IPv4的协议字段规定了数据报应该交由哪种协议来处理,类似的,IPv6中的Next Header字段可选择性的指向下一个扩展头部,或者协议:IPv4和IPv6报文格式介绍和对比
  • TTL和Hop LimitIPv4和IPv6报文格式介绍和对比
    最初的IPv4的TTL协议规定的是分段传输的最大时间,但实际上,所有的操作都用跳数来取代了时间,鉴于此,IPv6直白的使用Hop Limit来限定传输时间。当然两者功能相同,都有效的组织了数据分段在网络停留太久时间陷入无限循环。
  • 头部校检和:IPv6放弃了IPv4中的CheckSum字段,因为TCP和UDP报文中都已经有16位的checksum字段。IPv4和IPv6报文格式介绍和对比
    以上就是IPv4和IPv6报文格式的详细对比。