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

    • 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 已经部署了 40 多年,不可能一夜切换。过渡期的核心挑战:

  • IPv4-only 设备 如何访问 IPv6 服务?
  • IPv6-only 网络 如何访问 IPv4 互联网?
  • 双栈运营 成本高昂,如何平滑演进?

过渡技术分三大类:双栈、隧道、协议转换。

双栈(Dual Stack)

最简单粗暴的方案:主机/路由器同时运行 IPv4 和 IPv6,两个协议栈独立工作。

主机 A:
  IPv4 地址:192.168.1.10
  IPv6 地址:2001:db8::10
  
访问 www.example.com:
  DNS 返回 A 记录(IPv4)和 AAAA 记录(IPv6)
  优先尝试 IPv6(现代系统默认)
  如果 IPv6 不通,回退 IPv4(Happy Eyeballs 算法)

优点:最干净,无转换开销 缺点:

  • 需要同时维护两套地址、两套路由、两套安全策略
  • 运营商需要同时采购 IPv4 和 IPv6 带宽

现状:企业和数据中心的主流方案,但运营商在探索 IPv6-only 以降低成本。

隧道技术:IPv6 over IPv4

把 IPv6 包封装在 IPv4 包里传输,像把中文信装进英文信封。

6to4(RFC 3056):自动隧道,已淘汰

  • 任何有公网 IPv4 的主机自动生成 6to4 地址:2002:IPv4::/48
  • 例如 IPv4 203.0.113.1 → IPv6 前缀 2002:cb00:7101::/48
  • 通过 6to4 中继路由器(Anycast 192.88.99.1)访问 IPv6 互联网

淘汰原因:

  • 依赖公网 IPv4,CGNAT 环境下失效
  • 中继路由器性能瓶颈
  • 可靠性差

6rd(RFC 5969):ISP 版 6to4

运营商部署的改进版:

  • 使用 ISP 自己的 IPv6 前缀,而非固定的 2002::/16
  • 由 ISP 运营中继,可靠性高
  • 光猫/路由器自动建立隧道

现状:曾广泛用于光纤宽带接入,现逐渐被双栈和原生 IPv6 替代。

ISATAP / Teredo:已淘汰

  • ISATAP:内网 IPv6 over IPv4,企业内网场景,已废弃
  • Teredo:UDP 隧道穿越 NAT,Windows 早期内置,已废弃

协议转换:IPv6 ↔ IPv4

隧道解决"IPv6 孤岛穿越 IPv4 海洋",但无法解决"IPv6-only 客户端访问 IPv4-only 服务器"。协议转换直接修改包的头部,实现两个协议的互通。

过渡技术的选择取决于具体场景:企业和数据中心目前以双栈为主;运营商光纤宽带用 DS-Lite 或向 IPv6-only + NAT64 演进;移动蜂窝网络用 464XLAT;大规模运营商正在部署 MAP-T/E 替代有状态的 CGNAT。

NAT64 + DNS64(RFC 6146/6147)

最主流的 IPv6-only 访问 IPv4 方案。

DNS64:合成 AAAA 记录

IPv6-only 客户端查询 www.example.com 的 AAAA 记录:

如果 example.com 只有 A 记录(IPv4):203.0.113.10
DNS64 服务器合成 AAAA 记录:
  前缀: 64:ff9b::/96(Well-Known Prefix)
  + IPv4: 203.0.113.10
  = 64:ff9b::cb00:710a

客户端收到 AAAA:64:ff9b::cb00:710a,以为是真正的 IPv6 地址

NAT64:有状态转换

客户端发送包到 64:ff9b::cb00:710a
  ↓
NAT64 网关截取
  ↓
提取嵌入的 IPv4 地址:cb00:710a = 203.0.113.10
  ↓
创建会话表:
  [IPv6 客户端, IPv6 端口] ↔ [NAT64 公网 IPv4, IPv4 端口] ↔ [目标 IPv4, 目标端口]
  ↓
把 IPv6 头换成 IPv4 头,发给 203.0.113.10
  ↓
收到回复后,反向转换,发给 IPv6 客户端

NAT64 + DNS64 的巧妙之处在于对客户端完全透明:客户端以为自己访问的是一个普通 IPv6 地址(64:ff9b::/96 前缀),实际上 DNS64 在后台把 A 记录合成为 AAAA 记录,NAT64 网关负责 IPv6↔IPv4 的头部转换和会话状态维护。整个过程中客户端无需任何修改。

优点:IPv6-only 网络可以访问几乎所有 IPv4 服务 缺点:

  • 有状态,需要维护会话表(和 NAT44 一样)
  • 某些协议在载荷中嵌入 IP 地址(如 SIP、FTP),需要 ALG
  • 无法支持 IPv4-only 客户端访问 IPv6-only 服务器(单向)

DS-Lite(RFC 6333):双栈精简

运营商光纤接入的主流方案:

家庭光猫(B4, Basic Bridging Broadband)
  → 只分配 IPv6 地址
  → IPv4 流量通过 IPv6 隧道发送到运营商 AFTR 设备

AFTR(Address Family Transition Router)
  → 解封装 IPv4-in-IPv6 隧道
  → 做 NAT44(IPv4 地址转换)
  → 发送到 IPv4 互联网

核心:光猫不需要公网 IPv4,只需要 IPv6;IPv4 流量走隧道到运营商集中做 NAT。

优点:运营商节省 IPv4 地址(只需 AFTR 有公网 IPv4) 缺点:

  • IPv4 流量多一层隧道封装,MTU 降低(通常 1460 字节有效载荷)
  • AFTR 是集中瓶颈,NAT 表压力大

464XLAT(RFC 6877):移动网络主流

手机蜂窝网络(4G/5G)广泛采用:

手机(CLAT, Customer-side Translator)
  → 手机本地做 NAT46:把 App 的 IPv4 请求转成 IPv6
  → 发送到 IPv6-only 核心网

运营商 PLAT(Provider-side Translator)
  → 做 NAT64,访问 IPv4 互联网

为什么手机用 464XLAT 而不是 DS-Lite?

  • 手机 App 很多是 IPv4-only(尤其是老旧 App)
  • CLAT 在手机本地做,App 无感知
  • 移动核心网(EPC/5GC)正在向 IPv6-only 演进

MAP-T / MAP-E(RFC 7597/7598):无状态替代 CGNAT

运营商级 NAT(CGNAT)的问题:

  • 有状态,会话表巨大,单点故障
  • 日志记录压力大(法规要求记录 NAT 映射)

MAP(Mapping of Address and Port) 用算法替代状态表:

规则:IPv4 地址 + 端口范围 ↔ IPv6 前缀 是固定算法映射
例如:
  公网 IPv4 203.0.113.1 + 端口 1536~2047
  ↔ 固定映射到 IPv6 前缀 2001:db8:1:2::/64

不需要会话表!路由器用算法实时计算映射关系
技术机制状态场景
MAP-T无状态 IPv4/IPv6 翻译无状态大规模运营商
MAP-E无状态 IPv4-in-IPv6 封装无状态大规模运营商

优点:无状态,可扩展性好,故障恢复简单 缺点:配置复杂,端口范围受限(每个用户只能分到部分端口)

现代部署趋势

场景主流方案趋势
企业/数据中心双栈长期共存
运营商光纤宽带DS-Lite / 双栈向 IPv6-only + NAT64 演进
移动蜂窝网络464XLAT核心网 IPv6-only
大规模运营商MAP-T/E替代 CGNAT
云服务双栈 + IPv6-only VPCIPv6-only 内部网络

本篇小结

  • 过渡技术三类:双栈(最干净)、隧道(穿越)、协议转换(互通)
  • 6to4/ISATAP/Teredo 已淘汰;6rd 曾用于宽带接入
  • NAT64+DNS64 让 IPv6-only 访问 IPv4,是当前主流
  • DS-Lite 用于光纤宽带,光猫 IPv6-only,IPv4 走隧道到 AFTR
  • 464XLAT 用于移动网络,手机本地 CLAT + 运营商 PLAT
  • MAP-T/E 是无状态替代 CGNAT 的方案,适合大规模部署

动手实践

  1. 访问 https://test-ipv6.com/,测试你的网络支持哪些过渡技术

  2. 查看本机是否获取了 IPv6 地址,尝试 ping -6 2001:4860:4860::8888(Google IPv6 DNS)

  3. 在 Linux 上配置 NAT64 测试环境(使用 tayga 或 jool)

  4. 思考:为什么 MAP-T/E 能做到"无状态"?端口范围受限对普通用户有什么影响?(P2P 联机更困难)

上一页
Wireshark 与命令行工具
下一页
IP 协议栈排障与攻击防御