「IPv6」- 报文格式

  CREATED BY JENKINSBOT

报文构成

基本报头(Fixed Header)

1)必须存在;单个;固定 40-BYTE;
2)提供报文转发的基本信息,会被在转发路径上的所有设备解析;Router 通过解析 Fixed-Header 就能完成绝大多数的报文转发任务;

字段说明

Version:版本,4bit;
该字段规定 IP 的版本,其值为 6;

Traffic Class:流类别,流量类型,8bit;
与 QoS 相关;该字段功能和 IPv4.ToS 功能类似,表示 IPv6 数据报文的类或优先级;

Flow Label:流标签,20bit;也有 QoS 相关;
与 IPv4 相比,该字段是新增的。它用来标识这个数据报属于源节点和目标节点之间的一个特定数据报序列,它需要由中间 IPv6 Router 进行特殊处理。流标签 + 源地址,能够区分出唯一的流。通常流标签 + 源 / 目地址,能够区分出唯一的流;

Payload Length:有效载荷长度,16bit;
鉴于 IPv6 Header 固定 40 字节,所以该字段无需标识头部长度。该字段表示 IPv6 数据报有效载荷的长度。有效载荷是指紧跟 IPv6.Header 的数据报的其它部分(扩展报头 + 上层协议数据单元)。能表示最大长度为 65535 BYTE 的有效载荷。如果有效载荷的长度超过这个值,该字段会置 0,而有效载荷的长度用逐跳选项扩展报头中的超大有效载荷选项来表示;

Next Header:扩展报头的位置,8bit;
该字段定义紧跟在 IPv6 Fixed-Header 后面的 首个 Extension Header(如果存在)的类型,或者上层协议数据单元中的协议类型;
注意,该字段并非类似于偏移量或偏移地址的值,而是直接用数值指示 Extension Header 的类型;

Hop Limit:类似于 IPv4.TTL 字段,8bit;
它定义 IPv6 Packet 所能经过的最大跳数。每经过一个路由器,该数值减去 1;当该字段的值为 0 时,数据报将被丢弃;

Source Address:源地址,表示发送方的地址,128 bit;

Destination Address:目的地址,表示接收方的地址,128 bit;

IPv6 Header vs. IPv4 Header

1)取消三层校验:在协议栈中,Layer 2 和 Layer 4 的已提供校验,因此 IPv6 直接取消 IP 的三层校验,节省路由器处理资源;

2)取消中间节点的分片功能:中间路由器不再处理分片,只在产生数据的源节点处理,省却中间路由器为处理分片而耗费的大量 CPU 资源;
—- 中间路由器直接丢包,并返回 ICMPv6 差错报文(关于 MTU 问题,其是通过 PathMTU 机制来处理 )

3)固定报头长度:有利于硬件的快速处理,提高路由器转发效率;

4)安全选项支持:IPv6 提供对 IPSec 的完美支持,所以上层协议可以省去许多安全选项;
最初是为 IPv6 设计的,所以基于 IPv6 的各种协议报文(路由协议、邻居发现等),都可以端到端地加密,当然该功能目前应用并不多。而 IPv6 的数据面报文安全性,跟 IPv4+IPsec 的能力,基本相同;

5)增加流标签:提高 QoS 效率。(目的地址和流标签,便能确定一条数据流。传统 IPv4 需要五元组)

扩展报头(Extension Header)

在 IPv6 报头设计中,对原 IPv4 报头所做的一项重要改进就是将所有可选字段移出 IPv6 报头,置于扩展头中。IPv6 扩展报头是可能跟在 Fixed-Header 后面的可选报头;

扩展报头是可能跟在基本报头后面的可选报头,这些扩展报头可以具有不同的长度。IPv6 报头和扩展报头代替 IPv4 报头及其选项。新的扩展报头格式增强 IPv6 的功能,使其具有极大的扩展性。与 IPv4 报头中的选项不同,IPv6 扩展报头没有最大长度的限制,因此可以容纳 IPv6 通信所需要的所有扩展数据。扩展报头提供报文转发的扩展信息,并不会被路径上所有的路由器解析,一般只会被目的路由器解析处理;

通常,典型的 IPv6 包并没有扩展头。仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。与 IPv4 不同,IPv6 扩展头长度任意,不受 40Byte 限制,以便于日后扩充新增选项,这一特征加上选项的处理方式使得 IPv6 选项能得以真正的利用。但是为了提高处理选项头和传输层协议的性能,扩展头总是 8Byte 长度的整数倍;

作用:提供扩展的报文转发信息,如分段、加密等,该部分不是必需的。并非每个路由器都需要处理扩展包头,仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头;

数量:可能存在;零个、单个、多个;

Q:为什么在 IPv6 中要设计扩展报头呢?
A:因为在 IPv4 Header 中包含所有的选项,每个中间路由器都必须检查这些选项是否存在,如果存在,就必须处理它们。这种设计方法会降低路由器转发 IPv4 数据包的效率。为了解决转发效率问题,在 IPv6 中,相关选项被移到了扩展报头中。中间路由器就不需要处理每一个可能出现的选项,这种处理方式提高了路由器处理数据包的速度,也提高其转发性能;

字段说明

Next Header:下一报头,8bit;
与 Fixed-Header.Next-Header 的作用相同,指明下一个扩展报头(如果存在)或上层协议的类型;

Extension Header Length:扩展报头长度(不含 Next Header 字段),8 bit;

Extension Header Data:扩展报头数据,长度可变。扩展报头的内容,为一系列选项字段和填充字段的组合;

扩展报头类型

比如:逐条选项报头;分段报头;路由报头;AH 报头;ESP 报头;目的选项报头;

目前 RFC 2460 已定义以下 IPv6 扩展报头:
0)基本报头:
1)逐跳选项报头:该扩展头被每一跳处理,可包含多种选项,如路由器告警选项;
2)目的选项报头:目的地处理, 可包含多种选项,如 Mobile IPv6 的家乡地址选项;
3)路由报头:指定源路由,类似 IPv4 源路由选项,IPv6 源节点用来指定信息报到达目的地的路径上所必须经过的中间节点。IPv6 基本报头的目的地址不是分组的最终目的地址,而是路由扩展头中所列的第一个地址;
4)分段报头:IP 报文分片信息,只由目的地处理;
5)认证报头:IPSec 用扩展头, 只由目的地处理;
6)封装安全净载报头:IPSec 用扩展头,只由目的地处理;
7)目的选项报头
8)上层协议数据报文:

逐跳选项扩展头、目的地选项扩展头,二者内部提供 Option 功能,即支持扩展性(如对移动性支持),Option 采用 TLV 方式;

扩展报头规约

1)顺序:扩展报头必须按如上排列的顺序出现;
2)次数:除 目的选项报头 外,每种扩展报头只能出现一次;
3)特例:目的选项报头,最多出现两次:在 上层协议数据报文 前;在 路由报头 前(如果没有路由报头,则只能出现一次)

扩展报头示例

基本报头、扩展报头、上层协议数据报文的相互关系举例如下:

在数据报中,如果没有扩展报头,也就是说数据包只包含基本报头和上层协议单元,基本报头的 Next Header 字段直接指明上层协议类型。在上例中:
1)基本报头的 Next Header 字段值为 6,说明上层协议为 TCP,即有效载荷全部为 TCP 报文;
2)如果有一个扩展报头,则基本报头的 Next Header 字段值为扩展报头类型(在上例中,指明紧跟在基本报头后面的扩展报头为 43,也就是路由报头),扩展报头的下一个报头字段指明上层协议类型;
3)如果由多个扩展报头,则每一个扩展报头的 Next Header 指明紧跟着自己的扩展报头的类型,最后一个扩展报头的 Next Header 字段指明上层协议;

上层协议数据单元(Upper Layer Protocol Data Unit)

一般由上层协议报头和它的有效载荷构成,该部分与 IPv4 的上层协议数据单元相似;

参考文献

Link-local address – Wikipedia
百度百科 /IPv6
IPv6 地址表示方法详解