linux下的網橋介紹

網橋用來連接不同的網段。使不同的網段能夠相互通信,看起來很像三層的路由。它能夠有多個port,從而能夠將數據幀從一個port複製到另一個port。 

這裏要注意一點,linux下的網橋只能用於以太網。 
來看下示意圖: 


 

其中一個是bridge,一個是route。 

網橋的主要工作是從輸入幀學習主機的位置,建立一個地址的表(也就是表明這個主機(mac地址)屬於那個網絡),然後基於這個表來複制輸入幀到正確的位置。 

這裏雖然bridge只是起一個引導的作用,可是在下面兩個情況下,網橋也有可能處理輸入幀: 

1 將輸入幀up到上層協議棧。 

比如說這個網橋剛好還是一個router。 

2 將幀傳遞給協議處理handler. 

這裏主要是在STP(spanning tree protocol)中會用到 


接下來來看網橋如何工作: 


 

lan1和lan2中的任意主機發送幀,都會被這兩個lan中的所有主機(包括)接收到,當網橋接收到後,將此幀拷貝到它的port上,這裏也就是拷貝到另一個lan上。 

這裏可以看到這裏有個問題,那就是假設host a發送一個幀到host b,而此時,這兩個lan中的所有host都會接受到這個幀,這引起了極大地資源浪費。 

可是網橋還是很聰明的,它有地址學習的功能: 

當a第一次傳遞給b幀之後,網橋將會學習到a是在lan 1上,然後再當b傳遞數據給a時,網橋就不會傳遞多餘數據給lan 2的主機了。 


當網橋收到的地址是鏈路層廣播(FF:FF:FF:FF:FF:FF)時,他就會將這個幀拷貝到其他所有的port.因此多播將不會被學習。 

現在還有個問題,那就是局域網的主機是很容易變動的,舉個例子,還是上面的情況,可是我把host a搬到lan 2上去了,而此時網橋還認爲a在lan 1上,這個時侯數據傳遞就會出錯了。 

這裏解決方法就是使用定時器來定時更新這個表,當地址第一次被學習到時,定時器開始運行,然後當這個地址(mac地址)被重新學習到時,重啓這個定時器。這樣,我們通過設置定時器,就可以定時更新學習表了。這裏的定時器如果設的太短的話,會有個問題,那就是很容易使網橋不知道如何到達另外一個lan(原因是超時後會刪掉這條記錄,而此時又回到第一次發包的情況了)。網橋就會賦值幀到所有的port. 

看下面的示意圖: 


 


網橋迴路的產生. 

先看下面的網絡圖: 


 

這裏有兩個網橋,此時就有可能會產生迴路。當主機a發送一個幀之後,網橋 1 和 2 ,我們假設同時收到這個幀(此時學習到a處於 lan 1),並同時發到lan2,此時他們還會給對方發送一個幀,而這個幀剛好是剛纔幀的賦值,這個時侯就會使這兩個網橋認爲a 處於lan 2上。這個時侯更新查找表,然後把包又發給lan 1.這時就形成了迴路。 

我們用圖來表示上面的網橋和lan的關係: 


 

可以看到如果我們要打破這個迴路只需要關閉掉網橋1 或網橋2 的一個端口就行了。 

打破迴路的算法基本所有算法書都有實現,在網絡中尋找最佳無環路拓撲結構的算法是Spanning Tree Protocol,也就是如何在多個網橋和lan中實現無迴路的網絡。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章