自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux 虛擬網(wǎng)卡技術(shù):Macvlan

云計(jì)算 虛擬化
在 Macvlan 出現(xiàn)之前,我們只能為一塊以太網(wǎng)卡添加多個(gè) IP 地址,卻不能添加多個(gè) MAC 地址,因?yàn)?MAC 地址正是通過(guò)其全球唯一性來(lái)標(biāo)識(shí)一塊以太網(wǎng)卡的,即便你使用了創(chuàng)建 ethx:y 這樣的方式,你會(huì)發(fā)現(xiàn)所有這些“網(wǎng)卡”的 MAC 地址和 ethx 都是一樣的,本質(zhì)上,它們還是一塊網(wǎng)卡,這將限制你做很多二層的操作。

 1. Macvlan 簡(jiǎn)介

在 Macvlan 出現(xiàn)之前,我們只能為一塊以太網(wǎng)卡添加多個(gè) IP 地址,卻不能添加多個(gè) MAC 地址,因?yàn)?MAC 地址正是通過(guò)其全球唯一性來(lái)標(biāo)識(shí)一塊以太網(wǎng)卡的,即便你使用了創(chuàng)建 ethx:y 這樣的方式,你會(huì)發(fā)現(xiàn)所有這些“網(wǎng)卡”的 MAC 地址和 ethx 都是一樣的,本質(zhì)上,它們還是一塊網(wǎng)卡,這將限制你做很多二層的操作。有了 Macvlan 技術(shù),你可以這么做了。

Macvlan 允許你在主機(jī)的一個(gè)網(wǎng)絡(luò)接口上配置多個(gè)虛擬的網(wǎng)絡(luò)接口,這些網(wǎng)絡(luò) interface 有自己獨(dú)立的 MAC 地址,也可以配置上 IP 地址進(jìn)行通信。Macvlan 下的虛擬機(jī)或者容器網(wǎng)絡(luò)和主機(jī)在同一個(gè)網(wǎng)段中,共享同一個(gè)廣播域。Macvlan 和 Bridge 比較相似,但因?yàn)樗∪チ? Bridge 的存在,所以配置和調(diào)試起來(lái)比較簡(jiǎn)單,而且效率也相對(duì)高。除此之外,Macvlan 自身也能很好的支持 VLAN。

[[261271]]

同一 VLAN 間數(shù)據(jù)傳輸是通過(guò)二層互訪,即 MAC 地址實(shí)現(xiàn)的,不需要使用路由。不同 VLAN 的用戶單播默認(rèn)不能直接通信,如果想要通信,還需要三層設(shè)備做路由,Macvlan 也是如此。用 Macvlan 技術(shù)虛擬出來(lái)的虛擬網(wǎng)卡,在邏輯上和物理網(wǎng)卡是對(duì)等的。物理網(wǎng)卡也就相當(dāng)于一個(gè)交換機(jī),記錄著對(duì)應(yīng)的虛擬網(wǎng)卡和 MAC 地址,當(dāng)物理網(wǎng)卡收到數(shù)據(jù)包后,會(huì)根據(jù)目的 MAC 地址判斷這個(gè)包屬于哪一個(gè)虛擬網(wǎng)卡。這也就意味著,只要是從 Macvlan 子接口發(fā)來(lái)的數(shù)據(jù)包(或者是發(fā)往 Macvlan 子接口的數(shù)據(jù)包),物理網(wǎng)卡只接收數(shù)據(jù)包,不處理數(shù)據(jù)包,所以這就引出了一個(gè)問(wèn)題:本機(jī) Macvlan 網(wǎng)卡上面的 IP 無(wú)法和物理網(wǎng)卡上面的 IP 通信!關(guān)于這個(gè)問(wèn)題的解決方案我們下一節(jié)再討論。

我們先來(lái)看一下 Macvlan 技術(shù)的流程示意圖:

 

簡(jiǎn)單來(lái)說(shuō),Macvlan 虛擬網(wǎng)卡設(shè)備是寄生在物理網(wǎng)卡設(shè)備上的。發(fā)包時(shí)調(diào)用自己的發(fā)包函數(shù),查找到寄生的物理設(shè)備,然后通過(guò)物理設(shè)備發(fā)包。收包時(shí),通過(guò)注冊(cè)寄生的物理設(shè)備的 rx_handler 回調(diào)函數(shù),處理數(shù)據(jù)包。

2. Macvlan vs Bridge

說(shuō)到 Macvlan,就不得不提 Bridge,因?yàn)槟憧梢园?Macvlan 看成一個(gè)簡(jiǎn)單的 Bridge。但他們之間還是有很大的區(qū)別的。

Bridge

Bridge 實(shí)際上就是一種舊式交換機(jī),他們之間并沒(méi)有很大的差別。Bridge 與交換機(jī)的區(qū)別在與市場(chǎng),而不在與技術(shù)。交換機(jī)對(duì)網(wǎng)絡(luò)進(jìn)行分段的方式與 Bridge 相同,交換機(jī)就是一個(gè)多端口的網(wǎng)橋。確切地說(shuō),高端口密度的 Bridge 就稱為局域網(wǎng)交換機(jī)。

 

Bridge 有以下特點(diǎn):

  • Bridge 是二層設(shè)備,僅用來(lái)處理二層的通訊。
  • Bridge 使用 MAC 地址表來(lái)決定怎么轉(zhuǎn)發(fā)幀(Frame)。
  • Bridge 會(huì)從 host 之間的通訊數(shù)據(jù)包中學(xué)習(xí) MAC 地址。
  • 可以是硬件設(shè)備,也可以是純軟件實(shí)現(xiàn)(例如:Linux Bridge)。

以下是一個(gè)在 Linux 主機(jī)上,多個(gè) VM 使用 bridge 相互通訊的狀況:

 

Linux 主機(jī)中可以通過(guò)命令行工具 brctl 來(lái)查看 Bridge 的配置,該工具可以通過(guò)安裝軟件包 bridge-utils 來(lái)獲得。

  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 有可能會(huì)遇到二層環(huán)路,如有需要,你可以開啟 STP 來(lái)防止出現(xiàn)環(huán)路。

Macvlan

Macvlan 有以下特點(diǎn):

  • 可讓使用者在同一張實(shí)體網(wǎng)卡上設(shè)定多個(gè) MAC 地址。
  • 承上,帶有上述設(shè)定的 MAC 地址的網(wǎng)卡稱為子接口(sub interface);而實(shí)體網(wǎng)卡則稱為父接口(parent interface)。
  • parent interface 可以是一個(gè)物理接口(eth0),可以是一個(gè) 802.1q 的子接口(eth0.10),也可以是 bonding 接口。
  • 可在 parent/sub interface 上設(shè)定的不只是 MAC 地址,IP 地址同樣也可以被設(shè)定。
  • sub interface 無(wú)法直接與 parent interface 通訊 (帶有 sub interface 的 VM 或容器無(wú)法與 host 直接通訊)。
  • 承上,若 VM 或容器需要與 host 通訊,那就必須額外建立一個(gè) sub interface 給 host 用。
  • sub interface 通常以 mac0@eth0 的形式來(lái)命名以方便區(qū)別。

用張圖來(lái)解釋一下設(shè)定 Macvlan 后的樣子:

 

3. Macvlan 的工作模式

Macvlan 共支持四種模式,分別是:

VEPA(Virtual Ethernet Port Aggregator)

 

在 VEPA 模式下,所有從 Macvlan 接口發(fā)出的流量,不管目的地全部都發(fā)送給父接口,即使流量的目的地是共享同一個(gè)父接口的其它 Macvlan 接口。在二層網(wǎng)絡(luò)場(chǎng)景下,由于生成樹協(xié)議的原因,兩個(gè) Macvlan 接口之間的通訊會(huì)被阻塞,這時(shí)需要上層路由器上為其添加路由(需要外部交換機(jī)配置 Hairpin 支持,即需要兼容 802.1Qbg 的交換機(jī)支持,其可以把源和目的地址都是本地 Macvlan 接口地址的流量發(fā)回給相應(yīng)的接口)。此模式下從父接口收到的廣播包,會(huì)泛洪給 VEPA 模式的所有子接口。

現(xiàn)在大多數(shù)交換機(jī)都不支持 Hairpin 模式,但 Linux 主機(jī)中可以通過(guò)一種 Harpin 模式的 Bridge 來(lái)讓 VEPA 模式下的不同 Macvlan 接口通信(前文已經(jīng)提到,Bridge 其實(shí)就是一種舊式交換機(jī))。怎么配置呢?非常簡(jiǎn)單,通過(guò)一條命令就可以解決:

  1. $ brctl hairpin br0 eth1 on 

或者使用 iproute2 來(lái)設(shè)置:

  1. $ bridge link set dev eth0 hairpin on 

如果你的內(nèi)核是你手工編譯升級(jí)的,那么可能你的用戶態(tài)程序并不支持新內(nèi)核對(duì)應(yīng)的所有特性,也就是說(shuō)你的 brctl 可能版本過(guò)老不支持 hairpin 命令,那么可以 sysfs 來(lái)搞定:

  1. $ echo 1 >/sys/class/net/br0/brif/eth1/hairpin_mode 

在 Linux 主機(jī)上配置了 Harpin 模式之后,源和目的地址都是本地 Macvlan 接口地址的流量,都會(huì)被 br0(假設(shè)你創(chuàng)建的 Bridge 是 br0)發(fā)回給相應(yīng)的接口。

 

如果想在物理交換機(jī)層面對(duì)虛擬機(jī)或容器之間的訪問(wèn)流量進(jìn)行優(yōu)化設(shè)定,VEPA 模式將是一種比較好的選擇。

VEPA 和 Passthru 模式下,兩個(gè) Macvlan 接口之間的通信會(huì)經(jīng)過(guò)主接口兩次:第一次是發(fā)出的時(shí)候,第二次是返回的時(shí)候。這樣會(huì)影響物理接口的寬帶,也限制了不同 Macvlan 接口之間通信的速度。如果多個(gè) Macvlan 接口之間通信比較頻繁,對(duì)于性能的影響會(huì)比較明顯。

Bridge

 

此種模式類似 Linux 的 Bridge,擁有相同父接口的兩塊 Macvlan 虛擬網(wǎng)卡是可以直接通訊的,不需要把流量通過(guò)父網(wǎng)卡發(fā)送到外部網(wǎng)絡(luò),廣播幀將會(huì)被泛洪到連接在"網(wǎng)橋"上的所有其他子接口和物理接口。這比較適用于讓共享同一個(gè)父接口的 Macvlan 網(wǎng)卡進(jìn)行直接通訊的場(chǎng)景。

這里所謂的 Bridge 指的是在這些網(wǎng)卡之間,數(shù)據(jù)流可以實(shí)現(xiàn)直接轉(zhuǎn)發(fā),不需要外部的協(xié)助,這有點(diǎn)類似于 Linux host 內(nèi)建了一個(gè) Bridge,即用 brctl 命令所做的那一切。但和 Linux bridge 絕不是一回事,它不需要學(xué)習(xí) MAC 地址,也不需要 STP,因此效能比起使用 Linux bridge 好上很多。

Bridge 模式有個(gè)缺點(diǎn):如果父接口 down 掉,所有的 Macvlan 子接口也會(huì)全部 down 掉,同時(shí)子接口之間也將無(wú)法進(jìn)行通訊。

Private

 

此種模式相當(dāng)于 VEPA 模式的增強(qiáng)模式,其完全阻止共享同一父接口的 Macvlan 虛擬網(wǎng)卡之間的通訊,即使配置了 Hairpin 讓從父接口發(fā)出的流量返回到宿主機(jī),相應(yīng)的通訊流量依然被丟棄。具體實(shí)現(xiàn)方式是丟棄廣播/多播數(shù)據(jù),這就意味著以太網(wǎng)地址解析 arp 將不可運(yùn)行,除非手工探測(cè) MAC 地址,否則通信將無(wú)法在同一宿主機(jī)下的多個(gè) Macvlan 網(wǎng)卡間展開。之所以隔離廣播流量,是因?yàn)橐蕴W(wǎng)是基于廣播的,隔離了廣播,以太網(wǎng)將失去了依托。

Passthru

 

此種模式會(huì)直接把父接口和相應(yīng)的MacVLAN接口捆綁在一起,這種模式每個(gè)父接口只能和一個(gè) Macvlan 虛擬網(wǎng)卡接口進(jìn)行捆綁,并且 Macvlan 虛擬網(wǎng)卡接口繼承父接口的 MAC 地址。

此種模式的優(yōu)點(diǎn)是虛擬機(jī)和容器可以更改 MAC 地址和其它一些接口參。

4. Macvlan 和 Bridge 的使用場(chǎng)景

最后我們?cè)賮?lái)討論一下 Macvlan 和 Bridge 的各自使用場(chǎng)景。

使用 Macvlan:

  • 僅僅需要為虛擬機(jī)或容器提供訪問(wèn)外部物理網(wǎng)絡(luò)的連接。
  • Macvlan 占用較少的 CPU,同時(shí)提供較高的吞吐量。
  • 當(dāng)使用 Macvlan 時(shí),宿主機(jī)無(wú)法和 VM 或容器直接進(jìn)行通訊。

使用 Bridge:

  • 當(dāng)在同一臺(tái)宿主機(jī)上需要連接多個(gè)虛擬機(jī)或容器時(shí)。
  • 對(duì)于擁有多個(gè)網(wǎng)橋的混合環(huán)境。
  • 需要應(yīng)用高級(jí)流量控制,F(xiàn)DB的維護(hù)。

5. Macvlan 的局限性

  • Macvlan 是將 VM 或容器通過(guò)二層連接到物理網(wǎng)絡(luò)的近乎理想的方案,但它也有一些局限性:
  • Linux 主機(jī)連接的交換機(jī)可能會(huì)限制同一個(gè)物理端口上的 MAC 地址數(shù)量。雖然你可以讓網(wǎng)絡(luò)管理員更改這些策略,但有時(shí)這種方法是無(wú)法實(shí)行的(比如你要去給客戶做一個(gè)快速的 PoC 演示)。
  • 許多 NIC 也會(huì)對(duì)該物理網(wǎng)卡上的 MAC地址數(shù)量有限制。超過(guò)這個(gè)限制就會(huì)影響到系統(tǒng)的性能。

IEEE 802.11 不喜歡同一個(gè)客戶端上有多個(gè) MAC 地址,這意味著你的 Macvlan 子接口在無(wú)線網(wǎng)卡或 AP 中都無(wú)法通信??梢酝ㄟ^(guò)復(fù)雜的辦法來(lái)突破這種限制,但還有一種更簡(jiǎn)單的辦法,那就是使用 Ipvlan,感興趣可以自己查閱相關(guān)資料。

6. 總結(jié)

本文主要介紹了 Macvlan 的實(shí)現(xiàn)原理,比較了它和 Linux Bridge 模式之間的差異及其使用場(chǎng)景,還詳細(xì)剖析了 Macvlan 四種模式的工作原理和相關(guān)注意項(xiàng)。下一節(jié)我們將通過(guò)實(shí)際演練來(lái)模擬 Macvlan 的四種工作模式。

7. 參考資料

http://hicu.be/bridge-vs-macvlan

https://blog.csdn.net/ztguang/article/details/51854037

https://lists.linuxfoundation.org/pipermail/bridge/2009-November/006842.html

本文轉(zhuǎn)載自微信公眾號(hào)「 云原生實(shí)驗(yàn)室」,轉(zhuǎn)載本文請(qǐng)聯(lián)系 云原生實(shí)驗(yàn)室公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 云原生實(shí)驗(yàn)室
相關(guān)推薦

2019-04-17 18:04:10

網(wǎng)卡虛擬化網(wǎng)絡(luò)設(shè)備

2009-12-16 13:18:28

Linux雙網(wǎng)卡虛擬路

2015-04-22 09:13:24

網(wǎng)卡VLANVLAN配置

2009-12-23 11:09:37

虛擬技術(shù)

2019-11-12 14:48:00

Linux桌面虛擬化KVM

2011-03-28 18:25:03

ibmdwLinux

2012-03-18 21:41:40

linux虛擬化

2009-12-16 11:22:11

Linux虛擬技術(shù)

2019-05-13 16:37:35

Linux網(wǎng)絡(luò)虛擬化

2019-07-24 10:06:15

Linux網(wǎng)絡(luò)虛擬化

2009-09-07 21:51:59

2009-12-25 10:05:00

Linux虛擬化Xen虛擬化

2019-03-20 14:29:46

Linux虛擬內(nèi)存

2009-11-23 19:47:57

ibmdwLinux

2013-08-23 10:32:41

Linux服務(wù)器虛擬化

2021-09-16 16:15:14

Linux設(shè)備虛擬化機(jī)器模擬器

2010-05-06 09:45:18

Linux虛擬化

2012-12-28 10:18:03

LinuxXenKVM

2024-02-23 10:11:00

虛擬化技術(shù)

2018-10-25 14:28:39

網(wǎng)卡虛擬場(chǎng)景
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)