外观
43 亿个地址耗尽之后:IPv6 如何用 128 位重塑互联网基石?
在第 14 课 · IPv4 地址体系中,我们学到 32 位的 IPv4 理论上只有约 43 亿个地址。随着智能手机、物联网传感设备、云计算服务器的爆发式激增,全球 IPv4 公网地址池早已经宣告枯竭。
尽管 NAT 技术(网络地址转换)在一定程度上延续了 IPv4 的寿命,但它打破了端到端透明通信的互联网初衷,使许多实时语音、P2P 协议变得极其臃肿脆弱。
IPv6(Internet Protocol Version 6) 带着长达 128 位 的浩瀚空间横空出世——这个空间之大,足以让地球上的每一粒沙子都分到一个独立的公网 IP 地址!更重要的是,IPv6 不只是简单地“把地址拉长”,它在报文头设计、安全扩展、地址解析机制上完成了一次彻底的现代化重构。
学完本课后,你将能够:
- 熟练运用 IPv6 的“冒号十六进制”表示法、前导零省略法与双冒号
::全局仅能压缩一次的规则。 - 识记 IPv6 最重要的地址分类(全球单播 GUA、链路本地 LLA、组播 Multicast、环回地址),并牢记:IPv6 已经彻底废除了“广播(Broadcast)”这一概念!
- 推演 邻居发现协议(邻居发现协议(NDP))的四大报文交互流程:NS、NA、RS、RA。
- 搞懂 无状态地址自动配置(无状态地址自动配置(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,存在语义二义性。
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 时:
- 发送 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”。
- 回应 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 配置四步曲:
- 生成链路本地地址(LLA):网卡一旦插上网线启动,立即以
fe80::/10为前缀,结合自己的 MAC 地址(通过 EUI-64 规范扩展)生成一个独一无二的本地链路地址(如fe80::1234:56ff:fe78:9abc)。 - 发送 RS(Router Solicitation,路由器请求,Type 133):主机向组播地址
ff02::2(所有路由器)呼叫:“网段里的网关路由器在吗?请告诉我当前网络的网络前缀!” - 回应 RA(Router Advertisement,路由器通告,Type 134):网关路由器周期性或针对 RS 回应 RA 报文,宣布本地子网前缀(例如
2001:db8:1::/64)和默认网关信息。 - 拼装完整 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/16. 课后核心测验
7. 阶段小结与下一阶段预告
到此为止,阶段 3 · 网络层(Lessons 14–21)的全部核心篇章已经全部结课!
从 IPv4 地址与子网划分、IP 报文头、路由表与最长匹配,到 ICMP 诊断工具、MTU 分片以及划时代的 IPv6 与 NDP,你已经完全掌握了网络世界的“寻址与投递公路网”。
但是,网络层只负责把数据包送到对方的电脑。对方电脑里同时开着 QQ、微信、Chrome 浏览器和在线游戏,网络层怎么知道这个数据包该递交给哪一个软件?如果网络丢包了,谁来负责重传?
下一阶段,我们将正式登上:阶段 4 · 传输层:端口、TCP 状态机与可靠传输(第 22 课 ~ 第 26 课)!