IPv6 下的 ping 有什么不同
ICMPv6 在 IPv6 里不是可选项而是基础设施的一部分:邻居发现、地址自动配置、路径 MTU 发现都依赖它,因此整段封禁 ICMPv6 会直接导致网络不可用。ping6 与 ping -6 等价,现代 iputils 已把 IPv4/IPv6 合并进同一个 ping 二进制,用 -6 指定协议族。另一个关键差异是链路本地地址只在单条链路上有效,必须附加百分号加接口名作为域标识,内核才能决定从哪个接口发出。
基本信息
| 适用平台 | Linux iputils ping,Windows 直接用 ping -6 |
|---|---|
| 等价命令 | ping6 与 ping -6 等价,新系统两者都可用 |
| 接口指定 | 多网卡时用 -I eth0 或地址加 %eth0 后缀 |
| MTU 换算 | IPv6 头固定 40 字节,1500 链路下最大不分成 1452 字节 |
| 内核开关 | net.ipv6.conf.all.disable_ipv6,为 1 时协议栈整体关闭 |
典型使用场景
- 上线前验收:确认终端已有全局地址且能通公网 IPv6 目标
- 排查只支持 IPv6 的业务:区分是协议族选错还是路径不通
- 验证网关与路由通告:用链路本地地址直接测直连设备
- 路径 MTU 排查:用带禁止分片的长包探测 IPv6 的实际通过值
- 确认回退行为:应用报错时判断是 IPv6 失败后未回退 IPv4
IPv6 基本连通测试
IPv6 基本连通测试
ping -6 -c 3 2400:3200::1 # 指定 IPv6(等价 ping6)
ping -6 -c 3 fe80::1%eth0 # 链路本地地址必须带 %接口
ping -6 -s 1400 -M do -c 2 2400:3200::1 # IPv6 MTU 探测(1400+48=1448)
ping -6 -I eth0 -c 3 2400:3200::1 # 多网卡时指定出口接口
ping -6 -c 3 -W 2 -w 10 2400:3200::1 # 收紧单包与总超时,便于脚本判断先确认本机 IPv6 状态
先确认本机 IPv6 状态
ip -6 -br a # 是否有全局与链路本地地址
ip -6 route show default # 默认路由是否存在
sysctl net.ipv6.conf.all.disable_ipv6 # 1 表示协议栈被关闭
ip -6 neigh show # 邻居表,等价 IPv4 的 ARP 表常见报错判读
| 报错 | 含义 | 下一步 |
|---|---|---|
| Address family not supported | 内核未启用 IPv6 | 检查 disable_ipv6 与内核模块 |
| Network is unreachable | 没有可用的默认路由 | 补路由或检查路由通告 |
| Invalid argument | 链路本地地址未带接口标识 | 补上百分号加接口名 |
| Destination unreachable | 路由不可达或中间设备拒绝 | 用逐跳探测定位断点 |
| 100% packet loss 无报错 | 对端或中间设备丢弃 ICMPv6 | 换 TCP 端口探测交叉验证 |
IPv6 载荷换算不同:ping6 显示的 56 加 8 是 ICMPv6 头与载荷,链路层还要加 40 字节 IPv6 头;MTU 探测的分界值是 1452(1500 减 48)而不是 IPv4 的 1472。