一天,有同事反馈,她的测试机房的pc192.168.206.221无法ping通楼下办公区域的pc192.168.207.54,跨网段,回显time out,但楼下的207.54能ping通206.221,问怎么回事?

       

        ping是icmp层导通性检测的命令,就是ip层a主叫发出一串字符串封装在icmp层中发出一个ping的request消息给对方主机b,携带一串字符,对方主叫b收到后,把这串字符串反射回来ping的reply消息给a,a收到后若字符串和发出的一样,就显示导通,并显示收到的时间间隔。这样来证明网络ip层是可达的。但ping的request发出后,不可能永远等下去,有一个默认的定时器,windows是默认5s,linux是3s,超时收不到后,主叫a回显time out。

    a能ping通b,a到b的前向路由没有问题,b收到的a的request消息,并按b的路由会给a响应reply消息,说明a的前向和b的后向回程路由都没有问题,而b主机ping不通a,b的ping的requst一定能到达了a,因为b的ping的reply消息a都能收到,这个两个消息在ip层的处理方式是一致的。唯一可能区别是a设备,a发出request是a主动发出,防火墙对设备主动发出的消息的回包是放行的。而a收到b主机的ping的request是被动的,外部主机b发起的,有可能防火墙对外部发出的包有拦截过滤的效果。所以单向能ping通极大的可能性就是防火墙拦截导致的。

     根据上面的对ping过程的分析,我们可以把ping分为前向源设备a发出ping的request消息,经过路径到目的设备b的前向过程。和b收到a的ping的request后选择路径把reply消息返回a的后向过程。time out就是有了前向没有收到后向消息。判断问题就要根据前向b是否收到,后向是否发出来判断解决问题出在什么地方?

      ping出现time out的可能原因有这几种:

首先,目的的网关是有目的设备的mac地址的,否则目的网关会发目的主机不可达给源设备。

目的设备没有收到ping的request(防火墙拦截,或者根本没收到);收到ping的request,但没有路由,或者路由不是源进源出;收到ping的request消息,也回了ping的reply消息,但回给另一个mac地址,不是request来的mac地址。所以有以下可能性:

 1、目的设备防火墙拦截的ping的request消息,导致高层无法收到,所以不回ping的reply消息。

 2、跨网段环境中存在ip冲突,目的网关的mac地址缓存被更新。导致网关把ping的request消息发给其他mac地址,导致目的设备根本没收到ping的request消息。

3、也与目的主机的路由相关,没有回程路由,如同网段可能掩码错误,没有配置网关的情况。

4、回程路由指向其他ip地址,导致源ip没有收到ping的reply消息。

5、ping消息的入接口和回程出接口不是设备的同一接口等等原因造成。

     如a能ping通b,而b反向ping不通a,证明a的路由没有问题,他的发出的ping的request包能够到达b,而且b的ping的reply回包a也能收到,b的出路由也没有问题。那就排除了2,3,4,5的可能性了。只有1防火墙这种可能性了。

    ping消息的抓包过程如下:

   上图是源主机侧的ping的流程,而目的方的回包流程是首先icmp层收到ping的request消息,然后根据目的ip去查路由表,根据路由表确定下一跳的ip地址,去查缓存中是否有下一跳ip的mac地址, 有就发回包,没有就arp请求,请求到后,就发出ping的reply包。请求不到,就不做处理。

   这是ping的过程,是否能收到回包,和目的ip是否收到ping的request消息,是否有回程路由,回程路由是否正确有关。

源主机ping消息发出的流程图:

目的主机收到ping的request的处理流程图 :

    192.168.205.201去ping192.168.211.3,

 

     windows下一次ping命令发出四次ping的requst消息,收到reply的前提下,间隔一秒发出一次。 下图是ping后出现time out的情况:

     time out就是每5s发出一个request消息,发四次。 

      看她的ping消息,发现是time out,time out一般是ping的request消息发出了,在规定时间内没有收到ping的reply消息后显示的。而且上网正常,排除网路由错误问题
    考虑到这种单向能通的现象,一般要么是存在ip冲突,206.221的ping的request的消息,在192.168.207.0网段的网关转发给了错误的mac地址,导致207.54没有收到,要么是207.54收到没回,防火墙拦截了ping的requst消息,导致应用层收到不到。要么收到了,没有回包,没有回程路由或者回程路由路由指向其他地方,回包指向其他地方。总之,在目的机子上抓包看是否收到包?
      远程到自己楼下的207网段pc192.168.207.25去ping192.168.207.54,发现超时,超时一般都是ping的消息已经发出,查看arp -a,发现有207.54的mac地址,同网段和跨网段现象一致,排除ip冲突的情况,和回程路由问题。让同事检查防火墙,反馈防火墙状态是打开的,关闭防火墙后,ping正常。问题解决。
    其实这种问题,最好利用wireshark或者windump检查目的pc是否收到包,没收到,检查经过的路径的节点设备,收到了,没有发出回包,那一定是的防火墙规则拦截了ping的request消息(抓包是驱动从mac层抓取,防火墙工作在网络层,所以抓包能抓到,但被拦截后,应用层没有收到消息,所以不会回响应)。若回包了,检查回包的目的mac地址和来包request里的源mac是否一致,不一致就检查回程路由。一致就检查经过节点,看哪一级把包丢了。可以把windump拷贝到系统path默认的路径下,然后在dos下进行执行。windump执行起来比wireshark方便快捷一些。对一些简单看是否收到包,比较容易一些。语法和tcpdump基本一致。

    防火墙打开方法:

可以win+r运行firewalld.cpl

 或者打开网络和共享中心里的windouwsf防火墙

 

   看入站规则: 

 

       同网段,ping后显示time out超时,检查arp -a有对应的目的ip的mac地址,证明网络层的ping的request消息已经发出,

而且已经到达目的主机的网络,要么没回ping的reply消息,要么回到其他地方去了?前者检查对应主机的防火墙是否设置,

禁止了对ping的request进行响应?放开就行了或者关闭防火墙。要是防火墙没有问题,就检查路由表,是否因为掩码问题,

判断不是同一网段,没有路由,所以没有回复,或者看掩码不同,配置有网关,由路由表中发给其他地址是否发给其他mac地址?

     

我的一篇三步搞定子网划分方法和范例详解,自觉写的不错,看完掌握子网划分,全网最好,有兴趣可以参考一下。

三步搞定子网划分方法和例题详解_wj31932的博客-CSDN博客_划分子网的方法

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐