分层的排错顺序
六层排错和四层一样要分层:先看地址是否正确与是否处于可用状态,再看路由是否有默认网关,再看邻居表是否解析成功,然后做连通性与路径测试,最后抓包确认报文是否真的发出与返回。顺序颠倒会在无关层浪费大量时间。
最容易漏掉的两层
第一层是链路本地地址:路由的下一跳常常是链路本地地址而不是全局地址,只看全局地址会误判没有网关。第二层是邻居表:二层没有打通时,连通性测试会一直超时,而报错信息往往指向上层,看起来像路由问题。
基本信息
| 地址层 | 查看地址、状态与是否冲突 |
|---|---|
| 路由层 | 查看默认网关与路由条目 |
| 邻居层 | 查看解析状态与链路层地址 |
| 连通层 | 连通性与路径测试 |
| 抓包层 | 按类型过滤差错与邻居发现报文 |
| 系统对照 | Windows 上有对应的查询命令 |
典型使用场景
- 主机无法出网:按顺序从地址查到路由,通常在前三层就能定位问题
- 服务不可达:先确认地址与路由正常,再确认策略是否放行业务端口
- 间歇性丢包:结合邻居表状态与抓包结果,判断是否为解析反复重建
- 虚拟机迁移后不通:重点看邻居条目与链路本地地址,二层收敛往往滞后
- 路径异常:路径测试配合逐跳抓包,判断丢包发生在本地还是远端
- 跨平台排障:在 Windows 上使用对应命令完成同样的分层检查
Linux 顺序
Linux 顺序
ip -6 addr show # 第一步 地址与状态
ip -6 route show # 第二步 路由与默认网关
ip -6 neigh show # 第三步 邻居表与解析状态
ping -6 2001:db8::1 # 第四步 连通性
traceroute6 -n 2001:db8::2 # 第五步 路径
tcpdump -ni eth0 icmp6 # 第六步 抓包确认Windows 对照
Windows 对照
Get-NetIPAddress -AddressFamily IPv6 # 地址
Get-NetRoute -AddressFamily IPv6 # 路由
Get-NetNeighbor -AddressFamily IPv6 # 邻居表
tracert -6 -d 2001:db8::2 # 路径(示例地址)分层检查对照
| 层次 | 检查对象 | 异常表现 | 下一步 |
|---|---|---|---|
| 地址 | 地址与状态 | 处于待定或冲突 | 修正冲突来源 |
| 路由 | 默认网关 | 无默认路由 | 检查下发配置 |
| 邻居 | 解析状态 | 长期解析中 | 排查二层与链路 |
| 连通 | 探测结果 | 超时 | 结合抓包判断 |
| 抓包 | 报文交互 | 只见请求无应答 | 排查对端与策略 |
只关注全局地址而忽略链路本地地址,会误判主机没有网关:路由的下一跳通常使用链路本地地址,排查时两个都要看。
跳过邻居表是另一个常见疏漏:二层没有打通时连通性测试永远超时,此时先确认邻居解析是否完成,可以省下大量无效的上层排查。