網(wǎng)橋是什么
我們這兒所說(shuō)的網(wǎng)橋(Bridge),是最基本的二層交換機(jī)(不支持VLAN功能的交換機(jī)),其基本功能是轉(zhuǎn)發(fā)網(wǎng)絡(luò)中的二層報(bào)文。其工作總體流程如下:
- 從某個(gè)端口收到的二層報(bào)文,解析二層報(bào)文的源MAC和目的MAC
- 根據(jù)源MAC學(xué)習(xí)形成MAC表
- 根據(jù)目的MAC,原封不動(dòng)的將該報(bào)文轉(zhuǎn)發(fā)到適當(dāng)?shù)?/strong>出端口,從而保證最終目的設(shè)備能收到這個(gè)報(bào)文。這個(gè)轉(zhuǎn)發(fā)過(guò)程有兩個(gè)關(guān)鍵:
a. 原封不動(dòng)的: 所謂原封不動(dòng),就是交換機(jī)不會(huì)修改報(bào)文內(nèi)容,包括報(bào)文的源MAC,目的MAC(這一點(diǎn)與路由器形成區(qū)別,路由器工作在三層,在轉(zhuǎn)發(fā)過(guò)程中每一跳都會(huì)修改源MAC和目的MAC)
b. 適當(dāng)?shù)模?/strong>交換機(jī)要確保報(bào)文最終能安全可靠的到達(dá)目的地,為了達(dá)到這個(gè)目的,這兒的適當(dāng)?shù)哪康亩丝谟锌赡懿皇且粋€(gè)。 比如:為了保證報(bào)文能最終達(dá)到這個(gè)目標(biāo),交換機(jī)在不知道目的設(shè)備在哪個(gè)端口的時(shí)候,會(huì)將一個(gè)報(bào)文復(fù)制多份,并從多個(gè)端口發(fā)送出去(除報(bào)文源端口以外的所有端口--這種行為成為泛洪-flood)。
網(wǎng)橋要解決哪些問(wèn)題

網(wǎng)橋轉(zhuǎn)發(fā)報(bào)文的流程如下:
收到一個(gè)報(bào)文后,根據(jù)報(bào)文的目的MAC,選擇適當(dāng)?shù)亩丝谶M(jìn)行轉(zhuǎn)發(fā)。對(duì)于不同的報(bào)文,起轉(zhuǎn)發(fā)流程略有差異:
a. 已知單播 - 單播:對(duì)于單播報(bào)文,如果知道目的地址在哪個(gè)端口(MAC表中能找到該目的MAC),就從該端口轉(zhuǎn)發(fā)出去
b. 未知單播 - 泛洪:對(duì)于單播報(bào)文,如果暫時(shí)還不知道目的地址是哪個(gè)端口,則從所有非源端口泛洪出去
c. 組播廣播 - 泛洪:對(duì)于廣播和組播,也需要泛洪。
*注:網(wǎng)橋這樣工作方式,總的來(lái)說(shuō),就是為了盡量達(dá)到一個(gè)目的:以盡可能小的代價(jià)保證報(bào)文能最終到達(dá)它的目的地 *
為了網(wǎng)橋上面轉(zhuǎn)發(fā)行為能正常實(shí)施,網(wǎng)橋還需要考慮下面的問(wèn)題:
- 維護(hù)MAC表:需要維護(hù)一張
MAC地址-接口 映射表,并保證這張表的正確性。 - 報(bào)文轉(zhuǎn)發(fā)環(huán)路的問(wèn)題:防止報(bào)文環(huán)路的一個(gè)基本思路就是通過(guò)STP等控制面協(xié)議,將網(wǎng)絡(luò)中的環(huán)剪斷(破環(huán))。也就是說(shuō),這個(gè)網(wǎng)絡(luò)中雖然物理上有一些環(huán)路,但可以故意讓某些鏈路停止工作,從而將物理上的有環(huán)網(wǎng)絡(luò)(離散數(shù)學(xué)中的圖),轉(zhuǎn)變?yōu)檫壿嬌系臒o(wú)環(huán)網(wǎng)絡(luò)(離散數(shù)學(xué)中的樹(shù))。
工作原理細(xì)節(jié)
MAC學(xué)習(xí):維護(hù)MAC表

mac表實(shí)際上就是一個(gè)mac地址到出接口的映射表
S1的mac表
| mac表 | 出接口 |
|---|---|
| macA | eth0 |
| macB | eth1 |
| macC | eth2 |
| macD | eth2 |
S2的mac表
| mac表 | 出接口 |
|---|---|
| macA | eth0 |
| macB | eth0 |
| macC | eth1 |
| macD | eth2 |
- **監(jiān)聽(tīng)學(xué)習(xí): **當(dāng)交換機(jī)從某個(gè)端口收到一個(gè)數(shù)據(jù)包,它先讀取包頭中的源MAC地址,這樣它就知道源MAC地址的機(jī)器是連在哪個(gè)端口上的;
比如S1從eth2收到C發(fā)送的報(bào)文,這樣S1網(wǎng)橋就會(huì)在mac表中增加一個(gè)條目
[macC --> eth2] 表示macC與eth2連著,以后收到目的地是macC的報(bào)文,就應(yīng)該往eth2發(fā)送。
但如果S1剛剛啟動(dòng),還不知道m(xù)acC連著哪個(gè)端口怎么辦? 網(wǎng)橋的解決方法是將報(bào)文轉(zhuǎn)發(fā)給所有網(wǎng)口(接收?qǐng)?bào)文的那個(gè)網(wǎng)口除外)。雖然效率不高,但至少能保證報(bào)文最終能到達(dá)目的地
- 監(jiān)聽(tīng)更新: 然而,網(wǎng)絡(luò)拓?fù)洳豢赡苁怯啦桓淖兊?。假設(shè)我們將主機(jī)B和主機(jī)C換個(gè)位置,當(dāng)主機(jī)C發(fā)出報(bào)文時(shí)(不管發(fā)給誰(shuí)),交換機(jī)S1的eth1口收到報(bào)文,于是交換機(jī) S1會(huì)更新其學(xué)習(xí)到的地址,將原來(lái)的“主機(jī)C是通過(guò)eth2網(wǎng)口接入的”改為“主機(jī)C是通過(guò)eth1網(wǎng)口接入的”。
如果B和C換了一個(gè)位置,則S1會(huì)更新macC的出接口
[macC --> eth1]
- **定時(shí)老化: ** 網(wǎng)絡(luò)拓?fù)渥兓€有一種可能性,就是直接將機(jī)器C拔掉了,這種情況下怎么保證mac表的正確性呢。很簡(jiǎn)單,如果一定時(shí)間內(nèi)該端口沒(méi)有收到C的任何報(bào)文,則假設(shè)該主機(jī)以及離線,將改主機(jī)對(duì)應(yīng)的mac表象老化刪除。 (加入該主機(jī)還在,只是這段時(shí)間沒(méi)有發(fā)送報(bào)文怎么辦? 想想,其實(shí)沒(méi)有關(guān)系,大不了再次泛洪,重新學(xué)習(xí),就和剛啟動(dòng)時(shí)一樣)
轉(zhuǎn)發(fā)環(huán)路
轉(zhuǎn)發(fā)環(huán)路的問(wèn)題,通常需要通過(guò)STP等信令協(xié)議進(jìn)行破環(huán)。通過(guò)STP對(duì)某些鏈路進(jìn)行剪枝操作,故意讓某些鏈路停止工作,從而將物理上的有環(huán)網(wǎng)絡(luò)(離散數(shù)學(xué)中的圖),轉(zhuǎn)變?yōu)檫壿嬌系臒o(wú)環(huán)網(wǎng)絡(luò)(離散數(shù)學(xué)中的樹(shù))。
具體參見(jiàn)后面STP工作原理