ICMP (Internet Control Message Protocol)
干什么用的
IP 是「尽力而为」的:包丢了、TTL 到 0 了、目的不可达了 —— 它自己不会说。
ICMP 就是 IP 的通知渠道:出了问题回一句、想探活也能发一句。★★ 注意它不传业务数据,只传「关于网络的消息」。
traceroute 是怎么来的
★★★ 它不是一个协议,而是 TTL + ICMP 拼出来的技巧:
· 发一个 TTL=1 的包 → 第一台路由器减到 0,丢弃并回 Time Exceeded →于是你知道了第一跳是谁;
· 再发 TTL=2 → 第二跳报到;
· 一直加到目的主机回 Echo Reply(或端口不可达)为止。
★★ 所以 traceroute 显示的每一行,都是某台路由器主动回给你的差错报文。
★ 常见误解
★★★ 「ping 不通就是网络断了」 —— 很多设备故意不回 ICMP(安全策略)。ping 不通只说明它不回你,不代表业务端口不通。
★★★ 「把 ICMP 全拦了更安全」 —— 会拦掉 PMTUD 需要的「需要分片」报文,后果是小包通、大包卡死,而且极难排查。
★★ 「traceroute 里有一跳是 * 就是那台坏了」 —— 通常只是那台不回 ICMP,流量照样过得去。