答案1
失败的原因有很多ping
。防火墙是问题的主要来源;例如,如果ping
防火墙(此处为 Linux 测试虚拟机)直接丢弃 ICMP 回应请求(发送的内容iptables
),则会导致第一次出现 100% 数据包丢失的情况:
[root@localhost]~# iptables-save
...
[root@localhost]~# iptables -I INPUT 1 -p icmp --icmp-type echo-request -j DROP
[root@localhost]~# ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
^C
--- localhost ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4004ms
您的第二种情况可能是合法的,但也可能是由返回合适 ICMP 响应的防火墙规则引起的,如在同一测试主机上模拟的那样:
[root@localhost]~# iptables -p icmp -h | grep host-unreach
host-unreachable
TOS-host-unreachable
[root@localhost]~# iptables -D INPUT 1
[root@localhost]~# iptables-save
...
[root@localhost]~# iptables -I INPUT 1 -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable
[root@localhost]~# ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
From localhost (127.0.0.1) icmp_seq=1 Destination Host Unreachable
From localhost (127.0.0.1) icmp_seq=2 Destination Host Unreachable
^C
--- localhost ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1000ms
因此,100% 的数据包丢失意味着回显请求(或可能是返回途中的响应)被源和目标之间的网络路由上的防火墙(或任何网络设备)丢弃。“主机不可访问”意味着防火墙(或路由上的任何网络设备)拒绝具有特定 ICMP 响应类型的回显请求。
解决该问题将涉及弄清网络拓扑(traceroute
检查文档等)、使用tcpdump
或类似的数据包跟踪器、检查防火墙规则和日志等。这应该从源主机和目标主机进行,并且可能涉及维护源和目标之间的网络系统(路由器、防火墙、可以伪造网络流量的负载平衡器等)的任何人。