IPv6 - 报头
IPv6 - 头部 (Headers)
Section titled “IPv6 - 头部 (Headers)”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 段)。
固定头部 (Fixed Header)
Section titled “固定头部 (Fixed Header)”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 地址。
扩展头部 (Extension Headers, EH)
Section titled “扩展头部 (Extension Headers, EH)”扩展头部提供附加功能,并位于固定头部和上层负载之间。每个扩展头部都有自己的 ‘下一个头部’ 字段,指向后续的扩展头部或上层协议,从而形成一个链。
常见的扩展头部(及其通常使用的 ‘下一个头部’ 值):
- 逐跳选项头部 (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):
- IPv6 固定头部 (IPv6 Fixed Header)
- 逐跳选项头部 (Hop-by-Hop Options Header)
- 目的选项头部 (Destination Options Header)(用于路由头部中指定的中间目的节点处理的选项)
- 路由头部 (Routing Header)
- 分段头部 (Fragment Header)
- 认证头部 (Authentication Header, AH)
- 封装安全载荷头部 (Encapsulating Security Payload, ESP) 头部
- 目的选项头部 (Destination Options Header)(仅用于最终目的节点处理的选项)
- 上层头部 (Upper-Layer Header)(例如 TCP、UDP)
最后一个扩展头部的 ‘下一个头部’ 字段指向上层协议。如果没有扩展头部,固定头部中的 ‘下一个头部’ 字段直接指示上层协议。‘下一个头部’ 值为 59 表示 ‘无下一个头部’ (No Next Header),意味着该头部之后没有负载数据。