虚拟世界的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