ICMPv6 承担了更多职责
在 IPv6 中 ICMP 不再是可选的辅助协议:邻居发现、路由器发现、地址冲突检测都依赖它,把它整类封禁会直接让网络瘫痪。常用类型里,128 与 129 是连通性测试,133 到 137 承担邻居与路由器发现及重定向,错误类则包含目的地不可达、报文过大、超时与参数错误,其中报文过大是路径 MTU 发现的关键。
基本信息
| 连通性测试 | 128 回显请求与 129 回显应答,对应 ping 命令 |
|---|---|
| 路由器发现 | 133 路由器请求、134 路由器通告 |
| 邻居发现 | 135 邻居请求、136 邻居通告,替代 IPv4 的 ARP |
| 重定向 | 137,通知更优下一跳 |
| 错误消息 | 1 目的地不可达、2 报文过大、3 超时、4 参数错误 |
| 防火墙要求 | 必须放行邻居发现与报文过大,否则出现莫名不通 |
常用类型速查
| 类型 | 名称 | 用途 |
|---|---|---|
| 128 / 129 | 回显请求与应答 | 连通性测试 |
| 133 / 134 | 路由器请求与通告 | 发现路由器与获取前缀 |
| 135 / 136 | 邻居请求与通告 | 地址解析与冲突检测 |
| 137 | 重定向 | 告知更优下一跳 |
| 1 | 目的地不可达 | 错误报告 |
| 2 | 报文过大 | 路径 MTU 发现依赖 |
| 3 | 超时 | 跳数限制耗尽或分片重装超时 |
过滤命令
过滤命令
tcpdump -ni eth0 'icmp6 and ip6[40] == 135' # 邻居请求
tcpdump -ni eth0 'icmp6 and ip6[40] == 134' # 路由器通告
tcpdump -ni eth0 'icmp6 and ip6[40] == 128' # 回显请求
tcpdump -ni eth0 'icmp6 and ip6[40] == 2' # 报文过大
tcpdump -ni eth0 icmp6 | head -20 # 概览,含计数与长度典型使用场景
- 排查“地址有但完全不通”:抓包看邻居请求与通告是否往返,缺失往往是被防火墙拦截
- 定位访问大文件失败:报文过大差错被拦截会导致路径 MTU 发现失败,小请求正常、大传输卡住
- 排查路由异常:重定向报文可提示存在更优路径,需确认是否符合设计意图
- 判断终端是否启用 IPv6:回显请求与通告的往返是最直接证据
- 审计防火墙策略:确认邻居发现与报文过大两类消息被明确放行
把 ICMPv6 整类封禁会让 IPv6 直接不可用:邻居发现、路由器发现与路径 MTU 发现全部失效,症状是间歇性不通,排查成本很高。