飞翔飞翔
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 学习路径
  • IP协议

    • 认识 IP 协议与网络层定位
    • IPv4 编址体系与分类地址
    • CIDR 与子网划分实战
    • IPv6 编址体系
    • ARP 协议详解
    • NDP 协议详解
    • IGMP 与 MLD 组播侦听发现
    • VRRP 与网关冗余
    • IPv4 数据报首部解析
    • IPv6 数据报与扩展首部
    • IPsec 安全扩展
    • 分片、MTU 与路径发现
    • ICMP 与 Traceroute 原理
    • 路由基础与转发流水线
    • 动态路由协议
    • NAT 网络地址转换
    • DHCP 与自动配置
    • Wireshark 与命令行工具
    • IPv6 过渡技术
    • IP 协议栈排障与攻击防御
  • TCP协议

    • 认识 TCP 协议与传输层定位
    • TCP 报文段首部解析
    • 三次握手与连接建立
    • 四次挥手与连接释放
    • TCP 有限状态机
    • 序列号与确认机制
    • 超时重传与 RTO 计算
    • 滑动窗口与流量控制
    • 拥塞控制基础
    • 现代拥塞控制算法
    • TCP 选项与扩展
    • TCP 性能调优与内核参数
    • Nagle 算法与糊涂窗口综合征
    • TCP 定时器与 Keep-Alive 机制
    • TCP 安全与攻击防御
    • TCP 与上层/下层交互
    • TCP 综合实践与排障

IPv6 编址体系

为什么需要 IPv6

IPv4 有 43 亿个地址,听起来不少,但:

  • 全球 80 亿人口,平均 5 个人分 1 个 IP(还没算手机、冰箱、摄像头)
  • NAT 缓解了枯竭,但破坏了端到端通信(P2P、物联网受限)
  • 路由表爆炸:CIDR 缓解了,但 IPv4 头部设计限制了扩展

IPv6 的地址空间是 128 位,数量是 2^128 ≈ 3.4 × 10³⁸。夸张地说,地球上每粒沙子都能分到几亿个 IPv6 地址。

IPv6 地址表示法

128 位写成二进制太长了,IPv6 采用冒号十六进制:

完整形式:
2001:0DB8:0000:0000:0000:FF00:0042:8329

压缩规则

规则 1:前导零可以省略

2001:0DB8:0000:0000:0000:FF00:0042:8329
→ 2001:DB8:0:0:0:FF00:42:8329

规则 2:连续的全零块可以用 :: 代替,只能出现一次

2001:DB8:0:0:0:FF00:42:8329
→ 2001:DB8::FF00:42:8329

为什么不能出现两次 ::? 因为解析器无法判断每个 :: 代表几个零块。例如 2001::DB8::1 是非法的,无法确定中间有几个零。

实战例子

完整形式压缩形式
0000:0000:0000:0000:0000:0000:0000:0001::1(环回地址)
0000:0000:0000:0000:0000:0000:0000:0000::(未指定地址)
FE80:0000:0000:0000:0202:B3FF:FE1E:8329FE80::202:B3FF:FE1E:8329

IPv6 地址类型

IPv6 取消了广播(Broadcast),改为三种基本类型:

1. 单播(Unicast):一对一

类型前缀用途类比
Global Unicast2000::/3全球唯一,可路由公网 IP
Link-LocalFE80::/10链路本地,不出网卡小区内部对讲机
Unique-LocalFC00::/7组织内部私有地址公司内部电话
Loopback::1/128本机环回对着镜子说话
Unspecified::/128未指定(DHCP 前临时用)"我还没地址"

Link-Local 详解:

FE80::/10 是 IPv6 的"小区内部号",只在同一条网线/同一个 Wi-Fi 内有效。即使两台电脑没有路由器、没有公网地址,只要网线直连,就能用 Link-Local 地址互相 ping 通。

每台启用 IPv6 的设备都会自动生成一个 FE80:: 开头的地址,基于 MAC 地址通过 EUI-64 算法生成。

2. 组播(Multicast):一对多

前缀 FF00::/8,就像微信群发:

  • FF02::1:链路本地所有节点(All Nodes)
  • FF02::2:链路本地所有路由器(All Routers)
  • FF02::1:FFxx:xxxx:请求节点组播(Solicited-Node),用于 NDP 邻居发现

3. 任播(Anycast):一对最近

任播地址和单播地址格式完全相同,区别在于路由层面:多个服务器宣告相同的前缀,路由器把包发给"最近"(度量最小)的那个。DNS 根服务器 2001:500:: 就是任播部署的。

生活例子:你在北京点麦当劳外卖,系统会自动分配给最近的一家门店,而不是全国随机一家。这就是任播。

EUI-64 接口标识符

IPv6 地址的后 64 位通常是接口标识符(Interface ID)。EUI-64 算法把 48 位 MAC 地址扩展成 64 位:

MAC 地址:00:1A:2B:3C:4D:5E

步骤 1:在中间插入 FF:FE
→ 00:1A:2B:FF:FE:3C:4D:5E

步骤 2:翻转第 7 位(U/L 位)
00 → 00000000 → 翻转第 7 位 → 00000010 → 02

结果:02:1A:2B:FF:FE:3C:4D:5E

完整 Link-Local 地址:
FE80::21A:2BFF:FE3C:4D5E

隐私扩展地址(RFC 4941)

EUI-64 有个隐私问题:你的 IPv6 地址里嵌入了 MAC 地址,走到哪都能被追踪。就像你的身份证号里包含了出生地信息,有心人一看就知道你从哪来的。

隐私扩展(Privacy Extensions)解决了这个问题:

  • 系统除了生成基于 EUI-64 的"稳定地址"外,还会定期生成随机临时地址
  • 对外通信优先使用临时地址,防止被长期追踪
  • 临时地址有过期时间(通常几天到几周)

现代操作系统(Windows 10+、macOS、Linux)默认开启隐私扩展。

IPv4 映射与兼容地址

IPv6 中嵌入 IPv4 地址的两种形式:

类型格式用途
IPv4 兼容地址::192.168.1.1已废弃,不再使用
IPv4 映射地址::FFFF:192.168.1.1IPv6 套接字与 IPv4 节点通信

IPv6 取消了广播,所有"一对多"通信都通过组播实现。单播地址中 Global Unicast 是最常用的公网地址,Link-Local 是自动生成的本地链路地址。

本篇小结

  • IPv6 128 位,冒号十六进制表示,支持前导零省略和 :: 压缩
  • 单播分 Global、Link-Local、Unique-Local;组播以 FF 开头;任播靠路由区分
  • EUI-64 从 MAC 地址生成接口 ID,但存在隐私风险
  • 隐私扩展(RFC 4941)生成临时随机地址,防止追踪
  • ::1 是环回,:: 是未指定,FE80::/10 是链路本地

动手实践

  1. 命令行查看本机 IPv6 地址:

    • Windows:ipconfig /all,找 IPv6 Address 和 Temporary IPv6 Address
    • Linux:ip addr show,找 scope global 和 scope link
  2. 观察你的 Link-Local 地址是否包含你的 MAC 地址信息(对比 ip link 输出的 MAC)

  3. 尝试 ping ::1,验证 IPv6 协议栈是否正常

  4. 访问 https://test-ipv6.com/,测试你的网络是否支持 IPv6

上一页
CIDR 与子网划分实战
下一页
ARP 协议详解