Linux 網橋原理分析

2021-06-23 02:28:45 字數 2101 閱讀 2232

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收到。

linux核心支援網口的橋接(目前只支援乙太網介面)。但是與單純的交換機不同,交換機只是乙個二層裝置,對於接收到的報文,要麼**、要麼丟棄。小型的交換機裡面只需要一塊交換晶元即可,並不需要cpu。而執行著linux核心的機器本身就是一台主機,有可能就是網路報文的目的地。其收到的報文除了**和丟棄,還可能被送到網路協議棧的上層(網路層),從而被自己消化。

linux核心是通過乙個虛擬的網橋裝置來實現橋接的。這個虛擬裝置可以繫結若干個乙太網介面裝置,從而將它們橋接起來。如下圖(摘自ulni):

網橋裝置br0繫結了eth0和eth1。對於網路協議棧的上層來說,只看得到br0,因為橋接是在資料鏈路層實現的,上層不需要關心橋接的細節。於是協 議棧上層需要傳送的報文被送到br0,網橋裝置的處理**再來判斷報文該被**到eth0或是eth1,或者兩者皆是;反過來,從eth0或從eth1接 收到的報文被提交給網橋的處理**,在這裡會判斷報文該**、丟棄、或提交到協議棧上層。

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

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

1. mac學習:學習mac位址,起初,網橋是沒有任何位址與埠的對應關係的,它傳送資料,還是得想hub一樣,但是每傳送乙個資料,它都會關心資料報的**mac是從自己的哪個埠來的,由於學習,建立位址-埠的對照表(cam表)。

2. 報文**:每傳送乙個資料報,網橋都會提取其目的mac位址,從自己的位址-埠對照表(cam表)中查詢由哪個埠把資料報傳送出去。

Linux 網橋原理分析(三)

網橋最主要有三個資料結構 struct net bridge,struct net bridge port,struct net bridge fdb entry,他們之間的關係如下圖 展開來如下圖 說明 1.其中最左邊的net device是乙個代表網橋的虛擬裝置結構,它關聯了乙個net brid...

網橋工作原理

在這裡插入描述 預備知識 1.碰撞域 衝突域 在任意時刻,同乙個衝突域中,只能有一台機器在傳送資料,這個衝突域內的機器都會受到傳送的內容,接不接受取決於是不是目的主機。2.網橋是工作在資料鏈路層的裝置,能隔離衝突域,也就是說網橋的每個埠都對應乙個衝突域,在乙個埠連線的網段中 比如網橋1的埠1,連線的...

網橋的工作原理

一 什麼是網橋?網橋 bridge 也稱橋接器,是連線兩個區域網的儲存 裝置,用它可以完成具有相同或相似體系結構網路系統的連線。一般情況下,被連線的網路系統都具有相同的邏輯鏈路控制規程 llc 但 訪問控制協議 mac 可以不同。網橋工作在資料鏈路層,將兩個lan連起來,根據mac位址來 幀,可以看...