参考 <The TCP/IP Guide> http://tcpipguide.com
IPv6 数据报 (Datagram)
IPv6 数据报一般格式

组成部分 |
长度 (bytes) |
描述 |
Main Header |
40 |
每个数据报包含源地址、目的地址和一些必须的重要信息 |
Extension Headers |
可变的 |
每个 Extension Headers 都包含一种类型的扩展信息,以支持各种功能,如分片、源路由、安全性和各种选项 |
Data |
可变的 |
装载来自上层要传输的信息 |
IPv6 主报头 (Main Header) 格式

字段名 |
长度 (bytes) |
描述 |
Version |
0.5 |
生成该数据报所用 IP 协议的版本。IPv6 中值为 6 (二进制 0110)。 |
Traffic Class |
1 |
指示 IPv6 数据流通信类别或优先级,与 IPv4 中的 TOS 相似,但使用 Differentiated Services (DS)。 |
Flow Label |
2.5 |
该标签为实时数据传输和服务质量功能提供额外支持。路径上的路由器可以根据该标签对数据流进行区分和处理。不是所有路由器和设备都支持流标签处理,该字段是可选的。 |
Payload Length |
2 |
该字段代替了 IPv4 中的 Total Length,但和 Total Length 不同,它测量的不是整个数据报的长度,而只是扩展头和荷载的字节数,即整个数据报的长度减去 40bytes 的主头部。 |
Next Header |
1 |
该字段代替了 IPv4 中的 Protocol。有两个用处,当数据报有扩展头时,该字段指向地一个扩展头,当数据报没有没有扩展头时,该字段和 IPv4 中的 Protocol 一样。 |
Hop Limit |
1 |
该字段代替了 IPv4 中的 TTL。这个名字更好的反映了 TTL 的实际工作方式,因为 TTL 实际上是计算跳数,而非时间。 |
Source Address |
16 |
源地址 |
Destination Address |
16 |
目的地址 |
IPv6 下一报头字段 (Next Header)
下一报头是 IPv6 数据报中新加入的一个重要字段。该字段包含一个表示第一个扩展头的标识符,扩展头又有自己的下一报头字段指向它的下一个扩展头,最后一个扩展头的下一报头字段则指出上层协议。
值(十六进制) |
协议 / 扩展头 |
00 |
逐跳选项 (Hop-By-Hop Options) 扩展头 |
01 |
ICMPv4 |
02 |
IGMPv4 |
04 |
IP in IP Encapsulation |
06 |
TCP |
08 |
EGP |
11 |
UDP |
29 |
IPv6 |
2B |
路由 (Routing) 扩展头 |
2C |
分片 (Fragmentation) 扩展头 |
2E |
资源预留协议 (RSVP) |
32 |
ESP 扩展头 |
33 |
AH 扩展头 |
3A |
ICMPv6 |
3B |
没有下一报头 |
3C |
目的选项 (Destination Options) 扩展头 |
IPv6 数据报扩展头

IPv6 数据报扩展头通过下一报头字段形成一个链式结构。所有扩展头的长度必须为 8bytes 的整数倍。
下一报头值(十进制) |
扩展头名 |
长度 (bytes) |
描述 |
0 |
Hop-By-Hop Options |
可变的 |
定义一组选项,这些选项用于传输路径上所有设备进行检查 |
43 |
Routing |
可变的 |
指定数据报传输的路由,相当与 IPv4 中的 loose source routing option。 |
44 |
Fragment |
8 |
当数据报仅为原始消息的片段时,包含此扩展头,它包含 IPv6 主报头去除的 Fragment Offset, Identification 和 More Fragment 字段的信息。 |
50 |
ESP |
可变的 |
携带用于安全通信的加密数据。 |
51 |
AH |
可变的 |
包含确保加密数据可靠性的信息。 |
60 |
Destination Options |
可变的 |
定义一组选项,这些选项仅用于检查目的。 |
IPv6 Routing Extension Header

字段名 |
长度 (bytes) |
描述 |
Next Header |
1 |
同主报头的下一报头字段。 |
Header Extension Length |
1 |
以 8-byte 为一单位,指出该扩展头的长度,不包含该头的前 8bytes。 |
Routing Type |
1 |
该字段允许定义多种路由类型,现阶段唯一使用值为 0。 |
Segments Left |
1 |
指定到目的之前路由中剩余的显式命名节点数。 |
Reserved |
4 |
还未使用,设为 0。 |
Address1 ~ AddressN |
可变的(16 的倍数) |
一组用于指定路由的 IPv6 地址。 |
IPv6 Fragment Extension Header

字段名 |
长度 (bits) |
描述 |
Next Header |
8 |
同上 |
Reserved |
8 |
保留,还未使用,设为 0。 |
Fragment Offset |
13 |
指定数据报片段在原始信息中的偏移量或位置,以 8bytes 为一单位,和 IPv4 中的 Fragment Offset 字段相同。 |
Res |
2 |
保留,还未使用,设为 0。 |
M Flag |
1 |
同 IPv4 中的 More Fragments Flag。当设为 0 时表示该片段为原始信息的最后一个片段,反之则表示后面还有其他片段。 |
Identification |
32 |
同 IPv4 中的 Identification 字段,不同的是扩展到 32bits。 |
IPv6 扩展头顺序
每个扩展头在任何数据报中之出现一次(Destination Options 例外)。当有多个扩展头时,它们在主报头之后和数据报的上一层协议报头之前按以下顺序排列:
- Hop-By-Hop Options
- Destination Options (被目的设备和路由扩展头中指定的设备处理)
- Routing
- Fragmentation
- AH
- ESP
- Destination Options (仅被最终目的设备处理)
IPv6 数据报选项 (Datagram Options)
IPv6 通过用扩展头包装选项的方式实现了 IPv4 报头中的选项字段。
IPv6 中有两种选项扩展头:Hop-By-Hop Options 和 Destination Options。它们仅在包含的选项如何由设备处理方面有所不同,它们的格式和使用方式都是相同的。
IPv6 Hop-By-Hop Options and Destination Options Header Formats:

子字段名 |
长度 (bytes) |
描述 |
Option Type |
1 |
表示该选项的类型
子子字段名 |
长度 (bits) |
描述 |
Unrecognized Option Action |
2 |
前两位指定处理选项的设备无法识别选项类型时采取的操作
值 |
操作 |
00 |
跳过选项,处理后面的报头 |
01 |
丢弃数据报,不进行操作 |
10 |
丢弃数据报,发送一个 2 代号的 ICMP Parameter Problem message 给发送数据报的源设备 |
11 |
丢弃数据报,仅当目的地址不为组播地址时发送上面的 ICMP 信息 |
|
Option Change Allowed Flag |
1 |
如果选项数据允许在数据报传送中途被修改则设为 1,否则设为 0。 |
Remainder of Option Type |
5 |
剩余的五个位允许为上述三个位的每个组合指定 32 种不同的组合。 |
|
Opt Data Len |
1 |
指出接下来的 Option Data 字段的长度 |
Option Data |
可变的 |
选项数据 |