1 網橋的原理及在linux核心中的實現

2021-06-25 07:30:20 字數 3888 閱讀 3696

2.1   

橋接的概念

簡單來說,橋接就是把一台機器上的若干個網路介面「連線」起來。其結果是,其中乙個網口收到的報文會被複製給其他網

口並傳送出去。以使得網口之間的報文能夠互相**。

交換機就是這樣乙個裝置,它有若干個網口,並且這些網口是橋接起來的。於是,與交換機相連的若干主機就能夠通過交換

機的報文**而互相通訊。

如下圖:主機

a傳送的報文被送到交換機s1的

eth0

口,由於

eth0

與eth1

、eth2

橋接在一起,故而報文被複製到

eth1

和eth2

,並且傳送出去,然後被主機

b和交換機

s2接收到。而

s2又會將報文**給主機c、

d。交換機在報文**的過程中並不會篡改報文資料,只是做原樣複製。然而橋接卻並不是在物理層實現的,而是在資料鏈路層。

交換機能夠理解資料鏈路層的報文,所以實際上橋接卻又不是單純的報文**。

交換機會關心填寫在報文的資料鏈路層頭部中的

mac位址資訊(包括源位址和目的位址),以便了解每個

mac位址所代表

的主機都在什麼位置(與本交換機的哪個網口相連)。在報文**時,交換機就只需要向特定的網口**即可,從而避免不

必要的網路互動。這個就是交換機的「位址學習」。但是如果交換機遇到乙個自己未學習到的位址,就不會知道這個報文應

該從哪個網口**,則只好將報文**給所有網口(接收報文的那個網口除外)。

比如主機

c向主機

a傳送乙個報文,報文來到了交換機s1的

eth2

網口上。假設

s1剛剛啟動,還沒有學習到任何位址,則

它會將報文**給

eth0

和eth1

。同時,

s1會根據報文的源

mac位址,記錄下「主機

c是通過

eth2

網口接入的」。於是當主機a

向c傳送報文時,

s1只需要將報文**到

eth2

網口即可。而當主機d向

c傳送報文時,假設交換機

s2將報文**

到了s1

的eth2

網口(實際上

s2也多半會因為位址學習而不這麼做),則

s1會直接將報文丟棄而不做**(因為主機c就

是從eth2

接入的)。

然而,網路拓撲不可能是永不改變的。假設我們將主機

b和主機

c換個位置,當主機

c發出報文時(不管發給誰),交換機s1

的eth1

口收到報文,於是交換機

s1會更新其學習到的位址,將原來的「主機

c是通過

eth2

網口接入的」改為「主機

c是通過

eth1

網口接入的」。

但是如果主機

c一直不傳送報文呢?

s1將一直認為「主機

c是通過

eth2

網口接入的」,於是將其他主機傳送給

c的報文都

從eth2

**出去,結果報文就發丟了。所以交換機的位址學習需要有超時策略。對於交換機

s1來說,如果距離最後一次收

到主機c

的報文已經過去一定時間了(預設為

5分鐘),則

s1需要忘記「主機

c是通過

eth2

網口接入的」這件事情。這樣

一來,發往主機

c的報文又會被**到所有網口上去,而其中從

eth1

**出去的報文將被主機

c收到。

2.2  linux

的橋接實現

linux

核心支援網口的橋接(目前只支援乙太網介面)。但是與單純的交換機不同,交換機只是乙個二層裝置,對於接收到

的報文,要麼**、要麼丟棄。小型的交換機裡面只需要一塊交換晶元即可,並不需要

cpu。而執行著

linux

核心的機器本

身就是一台主機,有可能就是網路報文的目的地。其收到的報文除了**和丟棄,還可能被送到網路協議棧的上層(網路

層),從而被自己消化。

linux

核心是通過乙個虛擬的網橋裝置來實現橋接的。這個虛擬裝置可以繫結若干個乙太網介面設

備,從而將它們橋接起來。如下圖

臨床執業醫師

口腔執業醫師

中醫執業醫師

2 網橋裝置

br0繫結了

eth0

和eth1

。對於網路協議棧的上層來說,只看得到

br0,因為橋接是在資料鏈路層實現的,上層不需

要關心橋接的細節。於是協議棧上層需要傳送的報文被送到

br0,網橋裝置的處理**再來判斷報文該被**到

eth0

或是eth1

,或者兩者皆是;反過來,從

eth0

或從eth1

接收到的報文被提交給網橋的處理**,在這裡會判斷報文該**、丟棄、

或提交到協議棧上層。

而有時候

eth0

、eth1

也可能會作為報文的源位址或目的位址,直接參與報文的傳送與接收(從而繞過網橋)。

2.3   

網橋的功能

概括來說,網橋實現最重要的兩點:1.

mac學習:學習

mac位址,起初,網橋是沒有任何位址與埠的對應關係的,它傳送資料,還是得想

hub一樣,但是

每傳送乙個資料,它都會關心資料報的**

mac是從自己的哪個埠來的,由於學習,建立位址

-埠的對照表(

cam表)。

2.報文**:每傳送乙個資料報,網橋都會提取其目的

mac位址,從自己的位址

-埠對照表

(cam表)

中查詢由哪個埠

把資料報傳送出去。

3  網橋的配置

在linux

裡面使用網橋非常簡單,僅需要做兩件事情就可以配置了。其一是在編譯核心裡把

config_bridge

或condig_bridge_module

編譯選項開啟;其二是安裝

brctl

工具。第一步是使核心協議棧支援網橋,第二步是安裝使用者空間

工具,通過一系列的

ioctl

呼叫來配置網橋。下面以乙個相對簡單的例項來貫穿全文,以便分析**。

linux

機器有4

個網絡卡,分別是

eth0~eth4

,其中eth0

用於連線外網,而

eth1, eth2, eth3

都連線到一台

pc機,用於配置網橋。

只需要用下面的命令就可以完成網橋的配置:

brctl addbr br0 (

建立乙個網橋

br0, 

同時在linux

核心裡面建立虛擬網絡卡

br0) 

brctl addif br0 eth1 

brctl addif br0 eth2 

brctl addif br0 eth3 (

分別為網橋

br0新增介面

eth1, eth2

和eth3) 

其中br0

作為乙個網橋,同時也是虛擬的網路裝置,它即可以用作網橋的管理埠,也可作為網橋所連線區域網的閘道器,具

體情況視你的需求而定。要使用

br0介面時,必需為它分配

ip位址。為正常工作,

pc1, pc2

,pc3

和br0的ip

位址分配在同

乙個網段。

4 網橋的實現

centos7 網橋的配置

centos7下配置網橋,兩個步驟 1.新建網橋配置 2.修改網絡卡配置 在 etc sysconfig network scripts 目錄下新建ifcfg br0,新增如下配置資訊 123 4567 device br0 type bridge ipaddr 192.168.43.17 netm...

網橋和交換機的工作原理及區別

2011 07 20 12 01 佚名 網橋和交換機除了用cam表指導資料報 這點和hub不一樣外,網橋和交換機還有乙個特點 快取。本文就來為大家詳細的介紹網路基礎之網橋和交換機的工作原理及區別。網橋和交換機區別在敘述前,我們先一起看兩幅圖 1.網橋的連線模式 紅點處為hub 2.交換機連線模式 從...

網橋和交換機的工作原理及區別

2011 07 20 12 01 佚名 網橋和交換機除了用cam表指導資料報 這點和hub不一樣外,網橋和交換機還有乙個特點 快取。本文就來為大家詳細的介紹網路基礎之網橋和交換機的工作原理及區別。網橋和交換機區別在敘述前,我們先一起看兩幅圖 1.網橋的連線模式 紅點處為hub 2.交換機連線模式 從...