我用的是VMware v7.1.2 build-301548

主机win7通过wifi上网,vmware装了Linux系统,Vmware网络接入模式是:Bridge,主机能ping通虚拟机,但虚拟机无法ping通主机。
但如果主机先ping下虚拟机,虚拟机就能ping通主机了,但过一会又不行。解决方案有3个:

1、起初在网上搜索,有网友说是无线的问题,我换成有线上网,果然解决这个问题了。

2、这是VM7的问题,重新安装VM v8.0.1 build-528992就不会出现这个问题了。真郁闷,原来是VM7的bug

3、另一种解决方法。

近来在看《计算机网络》,终于知道了这个问题发生的原因:虚拟机在尝试将主机的ip地址转换成MAC地址时出错了,故ARP缓存映射表里没有对的主机的MAC地址,解决方法:对主机绑定静态的MAC地址。

[root@localhost test1]# ping 192.168.1.102
PING 192.168.1.102 (192.168.1.102) 56(84) bytes of data.
From 192.168.1.104 icmp_seq=2 Destination Host Unreachable
From 192.168.1.104 icmp_seq=3 Destination Host Unreachable
From 192.168.1.104 icmp_seq=4 Destination Host Unreachable
^C
##查看arp缓存表
[root@localhost test1]# arp -a  
? (192.168.1.102) at <incomplete> on eth0

可以看到,查看arp缓存表,出现了“incomplete”,发生这种情况一般是因为linux系统尝试请求将主机

的ip地址192.168.1.102转换成物理地址时出错了。

然后,我在主机里面ping虚拟机
C:\Users\Administrator>ping 192.168.1.104

正在 Ping 192.168.1.104 具有 32 字节的数据:
来自 192.168.1.104 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.104 的回复: 字节=32 时间<1ms TTL=64

再回到虚拟机里面
[root@localhost test1]# arp -a
? (192.168.1.102) at 48:5d:60:e4:86:ae [ether] on eth0
? (192.168.1.1) at d8:5d:4c:1e:bb:a0 [ether] on eth0

#这时可以看到,虚拟机的arp缓存表里面有主机的MAC地址了,故这时能ping通主机了,但过了一会,ARP

缓存映射表项失效了,故这时再ping主机就ping不通了。
[root@localhost test1]# arp -a
? (192.168.1.102) at <incomplete> on eth0
? (192.168.1.1) at d8:5d:4c:1e:bb:a0 [ether] on eth0

解决方法:先在主机里面查看主机的MAC地址
C:\Users\Administrator>ipconfig /all
Adapter
   物理地址. . . . . . . . . . . . . : 48-5D-60-E4-86-AE
也可以直接在主机里ping虚拟机,然后去虚拟里查看arp缓存表
[root@localhost test1]# arp -a
? (192.168.1.102) at 48:5d:60:e4:86:ae [ether] on eth0
#得到主机的MAC地址
#然后在虚拟机里面手动在ARP表中指定IP地址与MAC地址的对应,类型为static(静态)。静态ARP缓存除

非手动清除,否则不会丢失。
[root@localhost test1]# arp -s 192.168.1.102 48:5d:60:e4:86:ae
[root@localhost test1]# arp -a
? (192.168.1.102) at 48:5d:60:e4:86:ae [ether] PERM on eth0
? (192.168.1.1) at d8:5d:4c:1e:bb:a0 [ether] on eth0

#这时候就能ping通主机了
[root@localhost test1]# ping 192.168.1.102
PING 192.168.1.102 (192.168.1.102) 56(84) bytes of data.
64 bytes from 192.168.1.102: icmp_req=1 ttl=64 time=0.377 ms
64 bytes from 192.168.1.102: icmp_req=2 ttl=64 time=0.307 ms

#无论是静态还是动态ARP缓存,重启启动计算机后都会丢失,故可以在Linux的/etc/rc.local 文件里加

入这条命令,以后开机都会绑定主机IP地址跟它的MAC地址。

@@@@@@@@@@@

参考资料:Guest can't ping host

 

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

ARP(Address Resolution Protocol),即地址解析协议,实现通过IP地址得知其物理地址。在TCP/IP网

络环境下,每个主机都分配了一个32位的IP地址,这种互联网地址是在网际范围标识主机的一种逻辑地

址。为了让报文在物理网路上传送,必须知道对方目的主机的物理地址。这样就存在把IP地址变换成物

理地址的地址转换问题。以以太网环境为例,为了正确地向目的主机传送报文,必须把目的主机的32位

IP地址转换成为48位以太网的地址。这就需要在互连层有一组服务将IP地址转换为相应物理地址,这组

协议就是ARP协议。

在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的

MAC地址。而在TCP/IP协议栈中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP

协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要

一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析

(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
  另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直

接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC

地址,而是一台可以通往局域网外的路由器的某个端口的MAC地址。于是此后发送主机发往目的主机的所

有帧,都将发往该路由器,通过它向外发送。这种情况称为ARP代理(ARP Proxy)。

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐