发送失败Linux下Ping包发送失败的原因探究(linuxping包)
在Linux下,经常会收到由Ping发出的请求包无法到达某个主机上的错误信息,大多数人都认为这是网络或硬件出现问题,但实际上这可能是Linux系统设置导致的Ping发送失败原因。为了确定原因,首先查看ping的输出信息来排查问题:
“`bash
[root@host ~]# ping -c 4 192.168.0.105
PING 192.168.0.105 (192.168.0.105): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
— 192.168.0.105 ping statistics —
4 packets transmitted, 0 packets received, 100% packet loss
从上述信息可以看出,ping发送四次请求包但接收不到返回的包,说明一定是硬件或者网络阻塞产生的Ping请求发送失败。为了更加精准的定位问题,查看系统的设置项:
```bash[root@host ~]#sysctl -a |grep icmp
net.ipv4.icmp_echo_ignore_all = 0net.ipv4.icmp_echo_ignore_broadcasts = 0
该设置项为0 表示开启,默认情况下Linux系统的ICMP回显忽略配置是处于关闭状态,但此时发现系统设置了忽略icmp回显,所以此时机器对外响应了Ping包已经被直接忽略,导致Ping发送失败。
要解决该问题,需要关闭该设置。只需要设置参数icmp_echo_ignore_all 为0即可:
“`bash
sysctl -w net.ipv4.icmp_echo_ignore_all=0
以上修改参数即可使Ping发送请求成功,可以在任意系统环境:
```bash[root@host ~]# ping -c 4 192.168.0.105
PING 192.168.0.105 (192.168.0.105): 56 data bytes64 bytes from 192.168.0.105: icmp_seq=0 ttl=64 time=1.069 ms
64 bytes from 192.168.0.105: icmp_seq=1 ttl=64 time=0.543 ms64 bytes from 192.168.0.105: icmp_seq=2 ttl=64 time=0.655 ms
64 bytes from 192.168.0.105: icmp_seq=3 ttl=64 time=0.608 ms
--- 192.168.0.105 ping statistics ---4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.543/0.772/1.069/0.223 ms
从以上例子可以看出,通过修改 Linux 的 ICMP 回显忽略对 Ping 包的发送失败原因可以进行解决,避免出现怀疑网络的问题,这也提醒我们在进行Linux系统调优时,应该充分考虑网络性能的影响。