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