【摘要】 这一章节你的角色是国王,你要派一个小兵去对方打探一下。是站在你的角度看这个小兵。哦,对了,这个小兵的名字叫“喂”。
一、Ping命令介绍
ping就是用来检测一下网络能不能跟对方互通,类似:“大哥,在么?”,“哥在。”,于是你就安心了。为啥你就安心了呢,因为你害怕孤单(汗,其实因为网络不通你啥也玩不了)。
上一节你都学会了路怎么走,咱走一个呗?走一个就是派个小兵帮你走一趟,这个小兵名字叫“喂”。
#ping 10.184.43.7
这个时候,就从本机发出一个报文“喂”,从哪个网卡发出,走到哪个中转站,都在路怎么走章节说过。
小兵派出后,有好几种命运等着他:
1. 没有路到达对方,小兵失败而归。相对来说,这种小兵还是很幸福了。
2. 悲催一点,他半路找不着对方,迷路(失)了。
3. 最惨的情况,路上设置了机关,他在半路被杀了。
4. 好一点的,他到达了对方,但是对方派出的使者却没能到你这。
5. 完美,他成功到达对方,对方的回访使者也回来到你这里了。
其中第二种情况,其实就是对方的“喂”使者出现了3或者4的情况。所以这里大概就三种情况:
1. 成功
2. 没反应
3. 很明确的不通
1.成功
ping报文是ICMP协议中的一种 (就好比TCP协议中的syn,syn报文只是TCP协议中的一种)。
而ICMP协议是与TCP同级的,也就是在IP协议之上的。
ICMP / TCP / UDP 这三个小伙伴,你都熟了以后,一般网络问题都不是问题。
Mac层 -> IP层 -> 三兄 弟
2. 没反应
当你ping对方的时候,一直么有反应,卡住了一样:
# ping 10.184.149.249
PING 10.184.149.249 (10.184.149.249) 56(84) bytes of data.
^C
--- 10.184.149.249 ping statistics ---
107 packets transmitted, 0 received, 100% packet loss, time 106545ms
直到按了 Ctrl + C 才告诉你ping不通(或者直接报 Time Out),现象就是包全部都丢了。
大概意思就是:你这个国王,派出小兵后,一直鸟无音讯,你望眼欲穿啊。。特别令你难过的是,你都派出一堆小兵了啊 T_T~
这种情况就是大家经常遇到的为ping不通的问题,特别是云计算平台里面。基本问题你大概也猜到了,要么你的小兵没能到对方,要么就是对方是回访使者没能回到你这里。那什么情况会导致你的小兵不知道跑哪里去了呢?这种问题,从本机视角是很难发现为什么不通的,也很难知道你的小兵到底跑到哪里被 干掉了,毕竟本机和目的之间可能有很多的中转站。
怎么定位呢?其实也很简单,那就是开启上帝模式,从全局角度去看看小兵到哪里了。直接派上帝(这里就是你自己了)去对方目的地盯着(抓包),看看“喂”报文有没有过来。
有两种情况,分别讨论:
1. 目的地没有收到“喂”报文
2. 目的地收到了“喂”报文
2.1 没有收到“喂”报文
如果目的地没有收到ICMP报文,但是有收到ARP请求(“喂”使者的探路哨兵,ARP章节会介绍),那说明网络连接是好的,只是ICMP不通,八成就是网络安全组把ICMP报文给ban了。
如果目的地很安静,什么都没有收到。那么咱们只能把上帝再往前移一移了,放到中途的中转站看看咱们的这个“喂”使者有没有到达中转站。找出最后能到达的中转站,然后再从这一站开始重新ping目的地。
2.2 有收到“喂”报文
如果收到了ICMP报文,那么说明来的路是通的,只是回去受阻。那你就反过来从目的地开始ping一下对方嘛,这个不就是回到了上面提到的定位方法了么。
有人会问,有没有可能A->ping->B的时候,B能收到报文,但是响应回不来。反过来从B->ping->A,就是通的。或者B->ping->A的时候,同样是报文也能到A,但是响应回不到B。
当然有这种情况了,而且经常遇到,A可以ping通B,B却ping不通A。这种情况一般都是网络安全组的设置导致的。(特别在云计算平台中)安全组大都涉及iptables的规则。所以这里就得分析iptable表对报文的丢包统计,把导致阻塞的那条安全组规则放通就可以了。iptables介绍见后续对应章节。
3. 目标不可达
ping目标的时候,直接结果就是不可达。
# ping 172.17.10.1
PING 172.17.10.1 (172.17.10.1) 56(84) bytes of data.
From 10.120.175.166 icmp_seq=1 Destination Host Unreachable
From 10.120.175.166 icmp_seq=2 Destination Host Unreachable
这个也容易遇到,但其实非常容易解决。这个错误原因就是路由不通,要么是本机路由不通,要么就是中转站的路由不通。
大概意思就是:你这个国王,派出小兵后,虽然期待的对方使者没出现。好歹你的小兵回来了,然后跟你一把眼泪一把鼻涕哭诉:已经走了很多的路,战胜了多少的艰难险阻,但是没能完成出使任务有多么的惭愧。然后求你这个表面上是国王,实际上只是程序猿的家伙去定位一下。
好歹,你大概知道在哪个位置开始不通:
如果是本机直接路由不通,那消息就是:"Destination Host Unreachable,"
如果是中转站路由不通,那消息是:"Reply From < IP address >: Destination Host Unreachable,"
你直接到中转站去ping目的地,中转站就是上面的<IP address>,然后看看为什么路由不通。该中转站后面可能还有很多的中转站,你这个上帝要辛苦一下,把一路上不通的中转站都找出来,加上合理的路由。
二、总结
ping不通?先看路由!路由肯定没问题,那就是安全组搞怪喽!
怎么定位?开启上帝模式,到处抓包判断“喂”到哪里了~
作者:tsjsdbd