Skip to content

IPv6 - 报头

IPv6 头部 (Header) 结构是相对于 IPv4 的一项关键设计改进。尽管 IPv6 地址大小是 IPv4 地址的四倍,但基本的 IPv6 头部只有 IPv4 头部大小的两倍(IPv6 固定头部 (Fixed Header) 为 40 字节固定,而 IPv4 固定头部为 20 字节,外加选项)。IPv6 实现这一目标的方法是将可选和非必要信息移至扩展头部 (Extension Headers),这些扩展头部只在需要时才包含。

一个 IPv6 数据包 (packet) 由一个强制的 40 字节固定头部 (Fixed Header) 和可选的一个或多个扩展头部 (Extension Headers) 组成,其后是上层负载 (Upper-Layer Payload)(例如 TCP 或 UDP 段)。

IPv6 固定头部包含用于路由和数据包处理的关键信息。它具有以下字段 (field):

以下是 IPv6 固定头部字段及其大小的文本表示:

  • 版本 (Version) (4 比特): 对于 IPv6,总是设置为 6 (二进制 0110)。
  • 流量类别 (Traffic Class) (8 比特): 用于服务质量 (Quality of Service, QoS)。前 6 比特用于区分服务代码点 (Differentiated Services Code Point, DSCP),后 2 比特用于显式拥塞通知 (Explicit Congestion Notification, ECN)。
  • 流标签 (Flow Label) (20 比特): 用于标识属于同一流量流的数据包,允许路由器在无需深度报文检测 (deep packet inspection) 的情况下应用一致的处理(例如,用于 QoS 或负载均衡)。
  • 负载长度 (Payload Length) (16 比特): 指定 IPv6 负载(扩展头部 + 上层数据)的字节长度。使用 16 比特,可以指示高达 65,535 字节。对于更大的负载(巨型报文 jumbograms),此字段设置为 0,并在逐跳选项扩展头部 (Hop-by-Hop Options extension header) 中使用巨型负载选项 (Jumbo Payload option)。
  • 下一个头部 (Next Header) (8 比特): 标识紧跟在 IPv6 固定头部之后的头部类型。这可以是扩展头部(例如,分段头部 Fragment Header 的值为 44)或上层协议 (upper-layer protocol)(例如,TCP 的值为 6,UDP 的值为 17)。
  • 跳数限制 (Hop Limit) (8 比特): 类似于 IPv4 的生存时间 (Time To Live, TTL)。每转发一次数据包,此值由路由器减 1。如果跳数限制达到 0,则丢弃数据包以防止无限循环。
  • 源地址 (Source Address) (128 比特): 发起主机 (originating host) 的 IPv6 地址。
  • 目的地址 (Destination Address) (128 比特): 预期接收者 (intended recipient) 的 IPv6 地址。

扩展头部提供附加功能,并位于固定头部和上层负载之间。每个扩展头部都有自己的 ‘下一个头部’ 字段,指向后续的扩展头部或上层协议,从而形成一个链。

常见的扩展头部(及其通常使用的 ‘下一个头部’ 值):

  • 逐跳选项头部 (Hop-by-Hop Options Header)(下一个头部值为 0):携带必须由数据包路径上的每个节点检查的选项。(由于对路由器性能有影响,通常很少用于普通流量)。
  • 路由头部 (Routing Header)(下一个头部值为 43):用于源路由 (source routing)(指定数据包的路径)。类型 0 路由头部 (RH0) 由于安全问题已被弃用。
  • 分段头部 (Fragment Header)(下一个头部值为 44):用于源需要分段大于路径 MTU (Maximum Transmission Unit) 的数据包时。IPv6 路由器在传输过程中不会分段 (fragmentation) 数据包;分段由源端处理。
  • 目的选项头部 (Destination Options Header)(下一个头部值为 60):携带由目的节点检查的选项。可以出现两次:一次在路由头部之前(用于中间目的节点 intermediate destinations),一次在上层头部之前(用于最终目的节点)。
  • 认证头部 (Authentication Header, AH)(下一个头部值为 51):IPsec 的一部分,为 IP 数据包提供数据完整性 (data integrity)、认证 (authentication) 和抗重放保护 (anti-replay protection)。
  • 封装安全载荷头部 (Encapsulating Security Payload, ESP)(下一个头部值为 50):IPsec 的一部分,提供机密性 (confidentiality, 加密),以及可选的数据完整性和认证。

如果存在多个扩展头部,建议的顺序如下(根据 RFC 8200):

  1. IPv6 固定头部 (IPv6 Fixed Header)
  2. 逐跳选项头部 (Hop-by-Hop Options Header)
  3. 目的选项头部 (Destination Options Header)(用于路由头部中指定的中间目的节点处理的选项)
  4. 路由头部 (Routing Header)
  5. 分段头部 (Fragment Header)
  6. 认证头部 (Authentication Header, AH)
  7. 封装安全载荷头部 (Encapsulating Security Payload, ESP) 头部
  8. 目的选项头部 (Destination Options Header)(仅用于最终目的节点处理的选项)
  9. 上层头部 (Upper-Layer Header)(例如 TCP、UDP)

最后一个扩展头部的 ‘下一个头部’ 字段指向上层协议。如果没有扩展头部,固定头部中的 ‘下一个头部’ 字段直接指示上层协议。‘下一个头部’ 值为 59 表示 ‘无下一个头部’ (No Next Header),意味着该头部之后没有负载数据。