先决条件:Internet 协议版本 6 简介
IP 版本 6 是新版本的 Internet 协议,在复杂性和效率方面比 IP 版本 4 好得多。让我们看一下 IP 版本 6 的标头,了解它与 IPv4 标头有何不同。
IP 版本 6 标头格式:
版本(4 位):表示包含位序列 0110 的 Internet 协议版本。
Traffic Class (8-bits) : Traffic Class 字段表示 IPv6 数据包的类别或优先级,类似于 IPv4 数据包中的服务字段。它帮助路由器根据数据包的优先级处理流量。如果路由器上发生拥塞,则优先级最低的数据包将被丢弃。
目前只使用了 4 位(其余位正在研究中),其中 0 到 7 分配给拥塞控制的流量,8 到 15 分配给不受控制的流量。
拥塞控制流量的优先分配:
不受控制的数据流量主要用于音频/视频数据。因此,我们对不受控制的数据流量给予更高的优先级。
源节点可以设置优先级,但路由器可以改变它。因此,目的地不应期望与源节点设置的优先级相同。
流标签(20 位):流标签字段由源用于标记属于同一流的数据包,以便请求中间 IPv6 路由器进行特殊处理,例如非默认服务质量或实时服务。为了区分流,中间路由器可以使用数据包的源地址、目的地址和流标签。在源和目标之间可能存在多个流,因为许多进程可能同时运行。不支持流标签字段功能的路由器或主机,对于默认路由器处理,流标签字段设置为 0。在设置流标签时,源也应该指定流的生命周期。
有效载荷长度(16 位):它是一个 16 位(无符号整数)字段,表示有效载荷的总大小,它告诉路由器特定数据包在其有效载荷中包含的信息量。 Payload Length 字段包括扩展头(如果有)和上层数据包。如果有效载荷的长度大于 65,535 字节(可用 16 位表示高达 65,535 字节的有效载荷),则有效载荷长度字段将设置为 0 并且在 Hop-by-Hop 选项扩展中使用巨型有效载荷选项标题。
Next Header (8-bits) : Next Header 指示紧跟在 IPv6 标头之后的扩展标头(如果存在)的类型。而在某些情况下,它表示上层数据包中包含的协议,例如 TCP、UDP。
Hop Limit (8-bits) : Hop Limit 字段与 IPv4 数据包中的 TTL 相同。它表示允许 IPv6 数据包传输的最大中间节点数。它的值由转发数据包的每个节点递减一,如果值递减为 0,则数据包将被丢弃。这用于丢弃由于某些路由错误而陷入无限循环的数据包。
Source Address (128-bits) : Source Address 是数据包原始来源的 128 位 IPv6 地址。
Destination Address (128-bits) : Destination Address 字段表示最终目的地的 IPv6 地址(大多数情况下)。所有中间节点都可以使用此信息来正确路由数据包。
扩展头:为了纠正IPv4 Option Field的局限性,IPversion 6引入了扩展头。扩展头机制是IPv6架构中非常重要的部分。 IPv6 固定头的下一个头域指向第一个扩展头,第一个扩展头指向第二个扩展头,依此类推。
IPv6 数据包可能包含零个、一个或多个扩展标头,但它们应按推荐的顺序出现:
规则: Hop-by-Hop 选项标头(如果存在)应始终放置在 IPv6 基本标头之后。
约定:
- 除了 Destination Header 之外,任何扩展标头最多只能出现一次,因为 Destination Header 在上面的列表中出现了两次。
- 如果目的地报头出现在路由报头之前,那么它将被路由报头中指定的所有中间节点检查。
- 如果 Destination Header 出现在 Upper layer 之上,那么它只会被 Destination 节点检查。
给定在 IPv6 数据包中链接所有扩展标头的顺序以及每个扩展标头的工作:
参考资料:
https://www.ietf.org/rfc/rfc2460.txt
https://www.ietf.org/rfc/rfc3697.txt
https://www.cisco.com/en/US/technologies/tk648/tk872/technologies_white_paper0900aecd8054d37d.html