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