【摘要】 跟唐老師學習雲網絡,已經進入到虛擬化的世界啦。Bridge是網絡虛擬化中非常重要的一種設備,快來一起學習Linux-Bridge的作用吧。
1 什麼是Linux-Bridge
咱們直接說人話:跟tap/tun、veth-pair是模擬網線的類似,Bridge也是照着物理設備的樣子,在Linux系統裏面虛擬出來的一種網絡設備。
因爲它也是網絡設備,所以可以配置 IP、MAC 等。然後它模擬的物理設備叫Hub(集線器)。
1.1 物理集線器Hub
很多小夥可能沒有見過,咱們直接上圖:
上面這個東西沒見過,可以參考下面這個,原理是一樣一樣的。
Hub的效果類似於把所有網線都焊在一起的感覺:
也就是不管信號從哪個口子進來,其他口子都能收到。“大喇叭”,“廣播桶”,可以這麼理解Hub。
我們以前寢室裏面打小組遊戲,就是大家把網線往集線器一插,然後就是一個mini小局域網了。
1.2 虛擬集線器Bridge
所以呢,Linux裏面虛擬出來的這個Bridge也是這個效果。用戶可以把很多網卡,插到這個Bridge上面,然後互相之間就能連通了,於是往Bridge發報文,所有插在上面的網卡全都收到這個報文。(目的比較單純,就是把大家連在一起)
一般用來把 tap/tun、veth-pair網線連到Bridge上面,這樣可以把一組容器,或者一組虛機連在一起。比如著名的Docker就是用Bridge把Host裏面的容器都連在一起,使得這些容器可以互相訪問。也可以把Host上面的物理網卡也加入到Bridge,這樣主機的VM就可以和外界通信了。
2 容器使用Bridge
按照Docker容器舉例,這裏會把多個容器的veth網線的一頭,插入到Bridge,使得所有容器相當於焊在一起。同時在主機上,我們可以看到的網卡會多1個叫docker0的網卡(docker0就是Bridge網橋):
Ps:這裏有個有意思的地方是,沒有把主機上原有的那個eth0也加入到Bridge。而虛機使用Bridge,一般會把原來Host上面的網卡加入到Bridge。(容器不加入,一是因爲大量容器的IP,可能會和Host所在網絡上,它那些兄弟VM們的IP衝突。二還有容器網絡模式可以多種模式選擇,保留靈活性。)。
至於容器怎麼通過Bridge和外面的世界進行通信,這個咱們在後續的《Docker網絡實戰》裏面詳解。
3 虛機使用Bridge
虛機這裏不一樣的是,一般會把Host自己原來的eth0網卡,也一塊加入到Bridge(如果虛機想要聯網的話)。相當於上面4個“人”都是兄弟了,大家在一個局域網。
通過Bridge,可以把所有的虛擬機網絡連在一起。
上面這些VM以爲自己的世界:
後面你可以回到原來物理網絡的視角去理解更高級的怎麼給VM分組問題(不明白的可以回顧早期課程)。要給VM分幫派,或者說給這些VM們分不同的子網,就需要能給這些VM打VLAN的tag的功能,這個功能Bridge(集線器)就搞不定了,需要引入更高級的“路由器”。
Ps:物理世界也差不多,集線器的價格很便宜,和路由器的價格不是一個檔次的。路由器可以設置每個端口的VLAN標記等高級功能。也就是咱們下一期的OVS(Open vSwitch)課程了。
4 怎麼查看Bridge信息
一般我都用 brctl 這個命令行(ip命令也可以用,但是我感覺brctl更直接),比較方便:
4.1 查詢Bridge信息
用的最多的就是,查詢一個Bridge上面插了哪些網卡:也就是show這個子命令
上面這個可以看到,有四個veth網卡插在名字爲docker0的Bridge網橋上面(其實就是有4個容器連在一起)。
4.2 網卡插入Bridge
用的第二多的就是 把一個網卡插入一個Bridge裏面。即:addif 子命令
我們可以試一下,先創建一根“網線”
ip link add tsj-0 type veth peer name tsj-1
然後創建一個Bridge
brctl addbr tsj-br
然後把網線一頭插入這個Bridge。
brctl addif tsj-br tsj-0
查詢結果:
brctl show tsj-br
額,其實“容器世界”也是這麼創建出來的。
點擊這裏,瞭解更多精彩內容