1 二層轉(zhuǎn)發(fā)基礎(chǔ)
這里的二層指的是計(jì)算機(jī)網(wǎng)絡(luò)七層模型中的二層,從第一層到第7層分別是物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、運(yùn)輸層、會(huì)話層、表示層和應(yīng)用層。還有一種說(shuō)法是4層(或者是5層)網(wǎng)絡(luò)模型,分別是數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、運(yùn)輸層和應(yīng)用層,如果按照5層的說(shuō)法還要加上物理層。這里的二層指的是數(shù)據(jù)鏈路層。

1.1 以太網(wǎng)基礎(chǔ)
以太網(wǎng)沖突檢測(cè)
CSMA/CD:載波偵聽(tīng)與沖突檢測(cè),主機(jī)在發(fā)送數(shù)據(jù)包時(shí),先檢測(cè)線路是否被其他主機(jī)占用,確保發(fā)送數(shù)據(jù)包時(shí)線路是空閑的;發(fā)現(xiàn)沖突就停止發(fā)送,延遲一個(gè)隨機(jī)時(shí)間之后再繼續(xù)發(fā)送。
mac地址
MAC地址也就是物理地址,大小為48位,6個(gè)字節(jié),前24位是廠商代碼,后24位為序號(hào),比如H3C廠商代碼為00-0f-e2。
- 單播地址:第一個(gè)字節(jié)最低位為0,如 00-0f-e2-00-00-06
- 多播地址:第一個(gè)字節(jié)最低位為1,如 01-0f-e2-00-00-06
- 廣播地址:48位全為1,如ff-ff-ff-ff-ff-ff
以太幀格式

前兩個(gè)字段分別是目的地址和源地址字段。第3個(gè)字段是2字節(jié)的類型字段,用來(lái)標(biāo)識(shí)上一層是什么協(xié)議(0x800:IP協(xié)議,0x0806:ARP協(xié)議等)。第4個(gè)字段是數(shù)據(jù)字段,長(zhǎng)度在46-1500字節(jié)之間。最后一個(gè)字段是CRC檢驗(yàn)字段,存放4字節(jié)的幀檢測(cè)序列FCS。校驗(yàn)范圍是目的地址、源地址、類型、數(shù)據(jù)字段。
MAC幀長(zhǎng)度最小為64字節(jié),數(shù)據(jù)字段最小為46字節(jié),如果不夠,則自動(dòng)加0填充。
MAC幀格式中,其首部并沒(méi)有幀長(zhǎng)度字段,那么MAC層怎么知道接收到的以太網(wǎng)幀中取出多少字節(jié)數(shù)據(jù)交付上一層協(xié)議呢?我們知道,以太網(wǎng)幀使用的曼切斯特編碼,這種編碼的一個(gè)重要特點(diǎn)就是:在曼切斯特編碼的每一個(gè)碼元(不管碼元是1還是0)的正中間有一次電壓轉(zhuǎn)換(從高到低或從低到高)。當(dāng)發(fā)送方把一個(gè)以太網(wǎng)幀發(fā)送完畢后,就不再發(fā)送其他碼元了,一次,發(fā)送發(fā)網(wǎng)絡(luò)適配器接口上電壓也就不再變化,這樣接收方就很容易找到以太網(wǎng)的結(jié)束位置。
802.3幀格式

以太幀和802.3幀如何區(qū)別
802.3定義的有效長(zhǎng)度值與以太網(wǎng)的有效類型無(wú)一相同,這樣就可以區(qū)分了。
MAC最小長(zhǎng)度為什么是64字節(jié)
以太網(wǎng)采用CSMA/DA沖突檢測(cè)算法,一個(gè)主機(jī)發(fā)送一個(gè)數(shù)據(jù)包后最多經(jīng)過(guò)一個(gè)征用時(shí)間就會(huì)知道該數(shù)據(jù)包是否收到了碰撞,以太網(wǎng)以51.2us作為征用時(shí)間,對(duì)于10M以太網(wǎng),在征用時(shí)間時(shí)間內(nèi)可以發(fā)送512 bit數(shù)據(jù),也就是64字節(jié)。這64字節(jié)出去以太幀首部以及檢驗(yàn)和字段的長(zhǎng)度共16字節(jié),也就剩下46字節(jié),也就是以太幀數(shù)據(jù)域的最小長(zhǎng)度了。
沖突域和廣播域
- 沖突網(wǎng)絡(luò)(沖突域):連接在同一個(gè)到導(dǎo)線上的所有工作站點(diǎn)集合,一個(gè)節(jié)點(diǎn)發(fā)出的報(bào)文其余節(jié)點(diǎn)都能收到,從而產(chǎn)生沖突。
- 廣播網(wǎng)絡(luò)(廣播域):限制以太網(wǎng)廣播報(bào)文的范圍,一個(gè)站點(diǎn)發(fā)送一個(gè)廣播報(bào)文其余站點(diǎn)都可以收到。
一般來(lái)說(shuō),廣播網(wǎng)絡(luò)定義了第三層網(wǎng)絡(luò),如IP子網(wǎng)等,VLAN簡(jiǎn)單來(lái)說(shuō)就是一個(gè)廣播域。
HUB設(shè)備
HUB設(shè)備也就是咱們常說(shuō)的集線器,HUB對(duì)所有連接的LAN制作信號(hào)的中繼,也就是當(dāng)信號(hào)衰減時(shí),再重新修正信號(hào)重新發(fā)送。連接在集線器上的所有設(shè)備構(gòu)成了一個(gè)沖突域和廣播域,這樣在主機(jī)數(shù)目比較多時(shí)就會(huì)產(chǎn)生沖突泛濫和廣播嚴(yán)重問(wèn)題。

2 二層轉(zhuǎn)發(fā)原理
二層轉(zhuǎn)發(fā)流程
- 提取數(shù)據(jù)報(bào)的源MAC地址,查詢MAC轉(zhuǎn)發(fā)表(也就是L2FDB),如果找到就直接發(fā)送到對(duì)應(yīng)端口。
- 對(duì)于表中不包含的地址,通過(guò)廣播發(fā)送,也就是發(fā)送到所有端口。
- 使用地址自動(dòng)學(xué)習(xí)(根據(jù)源MAC地址學(xué)習(xí))和老化機(jī)制(定時(shí)機(jī)制)來(lái)維護(hù)MAC轉(zhuǎn)發(fā)表的信息,二層轉(zhuǎn)發(fā)一般不會(huì)更改數(shù)據(jù)包內(nèi)容。

引入VLAN
雖然交換機(jī)解決了沖突域的問(wèn)題,但是還是存在廣播域問(wèn)題,這里就應(yīng)用到了VLAN,也就是在二層交換機(jī)上引入VLAN機(jī)制。

VLAN機(jī)制可以使處在相同VLAN下的主機(jī)任意通信(二層交換),不同VLAN主機(jī)通信完全隔離,如需通信需通過(guò)三層交換,阻斷廣播包,減小廣播域,提供了網(wǎng)絡(luò)安全性。VLAN簡(jiǎn)單來(lái)說(shuō)就是一個(gè)廣播域,可以跨越多個(gè)物理設(shè)備構(gòu)成一個(gè)VLAN,這樣網(wǎng)絡(luò)構(gòu)建和維護(hù)更加方便。
VLAN的劃分方法可以根據(jù)交換機(jī)端口來(lái)劃分,根據(jù)MAC地址來(lái)劃分,根據(jù)網(wǎng)絡(luò)層(IP地址、IP子網(wǎng))來(lái)劃分,根據(jù)IP組播劃分等。
VLAN協(xié)議格式

- TPID:協(xié)議標(biāo)志,通常是0x8100
- Priority:優(yōu)先級(jí)
- CFI:規(guī)范指示為,總設(shè)為0
- VLAN ID:VLAN號(hào)
VLAN端口
VLAN基于端口劃分可以分為種類端口類型:access、trunk、hybird。
- Access類型的端口只能屬于1個(gè)VLAN,一般用于連接計(jì)算機(jī)的端口
- Trunk類型的端口可以允許多個(gè)VLAN通過(guò),可以接收和發(fā)送多個(gè)VLAN的報(bào)文,一般用于交換機(jī)之間連接的端口
- Hybrid類型的端口可以允許多個(gè)VLAN通過(guò),可以接收和發(fā)送多個(gè)VLAN的報(bào)文,可以用于交換機(jī)之間連接,也可以用于連接用戶的計(jì)算機(jī)
Hybrid端口和Trunk端口在接收數(shù)據(jù)時(shí),處理方法是一樣的,唯一不同之處在于發(fā)送數(shù)據(jù)時(shí):Hybrid端口可以允許多個(gè)VLAN的報(bào)文發(fā)送時(shí)不打標(biāo)簽,而Trunk端口只允許缺省VLAN的報(bào)文發(fā)送時(shí)不打標(biāo)簽。
VLAN下交換機(jī)接口出入數(shù)據(jù)處理過(guò)程
1)Acess端口收?qǐng)?bào)文:收到一個(gè)報(bào)文,判斷是否有VLAN信息:如果沒(méi)有則打上端口的PVID,并進(jìn)行交換轉(zhuǎn)發(fā),如果有則直接丟棄(缺省)
2)Acess端口發(fā)報(bào)文:將報(bào)文的VLAN信息剝離,直接發(fā)送出去
3)trunk端口收?qǐng)?bào)文:收到一個(gè)報(bào)文,判斷是否有VLAN信息:如果沒(méi)有則打上端口的PVID,并進(jìn)行交換轉(zhuǎn)發(fā),如果有判斷該trunk端口是否允許該VLAN的數(shù)據(jù)進(jìn)入:如果可以則轉(zhuǎn)發(fā),否則丟棄
4)trunk端口發(fā)報(bào)文:比較端口的PVID和將要發(fā)送報(bào)文的VLAN信息,如果兩者相等則剝離VLAN信息,再發(fā)送,如果不相等則直接發(fā)送
5)hybrid端口收?qǐng)?bào)文:收到一個(gè)報(bào)文,判斷是否有VLAN信息,如果沒(méi)有則打上端口的PVID,并進(jìn)行交換轉(zhuǎn)發(fā),如果有則判斷該hybrid端口是否允許該VLAN的數(shù)據(jù)進(jìn)入;如果可以則轉(zhuǎn)發(fā),否則丟棄(此時(shí)端口上的untag配置是不用考慮的,untag配置只對(duì)發(fā)送報(bào)文時(shí)起作用)
6)hybrid端口發(fā)報(bào)文:1.判斷該VLAN在本端口的屬性(disp interface 即可看到該端口對(duì)哪些VLAN是untag, 哪些VLAN是tag);2.如果是untag則剝離VLAN信息,再發(fā)送,如果是tag則直接發(fā)送
3 VLAN下的二層轉(zhuǎn)發(fā)流程
支持VLAN的交換機(jī),MAC地址學(xué)習(xí)方式分為2中:獨(dú)立式(IVL)和共享式(SVL),對(duì)應(yīng)的L2FDB表項(xiàng)內(nèi)容有VLAN ID、MAC地址和所在端口。
- 根據(jù)目的地址查MAC轉(zhuǎn)發(fā)表(L2FDB)處理轉(zhuǎn)發(fā)
- -獨(dú)立式:根據(jù)VLAN ID查找轉(zhuǎn)發(fā)表,找出相同VLAN ID的轉(zhuǎn)發(fā)表項(xiàng)范圍,在這些表項(xiàng)中找出MAC地址相匹配的出端口。
- -共享式:根據(jù)目的地址查轉(zhuǎn)發(fā)表,找到對(duì)應(yīng)的出接口,判斷出接口的VLAN ID和報(bào)文中的VLAN ID是否一致,若匹配則通過(guò)該端口轉(zhuǎn)發(fā)報(bào)文,否則丟棄。
- 對(duì)于轉(zhuǎn)發(fā)表中不包含的地址,通過(guò)廣播方式轉(zhuǎn)發(fā)
- -獨(dú)立式:查找不到目的MAC,則在該VLAN下的所有端口進(jìn)行廣播
- -分享式:查找不到目的MAC,然后判斷報(bào)文中的VLAN ID和端口的VLAN ID是否匹配,若匹配則在該VLAN中廣播,否則丟棄。
- MAC轉(zhuǎn)發(fā)表的源地址學(xué)習(xí)
- -獨(dú)立式:以源MAC地址和VLAN創(chuàng)建表項(xiàng),故存在MAC地址相同,VLAN ID不同的表項(xiàng)。
- -共享式:以源MAC地址創(chuàng)建表項(xiàng),若MAC轉(zhuǎn)發(fā)表中存在MAC地址相同的表項(xiàng),則覆蓋原有表項(xiàng)。