近期开始写新的内容,主要是为了解决一些计算机网络小白们的一些奇葩问题和常见误区。
今天来讲一个对于计算机网络大神来说非常简单,但是对于小白来说很疑惑的问题——PING不通的原因问题。
PING命令依托于ICMP协议,是一种很好用的测试网络连通性的工具,想要查看是否可以和一台主机进行通信,ping以下就可以了。
ping不同的原因有很多,对于小白来说,可能认为ping不同的原因就是没有收到对方的reply包,或者收到了路由器等其他设备的端口不可达的应答包,然而,还有一种情况,那就是PING的request数据包压根就没有发送出去!在这种场景下,可能很多小白都会很疑,尤其是尝试抓包解决问题的小白。收不到对方的回复可能是网络不通或者其他的原因,但是为什么我在一个机器上PING一个IP地址,我都抓不到这个机器发送的ICMP request数据包呢?其实,造成这种现象的原因有三种:
1、无法完成目的MAC地址的封装。
我们都知道,网络是分层的。一个数据在产生后,要逐层向下封装,一直到物理层,才会发送出去,而在收到数据包后,也会逐层解封装还原为原来的内容。
ICMP属于网络层的协议,因此ICMP request包的数据要进入链路层进行封装。数据链路层要添加目的MAC地址信息,而如何知道该IP地址所对应的目的MAC地址呢?那么就会查询本地的ARP表项,如果能够查到MAC地址,那么就可以写入该表项中的MAC地址。(注意,这里不一定写入的是该目的IP地址所对应的MAC地址,如果目的IP地址与本地IP地址不是一个网段,那么就会写入网关的MAC地址) 那么如果查不到呢?那就会发起ARP查询,从而查询到该IP地址(或者说是网关IP地址)所对应的MAC地址。那么如果ARP也查不到MAC地址呢?那么这个数据包就封装失败,换句话说,设备就压根不会发送这个PING的ICMP request数据包。
如果使用电脑PING局域网内一个压根不存在的IP地址,就会出现上述情况。
2、没有配置网关
除了上述原因,还有一种情况可能导致PING包根本就发不出去,那就是找不到“路由”。上面的情况是数据包不能完成数据链路层封装,但是也有可能是网络层封装出现了问题。前面我们提到过,如果数据包的目的IP地址不是本网断的IP地址,那么在设备就会把该数据包丢给网关(所谓丢给网关就是在数据链路层封装网关的MAC地址),希望网关能够把设个数据包发送给正确的目的地(因为网关通常是路由器的接口IP地址,而发送给路由器以后路由器会依照自己的路由协议进行转发)。因此,如果一个计算机PING一个局域网之外的IP地址,如果没有告诉计算机网关IP地址,那么该PING包也不会发送出去。
3、找不到路由
还有一种特殊情况,主要是针对路由器。如果使用路由器PING一个IP地址,那么路由器必须有该IP地址的路由,如果该路由器没有目的IP地址的路由,那么也就不会发送该PING包。
以上解释了PING包发不出去的问题,可以看出,想要解决这个问题,就必须对计算机相关网络协议有深入理解。注意,如果您使用华为eNSP做实验,那么因为华为eNSP的小BUG,PING命令的响应有可能存在问题。(关于华为eNSP其他BUG可以参考我的另一篇文章eNSP仿真模拟与实际环境的几个不符点)
还有问题不明白的同学也可以私信我,我也会帮助大家解答。
原创不易,转载请说明出处,原文链接:
https://blog.csdn.net/weixin_40228200/article/details/118197524
计算机网络误区——为什么我的PING包发不出去?
最新推荐文章于 2024-05-05 22:27:23 发布
1777

被折叠的 条评论
为什么被折叠?



