解决VMware 7虚拟机用无线网卡虚拟机ping不通主机的问题

我用的是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)。

 

作者:e3399 (CSDN专栏)

 

 

注:搞了一上午,终于解决了,其实只要搞懂了桥接,NAT的原理,在前进中摸索,就会柳暗花明的。。。在此感谢原文作者解惑。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值