连通性与路径确认
目标
读取接口和路由,解读 ping 统计,用本环境中可用的模式运行 traceroute 和 mtr。最后亲自证明 ICMP 可达性与 TCP 可达性是两个不同的问题。
为什么重要
ping 只能证明到 IP 层为止。它既不能证明上面的端口、应用,甚至不能证明大数据包能否通过。反过来,ping 失败也不意味着服务器宕机——很多组织会屏蔽 ICMP echo。本实验环境去除了 capability,因此像 traceroute 的 TCP 模式这样需要 raw 套接字的模式无法运行;即使是同一个工具,也会因模式不同而有的能用、有的不能用。这种限制本身就是很好的教材:诊断工具需要什么,不要靠猜,而要在该环境中实际运行后再确定。
步骤
- 创建
/root/reach目录,把接口的单行摘要保存到/root/reach/iface.txt。必须包含lo。 - 把路由表保存到
/root/reach/route.txt。必须有以default开头的行。 - 把向
127.0.0.1ping 3 次的完整输出保存到/root/reach/ping-loop.txt。丢包率必须为 0%。 - 把向自己的默认接口 IP ping 3 次的输出保存到
/root/reach/ping-self.txt。丢包率必须为 0%。 - 从第 3 步的结果中只取 RTT 的 min / avg / max 三个值,用空格分隔写成一行,保存到
/root/reach/rtt.txt。 - 对
127.0.0.1运行 traceroute,把输出保存到/root/reach/trace.txt,并在/root/reach/trace-mode.txt中用小写写一行所用的模式(udp、icmp或tcp)。 - 对
127.0.0.1运行 3 个周期的 mtr 报告,保存到/root/reach/mtr.txt。必须包含Loss%表头。 - 把
/root/reach/summary.txt写成以下 3 行。每个值都必须是实际尝试得到的结果。icmp=<ok|fail>/tcp2222=<ok|fail>/tcp9999=<ok|fail>(ICMP 以127.0.0.1判断,TCP 以127.0.0.1的对应端口判断。)
参考
- 组合使用
ip -br addr、ip route、ping -c 3、traceroute -n -m 3、mtr --report -n -c 3,大部分都能解决。 - 在本环境中,
traceroute -T因权限不足而失败,mtr --udp只输出表头,跳行为空(2026-11-06 实测)。 - TCP 端口用
nc -zv -w 2 127.0.0.1 <port>确认。 - 常见错误 1:在第 5 步把 mdev 也写上,写成四个值。只需要三个值。
- 常见错误 2:在第 8 步不实际尝试,凭猜测填写。每一行都必须有命令输出作为依据。
确认接口列表
创建 /root/reach 目录,把接口的单行摘要保存到 /root/reach/iface.txt。必须包含 lo。
ip 命令有单行摘要格式(-br)。回环接口和实际接口都要显示出来。
确认路由表
把路由表保存到 /root/reach/route.txt。必须有以 default 开头的行。
默认路由是以 default 开头的行。网关地址在 via 后面。
ping 回环地址
把向 127.0.0.1 ping 3 次的完整输出保存到 /root/reach/ping-loop.txt。丢包率必须为 0%。
用 -c 指定次数,最后会输出统计摘要。丢包率就在那一行摘要中。
ping 自己的 IP
把向自己的默认接口 IP ping 3 次的输出保存到 /root/reach/ping-self.txt。丢包率必须为 0%。
使用第 01 步确认的接口地址。发往自己的数据包也不能有丢失。
读取 RTT 统计
从第 3 步的结果中只取 RTT 的 min / avg / max 三个值,用空格分隔写成一行,保存到 /root/reach/rtt.txt。
统计的最后一行以斜杠分隔显示 min/avg/max/mdev。只取前三个值即可。
用可用的模式运行 traceroute
对 127.0.0.1 运行 traceroute,把输出保存到 /root/reach/trace.txt,并在 /root/reach/trace-mode.txt 中用小写写一行所用的模式(udp、icmp 或 tcp)。
不同模式使用的套接字不同,权限要求也不同。请亲自运行默认、-I 和 -T 模式,并写下输出了跳行的其中一种模式。
mtr 报告
对 127.0.0.1 运行 3 个周期的 mtr 报告,保存到 /root/reach/mtr.txt。必须包含 Loss% 表头。
mtr 也因模式不同而有的能用、有的不能用——如果跳行为空,请换一种模式运行。同时使用运行一轮即结束的报告模式和指定次数的选项。
比较 ICMP 与 TCP
把 /root/reach/summary.txt 写成以下 3 行。每个值都必须是实际尝试得到的结果。
icmp=<ok|fail> / tcp2222=<ok|fail> / tcp9999=<ok|fail>
(ICMP 以 127.0.0.1 判断,TCP 以 127.0.0.1 的对应端口判断。)
sshd 在 2222 上运行,9999 上没有任何程序监听。想一想这三个结果各自证明了什么。