IPv6 首部长度固定是 40
字节,没有任何选项,但它可以有扩展头部。
版本(Version) 字段,只占据 4
位即半个字节。它用于标识该数据报的 IP 版本号,对于 IPv6 来说,此值为 6
。通过版本号,路由器能确定如何解释该 IP 数据报的剩余部分。
区分服务(DS) 字段,只占据 6
位。
显式拥塞通知(ECN) 字段,只占据 2
位。
流标签(Flow Label) 字段,占据 20
位。简单来说, IPv6 的“流”指的是互联网络上特定源点到特定终点的一系列数据报,而在这个“流”所经过的路径上的路由器都保证服务质量。所有属于同一个“流”的数据报都有相同的“流”标签。
有效载荷长度(Payload Length) 字段,该字段占据 16
位即两个字节,此字段以字节为单位,该字段用于表示该 IP 数据报的有效载荷长度(不包括基本首部)。因为该字段只占据 16
位,所以 IP 数据报的最大有效载荷长度为 65 535
字节即 64
KB。
下一个首部(Next Header) 字段,占据 8
位即一个字节。下一个首部字段用于说明 IPv6 首部之后其他扩展首部的存在和类型,它们形成一条包括特殊扩展或处理指令的首部链(见下面关于扩展首部的介绍)。也就是说,当 IPv6 没有扩展首部时,该字段相当于 IPv4 的协议字段,指明基本首部后面的数据应该交给 IP 层上面哪个高层协议处理;当 IPv6 有扩展首部时,该字段指明了后面第一个扩展首部的类型。
跳数限制(Hop Limit) 字段,占据 8
位即一个字节。用于设置一个数据报可经过路由器数量的上限,最大跳数为 255
跳,该字段的作用是确保数据报不会永远在网络中循环传输。每经由一台路由器处理数据报时,该字段的值减一。若该字段的值减至 0
,则该 IP 数据报必须丢弃。
源 IP 地址(Source Address) 字段,该字段表示发送此 IP 数据报的主机接口的 IP 地址。对于 IPv6 来说占据 128
位。
目的 IP 地址(Destination Address) 字段,该字段表示接收此 IP 数据报的主机接口的 IP 地址。对于 IPv6 来说占据 128
位。
扩展首部(Extension Headers) 字段,可以由若干个字段组成,但第一个字段都是 8
位的 下一个首部 字段,该字段指明了在该扩展首部后面是否还有另一个扩展首部,若还有扩展首部,则该字段值为下一个扩展首部的协议值。若没有扩展首部,则该值为 59
,也就是表示当前首部是这个首部链的结尾。首部链的示例如下图所示。
下表给出了 下一个首部 字段值可能表示的扩展首部或其他协议首部。
首部类型 | 顺序 | 值 |
IPv6 首部 | 1 | 41 |
逐跳选项(HOPOPT) | 2 | 0 |
目的地址项 | 3, 8 | 60 |
路由 | 4 | 43 |
分片 | 5 | 44 |
封装安全载荷(ESP) | 7 | 50 |
认证(AH) | 6 | 51 |
移动(MIPv6) | 9 | 135 |
(没有下一个首部) | 最后 | 59 |
ICMPv6 | 最后 | 58 |
UDP | 最后 | 17 |
TCP | 最后 | 6 |
各种其他高层协议 | 最后 | - |
除了“逐跳选项”的位置之外(它是强制性的),扩展首部的顺序是建议性的,因此一个 IPv6 实现必须按接收的顺序处理扩展头部。只有“目的地选项”头部可以使用两次,第一次是指出包含在 IPv6 首部中的目的 IPv6 地址,第二次(位置 8 )是关于数据报的最终目的地。在某些情况下(例如使用路由头部),当数据报被转发到最终目的地时, IPv6 首部中的目的 IP 地址字段将会改变。
在 [RFC8200] 中定义了 逐跳选项(Hop-by-Hop Options) 、 路由选择(Routing) 、 分片(Fragment) 、 鉴别(Authentication) 、 封装安全有效载荷(Encapsulating Security Payload) 、 目的选项(Destination Options) 六种扩展首部。
数据(Data) 字段,该字段存储 IP 数据报的数据。
参考文献:
[1] James F. Kurose; Keith W. Ross, Computer Networking A Top-Down Approach, 8th ed., Pearson, 2021.
[2] Fall, K. R., and Stevens, W. R. TCP/IP详解 卷1:协议. Translated by 吴英, 张玉 and 许昱玮, 2nd ed., 机械工业出版社, 2016.
[3] 谢希仁, 计算机网络, 8th ed., 电子工业出版社, 2021.
[4] S. Deering, R. Hinden, "Internet Protocol, Version 6 (IPv6) Specification" RFC 2460, December 1998.
[5] S. Amante, B. Carpenter, S. Jiang, J. Rajahalme, "IPv6 Flow Label Specification" RFC 6437, November 2011.
[6] S. Deering, R. Hinden, "Internet Protocol, Version 6 (IPv6) Specification" RFC 8200, July 2017.