虛擬世界的MAC地址html
先看一下真實世界的MAC地址是如何分配,如何保證沒有重複的。
每塊網卡都有一個MAC地址,MAC地址是一個6字節、也即48bit的數據。前3字節稱爲OUI ,是由IEEE組織註冊給網絡設備生產商的;每一個廠商擁有一個或多個OUI,彼此不一樣。後三字節則是由網絡設備生產商分配給本身生產的每個擁有MAC地址的設備,互不重複。
在VM的世界中,每一臺擁有虛擬NIC(網卡)的設備固然也擁有MAC地址。這虛擬網卡的MAC地址,固然也是按照規定,前三字節爲OUI,後三字節逐一分配給每一個設備。
因爲虛擬網卡的」製造商「是VMware,XenSource,微軟 等虛擬平臺軟件的生產商,OUI固然就分配給了他們。算法
按照VMware ESX 3的[Server Configuration Guide ]的說法,VMware的使用下面的三個OUI做爲VM的MAC地址:服務器
可是在實際應用上,我發現00:50:56這一MAC地址段並非徹底用於手動設置的MAC地址:網絡
OUI有了,後三字節如何生成呢?要知道虛擬機是常常被建立和銷燬的,這一點不像實體PC。網卡生產商能夠計算每一年生產多少塊網卡,從而爲每塊網卡分配不一樣的MAC地址; VMware卻不可能計算出每一年有多少臺VM、有多少塊虛擬網卡被建立。ide
VMware ESX Server的算法是,使用散列算法,經過VM的UUID來生成MAC地址。VM的UUID是每一臺VM特有的、128bit的ID,是由ESX Server硬件SMBIOS的UUID、加上VM的路徑生成的。所以,一臺虛擬機的虛擬網卡的MAC地址就與下面四個因素有關:ui
MAC地址一旦生成,就不會再有變化,除非上面所述的四項因素髮生改變(最可能發生的就是第三項,VM在服務器上的路徑改變)。
盡 管如此,因爲散列算法自己的特徵,仍是有萬一發生MAC地址衝突的可能(可能性極小,和年底ジャンボ中頭彩的概率差很少)。ESX Server會不斷跟蹤和檢測運行中和掛起(Suspend)的VM,以保證沒有MAC地址衝突。可是已經關閉電源的VM是不在檢查對象以內的。
所以,萬一一臺VM啓動時ESX檢測到MAC地址衝突,它會分配給VM的虛擬網卡一個新的MAC地址。因此從這個意義上說,VM的MAC地址是可能發生變化的——只是這個機率實在過小。spa
手 動指定MAC地址僅用於一些極其特殊的狀況,一般是進行P2V的時候。例如,某物理服務器上的軟件,其License已經與該服務器的MAC地址 綁定,若是MAC地址改變則軟件沒法運行;再如,某些底層網絡軟件以MAC地址來鑑別機器時,爲了避免作更改可以繼續使用,在P2V的時候也要手動指定 MAC地址。
打開一個VM的.vmx文件,能夠看到以下設置:(若是有多塊NIC的話,那麼就會有ethernet0、ethernet一、ethernet2……)htm
這說明該NIC是自動生成的MAC地址。只需以下更改便可變爲手動分配的MAC地址:對象
其中的00:50:56:00:00:01就是手動指定的MAC地址。blog