Ping不通问题解决 windows 查看对端MAC地址 ARP -a

发布时间 2023-12-27 14:30:21作者: bailinjun

Ping不通问题解决

 

 

 

Linux查看ARP信息指南(linux查看arp)

 

ARP(地址解析协议)是TCP/IP协议提供的网络层协议,通过ARP可以查看网络层面上当前可连接的本地网络内每个主机的MAC地址。

 

## 查看系统的ARP信息

 

Linux系统中查看ARP信息的方法有很多,下面简单介绍几种常见的查看ARP信息的方法:

 

## 一、使用ARP命令

 

可以使用`arp`命令查看当前系统的ARP信息,例如:

 

$ arp -a

? (192.168.0.4) at e8:4f:b2:ac:f1:45 [ether] on eth0

? (192.168.0.7) at e8:4f:b2:ac:12:81 [ether] on eth0

? (192.168.0.100) at e8:4f:b2:ac:3f:45 [ether] on eth0

该命令会列出系统中当前存在的ARP信息, 以`IP`、`MAC地址`为基础列出该主机网络上所有可用的ARP信息,包括无效ARP表状态。

 

## 二、使用 ip neighbor 命令

 

也可以使用`ip neighbor`命令查看当前可用的ARP信息:

 

$ ip neighbor

192.168.0.4 dev eth0 lladdr e8:4f:b2:ac:f1:45 REACHABLE

192.168.0.7 dev eth0 lladr e8:4f:b2:ac:12:81 REACHABLE

192.168.0.100 dev eth0 lladr e8:4f:b2:ac:3f:45 REACHABLE

该命令显示的ARP信息会更加详细,包括ARP状态(REACHABLE等)、设备、物理地址信息,为系统管理者提供了全面的ARP信息查看。

 

## 三、使用/proc/net/arp

 

系统内部通常也会保存ARP信息,可以在文件/proc/net/arp中查看,该文件可以直接cat或者vim查看:

 

[root@localhost ~]# cat /proc/net/arp

IP address       HW type     Flags       HW address            Mask     Device

192.168.0.4   0x1         0x2         e8:4f:b2:ac:f1:45     *        eth0

192.168.0.7   0x1         0x2         e8:4f:b2:ac:12:81     *        eth0

192.168.0.100 0x1         0x2         e8:4f:b2:ac:3f:45     *        eth0

这种方式也可以查看当前系统的ARP信息,但是该文件不会实时显示,需要重新加载配置文件后,才会显示最新的ARP信息。

 

 

 

 

 

目录

1、ping命令的作用:     

2、Ping的概念和原理:

      ping的错误回显的内容与icmp的差错消息相关的,根据回显报错的节点ip和内容,我们能知道那个节点出现问题,什么问题?

       我们知道两台设备要进行通信,必须的组网结构是源设备,源目的接入通信链路,节点交换设备(二层,三层),和相应的中继通信链路,目的设备接入链路,目的设备这些基本的网络要素。ping的过程,这些要素都可能影响ping的结果。      

ping的过程和自身路由表,源和目的设备的接入通信链路二层广播通道是否通畅?访问目的ip的途径路径的节点交换设备路由设置,中继链路的状态,目的点的路由设置,对方设备的状态,目的设备防火墙是否阻止ping的请求消息通过相关等等因素相关。所以我们排查问题从这些因素去考虑排查。

  3、 局域网内网中ping不通,有下面几种情况:

3.1、  局域网内网中ping不通,目的ip和源ip是同一网段的情况

3.1.1 ping显示无法访问目的主机的可能原因:

      3.1.3 对应情况1直连路由没有的情况范例:

3.1.4 对应情况2arp请求发出没有响应的范例:

 3.1.5 对应情况4掩码配置错误的范例,见下面这个连接:

3.2 若是同网段,ping后显示time out超时

3.2.1 可能原因:

3.2.2 排除过程:

3.2.3 情况1的走默认路由发出ping的request范例:

3.2.4 情况2目的设备防火墙拦截ping的requst进入高层的范例:也可参见下面跨网段“情况a的范例”

3.2.5 情况3没有回程路由的范例:

3.2.6 情况4目的ip的mac地址变化造成问题范例说明:

3.2.7 情况5掩码配置错误,导致没有回程路由的范例:

3.2.8  情况1直连路由没有生成,走默认路由发出的又一范例:

    4  目的ip和源ip不是同一网段

  4.1  不在同一网段有几种情况:

   4.2  排查流程:

4.3 情况1没有对应路由的范例:

   4.4  情况3目的网关发出arp请求没有得到响应的范例:

4.5  情况4,显示time out,有下面几种可能性:

4.6  排查过程:   

   4.7 情况a目的设备的防火墙拦截icmp消息进入高层的范例:

4.8  符合b没有回程路由的范例:

 4.9   符合情况b回程路由指向另一个ip地址的情况:

  4.10  符合情况c反向路由检测开启,源入口和路由出口不在同一网卡的范例:

   4.10.1  另一种关闭网卡的反向路由检测

  4.10.2  添加主机路由的方法:

5  结论:


1、ping命令的作用:     

        为什么要用ping命令?是为了在局域网内验证两个节点间路由,数据的导通性,能相互ping通就代表前后向路由均可达,但这是充分条件,有的特殊情况下,ping不通,但业务的tcp或者udp消息依然是可达的。当网络出现故障的时候,可以用这个命令来预测故障和确定故障地点。

    ping不通这类问题,要根据ping的回显结果来处理,根据打印结果的ip地址和错误原因来确定故障。

    因为ping的结果不外乎三种:1,正常导通回包;2,回显icmp差错;3,超时没有响应,显示time out。

       这三种在windows里都有回显,所以我们根据回显可以判断出问题出在什么地方?

       主要是icmp的错误和time out两种问题,icmp错误,我们可以根据打印消息的发出消息的ip是本机ip还是经过节点ip来确定是本机本机问题还是节点问题?

      time out一般是目的侧问题多一些,也可能节点问题。

2、Ping的概念和原理:

       ping命令使用的是检测源和目的ip间导通性测试的icmp协议,属于三层网络ip层协议。源主机ping发出含一串数据的包(如123456789abcde之类)request消息,封装在二层上,对方收到后,把这串包原路反射送回来,源pc收到后,认为是对方可达。所以它涉及二层的mac地址和ip层的交互。当对方存在问题时(ip地址不存在,没有路由等),对方的ip或者经过的网络节点会返回icmp的差错消息给终端源ip。使用的端口和ip要根据节点的路由表进行确定,发起方根据返回结果来产生回显,若在ping的request消息发出,等待一段时间,win默认是5s,没有收到回复,发起方显示超时time out(linux环境默认定时器是1秒,这种情况没有任何显示)。

 

 

      ping的过程,无论是源主机发出request请求还是目的主机回reply的过程,都是首先根据目的ip查找本地路由表,确定下一跳的出口,然后根据下一跳的ip在arp缓存里确定是否有下一跳ip的mac地址,没有就发出arp请求去查找。有的话,二层和ip层组包发出。

       具体过程是,输完命令后,根据目的ip,先查路由表,看目的主机ip是否走直连路由,是就去检查mac地址缓存表,看是否有该地址的mac地址缓存,没有的话,是用直连路由的一个本机接口去发出请求目的ip的mac地址的arp请求request消息,收到arp响应后,用这个mac地址封装二层数据,发出icmp协议的ping请求消息。mac地址缓存里有,直接封装ping的request消息。没有得到mac地址,不发出ping的request消息,回显目的主机不可达。而没有错误时,组包发出,目的主机收到后,同样的过程根据收到包的源ip进行查路由表,查mac地址缓存,发包的的过程。

源主机处理ping过程的流程图:

 

节点处理ping的request的过程:

 

 目的设备处理ping的request的流程:

 

 如下图:

192.168.205.201/24去ping同网段ip192.168.205.28的wireshark流程,无需三层节点设备的参与

 

      查路由表发现不是直连路由和静态路由的话,走默认路由的话,就去查是否有默认网关的mac地址,没有去请求网关的mac地址,有就直接封装ping的request消息。若目的主机收到后,由于回程路由缺失原因,防火墙原因在网络层拦截icmp探查消息,入口或者出口不一致等,没有按原路返回,或没有回复,主机在等reply超时后,会有相应的超时显示。若目的网关未找到目的主机,或者经过的节点设备发现有错误,无法到达目的主机,会选择正常时的回复接口ip给源主机发出一个icmp错误消息,提示源主机。源主机会回显错误提示。网关发给转发给目的主机,目的主机收到后,同样走查本地路由表,查下一跳ip的mac地址,二三层组包发出的过程。

 如下图:192.168.205.201/24,gw192.168.205.1去ping192.168.211.2的过程,需要三层交换节点设备的参与

 

   

      ping的错误回显的内容与icmp的差错消息相关的,根据回显报错的节点ip和内容,我们能知道那个节点出现问题,什么问题?

     ping时常见的icmp错误主要有下面几种:

     目的主机不可达  destnation host  unreachable          目的网络中找不到目的主机

     目的网络不可达  destnation network  unreachable    经过节点没有路由可达,或者经过节点设备存在acl拦截

     传输失败,一般错误  transmit failed. General failure  源设备中没有默认路由

     ttl传输中过期    ttl exceeded           目标ip网段在环境中存在路由环路

     路由重定向   icmp redirect              路由错误,比如目的ip应该走直连路由却送到网关上去了

       我们知道两台设备要进行通信,必须的组网结构是源设备,源目的接入通信链路,节点交换设备(二层,三层),和相应的中继通信链路,目的设备接入链路,目的设备这些基本的网络要素。ping的过程,这些要素都可能影响ping的结果。      

ping的过程和自身路由表,源和目的设备的接入通信链路二层广播通道是否通畅?访问目的ip的途径路径的节点交换设备路由设置,中继链路的状态,目的点的路由设置,对方设备的状态,目的设备防火墙是否阻止ping的请求消息通过相关等等因素相关。所以我们排查问题从这些因素去考虑排查。

     

  3、 局域网内网中ping不通,有下面几种情况:

    不通就是有icmp差错报告或者time out超时,最常见的icmp差错是目的主机不可达,所以本文我们主要研究目的主机不可达和time out这两种情况。

    

3.1、  局域网内网中ping不通,目的ip和源ip是同一网段的情况

   同网段ping就两种情况,一种是ping的request没发出去,另一种是ping的request消息发出去,但没有收到回包响应,超时time out。

一种情况是目的ip和源ip是同一网段的,ping的结果是“无法访问目标主机” ,属于ping的request没有发出,arp查询目的ip的mac地址失败。

是否是同一网段的判断是目的ip与所有直连路由项的掩码去与运算,结果和所有直连路由的网络地址去比对,一致就是同一网段。

3.1.1 ping显示无法访问目的主机的可能原因:

1 、网卡的物理链路状态down了,没有生成任何直连路由,导致没法arp请求包,用原来本机配置的ip回显目标主机不可达。

2、对方是否开机?ip是否存在?开机的话,目的主机是否接入正确的对应广播域里?对应交换机有vlan划分的话,检查硬件接口是否在同一vlanid里,是否在同一广播域里?

3、有跨交换机组网相同的vlan的话,检查经过节点设备对应的中间trunk链路是否允许对应vlanid通过?接口是否划入同一vlanid里?

4、源主机是否掩码错误?走直连路由是否正确?是否应该走默认路由,而走了直连路由。

        3.1.2  ping具体排查过程:

首先应该用ifconfig/all查看对应网络连接的物理状态,当没有媒体已断开的显示时,这时用arp  -a | findstr  ip地址,看是否获取到对应的ip地址的mac,没有的话,应该是ping命令执行时,发出的请求对方的mac地址的arp消息没有得到应答,此时根本没有发出ping的request消息。这时,要检查对方是否开机?ip是否存在?有跨交换机vlan的话,检查对应的中间trunk链路是否导通?arp消息是否能到达目的ip侧?对方是否收到arp请求消息?走直连路由是否正确?(应该走默认路由,而走了直连路由,不正确的话,检查路由表是否存在掩码之类错误)最好能在对方pc上抓包,看arp请求消息是否到达目的地址的主机,再逐级排查。

      3.1.3 对应情况1直连路由没有的情况范例:

一种特殊情况是,pc双网卡,一个网卡配置静态ip,有网关,另一个网卡无网关配置,当此有网关的网卡链路状态是down的,查看路由无对应任何直连路由生成,这时ping就会出现目标主机不可达的现象。也查不到对应ip的mac地址,抓包所有的网卡,无任何激活的网卡,无任何arp发包出去。

 

3.1.4 对应情况2arp请求发出没有响应的范例:

         ping的过程,同网段的查询路由表,发现是直连路由,查询arp缓冲没有发现目的ip的mac地址,就用直连接口的ip作为源ip去查询目的ip的mac地址,如果得到响应,会用此mac地址作为目的mac组成icmp请求包发出。没有响应,arp请求消息会发出多次在ping的过程中。

如下图:我们用windump抓包,去ping一个不存在的地址。

cmd下用ipconfig/all去查看网卡的信息如下:

 

  去ping一个ip为192.168.1.105去看看结果如何?同时用windump进行抓包观察:

 

arp请求消息多次发出,ping的回显是自身ip的回复:无法访问目标主机。

 正常的ping消息有响应的抓包如下:

 

     

 3.1.5 对应情况4掩码配置错误的范例,见下面这个连接:

ping回显无法访问目的主机,资源无法访问问题解决过程_wj31932的博客-CSDN博客_ping无法访问目标主机怎么解决https://blog.csdn.net/wj31932/article/details/108999891

     

3.2 若是同网段,ping后显示time out超时

3.2.1 可能原因:

1、网卡物理状态出错,源设备是否双网络,仅一个网卡有网关,没有网关的设备物理状态down导致发给默认路由。默认路由转发包到路由器wan口发出,没有回包,导致time out。

2、检查目的设备防火墙,是否防火墙拦截了ping的requst消息进入设备高层。

3、目的设备子网掩码的设置错误,导致没有回程路由。

4、环境中存在多网卡设备接在同一交换机下,用错误的mac地址回答请求本机其他网卡ip地址的arp请求消息,或者广播域存在ip冲突,回答arp请求,导致源设备的request消息发给了错误mac地址,而没有回包导致time out。

5、目的设备的掩码和默认路由设置有问题,导致认为回包走默认路由,发给了另一个mac地址。

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

3.2.2 排除过程:

       ping显示time out,说明二层 arp消息已经到达目的主机的网络,而且源设备arp -a能查到对应ip的mac地址,证明arp请求响应是成功的。ping的request消息已经发出,要么目的设备没回ping的reply消息,要么回到其他地方去了?多网卡时,首先ipconfig/all检查各本地连接的状态?然后检查对应主机的防火墙是否设置,禁止了对ping的request进行响应?放开防火墙的ping request设置,或者关闭防火墙。要是防火墙没有问题,就检查路由表,看回程路由是否生成?是否正确?是否因为掩码问题,判断不是同一网段所以没有回复,或者看掩码不同,配置有网关,由路由表中发给其他地址是否发给其他mac地址?

3.2.3 情况1的走默认路由发出ping的request范例:

  一种情况特殊情况是双网卡,一个网卡配置ip地址,但无网关,一个网卡配置有静态ip,有网关。当链路状态down,媒体状态依旧断开时,这是ping显示time out,是走有网关的网卡发出,发给默认网关,网关找不到对应网段,发给上级设备的wan口走广域网出去,广域网没有回应,导致显示time out。

 

 

当链路状态正常是,ping 172.31.234.1时,显示可达

 

当端口网线拔掉,媒体状态已经断开

 

 

 

3.2.4 情况2目的设备防火墙拦截ping的requst进入高层的范例:也可参见下面跨网段“情况a的范例”

这时的处理方法,arp  -a里会显示有对方mac地址,抓包会有request发出,若在目的主机上抓包,能看到收到ping的request消息,检查路由这些都没有问题,这时需要检查防火墙设置,若存在防火墙,就在目的设备上防火墙放开ping消息的拦截通过或者关闭防火墙。

下图关闭防火墙的方法:

 

 

或者在防火墙设置里放开对ping的request消息通过

 

3.2.5 情况3没有回程路由的范例:

 对方掩码设置255.255.255.252造成ping不通time out(回程选路认为不是同一网段,没有找到回程路由)

公司一个设备有问题要进行复现,拿到后不知道ip地址,通过串口看配置文件后看到管理ip是management-port ip address 172.26.0.214 255.255.255.252,看到这里pc配置一个b类地址,172.16.0.145/16的ip后去ping。发现不通,显示time out。

 

 

 

奇怪,查看arp发现对方的设备已经给回arp请求了,用windump抓包看看。

 

发现对方arp响应已经发出,pc的ping的request消息已经发出,但icmp的reply消息没有,

问题在设备侧,为啥没回ping的reply消息?串口登录设备,查看设备的路由:

 

发现直连的outband的路由是172.26.0.212/30,就是掩码是255.255.255.252,就是掩码是在第四段变化,ip与掩码得出网络地址。网络地址算法如下:

172       26   0    214           第四段 1101 0110                                                           

255       255  255  252           掩码   1111 1100

172       26   0    212           结果   1101 0100         网络地址是172.26.0.212,就是路由表里的显示

     设备收到172.26.0.145发来的ping的request包后,把172.16.0.145与路由表里掩码255.255.255.252与的结果是172.16.0.144,显然不上同一网段的地址,所以设备snmp口没有响应。

172     26      0       145    第四段是   1001  0001

255   255   255      252    掩码是      1111  1100

172     26      0        144     结果        1001  0000       结果是172.26.0.144,显然路由表里没有符合的路由

设备的掩码是30位,主机位是2位,所以网络地址172.26.0.212,广播地址是172.16.0.215,可用ip访问是172.26.0.213和172.26.0.214,设备用了214这个地址,所以pc应该配213这个地址。

 

重新去ping,结果如下:

 

抓包显示如下:

 

可以看到arp消息均正常,ping的包正常,ping的序号请求,应答序号正常。

问题解决。

3.2.6 情况4目的ip的mac地址变化造成问题范例说明:

      这种有的情况是有的多网卡设备配置不同网段的ip地址,但被接在同一交换机下,多网卡的linux系统里有关于arp的设置,有的会用自己的mac回答本查找设备其他网卡ip的arp请求,导致ping发给错误的网卡,而的ip不是ping的request的目的ip,所以就不处理,导致time out。但过一会,当新的arp缓存老化后,可能源设备获得正确的mac地址,这时又能ping通,反馈到实际的业务就会出现,时通时断。这种情况很少见,在个别嵌入式设备里存在。

    ip冲突也是类似,当源设备获得错误mac地址,也会出现这种time out现象,长ping会出现时通时断。

3.2.7 情况5掩码配置错误,导致没有回程路由的范例:

    Pc1的配置192.168.205.201/24gw192.168.205.1,pc2的ip192.168.205.99。发现ping不通,显示time out。

 

查arp缓存

 

Windump的抓包:

 

在192.168.205.99上的查询ip和掩码

 

发现ip是192.168.205.99/25,gw是192.168.205.22

查询路由:

 

Windump抓包:

 

发现有reply的回包,但是另一个ip地址。

Arp查询发现:

 发现192.168.205.201来的ping包被发给了192.168.205.22它的网关。

为什么会这样?

  因为掩码是25位,就是第四段是128,201&&128=128, 99这台pc认为的同网段的ip是192.168.205.1~192.168.205.126,所以pc收到pc1的包后,pc1的ip与自己直连路由表的掩码255.255.255.128与的结果是192.168.205.128与直连路由192.168.205.0不一致,所以不走直连路由,而符合默认网关0.0.0.0/0.0.0.0的路由,所以发给192.168.205.22的mac地址,导致不通。

 

 

抓包看是如上图。

3.2.8  情况1直连路由没有生成,走默认路由发出的又一范例:

     pc双网卡,一个集成网卡配置有网关是192.168.205.201/24,gw192.168.205.1,一个usb网卡配置有172.31.232.145/24,无网关。现在去ping172.31.232.100,发现time out。

去pc的arp缓存查询如下:

cmd下ipconfig/all 查询集成网卡的mac地址和ip地址如下:

 

而应该从usb网卡上发出

 

 查看路由关系

 

 查看发现172.31.232.0/24的直连路由没有生成,如下:

 

  检查usb的状态发现网线掉了:

 

插上后

 

 

 

 

     

    4  目的ip和源ip不是同一网段

  4.1  不在同一网段有几种情况:

  1、ping的request消息没有发出(没有配置网关,没有生成默认出口路由)

  2、用本机ip回无法访问目的主机,源设备的掩码配置错误,应该是走默认路由走了直连路由。

 3、ping的request消息发给网关,但网关回了icmp错误消息,可能是访问目的主机失败,这有可能是对方未开机。或者对方开机未接在对应网络上,网关arp广播消息没收到,或者其他网络故障错误。

  4、ping的request消息发给网关,但定时器超时后,没有收到响应包。这可能是对方防火墙,对方回程路由,路径上有问题。

   4.2  排查流程:

  ping命令发出后,提示是其他ip回复的(如网关或者一个节点ip)“无法访问目标主机”,跨网段ping消息,没有直连路由的话,会首先检查是否有配置默认网关,有的话,检查arp缓存是否有网关的mac地址,没有的话,会发出arp查询网关的mac地址,有的并且响应后,直接组包发给网关的mac。出问题时:应该去检查路由表是否有缺省的路由?检查arp表是否有网关的mac地址?没有获得网关mac,检查到网关通道是否通畅?还有一种情况目的ip是不存在的ip,经过目的ip网关给回了主机不可达的icmp消息,过程是这边ping的request消息发到目的ip的网关,目的ip的网关没有对应的ip的mac地址,就会用自己的ip和mac发起arp查询,没有得到响应的话,就会向源ip地址发出host unreachable的icmp消息。源ip就显示无法访问目的主机。

4.3 情况1没有对应路由的范例:

   

检查路由表若没有默认路由,就得添加对应的网关地址,系统自动生成默认路由。这时,直连路由是有的,网卡全部是down状态,直连路由也没有生产,ping就会显示目标主机不可达。

   4.4  情况3目的网关发出arp请求没有得到响应的范例:

   这个情况类似同网段的情况,检查是否ip不存在,未开机,未接入对应vlan广播域?或者存在arp代答错误或者ip冲突?

   模拟过程:用pc192.168.205.201(网关是205.1)去ping局域网内另一主机192.168.206.10(网关206.1,192.168.206.10此主机不存在)的情况

    发现不是自身ip192.168.205.201回复的“无法访问目的主机”,而是一个网关的ip192.168.205.1回复的。这说明走了默认路由。

   

用wireshark抓包发现,205网段的网关192.168.205.1发给192.168.205.201一个主机不可达消息。

 

发现网关给回了主机不可达,交换机上查询主机地址,发现没有此主机。

在206网段的其他pc上抓包,过滤对应c0-a8-ce-0a的arp广播消息,能发现网关每隔一秒发出一次arp的广播查询消息,因为没有响应,所以会发出多次。

 

Arp查询没有成功,所以交换机给源主机回主机不可达的icmp消息。

 

4.5  情况4,显示time out,有下面几种可能性:

a、检查下防火墙,是否拦截了ping的请求消息。

b、检查经过节点的路由是否正确,或者是否有回程路由。

c、反向路由检测,回程路由的硬件网卡出口和ping的request的入口网卡不是同一个?

d、交换机vlan对应的接口全部down了,导致vlan状态down,vlan的对应路由没有生成。导致节点从路由器wan口发包到公网上去,而没有回包导致time out?

 e、还有极端情况就是跨网段,环境中有突发性大包,超出某一个节点的传输最大速率,造成转发端口丢弃大量的包。现象会出现时通时断,某一段时间ping显示time out。这种情况可以查看交换机的收发情况,是否有大量丢弃的包。如有查找源头处理。见:ping时通时断,显示有time out问题跟踪过程_wj31932的博客-CSDN博客

4.6  排查过程:   

若显示time out,表示ping的request消息已经发出,目的ip的网关已经获取到目的ip的mac地址,但ping的reply消息,源主机没有收到。这时应该在被叫侧检查ping的request是否到达,若是windows系统,可以使用wireshark进行抓包,过滤对应源ip或者icmp消息,看是否到达,若到达,看是否有回报发出,有的话,检查回程路由,看回包的mac地址是否和ping的request来包是否一致,不一致,检查回程路由和节点回程路由。没有回包,检查防火墙和回程路由。防火墙针对进入系统的包,拦截了ping的request消息,导致上层收不到request而没有回包。

   4.7 情况a目的设备的防火墙拦截icmp消息进入高层的范例:

pc192.168.205.201/24,gw192.168.205.1去ping一台内网的pc192.168.206.110的情况:

  

若没有到达目的ip地址,就检查经过节点的路由是否正确,能通道是否导通?

    在目的主机上抓包看到,包已经到目的主机,但目的主机没有回。

  检查网关的mac地址和路由表里都正常,检查防火墙发现防火墙开启,关闭后正常。

 

 

或者在防火墙-高级设置-入站规则-文件和打印机共享(回显请求icmpv4-in)允许就行,允许ping的request探查消息通过。

 

 

关闭防火墙后正常。

为啥能抓到包?是因为抓包是利用驱动在mac层完成,而防火墙是在ip层工作,所以抓包看到ping的请求消息,而ip层以上没有收到,自然不回响应。

4.8  符合b没有回程路由的范例:

如图,ping 172.103.201.105一台内网centos7.0的服务器。

 

在目的主机侧执行tcpdump的结果tcpdump  -i em1  -nne icmp:

 

Ping的request已经收到,为啥没有回?检查防火墙是否开启和回程路由是否存在?

 

防火墙未打开,检查回程路由是否存在?

 

发现没有对应的回程路由,192.168.205.0[a1] 。添加后观察:

 

添加路由后,ping观察。

 

 

 4.9   符合情况b回程路由指向另一个ip地址的情况:

    是源设备的路由指向错误,指向了错误的网关,导致ping发包发的错误的地方,而没有回包。

ping大量丢包问题解决过程_wj31932的博客-CSDN博客_ping 丢包

  4.10  符合情况c反向路由检测开启,源入口和路由出口不在同一网卡的范例:

     有人反馈,用192.168.205.201/24去访问sip服务器172.102.201.100,sip消息没有响应包,去ping显示time out,让给解决问题。

 

      已知sip服务器是多网卡设备,centos7.0,eth0配置有ip192.168.205.18,eth2配置ip172.102.201.100/24,gw172.102.201.1。用eth0的ip登录服务器查看:

 

    看到192.168.205.0/24的回程路由是走eth0,而172.102.201.0/24的回程路由是eth2,抓包看一下访问172.102.201.100从那个网卡进来,先tcpdump跟踪一下eth2:

 

发现ping的request包是从17.102.201.1发来,发给eth2的mac地址 20:04:0f:ef:89:d6。

  显然,入包是eth2,而回包走eth0,linux下开启反向路由检测,禁止这样转发。

   一种做法,添加详细的32位主机路由,让192.168.205.201/32指向172.102.201.1,从eth2回去。

   4.10.1  另一种关闭网卡的反向路由检测

 执行下面的命令:

[root@vnf ~]# echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter  关闭所有的网卡的反向路由检测
[root@vnf ~]#  echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter   关闭eth0的检测
[root@vnf ~]#  echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter   关闭eth2的检测

ping的结果如下:

 发现回包的ttl是64,没有经过路由,ttl没有-1的动作,说明发出源是直连路由,显然是走服务器的eth0口出去的。

 

在服务器上分别抓eth2和eth0的包如下:

eth2进,eth0出。

 

 

  4.10.2  添加主机路由的方法:

 

如图:添加一个主机路由,指向172.102.201.1,让从eth2回去。

 

 发现ttl值有变化,tcpdump确定是eth2上收到发出。

 

问题解决。

5  结论:

Ping出现故障时,首先检查ping的request消息是否发出,发出的mac地址是否是确的mac地址。出现time out时,要检查目的主机是否收到request消息,收到是否回了,回的mac地址是否正确?

Ping出现无法访问目标主机时,一般是本机或者网关没有获得对方主机的mac地址,要么ip不存在或者没有开机或者arp消息对方没有收到。Ping出现time out时,是对方没有应答,一般检查防火墙是否打开,或者回程路由是否存在,或者回程路由有误,回包发向了错误的地方。还有的情况是对方是另一个vlan下的ip,当整个vlan接口状态是down的情况下,会受到网关发来的ttl  exceed的回显。没有路由的情况下,也会出现类似的回显。

当在linux环境中执行ping命令时,等待十几秒没有任何回显,一般是time out了,这是检查目的ip是否同网段,是的话,arp  -n看是否有目的ip的mac地址,有就确定了。不是同网段确定是time out,按time  out处理方法进行。

总之:ping不通,要根据回显的发出的ip地址和错误类型判断可能的情况来确定问题,并进行相应的处理。本机ip报告的错误,应该是直连路由,其他网关节点ip报告的错误,应该是跨网段的访问出错了。

   我写的关于子网划分的文章,自觉不错,简单实用的方法,有兴趣可以参考一下。

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

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作

 

 

 

 

局域网网内ping不通的故障解决方法总结

本文介绍利用ping命令回显来解决网络故障的方法,分别介绍常见的目标主机不可达和ping出现time out的可能性和解决方法,案例。分为同网段和跨网段两种情况进行列举。涉及网络知识,wireshark的使用技巧,都是本人在几年维护网络中遇到问题的总结,基本涵盖常见故障。有错误的地方,请大家指正讨论。...