进阶 #network#ipv6#icmp

IPv6 与 ICMP

IPv6 是为解决 IPv4 地址耗尽问题而设计的新一代 IP 协议——128 位地址让地球上的每粒沙子都能分配一个 IP,同时简化了包头、取消了 NAT。ICMP 是网络层的"诊断工具"

IPv4 地址已经不够用了——这是一场”地址危机”

2024 年全球设备数量超过 300 亿——而 IPv4 只有约 43 亿个地址。即使有 NAT 和私有地址缓解,也已经不够分了。

🏫 类比:手机号位数升级 以前中国手机号 7 位就够用,后来用户多了升到 8 位、11 位。IPv4→IPv6,就像手机号从 7 位升到 20 位——永远不用担心号码不够。

IPv4 地址池现状:

  • 2011 年:IANA(互联网号码分配机构)的顶层地址池耗尽
  • 2015 年:亚太区的地址池耗尽
  • 2024 年:运营商开始大规模部署 IPv6

IPv6 到底有多大?

IPv6 地址 128 位——总量是 2¹²⁸ = 340,282,366,920,938,463,463,374,607,431,768,211,456 个。

如果地球表面 70% 是海洋、只有 30% 是陆地——每平方米能分到 6.5×10²³ 个 IPv6 地址。 你脚下的每粒沙子都能有上亿个 IP 地址。

IPv6 地址长什么样?

IPv6 地址写成 8 组 16 进制数,每组 4 个 16 进制字符,用冒号隔开:

完整:2001:0db8:85a3:0000:0000:8a2e:0370:7334
简化:2001:db8:85a3::8a2e:370:7334

简化规则:
① 每组的前导 0 可以省略 → 0370 → 370
② 连续的 0 组可以用 :: 代替一次 → 0000:0000 → ::
# 查看你的 IPv6 地址
ip addr show | grep inet6  # Linux
ifconfig | grep inet6      # macOS
ipconfig | find "IPv6"     # Windows

IPv6 vs IPv4——简化了哪些地方?

IPv6 的包头比 IPv4 简单多了——没有校验和、没有分片、没有选项字段,长度固定为 40 字节:

IPv4 包头:20-60 字节         IPv6 包头:40 字节(固定)
┌──────────────┐             ┌──────────────┐
│ 版本/服务类型  │             │ 版本/流量标签  │
│ 总长度/分片    │             │ 负载长度      │
│ TTL/协议/校验  │             │ 下一头部/TTL  │
│ 源地址(32位) │             │ 源地址(128位)│
│ 目标地址(32位)│             │ 目标地址(128位)│
│ 选项(可变)   │             └──────────────┘
└──────────────┘

IPv6 简化带来的好处:

变化IPv4IPv6好处
校验和没有了路由器不用算了,加快转发
分片路由器可以做发送方做路由器不用处理分片,更快
选项可变长,处理慢扩展头部只在需要时才处理
NAT必须用不需要每个设备有全球唯一公网 IP

💡 IPv6 去掉了校验和——因为数据链路层(CRC)和传输层(TCP/UDP 校验和)已经做了错误检测,IP 层的校验和是多余的。减少了一个处理步骤,路由器转发更快。

ICMP——网络层的”诊断工具”

ICMP(Internet Control Message Protocol) 不是用来传数据的——它是网络层的”信使”,报告错误和诊断信息。

你每天都在用的 ICMP——ping

$ ping baidu.com
PING baidu.com (39.156.66.10): 56 data bytes
64 bytes from 39.156.66.10: icmp_seq=0 ttl=52 time=15.3 ms
64 bytes from 39.156.66.10: icmp_seq=1 ttl=52 time=14.8 ms
64 bytes from 39.156.66.10: icmp_seq=2 ttl=52 time=15.1 ms

ping 发送的是 ICMP Echo Request(类型 8),对方回复 ICMP Echo Reply(类型 0)。

常见的 ICMP 消息

类型用途你在哪里会遇到
0/8Echo Reply / Echo Requestping——测试网络连通性
3目标不可达端口没开、网络不存在时看到
5重定向路由器告诉你”你应该走另一条路更快”
11超时(TTL exceeded)traceroute 的核心机制

TTL 超时——traceroute 的秘密武器

$ traceroute google.com
traceroute to google.com (142.250.80.4), 30 hops max
 1  192.168.1.1 (192.168.1.1)  1.5 ms
 2  10.0.0.1 (10.0.0.1)        5.2 ms
 3  172.16.1.2 (172.16.1.2)    8.1 ms
 4  * * * 有的路由器不响应 ICMP(防火墙屏蔽)
 5  72.14.237.1                11.3 ms
 ...
 8  142.250.80.4              12.5 ms

工作原理:

  1. 发送 TTL=1 的 UDP 包 → 第一台路由器收到,TTL 减为 0 → 丢弃并回复 ICMP 超时
  2. 发送 TTL=2 的 UDP 包 → 第一台转发,第二台 TTL=0 → 回复 ICMP 超时
  3. ……直到到达目标

💡 你看到的 * * * 说明某台路由器配置了防火墙不回复 ICMP——这不代表网络不通,只是它不泄露自己的存在。

小结

概念要点一句话
IPv6128 位地址,地球每粒沙子都能分到 IP”永远用不完的地址”
IPv6 vs IPv4无校验和、无分片、无 NAT”更简洁、更快”
ICMP错误报告和诊断工具”网络层的信使”
pingICMP Echo Request/Reply”你在吗?——我在”
traceroute利用 ICMP 超时报文逐跳探测”查查去北京要走哪些站”

为什么先学这个? IPv6 是互联网的未来,ICMP 是排查网络问题的第一把钥匙。下一节看看NAT 与 DHCP——IPv4 时代”续命”的两大技术。