看到网上有这样的问题,ping后发现不通的目的主机不可达怎么是由另一个ip发出?今天抓包探究一下。
首先,目的不可达消息属于icmp消息,属于ip层之上的消息,用来完成差错控制和测试。当ping命令发出后,消息到达对应网关设备,网关去查询arp映射表,当没有查到对应arp映射时,会发出arp查询消息,查询对应ip的mac地址,当查询失败时,网关会生成一个icmp的host unreachable消息发给源主机。发给源主机的过程,就是查询路由表的过程,由正常的回程路由接口的ip发出icmp消息。
下面我们去ping,源主机192.168.205.201,目的主机172.16.74.201。
不通这个是由192.168.206.11回复的无法访问目标主机。
查看抓包:
在172.16.74.201同网段的设备上抓包,发现arp每秒一个,发出了12次查询172.16.74.201mac地址的二层广播消息。见下图:
在目的ip的同网段设备上tcpdump抓包如图:
已知192.168.206.11是一个交换机,登录上去查看mac地址
查看其ip地址,其接口地址有192.168.206.11这个,确定是这个交换机设备发出icmp消息。
查看这个172.16.74.0/24网络下面正常能ping通的设备的路由设置:
确定是这个交换机发出的arp广播消息。
查看其路由
当这个交换机要给192.168.205.201回icmp的destination host unreachable消息时,首先查看路由的,没有找到直连路由,去查默认路由,就是0.0.0.0/0那条,走下一跳是192.168.206.1出去,递归查询192.168.206.1的路由,发现符合第三条192.168.206.0/24这条路由,出口是192.168.206.11,而192.168.206.11是自身的ip地址(图上192.168.206.11/32那条),所以用这个ip发出消息。查看192.2168.206.1的mac地址如下:
下图是目的ip的网关的mac地址:
有映射关系,所以直接组包发出。
镜像交换机的对应接口的包如下:
发现交换机发出icmp是源接口192.168.206.11,ttl是64,mac地址如下图:
192.168.206.11 C850.E966.A9D3;192.168.206.1 C850.E967.FA0C
查看pc192.168.205.201的上级交换机的路由关系:
总结:
- ping显示主机不可达是目的网关没有查询到对应主机的mac地址,要么目的主机未开机,未接线或者其他原因,arp没有到达目的主机。
- icmp差错消息由目的网关发出,发出时查询路由表,源ip采用查询到自身网口的ip发出。
- 网关查询目的mac地址时,需要发出arp查询消息,一般每秒发出一个,发三次arp广播查询消息。