天天看點

vmware的vmnet-概念的解說

vmware本身實作了一個很不錯的虛拟網絡-vmnet,這個虛拟網絡完全可以脫離vmware而存在,我個人十分看好這個虛拟網絡架構,它實質上是在核心實作的一個虛拟的鍊路層網絡,至于它還有沒有其它的組網方式,值得研究。

1.幾個概念:

1.1.Virtual Switch:這是一個虛拟交換機,存在于安裝vmware的真實主機的作業系統核心當中,這個switch提供了多個“插口”,這個交換機是一個鍊路層交換機,也就是說,插到它上面的是“網卡”,可以是虛拟網卡,也可以是真實的網卡,也可以是使用者态的假網卡,隻要這些“網卡”可以收發鍊路層的幀就可以。

1.2.真實網卡:一個真實存在的實體網卡,擁有電氣屬性,一般是一塊闆卡或者是一個晶片;

1.3.虛拟網卡:僅僅實作了真實網卡的接口,上層看來它就是一塊真實網卡,沒有電氣屬性,然而在作業系統級别卻可以看到,比如ifconfig就可以看到,比如vmnet1/8,tap0等;

1.4.假網卡:連網卡的操作接口都沒有實作,僅僅可以構造鍊路層的資料并以自己的方式實作收發功能,在接觸vmware的網絡實作之前,tun驅動的字元裝置實作是一個好例子。

1.5.虛拟網絡:由虛拟交換機連接配接在一起的各個“網卡”組成了一個虛拟網絡,這是一個三層網絡(比如ip網絡),是以每存在這樣一個網絡就會有一個虛拟交換機将網絡上的節點(“網卡”)連接配接在一起。

1.6.“網卡”:帶有以太幀寫入和讀出的接口的純粹虛拟“卡口”,其對應的實體卡口是以太網卡和rj45線纜的連接配接口,隻是後者流入流出的不是二層資料,而是實體層資料。它是真實網卡的卡口,虛拟網卡的卡口,假網卡的卡口的統稱。

2.概念舉例與引申:

2.1.虛拟交換機與虛拟網絡:我們知道在vmware中,虛拟機的網卡有三種組網方式:bridge,nat,host-only。如果你的實體機器上有兩塊網卡,并且虛拟機裡面的一塊網卡選擇了bridge,那麼你自己必須指定bridge到哪一塊實體機器的真實網卡,比如你指定的是實體機器的eth0,那麼這個真實的eth0将連接配接到一個虛拟交換機上,另外就是一個使用者态的假網卡(涉及到虛拟機的工作方式)連接配接到此虛拟交換機上。如果你還啟用了nat的方式,那麼将有許多“網卡”連接配接在一台虛拟交換機上:1.使用者态實作的nat裝置(之是以在使用者态實作是為了不依賴作業系統的nat功能);2.一台虛拟的dhcp裝置(為該網段配置設定ip位址,也在使用者态實作);3.實體機器上的一個該網段的虛拟網卡(為了實體機和虛拟機的互通);4.虛拟機裡面的一塊虛拟出來的網卡(由于vmware使用monitor驅動将系統調用都重新轉向了使用者空間,是以此也在使用者态實作)。如果是host-only的方式,則除了nat方式的nat裝置不需要之外,其餘的都和nat一樣。是以和tun一樣,在使用者态存在一個字元裝置接口,用于使用者态的“網卡”接入,在核心中有一個虛拟網卡實作,用于虛拟網卡的接入,對于bridge模式,真實網卡直接接入,和tun驅動不同的是,tun驅動的虛拟網卡直接和字元裝置互動,虛拟網卡發送的資料直接發送到字元裝置,而vmnet則不同,它們通過Virtual Switch互動,也就是中間加了一個虛拟交換機來路由以太幀,故vmnet完全可以實作tun的組網方式

2.2.vmnet實作tun組網:由于vmnet有虛拟交換機的概念,那麼完全可以實作tun的組網方式,也就是通過路由和iptables來控制資料包的轉發而不是使用者态的守護程序,比如vmnet-natd等。殺死vmnet-natd之後,nat方式的虛拟機裡資料包應該不能和外部網絡通信了,然而在實體機器上将ipforward打開,并且手工在真實網卡設定一個snat,然後在虛拟機内部将網關指向真實機器的對應虛拟網段的虛拟網卡,資料還是可以從虛拟機内部出來的。

3.總結:vmnet實際上在核心實作了一個交換網絡(特指ip位址在同一網段的鍊路層網絡)的機制,你可以在核心建立很多這樣的網絡,每一個這樣的網絡有一台虛拟交換機将所有節點連接配接在一起,這些節點就是“網卡”的卡口,可以來自使用者态,可以來自核心的虛拟網卡,也可以來自核心的真實網卡,這樣實作的一個網絡非常靈活,不需要關注協定棧,隻要在卡口發送或者接收以太幀就可以了,如果需要解析這些以太幀,要麼通過作業系統本身的協定棧,要麼在使用者态自己解析,畢竟來自使用者态的“網卡”卡口可以将資料收到使用者态程序,然後你可以在使用者态實作一個協定棧,甚至可以和scapy結合起來玩。至于說如何配置這個虛拟網絡,vmware已經配好了三種,而且你可以自己配置自己的網絡拓撲,前提是你得知道vmnet驅動提供的接口,這就需要看它的源代碼了。

 本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1271131

繼續閱讀