成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Linux 虛擬網(wǎng)絡(luò)設(shè)備詳解之 Bridge 網(wǎng)橋

tomorrowwu / 3185人閱讀

摘要:創(chuàng)建的為讀寫的文件描述符。如下圖所示圖片來(lái)源于網(wǎng)絡(luò),侵權(quán)必刪虛擬機(jī)發(fā)出的數(shù)據(jù)包通過(guò)設(shè)備先到達(dá),然后經(jīng)過(guò)發(fā)送到物理網(wǎng)絡(luò)中,數(shù)據(jù)包不需要經(jīng)過(guò)主機(jī)的的協(xié)議棧,效率是比較高的。虛擬機(jī)網(wǎng)絡(luò)和容器網(wǎng)絡(luò)的區(qū)別。

本文首發(fā)于我的公眾號(hào) CloudDeveloper(ID: cloud_dev),專注于干貨分享,號(hào)內(nèi)有大量書籍和視頻資源,后臺(tái)回復(fù)「1024」即可領(lǐng)取,歡迎大家關(guān)注,二維碼文末可以掃。

前面幾篇文章介紹了 tap/tun、veth-pair,今天這篇來(lái)看看 Bridge。

Bridge 是什么

同 tap/tun、veth-pair 一樣,Bridge 也是一種虛擬網(wǎng)絡(luò)設(shè)備,所以具備虛擬網(wǎng)絡(luò)設(shè)備的所有特性,比如可以配置 IP、MAC 等。

除此之外,Bridge 還是一個(gè)交換機(jī),具有交換機(jī)所有的功能。

對(duì)于普通的網(wǎng)絡(luò)設(shè)備,就像一個(gè)管道,只有兩端,數(shù)據(jù)從一端進(jìn),從另一端出。而 Bridge 有多個(gè)端口,數(shù)據(jù)可以從多個(gè)端口進(jìn),從多個(gè)端口出。

Bridge 的這個(gè)特性讓它可以接入其他的網(wǎng)絡(luò)設(shè)備,比如物理設(shè)備、虛擬設(shè)備、VLAN 設(shè)備等。Bridge 通常充當(dāng)主設(shè)備,其他設(shè)備為從設(shè)備,這樣的效果就等同于物理交換機(jī)的端口連接了一根網(wǎng)線。比如下面這幅圖通過(guò) Bridge 連接兩個(gè) VM 的 tap 虛擬網(wǎng)卡和物理網(wǎng)卡 eth0。

VM 同主機(jī)通信

以這個(gè)圖來(lái)簡(jiǎn)單說(shuō)明下,借助 Bridge 來(lái)完成同主機(jī)兩臺(tái) VM 的之間的通信流程。

首先準(zhǔn)備一個(gè) centos 或 ubuntu 虛擬機(jī),然后創(chuàng)建一個(gè) bridge:

ip link add br0 type bridge
ip link set br0 up

然后通過(guò) virt-manager 創(chuàng)建兩個(gè) kvm 虛擬機(jī):kvm1 和 kvm2(前提得支持嵌套虛擬化),將它們的 vNIC 掛到 br0 上,如下圖:

kvm 虛機(jī)會(huì)使用 tap 設(shè)備作為它的虛擬網(wǎng)卡,我們驗(yàn)證下:

# ps -ef | grep kvm1
libvirt+      3549     1  87 ?        00:22:09 qemu-system-x86_64 -enable-kvm -name kvm1 ... -netdev tap,fd=26,id=hostnet0,vhost=on,vhostfd=28 ...

可以看到,其中網(wǎng)絡(luò)部分參數(shù),-netdev tap,fd=26 表示的就是連接主機(jī)上的 tap 設(shè)備。

創(chuàng)建的 fd=26 為讀寫 /dev/net/tun 的文件描述符。

使用 lsof -p 3549 驗(yàn)證下:

# lsof -p 3549
COMMAND    PID USER   FD      TYPE             DEVICE    SIZE/OFF     NODE NAME
...
qemu-system 3549  libvirt-qemu   26u      CHR             10,200         0t107    135 /dev/net/tun
...

可以看到,PID 為 3549 的進(jìn)程打開了文件 /dev/net/tun,分配的文件描述符 fd 為 26。

因此,我們可以得出以下結(jié)論:在 kvm 虛機(jī)啟動(dòng)時(shí),會(huì)向內(nèi)核注冊(cè) tap 虛擬網(wǎng)卡,同時(shí)打開設(shè)備文件 /dev/net/tun,拿到文件描述符 fd,然后將 fd 和 tap 關(guān)聯(lián),tap 就成了一端連接著用戶空間的 qemu-kvm,一端連著主機(jī)上的 bridge 的端口,促使兩者完成通信。

下面分別給兩虛機(jī)配上 IP:10.1.1.2/2410.1.1.3/24,ping 一下:

在 bridge 上抓個(gè)包看看:

可以看到,br0 上抓到 ping 的 ICMP echo 包和 ARP 包。

Bridge 常用使用場(chǎng)景

Bridge 設(shè)備通常就是結(jié)合 tap/tun、veth-pair 設(shè)備用于虛擬機(jī)、容器網(wǎng)絡(luò)里面。這兩種網(wǎng)絡(luò),在數(shù)據(jù)傳輸流程上還有些許不同,我們簡(jiǎn)單來(lái)看下:

首先是虛擬機(jī)網(wǎng)絡(luò),虛擬機(jī)一般通過(guò) tap/tun 設(shè)備將虛擬機(jī)網(wǎng)卡同宿主機(jī)里的 Bridge 連接起來(lái),完成同主機(jī)和跨主機(jī)的通信。如下圖所示:

【圖片來(lái)源于網(wǎng)絡(luò),侵權(quán)必刪】

虛擬機(jī)發(fā)出的數(shù)據(jù)包通過(guò) tap 設(shè)備先到達(dá) br0,然后經(jīng)過(guò) eth0 發(fā)送到物理網(wǎng)絡(luò)中,數(shù)據(jù)包不需要經(jīng)過(guò)主機(jī)的的協(xié)議棧,效率是比較高的。

其次是容器網(wǎng)絡(luò)(容器網(wǎng)絡(luò)有多種引申的形式,這里我們只說(shuō) Bridge 網(wǎng)絡(luò)),容器網(wǎng)絡(luò)和虛擬機(jī)網(wǎng)絡(luò)類似,不過(guò)一般是使用 veth-pair 來(lái)連接容器和主機(jī),因?yàn)樵谥鳈C(jī)看來(lái),容器就是一個(gè)個(gè)被隔離的 namespace,用 veth-pair 更有優(yōu)勢(shì)。如下圖所示:

【圖片來(lái)源于網(wǎng)絡(luò),侵權(quán)必刪】

容器的 Bridge 網(wǎng)絡(luò)通常配置成內(nèi)網(wǎng)形式,要出外網(wǎng)需要走 NAT,所以它的數(shù)據(jù)傳輸不像虛擬機(jī)的橋接形式可以直接跨過(guò)協(xié)議棧,而是必須經(jīng)過(guò)協(xié)議棧,通過(guò) NAT 和 ip_forward 功能從物理網(wǎng)卡轉(zhuǎn)發(fā)出去,因此,從性能上看,Bridge 網(wǎng)絡(luò)虛擬機(jī)要優(yōu)于容器。

總結(jié)

Linux Bridge 是虛擬交換機(jī),功能和物理交換機(jī)一樣,用于連接虛擬機(jī)和容器。

虛擬機(jī)網(wǎng)絡(luò)和容器網(wǎng)絡(luò)的區(qū)別。

Bridge 是偏低級(jí)的工具,更高級(jí)的工具是 Open vSwitch,這個(gè)工具后面再詳說(shuō)。


我的公眾號(hào) CloudDeveloper(ID: cloud_dev),號(hào)內(nèi)有大量書籍和視頻資源,后臺(tái)回復(fù)「1024」即可領(lǐng)取,分享的內(nèi)容包括但不限于云計(jì)算虛擬化、容器、OpenStack、K8S、霧計(jì)算、網(wǎng)絡(luò)、工具、SDN、OVS、DPDK、Linux、Go、Python、C/C++編程技術(shù)等內(nèi)容,歡迎大家關(guān)注。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/11506.html

相關(guān)文章

  • 淺談k8s cni 插件

    摘要:即配置網(wǎng)絡(luò)和解除網(wǎng)絡(luò)配置。類類型的插件,在執(zhí)行命令時(shí)會(huì)分配一個(gè)給調(diào)用者。執(zhí)行命令時(shí)會(huì)將調(diào)用者指定的放回池。向刪除時(shí),同樣通過(guò)請(qǐng)求,解除該的租約。組件通常在組件執(zhí)行完畢后執(zhí)行 目前不論是個(gè)人還是企業(yè),在使用k8s時(shí),都會(huì)采用CNI作為集群網(wǎng)絡(luò)方案實(shí)現(xiàn)的規(guī)范。 在早先的k8s版本中,kubelet代碼里提供了networkPlugin,networkPlugin是一組接口,實(shí)現(xiàn)了pod的網(wǎng)...

    fireflow 評(píng)論0 收藏0
  • Ubuntu 18.04 LTS安裝KVM虛擬機(jī)

    摘要:前一陣使用在最新的上安裝了來(lái)虛擬一個(gè)小的集群,將主要過(guò)程和其中遇到的一些問(wèn)題記錄下來(lái)。上面命令執(zhí)行結(jié)果如果返回,表示不支持虛擬化技術(shù)。 showImg(https://segmentfault.com/img/bVbcRjF?w=634&h=473); 前一陣使用在最新的Ubuntu 18.04上安裝了KVM來(lái)虛擬一個(gè)小的VM集群,將主要過(guò)程和其中遇到的一些問(wèn)題記錄下來(lái)。 準(zhǔn)備工作 首...

    denson 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<