加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 综合聚焦 > 资源网站 > 空间 > 正文

Linux 虚拟网卡技术:Macvlan

发布时间:2019-04-03 19:27:08 所属栏目:空间 来源:米开朗基杨
导读:1. Macvlan 简介 在 Macvlan 出现之前,我们只能为一块以太网卡添加多个 IP 地址,却不能添加多个 MAC 地址,因为 MAC 地址正是通过其全球唯一性来标识一块以太网卡的,即便你使用了创建 ethx:y 这样的方式,你会发现所有这些网卡的 MAC 地址和 ethx 都是
副标题[/!--empirenews.page--]

 1. Macvlan 简介

在 Macvlan 出现之前,我们只能为一块以太网卡添加多个 IP 地址,却不能添加多个 MAC 地址,因为 MAC 地址正是通过其全球唯一性来标识一块以太网卡的,即便你使用了创建 ethx:y 这样的方式,你会发现所有这些“网卡”的 MAC 地址和 ethx 都是一样的,本质上,它们还是一块网卡,这将限制你做很多二层的操作。有了 Macvlan 技术,你可以这么做了。

Linux 虚拟网卡技术:Macvlan

Macvlan 允许你在主机的一个网络接口上配置多个虚拟的网络接口,这些网络 interface 有自己独立的 MAC 地址,也可以配置上 IP 地址进行通信。Macvlan 下的虚拟机或者容器网络和主机在同一个网段中,共享同一个广播域。Macvlan 和 Bridge 比较相似,但因为它省去了 Bridge 的存在,所以配置和调试起来比较简单,而且效率也相对高。除此之外,Macvlan 自身也完美支持 VLAN。

同一 VLAN 间数据传输是通过二层互访,即 MAC 地址实现的,不需要使用路由。不同 VLAN 的用户单播默认不能直接通信,如果想要通信,还需要三层设备做路由,Macvlan 也是如此。用 Macvlan 技术虚拟出来的虚拟网卡,在逻辑上和物理网卡是对等的。物理网卡也就相当于一个交换机,记录着对应的虚拟网卡和 MAC 地址,当物理网卡收到数据包后,会根据目的 MAC 地址判断这个包属于哪一个虚拟网卡。这也就意味着,只要是从 Macvlan 子接口发来的数据包(或者是发往 Macvlan 子接口的数据包),物理网卡只接收数据包,不处理数据包,所以这就引出了一个问题:本机 Macvlan 网卡上面的 IP 无法和物理网卡上面的 IP 通信!关于这个问题的解决方案我们下一节再讨论。

我们先来看一下 Macvlan 技术的流程示意图:

Linux 虚拟网卡技术:Macvlan

简单来说,Macvlan 虚拟网卡设备是寄生在物理网卡设备上的。发包时调用自己的发包函数,查找到寄生的物理设备,然后通过物理设备发包。收包时,通过注册寄生的物理设备的 rx_handler 回调函数,处理数据包。

2. Macvlan vs Bridge

说到 Macvlan,就不得不提 Bridge,因为你可以把 Macvlan 看成一个简单的 Bridge。但他们之间还是有很大的区别的。

Bridge

Bridge 实际上就是一种旧式交换机,他们之间并没有很大的差别。Bridge 与交换机的区别在与市场,而不在与技术。交换机对网络进行分段的方式与 Bridge 相同,交换机就是一个多端口的网桥。确切地说,高端口密度的 Bridge 就称为局域网交换机。

Linux 虚拟网卡技术:Macvlan

Bridge 有以下特点:

  • Bridge 是二层设备,仅用来处理二层的通讯。
  • Bridge 使用 MAC 地址表来决定怎么转发帧(Frame)。
  • Bridge 会从 host 之间的通讯数据包中学习 MAC 地址。
  • 可以是硬件设备,也可以是纯软件实现(例如:Linux Bridge)。

以下是一个在 Linux 主机上,多个 VM 使用 bridge 相互通讯的状况:

Linux 主机中可以通过命令行工具 brctl 来查看 Bridge 的配置,该工具可以通过安装软件包 bridge-utils 来获得。

  1. $ brctl show 
  2.  
  3. bridge name  bridge id          STP enabled  interfaces 
  4. br0          8000.080006ad34d1  no           eth0 
  5.                                              veth0 
  6. br1          8000.080021d2a187  no           veth1 
  7.                                              veth2 

Bridge 有可能会遇到二层环路,如有需要,你可以开启 STP 来防止出现环路。

Macvlan

Macvlan 有以下特点:

  • 可让使用者在同一张实体网卡上设定多个 MAC 地址。
  • 承上,带有上述设定的 MAC 地址的网卡称为子接口(sub interface);而实体网卡则称为父接口(parent interface)。
  • parent interface 可以是一个物理接口(eth0),可以是一个 802.1q 的子接口(eth0.10),也可以是 bonding 接口。
  • 可在 parent/sub interface 上设定的不只是 MAC 地址,IP 地址同样也可以被设定。
  • sub interface 无法直接与 parent interface 通讯 (带有 sub interface 的 VM 或容器无法与 host 直接通讯)。
  • 承上,若 VM 或容器需要与 host 通讯,那就必须额外建立一个 sub interface 给 host 用。
  • sub interface 通常以 mac0@eth0 的形式来命名以方便区別。

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读