網橋的工作原理 - kummer話你知

網橋是什么

我們這兒所說的網橋(Bridge),是最基本的二層交換機(不支持VLAN功能的交換機),其基本功能是轉發網絡中的二層報文。其工作總體流程如下:

  1. 從某個端口收到的二層報文,解析二層報文的源MAC和目的MAC
  2. 根據源MAC學習形成MAC表
  3. 根據目的MAC,原封不動的將該報文轉發到適當的出端口,從而保證最終目的設備能收到這個報文。這個轉發過程有兩個關鍵:
    a. 原封不動的: 所謂原封不動,就是交換機不會修改報文內容,包括報文的源MAC,目的MAC(這一點與路由器形成區別,路由器工作在三層,在轉發過程中每一跳都會修改源MAC和目的MAC)
    b. 適當的:交換機要確保報文最終能安全可靠的到達目的地,為了達到這個目的,這兒的適當的目的端口有可能不是一個。 比如:為了保證報文能最終達到這個目標,交換機在不知道目的設備在哪個端口的時候,會將一個報文復制多份,并從多個端口發送出去(除報文源端口以外的所有端口--這種行為成為泛洪-flood)。

網橋要解決哪些問題

網橋:不支持VLAN的二層交換機

網橋轉發報文的流程如下:

收到一個報文后,根據報文的目的MAC,選擇適當的端口進行轉發。對于不同的報文,起轉發流程略有差異:
a. 已知單播 - 單播:對于單播報文,如果知道目的地址在哪個端口(MAC表中能找到該目的MAC),就從該端口轉發出去
b. 未知單播 - 泛洪:對于單播報文,如果暫時還不知道目的地址是哪個端口,則從所有非源端口泛洪出去
c. 組播廣播 - 泛洪:對于廣播和組播,也需要泛洪。

*注:網橋這樣工作方式,總的來說,就是為了盡量達到一個目的:以盡可能小的代價保證報文能最終到達它的目的地 *

為了網橋上面轉發行為能正常實施,網橋還需要考慮下面的問題:

  1. 維護MAC表:需要維護一張MAC地址-接口 映射表,并保證這張表的正確性。
  2. 報文轉發環路的問題:防止報文環路的一個基本思路就是通過STP等控制面協議,將網絡中的環剪斷(破環)。也就是說,這個網絡中雖然物理上有一些環路,但可以故意讓某些鏈路停止工作,從而將物理上的有環網絡(離散數學中的圖),轉變為邏輯上的無環網絡(離散數學中的樹)。

工作原理細節

MAC學習:維護MAC表

MAC學習簡單示例

mac表實際上就是一個mac地址到出接口的映射表
S1的mac表

mac表 出接口
macA eth0
macB eth1
macC eth2
macD eth2

S2的mac表

mac表 出接口
macA eth0
macB eth0
macC eth1
macD eth2
  1. **監聽學習: **當交換機從某個端口收到一個數據包,它先讀取包頭中的源MAC地址,這樣它就知道源MAC地址的機器是連在哪個端口上的;
比如S1從eth2收到C發送的報文,這樣S1網橋就會在mac表中增加一個條目 
[macC --> eth2]  表示macC與eth2連著,以后收到目的地是macC的報文,就應該往eth2發送。

但如果S1剛剛啟動,還不知道macC連著哪個端口怎么辦? 網橋的解決方法是將報文轉發給所有網口(接收報文的那個網口除外)。雖然效率不高,但至少能保證報文最終能到達目的地

  1. 監聽更新: 然而,網絡拓撲不可能是永不改變的。假設我們將主機B和主機C換個位置,當主機C發出報文時(不管發給誰),交換機S1的eth1口收到報文,于是交換機 S1會更新其學習到的地址,將原來的“主機C是通過eth2網口接入的”改為“主機C是通過eth1網口接入的”。
如果B和C換了一個位置,則S1會更新macC的出接口
[macC --> eth1] 
  1. **定時老化: ** 網絡拓撲變化還有一種可能性,就是直接將機器C拔掉了,這種情況下怎么保證mac表的正確性呢。很簡單,如果一定時間內該端口沒有收到C的任何報文,則假設該主機以及離線,將改主機對應的mac表象老化刪除。 (加入該主機還在,只是這段時間沒有發送報文怎么辦? 想想,其實沒有關系,大不了再次泛洪,重新學習,就和剛啟動時一樣)

轉發環路

轉發環路的問題,通常需要通過STP等信令協議進行破環。通過STP對某些鏈路進行剪枝操作,故意讓某些鏈路停止工作,從而將物理上的有環網絡(離散數學中的圖),轉變為邏輯上的無環網絡(離散數學中的樹)。
具體參見后面STP工作原理

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容