目录
前言:
首先IPV6是属于网络层的一种协议,作为下一代IP协议,而想要学习一种协议就必不可少的需要去具体的研究协议报文中的各个参数以及其对应的功能作用。
IPV6报文格式
IPv6报文由IPv6基本报头、IPv6扩展报头以及上层协议数据单元三部分组成。上层协议数据单元一般由上层协议报头和它的有效载荷构成,有效载荷可以是一个ICMPv6报文、一个TCP报文或一个UDP报文。
IPV6基本报头
每一个IPV6数据报文都必须包含基本报头,其长度固定为40字节基本报头提供报文转发的基本信息,会被转发路径上所有的路由器进行解析。
基本报头格式如下:
报头中主要字段含义:
1、Version:协议版本号,长度为4bit。对于IPv6,该值为6---二进制数值为0110;
2、Traffic Class:流类别,长度为8bit。等同于IPv4中的TOS字段,表示IPv6数据报的类或优先级,主要应用于QoS;
- QoS(Quality of Service)即服务质量。在有限的带宽资源下,QoS为各种业务分配带宽,为业务提供端到端的服务质量保证。想要了解QOS的可以参考------什么是QOS?
3、Flow Label:流标签,长度为20bit。IPv6中的新增字段,用于区分实时流量,不同的流标签+源地址可以唯一确定一条数据流,中间网络设备根据这些信息能更加高效率的区分数据流;
- 该字段是IPv6包头中最具革命性的改动,原先路由器识别某一IPv4数据流需要(源地址、目的地址、协议号、源端口、目的端口)5元组来标识一条数据流,这种方法要求路由器读取高层如TCP/UDP头部的某些字段,会增加路由器的处理开销,而且对于非TCP、UDP的流,如OSPF、RSVP、ICMP等流量就无法使用5元组来标识了。在IPv6中,Flow Label内置在IPv6包头中,标识流可以只采用最简单的(源地址、目的地址、Flow Label)3元组就可以标识一条流,不仅提高了效率,而且能够识别OSPF、RSVP、ICMPv6等不基于TCP/UDP的流量。
4、Payload Length:有效载荷长度,长度为16bit。有效载荷是指紧跟IPv6报头的数据报的其它部分(即扩展报头和上层协议数据单元)。该字段只能表示最大长度为65535字节的有效载荷。如果有效载荷的长度超过这个值,该字段会置0,而有效载荷的长度用逐跳选项扩展报头中的超大有效载荷选项来表示。------指除去包头的IP包长度,也就是data的长度,但如果有扩展包头,那么拓展包头也算在payload length里面;
5、Next Header:下一个报头,长度为8bit。该字段定义紧跟在IPv6报头后面的第一个扩展报头(如果存在)的类型,或者上层协议数据单元中的协议类型;
6、Hop Limit:跳数限制,长度为8bit。该字段类似于IPv4中的Time to Live(TTL)字段,它定义了IP数据报所能经过的最大跳数。每经过一个设备,该数值减去1,当该字段的值为0时,数据报将被丢弃;
7、Source Address:源地址,长度为128bit。表示发送方的地址;
8、Destination Address:目的地址,长度为128bit。表示接收方的地址---用来网络层逻辑寻址。
- IPv6和IPv4相比,去除了IHL、identifiers、Flags、Fragment Offset、Header Checksum、 Options、Padding域,只增了流标签域,因此IPv6报文头的处理较IPv4大大简化,提高了处理效率。另外,IPv6为了更好支持各种选项处理,提出了扩展头的概念,新增选项时不必修改现有结构就能做到,理论上可以无限扩展,体现了优异的灵活性。
IPV6扩展报头
在IPv4中,IPv4报头包含可选 字段Options,内容涉及security、Timestamp、Record route等,这些Options可以将IPv4报头长度从20字节扩充到60字节。在转发过程中,处理携带这些Options的IPv4报文会占用设备很大的资源,因此实际中也很少使用。
IPv6将这些Options从IPv6基本报头中剥离,放到了扩展报头中,扩展报头被置于IPv6报头和上层协议数据单元之间。一个IPv6报文可以包含0个、1个或多个扩展报头,仅当需要设备或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。与IPv4不同,IPv6扩展头长度任意,不受40字节限制,这样便于日后扩充新增选项,这一特征加上选项的处理方式使得IPv6选项能得以真正的利用。但是为了提高处理选项头和传输层协议的性能,扩展报头总是8字节长度的整数倍。
当使用多个扩展报头时,前面报头的Next Header字段指明下一个扩展报头的类型,这样就形成了链状的报头列表。如图2所示,IPv6基本报头中的Next Header字段指明了第一个扩展报头的类型,而第一个扩展报头中的Next Header字段指明了下一个扩展报头的类型(如果不存在,则指明上层协议的类型)。
扩展报头格式如图2所示:
IPv6扩展报头中主要字段解释如下:
- Next Header:下一个报头,长度为8bit。与基本报头的Next Header的作用相同。指明下一个扩展报头(如果存在)或上层协议的类型。
- Extension Header Len:报头扩展长度,长度为8bit。表示扩展报头的长度(不包含Next Header字段)。
- Extension Head Data:扩展报头数据,长度可变。扩展报头的内容,为一系列选项字段和填充字段的组合。
目前,RFC 2460中定义了6个IPv6扩展头:逐跳选项报头、目的选项报头、路由报头、分段报头、认证报头、封装安全净载报头。
|-------------------------|------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|
| 报 头 类 型 | 代表该 类报头 的Next Header 字段值 | 描述 |
| 逐 跳 选 项 报 头 | 0 | 该选项主要用于为在传送路径上的每跳转发指定发送参数,传送路径上的每台中间 节点都要读取并处理该字段。逐跳选项报头目前的主要应用有以下三种:用于巨型 载荷(载荷长度超过65535字节)。用于设备提示,使设备检查该选项的信息,而 不是简单的转发出去。用于资源预留(RSVP)。 |
| 目 的 选 项 报 头 | 60 | 目的选项报头携带了一些只有目的节点才会处理的信息。目前,目的选项报文头主 要应用于移动IPv6。 |
| 路 由 报 头 | 43 | 路由报头和IPv4的Loose Source and Record Route选项类似,该报头能够被IPv6 源节点用来强制数据包经过特定的设备。 |
| 分 段 报 头 | 44 | 同IPv4一样,IPv6报文发送也受到MTU的限制。当报文长度超过MTU时就需要将报 文分段发送,而在IPv6中,分段发送使用的是分段报头。 |
| 认 证 报 头 | 51 | 该报头由IPsec使用,提供认证、数据完整性以及重放保护。它还对IPv6基本报头中 的一些字段进行保护。 |
| 封 装 安 全 静 载 报 头 | 50 | 该报头由IPsec使用,提供认证、数据完整性以及重放保护和IPv6数据报的保密,类 似于认证报头。 |
IPv6扩展报头规约说明当超过一种扩展报头被用在同一个分组里时,报头必须按照下列顺序出现:
- IPv6基本报头
- 逐跳选项扩展报头
- 目的选项扩展报头
- 路由扩展报头
- 分段扩展报头
- 认证扩展报头
- 封装安全有效载荷扩展报头
- 目的选项扩展报头
- 上层协议数据报文
路由设备转发时根据基本报头中Next Header值来决定是否要处理扩展头,并不是所有的扩展报头都需要被转发路由设备查看和处理的。
除了目的选项扩展报头可能出现一次或两次(一次在路由扩展报头之前,另一次在上层协议数据报文之前),其余扩展报头只能出现一次。