https://blog.csdn.net/stpeace/article/details/45116425
了解网络的人, 基本上都用过ping命令, 这个优秀的小工具通常能非常靠谱地检测网络的连通性。 但是, 某次, 在某个特殊环境中, 我发现ping不通www.baidu.com但可以访问www.baicom.com网页. 刚开始一看, 这不是矛盾了么? 后来仔细想想, 觉得没什么不合理的。
ping www.baidu.com会利用到dns协议和icmp协议, 在上述特殊环境中, ping www.baidu.com后, 发现只有www.baidu.com对应的ip, 也就是说, dns解析是成功, 但没有ping过程的回显。
然后, 能登录www.baidu.com啊。 我们知道, 登录www.baidu.com首先会用到dns协议, 然后会利用http协议, 而http是基于tcp的, 所以三次握手是成功的。 那为什么ping不通呢? 原来是网络环境屏蔽了ping用到的icmp报文, 而能上网, 表明网络连接肯定是好的, 且没有屏蔽掉三次握手报文, 也没有屏蔽掉端口。
另外, 在该环境下, 可以执行telnet www.baidu.com 80试试, 可以看到, 能连通, 再次说明三次握手ok的, 且没有屏蔽对应的端口。
总之: 在多数情况下, ping基本可以反映网络的连通与否;
在少数情况下, ping不通的时候网络也可能是联通好的。