天天看點

關于虛拟機的通訊原理

前段時間,與一哥兒們讨論這個問題的時候,讓人挺糾結的。自己抽空分析了一下,下面是學習筆記:

本機環境: Windows XP SP3 (IP:192.168.1.100 後續用真實機代替本環境)

虛拟環境: VPC2007 (Windows Server 2003   IP:192.168.1.200 後續用虛拟機代替本環境)

抓包軟體: OmniPeek V5.4

(注意:虛拟機與本機要在同一個網段,不然會ping不通,另外在端要先運作arp -d 指令清空ARP緩存.... ^_^)

     記得我以前在無憂網客聯盟論壇裡面 學習CCNA/NP時,看過一些關于以太網的基礎知識。畢竟在以太網中傳輸資料必須要靠唯一的MAC位址來識别最終的目标計算機。簡單的來講,在LAN中,如果一台計算機要與另一台計算機通訊傳送資料包,那麼必須先要檢查自身ARP緩存中該IP位址的MAC位址,如果MAC不存在,就會在廣播網裡面發送一個ARP請求,再根據ARP資料包找到該計算機的MAC位址,待MAC位址比對确認,才開始最終的傳輸。

     (當初就怎麼沒想過LAN資料包是如何到達虛拟機的? 囧......)

1、設定OmniPeek:

這裡選擇IP協定:

2、清空本機ARP緩存:

再打開cmd(從本機ping虛拟機) ,待清空後點選start開始捕獲,如下圖:

3、分析資料包

     既然能ping通,當然首先是捕獲一下本機的ICMP協定資料包,看看有沒有産生真正的資料包。于是用OmniPeek抓包分析一下,果然産生了“真實”的ARP、ICMP共計4條資料包:

     (這裡“真實”一詞之是以打個引号,是因為......留個疑問,後面再做解釋吧!)

     先打開ARP請求的資料包,因為之前運作了arp -d 指令清空了ARP快取記錄,是以才會産生出ARP請求的資料包:

     再看看ARP回顯的資料包,此時目标位址與源位址都已經得到:

     再看ping程式産生的ICMP資料包,先是請求(這裡ICMP Type 表示請求或回顯的标志):

     再看ping程式回顯時資料包:

     這些資料包,總體看來似無任何“異常”,從ARP到ICMP一路都順暢與規矩,仍然發現不了什麼問題。

     帶着疑問始終不解,于是請教了網絡群裡面老兵,他告訴我VPC/VM虛拟機裡面一般會有一個獨立的服務或驅動在模拟一塊虛拟網卡。于是在微軟官方某大牛的部落格 中找到了這樣答案,大緻意思是這樣的:

1、采用NDIS過濾驅動,基于VPC或是Virtual Server的虛拟網卡都是模拟了一個虛拟擴充卡裝置,該虛拟網卡的MAC位址都是以00-03-FF開頭;

2、每個一個虛拟機都會建立一個預設的虛拟網絡擴充卡(最多隻能虛拟建立四個);

3、在安裝完VPC之後,會在系統中多個服務或驅動:Virtual Machine Network Services,這個服務很強大,它負責資料在虛拟網卡和實體網卡中傳遞。

     依靠Virtual Machine Network Services,實體網卡會處于一種XXO的狀态,它不光會接收投遞到其真實MAC位址的資料,同時還會接收投遞到虛拟網卡MAC位址的資料,經過此一步資料彙總,然後再依據各個MAC位址,資料投遞到相應MAC的網卡之上,不管資料是投遞到虛拟機還是真實本機,反之亦然。

     于是用巨盾的程序工具,果然找到了這樣一個驅動:

     于是終于搞清楚了,為什麼能ping通虛拟機了!!!

     關于VM的話,相信也是類似的“原理”吧,它帶有特殊的程序、特殊的服務或許特殊的驅動,做些“特殊”的事....有興趣的朋友不妨你自己試試!

     (由于鄙人的老本本硬碟空間很“寶貴”,我就不試了。自己一直沒用VM,即便“能省就省”吧.....)

繼續閱讀