IPv4 与 IPv6 详解
IPv4 与 IPv6:两套地址系统,同一个互联网
每一个穿越互联网的数据包,都在源地址和目的地址中采用两种格式之一。IPv4 于 1981 年标准化,使用 32 位地址。它的继任者 IPv6 则使用 128 位。IPv4 与 IPv6 之争其实算不上真正的对立——在大多数现代网络中,两种协议是并行运行的——但对于任何要查看日志、执行查询,或试图弄清一个地址能揭示与不能揭示什么的人来说,二者之间的差异至关重要。
表示法:点分十进制与十六进制分组
一个 IPv4 地址由四个介于 0 到 255 之间的十进制数字组成,以点号分隔——这就是我们熟悉的点分四段,例如 8.8.8.8(你可以在一个示例追踪中查看它)。四个字节,约合 43 亿个可能的取值。
IPv6 将其 128 位写为八组以冒号分隔的四位十六进制数字:2001:0db8:0000:0000:0000:0000:0000:0001。由于如此冗长的地址很不便于使用,这种表示法允许两种简写方式。每一组中的前导零可以省略,并且——有且仅有一处——连续的全零分组可以压缩为双冒号。上面的地址便可压缩为 2001:db8::1。这种压缩的规范规则由 RFC 5952 制定;遵循这些规则很重要,否则同一个地址就能写成十几种形式,从而给日志搜索和封禁列表带来混乱。
地址枯竭的故事
在 1981 年,IPv4 的 43 亿个地址看似取之不尽。事实并非如此。IANA 于 2011 年将最后一批空闲地址块分配给各区域互联网注册管理机构,而这些注册机构本身——包括于 2019 年宣告地址池枯竭的 RIPE NCC——如今只能从退回或回收的空间中分配 IPv4 地址。已使用地址块的交易市场已然存在,其单个地址的价格恐怕会令该协议的设计者们瞠目结舌。
IPv6 的设计正是为了让这种情况永不再发生。它的地址空间容纳 2^128 个取值——约合 3.4×10^38,一个 39 位的数字。这一设计有意做到极度挥霍:一个典型的家庭连接就能获得一个 /64 前缀,其中包含的地址数量比整个 IPv4 互联网的平方还要多。其意图在于,地址稀缺应当永远不再左右网络的构建方式。
NAT 与 CGNAT:靠续命维持的 IPv4
IPv4 在地址枯竭之后仍能运作,原因在于网络地址转换(NAT)。你家中的路由器持有一个公网 IPv4 地址,并为其背后的每一台设备进行转换,这正是为什么你笔记本电脑的 192.168.x.x 地址从不出现在公共互联网上——出现的只有路由器的地址,也就是 What Is My IP 所报告的内容。
如今许多运营商又增加了第二层:运营商级 NAT(CGNAT),即成百上千的用户共享同一个公网 IPv4 地址。CGNAT 让地址得以持续流转,但它削弱了 IPv4 地址作为标识符的意义。来自同一个 CGNAT 地址的流量可能代表着成千上万个互不相关的家庭,而仅凭该地址无法从中甄别出任何一个个体。这是 IP 地理定位无法识别个人身份的若干原因之一——这一点在 别人能通过我的 IP 找到我的地址吗? 中有深入探讨。
双栈的现实
过渡计划从来不是某个"切换日"一蹴而就的;它是一种共存。大多数现代设备运行双栈——同时拥有一个 IPv4 地址和一个 IPv6 地址——并在目的地支持时优先使用 IPv6。全球 IPv6 采用率如今已占到主流服务流量的三分之一以上,但分布并不均衡:在移动运营商和大型消费级 ISP 上较为普及,在较老的企业网络上则较为薄弱。实际来看,这意味着同一条连接可能会因某次会话所协商的协议不同,而在你的日志中以两个完全不同的地址出现。
对地理定位与追踪意味着什么
对于网络取证而言,两种协议的成熟度截然不同。IPv4 空间历经四十年的分配、交易与观测,因此像 DB-IP 这样的地理定位数据库对大多数地址块都积累了深厚且交叉印证充分的证据。IPv6 地址块则更新、更为稀疏——单单一个分配给某 ISP 的 /32 就已让整个 IPv4 互联网相形见绌——因此位置证据较为单薄,置信度评级也更低,尤其在国家级以下的层面。无论对哪种协议进行追踪,得到的都是一个大致的区域,绝非精确的定位;诚实的数据可参见IP 地理定位有多准确。
IPv6 还改变了客户端的行为。由 RFC 8981 定义的隐私扩展会定期轮换地址中作为接口标识符的那一半,因此即便设备的 /64 前缀保持不变,其完整的 128 位地址仍会每天或每次连接时变化。对于追踪而言,前缀才是稳定的信号;低位比特按设计本就是噪声。而路由上下文在两种协议中都保持不变:宣告路由的自治系统依然会告诉你是哪家运营商在承载这些流量,一次 ASN 查询对二者的运作方式完全相同。
| 属性 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32 位 | 128 位 |
| 表示法 | 点分四段:203.0.113.7 | 十六进制分组,支持 :: 压缩:2001:db8::7 |
| 地址空间 | 约 43 亿 | 约 3.4×10^38(2^128) |
| 可用性 | 已枯竭;在二级市场上交易 | 实际上无限 |
| 地址共享 | NAT 与 CGNAT 是常态 | 全局唯一地址;无需 NAT |
| 地理定位证据 | 数十年的数据;国家级以下置信度更高 | 地址块更新、更稀疏;国家级以下置信度更低 |
| 地址稳定性 | 每个站点一个地址,往往长期不变 | /64 前缀稳定;接口比特为隐私而轮换 |
有一点是版本号无法改变的:无论哪种协议的地址,定位到的都是网络基础设施,而非个人。一次追踪得到的是一个可能的区域和一家运营商,各自带有置信度评级——没有任何能识别个人身份的东西。若想了解每种协议究竟能揭示你自己连接的哪些信息,不妨运行一次追踪并对比这些档案。