跳转到正文

43 亿个地址耗尽之后:IPv6 如何用 128 位重塑互联网基石? ​

在第 14 课 · IPv4 地址体系中,我们学到 32 位的 IPv4 理论上只有约 43 亿个地址。随着智能手机、物联网传感设备、云计算服务器的爆发式激增,全球 IPv4 公网地址池早已经宣告枯竭。

尽管 NAT 技术(网络地址转换)在一定程度上延续了 IPv4 的寿命,但它打破了端到端透明通信的互联网初衷,使许多实时语音、P2P 协议变得极其臃肿脆弱。

IPv6(Internet Protocol Version 6) 带着长达 128 位 的浩瀚空间横空出世——这个空间之大,足以让地球上的每一粒沙子都分到一个独立的公网 IP 地址!更重要的是,IPv6 不只是简单地“把地址拉长”,它在报文头设计、安全扩展、地址解析机制上完成了一次彻底的现代化重构。


学完本课后,你将能够:

  1. 熟练运用 IPv6 的“冒号十六进制”表示法、前导零省略法与双冒号 :: 全局仅能压缩一次的规则。
  2. 识记 IPv6 最重要的地址分类(全球单播 GUA、链路本地 LLA、组播 Multicast、环回地址),并牢记:IPv6 已经彻底废除了“广播(Broadcast)”这一概念!
  3. 推演 邻居发现协议(邻居发现协议(NDP))的四大报文交互流程:NS、NA、RS、RA。
  4. 搞懂 无状态地址自动配置(无状态地址自动配置(SLAAC))与重复地址检测(DAD)如何实现“插上涨线直接能上网”。

1. 128 位地址的表示与极致压缩规则 ​

IPv4 用 4 个十进制数字(如 192.168.1.1),共 32 位。
而 IPv6 拥有 128 位(16 字节),如果用十进制写出来将长得令人绝望。因此,IPv6 规定采用 冒号十六进制表示法(Colon-Hexadecimal Notation):

  • 将 128 位二进制分为 8 个段(Hextet),每段包含 16 个二进制位。
  • 每段用 4 个十六进制数字(0 ~ 9, a ~ f)表示,段与段之间用英文冒号 : 隔开。
  • 完整标准书写格式形如:
    2001:0db8:0000:0000:0000:0000:0000:0001

为了让网络工程师输入更轻松,IPv6 定义了两条神圣的简写压缩法则:

规则一:每段内的前导零(Leading Zeros)可以省略 ​

  • 每段中开头的数字 0 可以不写,但如果整段全是 0,至少要保留一个 0。
  • 0db8 可以简写为 db8;0000 可以简写为 0;0001 简写为 1。
  • 经过第一步压缩后:
    2001:db8:0:0:0:0:0:1

规则二:连续的多段全零可以用双冒号 :: 压缩(全局只能用一次!) ​

  • 如果有连续两段或更多段的全 0,可以用一对双冒号 :: 一笔勾销!
  • 上述地址经过双冒号压缩后变成极为精炼的:
    2001:db8::1

华为 ICT 大赛经典陷阱:双冒号 `::` 全局只能出现一次!

如果一个地址写成 2001::db8::1,这是非法的错误写法!因为接收端无法得知左边压缩了几个 0、右边压缩了几个 0,存在语义二义性。

IPv6 压缩与 NDP 机制图


2. IPv6 的核心地址分类(没有广播!) ​

在 IPv6 的世界里,通信方式只有三种:单播(Unicast)、组播(Multicast)、任播(Anycast)。
“广播(Broadcast)”被彻底扫进了历史的垃圾堆! 原先在 IPv4 中依靠广播实现的所有功能(ARP、DHCP、路由更新),在 IPv6 中全部由高效精准的**组播(Multicast)**所取代。

地址类型前缀标识作用与应用场景
全球单播地址 (GUA)2000::/3 (即以 2 或 3 开头)相当于 IPv4 的公网 IP,全球唯一,可以在互联网公网上直接路由
链路本地地址 (LLA)fe80::/10仅在同一个物理链路(同一广播域/二层网段)内有效,路由器绝不转发;任何开启 IPv6 的接口都会自动生成一个 LLA,常用于路由邻居建立与下一跳
唯一本地地址 (ULA)fc00::/7 (常以 fd00:: 开头)相当于 IPv4 的私网 IP(RFC 1918),用于企业内网互联,不可在公网路由
环回地址 (Loopback)::1/128相当于 IPv4 的 127.0.0.1,代表本机协议栈
未指定地址 (Unspecified)::/128相当于 IPv4 的 0.0.0.0,在主机还没分配到合法地址前发起请求时作源地址
组播地址 (Multicast)ff00::/8标识一组目标节点;例如 ff02::1 代表链路内所有节点,ff02::2 代表所有路由器

3. 告别 ARP:邻居发现协议(NDP)全拆解 ​

在第 11 课 · ARP 协议中,我们学到 IPv4 主机解析对方 MAC 地址时必须向全网发送全 F 的广播请求,网段里的每一台电脑都要被打断 CPU 来检查这个包是不是找自己的。

在 IPv6 中,负责将 IPv6 地址映射为以太网 MAC 地址的机制升级为 邻居发现协议(NDP)(Neighbor Discovery Protocol,邻居发现协议):

  • 载体协议:NDP 并不像 ARP 那样使用独立的二层帧类型,而是直接封装在 ICMPv6 报文中(IPv6 首部 Next Header = 58)。
  • 发送方式:NDP 查询不再使用广播,而是向对端的**“被请求节点组播地址(Solicited-Node Multicast Address)”**精准发送!只有网卡硬件哈希匹配的主机会接收此报文,网段内其他无关主机从网卡 PHY/MAC 层面就会直接忽略,彻底消除了全网 CPU 骚扰!

NDP 地址解析两大报文:NS 与 NA ​

当主机 A(已知自己的 IPv6 和 MAC)想要向主机 B(已知 IPv6 为 2001:db8::2)发数据,但不知道 B 的 MAC 时:

  1. 发送 NS(Neighbor Solicitation,邻居请求,Type 135):
    • 相当于 IPv4 的 ARP Request。
    • 主机 A 组装一个 ICMPv6 Type 135 报文,目的 IPv6 地址填入由主机 B 的 IP 衍生出的被请求节点组播地址(ff02::1:ff00:2)。
    • 报文中写明:“谁是 2001:db8::2?请把你的 MAC 告诉我,我的 MAC 是 AAAA-AAAA-AAAA”。
  2. 回应 NA(Neighbor Advertisement,邻居通告,Type 136):
    • 相当于 IPv4 的 ARP Reply。
    • 只有主机 B 会接收并处理该组播报文。主机 B 记录下 A 的 MAC 映射,然后以单播方式向主机 A 发送一个 ICMPv6 Type 136 报文。
    • 报文回复:“我就是 2001:db8::2,我的 MAC 地址是 BBBB-BBBB-BBBB”。
    • 主机 A 收到 NA,将其填入本地的 IPv6 邻居表(Neighbor Cache,即 IPv6 版的 ARP 缓存表)。

4. 即插即用:SLAAC 无状态自动配置与 DAD ​

在 IPv4 时代,主机要自动获取 IP 通常必须搭建专门的 DHCP 服务器。而在 IPv6 时代,协议原生支持 无状态地址自动配置(SLAAC)(Stateless Address Autoconfiguration,无状态地址自动配置)。

SLAAC 配置四步曲: ​

  1. 生成链路本地地址(LLA):网卡一旦插上网线启动,立即以 fe80::/10 为前缀,结合自己的 MAC 地址(通过 EUI-64 规范扩展)生成一个独一无二的本地链路地址(如 fe80::1234:56ff:fe78:9abc)。
  2. 发送 RS(Router Solicitation,路由器请求,Type 133):主机向组播地址 ff02::2(所有路由器)呼叫:“网段里的网关路由器在吗?请告诉我当前网络的网络前缀!”
  3. 回应 RA(Router Advertisement,路由器通告,Type 134):网关路由器周期性或针对 RS 回应 RA 报文,宣布本地子网前缀(例如 2001:db8:1::/64)和默认网关信息。
  4. 拼装完整 IPv6 地址:主机将收到的 64 位网络前缀与自己的 64 位接口标识(Interface ID)拼在一起,瞬间自动生成合法的全球单播地址(GUA)!

重复地址检测(DAD, Duplicate Address Detection) ​

为了确保自己自动生成的地址没有跟局域网里的其他人撞车,主机在正式启用任何 IPv6 地址前,必须进行 DAD(重复地址检测):

  • 主机向自己准备使用的那个 IPv6 地址对应的被请求节点组播地址发送一个 NS 报文。
  • 如果一段时间内没有任何人回应 NA,说明网络上没有其他人使用该地址,地址验证通过,正式生效!
  • 如果有人回了 NA,说明地址冲突,该地址被标记为 Duplicate 禁用并告警。

5. 华为 VRP 路由器基础 IPv6 配置与查看 ​

在华为网络设备上开启和配置 IPv6:

text
[Huawei] ipv6                                    # 全局使能 IPv6 协议栈
[Huawei] interface GigabitEthernet 0/0/1
[Huawei-GigabitEthernet0/0/1] ipv6 enable       # 接口使能 IPv6
[Huawei-GigabitEthernet0/0/1] ipv6 address 2001:db8:1::1 64 # 配置全球单播地址
[Huawei-GigabitEthernet0/0/1] undo ipv6 nd ra halt           # 允许发送 RA 报文支持 SLAAC

查看 IPv6 邻居表(相当于 IPv4 的 display arp):

text
<Huawei> display ipv6 neighbors
IPv6 Address: 2001:db8:1::2
Link-layer  : 00e0-fc12-3456  State : REACHABLE  Interface : GE0/0/1

6. 课后核心测验 ​

课后巩固 · 练习 · 单选

关于 IPv6 地址的压缩表示规则,下列哪一项描述是完全正确的?

课后巩固 · 练习 · 单选

在 IPv6 协议栈中,传统 IPv4 用来解析 MAC 地址的 ARP 广播协议被什么机制所取代?

7. 阶段小结与下一阶段预告 ​

到此为止,阶段 3 · 网络层(Lessons 14–21)的全部核心篇章已经全部结课!

从 IPv4 地址与子网划分、IP 报文头、路由表与最长匹配,到 ICMP 诊断工具、MTU 分片以及划时代的 IPv6 与 NDP,你已经完全掌握了网络世界的“寻址与投递公路网”。

但是,网络层只负责把数据包送到对方的电脑。对方电脑里同时开着 QQ、微信、Chrome 浏览器和在线游戏,网络层怎么知道这个数据包该递交给哪一个软件?如果网络丢包了,谁来负责重传?

下一阶段,我们将正式登上:阶段 4 · 传输层:端口、TCP 状态机与可靠传输(第 22 课 ~ 第 26 课)!