Linux 虛擬網路裝置詳解之 Bridge 網橋

2022-02-03 21:35:40 字數 2908 閱讀 2347

前面幾篇文章介紹了 tap/tun、veth-pair,今天這篇來看看 bridge。

同 tap/tun、veth-pair 一樣,bridge 也是一種虛擬網路裝置,所以具備虛擬網路裝置的所有特性,比如可以配置 ip、mac 等。

除此之外,bridge 還是乙個交換機,具有交換機所有的功能。

對於普通的網路裝置,就像乙個管道,只有兩端,資料從一端進,從另一端出。而 bridge 有多個埠,資料可以從多個埠進,從多個埠出。

bridge 的這個特性讓它可以接入其他的網路裝置,比如物理裝置、虛擬裝置、vlan 裝置等。bridge 通常充當主裝置,其他裝置為從裝置,這樣的效果就等同於物理交換機的埠連線了一根網線。比如下面這幅圖通過 bridge 連線兩個 vm 的 tap 虛擬網絡卡和物理網絡卡 eth0。

以這個圖來簡單說明下,借助 bridge 來完成同主機兩台 vm 的之間的通訊流程。

首先準備乙個 centos 或 ubuntu 虛擬機器,然後建立乙個 bridge:

ip link add br0 type bridge

ip link set br0 up

然後通過virt-manager建立兩個 kvm 虛擬機器:kvm1 和 kvm2(前提得支援巢狀虛擬化),將它們的 vnic 掛到 br0 上,如下圖:

kvm 虛機會使用 tap 裝置作為它的虛擬網絡卡,我們驗證下:

# 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 ...

可以看到,其中網路部分引數,-netdev tap,fd=26表示的就是連線主機上的 tap 裝置。

建立的 fd=26 為讀寫/dev/net/tun的檔案描述符。

使用lsof -p 3549驗證下:

# 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 的程序開啟了檔案/dev/net/tun,分配的檔案描述符 fd 為 26。

因此,我們可以得出以下結論:在 kvm 虛機啟動時,會向核心註冊 tap 虛擬網絡卡,同時開啟裝置檔案/dev/net/tun,拿到檔案描述符 fd,然後將 fd 和 tap 關聯,tap 就成了一端連線著使用者空間的 qemu-kvm,一端連著主機上的 bridge 的埠,促使兩者完成通訊。

下面分別給兩虛機配上 ip:10.1.1.2/2410.1.1.3/24,ping 一下:

在 bridge 上抓個包看看:

可以看到,br0 上抓到 ping 的 icmp echo 包和 arp 包。

bridge 裝置通常就是結合 tap/tun、veth-pair 裝置用於虛擬機器、容器網路裡面。這兩種網路,在資料傳輸流程上還有些許不同,我們簡單來看下:

首先是虛擬機器網路,虛擬機器一般通過 tap/tun 裝置將虛擬機器網絡卡同宿主機裡的 bridge 連線起來,完成同主機和跨主機的通訊。如下圖所示:

虛擬機器發出的資料報通過 tap 裝置先到達 br0,然後經過 eth0 傳送到物理網路中,資料報不需要經過主機的的協議棧,效率是比較高的。

其次是容器網路(容器網路有多種引申的形式,這裡我們只說 bridge 網路),容器網路和虛擬機器網路類似,不過一般是使用 veth-pair 來連線容器和主機,因為在主機看來,容器就是乙個個被隔離的 namespace,用 veth-pair 更有優勢。如下圖所示:

容器的 bridge 網路通常配置成內網形式,要出外網需要走 nat,所以它的資料傳輸不像虛擬機器的橋接形式可以直接跨過協議棧,而是必須經過協議棧,通過 nat 和 ip_forward 功能從物理網絡卡**出去,因此,從效能上看,bridge 網路虛擬機器要優於容器。

linux bridge 是虛擬交換機,功能和物理交換機一樣,用於連線虛擬機器和容器。

虛擬機器網路和容器網路的區別。

bridge 是偏低階的工具,更高階的工具是 open vswitch,這個工具後面再詳說。

Linux 虛擬網路裝置詳解之 Bridge 網橋

linux 虛擬網路裝置詳解之 bridge 網橋 同 tap tun veth pair 一樣,bridge 也是一種虛擬網路裝置,所以具備虛擬網路裝置的所有特性,比如可以配置 ip mac 等。除此之外,bridge 還是乙個交換機,具有交換機所有的功能。對於普通的網路裝置,就像乙個管道,只有兩...

Xen的虛擬網路裝置

作為虛擬機器與外界通訊的途徑,虛擬網路裝置在xen的虛擬裝置中具有代表性。虛擬網路裝置的前後端須要通過共享記憶體進行通訊。由於後端須要為多個虛擬機器提供網路服務,因此後端具有網橋的功能。每個虛擬機器擁有乙個或多個網路裝置,通過軟體模擬的網橋進行資料報 虛擬網路裝置包含位於dom n中的前端和位於do...

字元裝置 塊裝置 網路裝置詳解

字元裝置 塊裝置 網路裝置 裝置模型 裝置驅動的 量佔核心程式的50 裝置模型的意義 為了降低裝置多樣性帶來的linux驅動開發的複雜度,以及裝置熱拔插處理 電源管理等,linux核心提出了裝置模型 也稱作driver model 的概念。裝置模型將硬體裝置歸納 分類,然後抽象出一套標準的資料結構和...