IPv6 为何存在

IPv4 大约有 43 亿个地址(2^32)。那在 1980 年代看似取之不尽,如今在各注册局早已耗尽。在 RFC 4291 中为编址所定义的 IPv6,把地址从 32 位拓宽到 128 位,即 2^128 个地址,一个大到足以使稀缺不再成为设计约束的数。其实际效果是子网变得庞大,而像 这样的地址节约把戏,对基本连通性而言不再必需。

那 128 位的结构

一个 IPv6 地址是 128 位,写作以冒号分隔的八组、每组四个十六进制数字。每一组是一个 16 位的值:

2001:0db8:0000:0000:0008:0800:200c:417a

那种完整书写的形式是展开表示。因它冗长且满是零,文本形式有压缩规则。

书写一个地址:那些压缩规则

两条规则缩短文本,而 RFC 5952 使结果规范化(一个地址,一种首选拼写):

  • 在每一组中抑制前导零0db8 变为 db80000 变为 0
  • :: 替换一段连续的全零组。那个双冒号至多出现一次,且它代表一个或多个 16 位的零组。当存在多段等长的连续零组时,第一段被压缩。

将两者应用于上面的地址,给出它的规范形式:

2001:db8::8:800:200c:417a

RFC 5952 添加了几条收尾规则,以使工具们一致:十六进制数字为小写,且 :: 不用于“压缩”单独一个零组(那不会缩短任何有意义之物)。IPv6 工具把规范压缩形式与完全展开形式并排展示,以便你能确切看到 :: 代表什么。

一个特殊情形:一个地址可在其末 32 位携带一段嵌入的 IPv4 尾部,以点分十进制书写。最常见的是 IPv4 映射形式,其中 RFC 5952 推荐混合记法 ::ffff:192.0.2.128、而非纯十六进制。

前缀与前缀算术

如同 IPv4 的 ,一个 IPv6 前缀写作 地址/长度,其中长度计数前导的网络位:

2001:db8::/64

一个 /64 意味着前 64 位是网络、其余 64 位是接口标识符。/64 是单个 LAN 的标准尺寸,单它便容纳 2^64 个地址,约 1800 亿亿。工具会为你给出的任何前缀计算网络(首个)地址、末个地址与计数,把主机位掩码为零以求出网络——即便你键入的是一个设置了主机位的地址。

地址类型与作用域

一个地址的高位把它置入一个类别。最重要的那些,出自 RFC 4291 与 注册表:

  • **全局单播(2000::/3)**是可路由的公共空间,公共 IPv4 地址的 IPv6 等价物。
  • **唯一本地,即 ULA(fc00::/7)**是私有用途空间(RFC 4193),类比于 IPv4 中的 RFC 1918。它不在公共互联网上被路由。
  • **链路本地单播(fe80::/10)**仅在单条链路上有效,且在每个 IPv6 接口上被自动配置。路由器从不转发它。它的作用域是本地链路。
  • **多播(ff00::/8)**寻址一个组、而非单台主机。地址内的一个作用域字段言明它能抵达多远:interface-local、link-local、admin-local、site-local、organization-local 或 global。例如 ff02::1 是链路本地的全节点组。
  • **回环(::1/128)是 127.0.0.1 的 IPv6 等价物,而未指定地址(::/128)**意为“无地址”,在配置期间用作占位。
  • **文档(2001:db8::/32)**由 RFC 3849 为示例与书写所保留,这便是为何你所见几乎每一个 IPv6 示例——包括 RFC 4291 自身中那个规范示例——都使用它。

IPv6 工具报告匹配的类型与它所匹配的具体前缀,外加多播与链路本地地址的作用域。

接口标识符与 EUI-64

在一个典型的 /64 中,低 64 位是接口标识符。构造它的一种历史方法是修改的 (RFC 4291,附录 A):取那 48 位的 MAC 地址,在中间插入字节 ff:fe,并翻转第七位(universal/local 位)。那使接口 id 可从硬件地址推导。当工具看到接口 id 中间那个泄露的 ff:fe 时,它逆转该过程并向你展示原始的 MAC。现代系统往往转而偏好随机化的或隐私的接口标识符,正因为从一个 MAC 推导出 id 会泄露硬件地址。

反向 DNS:ip6.arpa

IPv6 的反向查询(地址到名字)寄居于 ip6.arpa 域之下。地址被展开为它的 32 个十六进制半字节,那些半字节被反转,而每一个成为一个标签。于是 2001:db8::1 成为一个以 ...8.b.d.0.1.0.0.2.ip6.arpa 结尾的名字。工具为任何地址生成此名字,那便是你会放入一条 PTR 记录的确切值。

关于该工具所为的一点说明

IPv6 工具是一个确定性的、本地的计算器。它解析、规范化、分类并计算,全在你的浏览器中、不对活动网络作任何查询。它告诉你一个地址在结构上什么。它并不告诉你那个地址是否可达、是否已分配、或是否在使用之中——那些是另外的问题,需要查询网络或一个注册局。