IPv6、NAT 与 ICMP¶
IPv6 的动机不只是不够用¶
IPv4 地址只有 32 比特,全球设备增长促使私有地址和 NAT 广泛部署。IPv6 使用 128 比特地址,简化基础首部,把可选功能移到扩展首部,并重新设计邻居发现与自动配置。它希望恢复更充足的端到端寻址能力,但迁移必须与庞大 IPv4 网络共存。
IPv6 地址与压缩¶
IPv6 通常写成八组十六进制数,例如:
每组可省略前导零,连续全零组可用一次 :: 压缩:
:: 一条地址中只能出现一次,否则无法判断省略了多少组。::1 是环回地址;fe80::/10 是链路本地范围。IPv6 没有 IPv4 式广播,常用多播完成邻居发现等功能。
IPv6 子网通常用 /64,接口标识占后 64 比特。主机可通过无状态地址自动配置学习前缀,也可结合 DHCPv6 获取额外配置。地址空间大并不等于不需要防火墙;“地址难猜”不是可靠访问控制。
IPv4 NAT 如何工作¶
家中多台设备使用私有地址,而运营商只提供一个公有 IPv4。NAPT 会同时改写地址和端口,并维护映射表:
| 内部连接 | 公网映射 | 远端 |
|---|---|---|
192.168.1.10:53000 |
203.0.113.8:40001 |
198.51.100.20:443 |
192.168.1.11:53000 |
203.0.113.8:40002 |
198.51.100.20:443 |
返回分组到达公网端口后,NAT 根据状态表恢复内部目的地址。不同内部主机即使使用相同源端口,也可映射到不同公网端口。
NAT 缓解 IPv4 地址压力,也让内部地址规划相对独立;但它破坏透明端到端连接,引入状态和超时。外部主机通常无法主动连接内部服务,除非配置端口转发、使用打洞、中继或 VPN。应用若在载荷中携带 IP 地址,也可能需要特殊处理。
NAT 不等同于防火墙。状态转换会顺带阻止部分无映射入站流量,但安全策略应由明确的防火墙规则承担。运营商级 NAT 让大量用户共享公有地址,会进一步影响入站连接、日志定位和端口资源。
ICMP:IP 的反馈通道¶
ICMP 与 IP 协作,报告错误并支持诊断。常见消息包括:
- Echo Request/Reply:
ping使用的回显请求与响应。 - Destination Unreachable:目的不可达,可能细分为无路由、端口不可达等。
- Time Exceeded:跳数限制耗尽,
traceroute利用它发现逐跳路径。 - Packet Too Big:IPv6 路径 MTU 发现的重要反馈。
IPv4 的 TTL 和 IPv6 的 Hop Limit 每经过一台路由器减 1,降为 0 时路由器丢弃数据报并可返回超时消息,避免路由环路让分组永久循环。
traceroute 的直觉¶
探测程序先发送 Hop Limit 为 1 的分组,第一跳丢弃并返回超时;再发送值为 2 的分组得到第二跳,以此递增。它观察的是各探测报文得到的响应,不保证所有业务分组永远沿同一路径,也不保证每台路由器都响应。
为什么不应“一刀切禁 ICMP”¶
屏蔽不必要的 ICMP 可减少信息暴露和滥用,但全部阻断会破坏故障反馈与路径 MTU 发现,出现“小请求能通、大传输卡住”的黑洞。更合理的是按类型、方向和速率限制,而非把 ICMP 当成完全无用的附属协议。
IPv4 到 IPv6 的共存¶
迁移不是一次开关。常见方式包括双栈、隧道和协议转换。双栈主机同时有 IPv4 与 IPv6,应用根据 DNS 记录和连接质量选择;如果 IPv6 配置存在但路径实际不可用,客户端需要快速回退,否则用户会感到连接延迟。
自测
IPv6 地址充足后是否完全不需要 NAT?
地址节省型 NAT 的动机显著减弱,但有些网络仍使用前缀转换或代理满足策略需求。隔离和访问控制应由路由与防火墙明确实现,而不是把 NAT 当作安全本身。