什么是MAC地址?

MAC位址(Media Access Control)用来定义网络设备的位置,Mac地址一般由制造商分配并烧录到网卡芯片中,因此每块网卡都有一个MAC地址。

MAC地址是一个6字节、也即48bit的数据。容量达到255255255255255*255=274941996890625个地址,前3字节称为OUI ,是由IEEE组织注册给网络设备生产商的;每个厂商拥有一个或多个OUI,彼此不同。后三字节则是由网络设备生产商分配给自己生产每一个拥有MAC地址的设备。也就是说这270多万亿个以太网卡的物理地址供全球的所有网络使用,每个网卡的mac地址它在世界上是独一无二的,可以作为网卡识别和主机识别的重要信息在底层物理传输中使用。

mac地址可否修改?

答案是可以修改,虽然mac 是写进网卡硬件的,但是可以通过软件对其进行修改,只不过不建议随便修改,因为修改了之后可能导致同一个局域网下mac地址重复的情况,这时就会导致两台主机都无法上网,因为ARP用来寻找同一个局域网中的主机,同一个局域网的ip地址的网络号相同(同网段),由于每个主机的ip地址并不固定,mac地址固定,最终归结于根据目标主机的mac地址寻找,而如果两个mac地址相同,最终无法确定谁是目标,会导致混乱,因此导致两台主机都无法上网。

但在非同一个网络下的MAC地址,即使重复了也没有关系,关于这个问题,其实也是比较容易理解的:访问不同网段的目标,不会直接解析对方的mac,而是解析网关的mac。
在这里插入图片描述
如上图,两个不同网段上的目标进行通信,主机H1访问主机H2,最开始打上的目标mac是路由器R1的mac HA3,然后路由器R1查路由表,查找指向目标的ip的路径,发现下一跳是路由器R2,然后查arp表,确定路由器R2对应的mac是HA5,自己的出接口是mac HA4,于是对这个数据包的帧头进行重封装,源mac是HA4目标mac是HA5,此时到了路由器R2,路由器R2查路由表,查找指向目标ip的路径,发现目标连在自己的另一个接口上。然后从这个接口利用arp解析H2的mac是HA2,于是对这个数据包的帧头进行重封装,源mac是HA6目标mac是HA2。

可以看出,在这个过程中arp没有遇到两个mac重复的情况,因此不同局域网下mac地址即使重复也是可以进行通信的。

虚拟机的mac地址

mac地址是直接写在硬件网卡里面的,那么虚拟机的mac地址呢?
在VM的世界中,每一台拥有虚拟NIC(网卡)的设备当然也拥有MAC地址。这虚拟网卡的MAC地址,当然也是按照规定,前三字节为OUI,后三字节逐一分配给每个设备。由于虚拟网卡的”制造商“是VMware,XenSource,微软 等虚拟平台软件的生产商,OUI当然就分配给了他们。

OUI有了,后三字节如何生成呢?要知道虚拟机是经常被创建和销毁的,这一点不像实体PC。网卡生产商可以计算每年生产多少块网卡,从而为每块网卡分配不同的MAC地址; VMware却不可能计算出每年有多少台VM、有多少块虚拟网卡被创建。

VMware ESX Server的算法是,使用散列算法,通过VM的UUID来生成MAC地址。VM的UUID是每一台VM特有的、128bit的ID,是由ESX Server硬件SMBIOS的UUID、加上VM的路径生成的。因此,一台虚拟机的虚拟网卡的MAC地址就与下面四个因素有关:

  • VMware的OUI
  • Host (ESX Server)的SMBIOS中的UUID
  • VM在服务器上的路径
  • 网卡的实体名 (Entity Name),用来确保同一VM上的不同网卡有不同的MAC地址
    MAC地址一旦生成,就不会再有变化,除非上面所述的四项因素发生改变(最可能发生的就是第三项,VM在服务器上的路径改变)。
    尽管如此,由于散列算法本身的特征,还是有万一发生MAC地址冲突的可能(可能性极小)。ESX Server会不断跟踪和检测运行中和挂起(Suspend)的VM,以保证没有MAC地址冲突。但是已经关闭电源的VM是不在检查对象之内的。因此,ESX检测到MAC地址冲突,它会分配给VM的虚拟网卡一个新的MAC地址。所以从这个意义上说,VM的MAC地址是可以发生变化的。

另外,如果你采用的是桥接模式:
MAC地址跟宿主机的MAC地址是相同的,虚拟机虽然有自己的ip地址但是实际上数据还是由虚拟机发给主机,主机再通过主机上的网卡发出去的,收的时候由主机的网卡接收再传给虚拟机的。所谓桥接模式,就是指将虚拟机的网卡和主机上的网卡“桥接”在一起。

参考:
https://www.cnblogs.com/Solomon-xm/articles/10253575.html
https://zhidao.baidu.com/question/2122400704374776427.html
https://blog.csdn.net/kenjianqi1647/article/details/81636898
https://www.zhihu.com/question/52820009

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐