網(wǎng)絡(luò)協(xié)議-MAC層

網(wǎng)絡(luò)鏈路可以分為兩大類:點到點連接和廣播信道。廣播信道也稱為多路訪問信道,其主要需要解決的關(guān)鍵問題是當(dāng)多方競爭信道時如何確定誰擁有使用權(quán),用來確定多路訪問信道下一個使用者的協(xié)議稱為 介質(zhì)訪問控制(MAC, Media Access Control Layer) 子層,其屬于數(shù)據(jù)鏈路層的一個子層,技術(shù)上MAC子層位于數(shù)據(jù)鏈路層底部。在LAN中,MAC子層很重要,特別是在無線局域網(wǎng)中,因為無線本質(zhì)上就是廣播信道。

多路訪問協(xié)議

ALOHA協(xié)議

ALOHA一種使用無線廣播技術(shù)的分組交換計算機網(wǎng)絡(luò),實現(xiàn)一點到多點的數(shù)據(jù)通信。取名ALOHA,是夏威夷人表示致意的問候語,這項研究計劃的目的是要解決夏威夷群島之間的通信問題。協(xié)議分為純ALOHA和分槽ALOHA,區(qū)別在于時間是連續(xù)的還是分成離散槽。

純ALOHA

基本思想是:當(dāng)用戶有數(shù)據(jù)需要發(fā)送時就傳輸,發(fā)送方通過偵聽信道檢查是否發(fā)生看沖突,多個用戶共享同一個信道就會產(chǎn)生競爭,假設(shè)兩個發(fā)送方同時傳輸數(shù)據(jù)時就會發(fā)生沖突,兩個沖突的幀都將被損壞,這兩個發(fā)送方各自隨機等待不同時間,然后再次發(fā)生幀。
不過對于這種任何人都可以隨意發(fā)送的傳輸方式,在用戶量很多的時候成功率基本為0,協(xié)議基本癱瘓。經(jīng)測試,在不同用戶量的情況下,最好的信道利用成功率為18%。

分槽ALOHA

策略是將時間分成離散的間隔,稱為時間槽(slot),每個時間槽對應(yīng)于一幀。站不允許用戶每次敲入回車鍵就立即發(fā)送幀,必須要等到一個時間槽的開始時刻。其最好的信道利用成功率是37%。

載波偵聽協(xié)議(Carrier Sense Protocol)

站監(jiān)聽信道是否存在載波,即是否有傳輸,在發(fā)送幀前采取相應(yīng)的動作。

1-堅持

當(dāng)一個站要發(fā)送數(shù)據(jù)時,首先偵聽信道,如果信道空閑就發(fā)送該幀,如果信道忙,該站等待直至信道變成空閑然后再發(fā)送幀。不過這個方案還是會發(fā)生沖突,當(dāng)兩個站在第三個站的發(fā)生過程中準(zhǔn)備好了發(fā)生的幀,它們都會等待直到當(dāng)前的傳輸結(jié)束,然后雙方將確定同時開始傳輸,沖突發(fā)生了。如果發(fā)生沖突,站隨機等待一段時間,然后再從頭開始上述過程。
因為當(dāng)站發(fā)現(xiàn)信道空閑時,它傳輸數(shù)據(jù)的概率為1,故稱為1-堅持載波偵聽。

非堅持

站發(fā)送數(shù)據(jù)前依然偵聽信道,發(fā)現(xiàn)信道空閑就傳輸數(shù)據(jù),如果發(fā)現(xiàn)信道正在傳輸中,則該站并不持續(xù)對信道進行監(jiān)聽,以便傳輸結(jié)束后立即抓住機會發(fā)送數(shù)據(jù),相反它會取消監(jiān)聽然后隨機等待一段時間重復(fù)上述算法。
因此該算法將會導(dǎo)致更好的信道利用率,但也會帶來更大的延遲。

p-堅持

它適用于分時間槽的信道。站發(fā)送數(shù)據(jù)前偵聽信道,發(fā)現(xiàn)信道空閑就按照概率p發(fā)送數(shù)據(jù),以概率 q=1-p 將發(fā)送推遲到一下時間槽。這個過程一直重復(fù)下去,直到幀被發(fā)送出去,或者另一個站開始發(fā)送數(shù)據(jù)。

無沖突協(xié)議

假設(shè)共有N個站,每個站都有唯一的地址,地址范圍從0到N-1。

位圖協(xié)議(Bitmap)

采用了基本位圖法,使用時間槽,稱為競爭期。每個競爭期正好包含N個位置槽,如果0號站有一幀時間要發(fā)送,則它在第0個槽中傳送1位,在這個槽中,不允許其他站發(fā)送。一般地,j號站通過在j號槽中插入1位來聲明自己有幀要發(fā)送,當(dāng)所有N個槽都經(jīng)過后,每個站都知道了哪些站希望傳送數(shù)據(jù),這時候它們便按照數(shù)字順序開始傳送數(shù)據(jù)了。

bitmap.png

由于每個站都同意下一個是誰傳輸,所以永遠(yuǎn)也不會發(fā)生沖突,當(dāng)最后一個就緒站傳送完它的幀后,于是另一個N位競爭期又開始了。
如果一個站在它對應(yīng)的位槽剛剛經(jīng)過就準(zhǔn)備好了要發(fā)送的數(shù)據(jù),那它就非常不幸,只能保持沉默;直到每個站都獲得了發(fā)送數(shù)據(jù)的機會,新的位圖再次到來,它才能通過位槽表明自己有傳輸?shù)囊庠浮?br> 當(dāng)某個站要發(fā)送數(shù)據(jù)時,當(dāng)前槽處于位圖中間的某個地方,平均對于低序號站來說,如0號站必須等待完成當(dāng)前掃描的N/2個槽,再等待完成下一次掃描的另外N個槽,然后才能開始傳輸數(shù)據(jù);對于高序號站,只需等待當(dāng)面半個掃描周期N/2位槽,就可以傳輸數(shù)據(jù)了,不必等待到下一次掃描。由于低序號的站必須等待平均1.5N個槽,而高序號的站必須等待平均0.5N個槽,因此對所有站而言,要平均等待N個槽。

令牌傳遞(Token)

類似位圖的實質(zhì)讓每個站以預(yù)定義的順序輪流發(fā)送一幀,該方案通過傳遞一個稱為 令牌 的短消息,該令牌以 令牌環(huán)(Token Ring) 的順序從一個站傳到下一個站。令牌代表了發(fā)送權(quán)限,如果站有等待傳輸?shù)膸瑪?shù)據(jù),當(dāng)它接受到令牌就可以發(fā)送幀,然后再把令牌傳遞到下一站,如果它沒有排隊的幀要傳,則它只是簡單地把令牌傳遞下去。

token.png

令牌和位圖的細(xì)微差別在于,在周期中所有的位置是均等的,它們的等待發(fā)送數(shù)據(jù)的時間是一樣的,所以不存在偏向低編號或者高編號的情況。

二進制倒計數(shù)(Binary Countdown)

令牌和位圖每個站的開銷是1位,所以該協(xié)議不可能很好的擴展到含有上千個站的網(wǎng)絡(luò)中。而該方案基本思路是:如果一個站想要使用信道,它就以二進制位串的形式從高序號位開始廣播自己的地址,假設(shè)所有地址都有同樣的長度,不同站在發(fā)送數(shù)據(jù)的同時,地址中相同位進行布爾或(OR)運算,一個站只要看到自己的對應(yīng)地址位中的0值位置被改寫成了1,則它必須放棄競爭。
舉例:如果站0010、0100、1001和1010
都要試圖發(fā)送數(shù)據(jù)獲取信道,從高位第4位開始OR得到1,站0010和0100看到了1,立即明白比它們高序號的站也在競爭信道,所以它們放棄這一輪的競爭,而站1001和1010則繼續(xù)競爭信道,接下來第3位OR得到0,于是兩者繼續(xù)競爭,第2位OR得到1,所以站1001放棄,站1010獲得了競爭,它現(xiàn)在可以傳輸一幀,之后又開始新一輪的競爭。
高序站的優(yōu)先級比低序站的優(yōu)先級高,這可能是好事也可能是壞事,取決于上下文。

有限競爭協(xié)議(Limited-Contention Protocol)

有兩個重要性能指標(biāo)來衡量有競爭協(xié)議和無競爭協(xié)議:低負(fù)載下的延遲,以及高負(fù)載下的信道利用率。在負(fù)載較輕的情況下,競爭方法(ALOHA協(xié)議)更為理想,因為它的延遲較短(沖突很少發(fā)生),無競爭方法有相對高的延遲;隨著負(fù)載的增加,競爭方法對信道仲裁所需要的開銷變得越來越大,而無競爭方法的信道效率反而得到提高。
把競爭協(xié)議和無沖突協(xié)議的優(yōu)勢結(jié)合起來,這樣得到的新協(xié)議在低負(fù)載下采用競爭的做法而提供較短的延遲,在高負(fù)載下采用無沖突技術(shù)從而獲得良好的信道效率,就稱為有限競爭協(xié)議。首先將所有的站劃分成組,只有0號組的成員才允許競爭0號時間槽,如果該組中一個成員競爭成功了,則它獲得信道馬上傳送它的幀,該次競爭期結(jié)束準(zhǔn)備開始下一個競爭期;如果該時間槽是空閑的或者發(fā)生了沖突,則1號組的成員開始競爭1號時間槽,以此類推。這里需要的是一種動態(tài)地將站分配到時間槽的方法,當(dāng)負(fù)載很低時,每個時間槽中的站點數(shù)量就多一些;當(dāng)負(fù)載很高時,每個時間槽中的站點數(shù)量就少一點,甚至只有一個站。

自適應(yīng)樹遍歷協(xié)議

tree.png

該算法把站看作是二叉樹的葉節(jié)點,該樹所有的站允許獲取信道。假設(shè)這8個站競爭的是0號槽,如果它們中的某一個獲得了信道,則很好;如果發(fā)生了沖突,約定位置2號節(jié)點下的站才可以參與競爭1號槽,并且A-D站中一個獲得信道發(fā)送了一幀,那1號槽就會保留給節(jié)點3下的E-H站;如果節(jié)點2下多個站都要傳輸數(shù)據(jù)也發(fā)生了沖突,那下一個槽即2號槽就由位于節(jié)點4下面的站來競爭;如果節(jié)點2下面的站在競爭1號槽時,發(fā)現(xiàn)它是空閑的,那說明沖突一定發(fā)生在節(jié)點3下,此時探測節(jié)點3毫無意義,可以跳過去直接探測節(jié)點6,當(dāng)這次探測結(jié)果仍然是空時,節(jié)點7可以跳過去,嘗試節(jié)點G。

無線局域網(wǎng)協(xié)議

每個無線電發(fā)射器有固定的傳播范圍,用一個圓形覆蓋區(qū)域表示。
一個簡單地想法是像之前的方案使用偵聽機制:每個站偵聽是否有其他站在傳輸,只有當(dāng)沒有站在傳送數(shù)據(jù)時它才傳輸。但是因為無線的范圍是有限的,這個方案會產(chǎn)生隱藏終端和暴露終端兩個問題。舉例:有A、B、C、D 四個無線站,帶有多個發(fā)射圖標(biāo)的是發(fā)射站,其覆蓋的范圍是相鄰的站。

wireless.png

隱藏終端問題(Hidden Station Problem):如圖a,A和C同時向B傳輸數(shù)據(jù),如果A開始發(fā)送,然后C立即進行偵聽,因為A在它的覆蓋范圍之外,它并不會聽到A的傳輸,因此C錯誤地得出結(jié)論,它可以向B傳輸數(shù)據(jù),結(jié)果就會在B出發(fā)送沖突,從而擾亂A發(fā)來的幀。 暴露終端問題(Exposed Station Problem):如圖b,B向A傳輸數(shù)據(jù)同時C想給D傳輸數(shù)據(jù),如果C偵聽介質(zhì),它會聽到A的信道有數(shù)據(jù)在傳輸(并不知道具體傳輸雙方對象),從而錯誤地得出結(jié)論,它不能向D發(fā)送數(shù)據(jù)。
能處理無線LAN這些問題的一個有影響力的協(xié)議是 沖突避免多路訪問(MACA, Multiple Access With Collosion Avoidance)。基本思想是:發(fā)送方給接收方一個RTS(Request To Send)幀,這個短幀包含了數(shù)據(jù)的長度,然后接收方用一個CTS(Clear To Send)作為應(yīng)答,其他站只要偵聽到其中一個幀,就必須保持沉默并等待隨機時間。
MACA方案依舊解決不了暴露終端問題,能解決隱藏終端問題,不過A和C同時向B發(fā)送RTS幀時也會發(fā)生沖突,不成功的發(fā)送方將等待一點隨機時候后重試。

以上所有協(xié)議中談到等待隨機時間,一般使用的是 二進制指數(shù)后退 策略?;舅枷胧牵阂话阍诘?code>i次沖突之后從0~2^i-1之間隨機選擇一個數(shù),然后等待這么多個時間槽。比如第一次沖突發(fā)生后,每個站隨機等待0個或1個時間槽,之后在重試發(fā)送;在第二次沖突后每個站隨機選擇0、1、2或3,然后等待這么多個時間槽;如果第三次沖突又發(fā)生了(發(fā)生的概率為0.25),則下一次等待的時間槽從0到2^3-1之間隨機選擇,以此類推。最后到達10次沖突后,隨機數(shù)的選擇區(qū)間被固定在最大值1023,以后不再增加。在16次沖突之后,控制器放棄努力,并給計算機返回一個失敗報告,進一步的恢復(fù)工作由高層協(xié)議完成。

MAC子層幀格式

mac-frame.png

首先是8個字節(jié)的 前導(dǎo)碼(Preamle),每個字節(jié)包含比特模式10101010,除了最后一個字節(jié)的最后2位是11,這最后一個字節(jié)稱為802.3的幀起始定界符(Start of Frame, SOF);
接下來是目標(biāo)地址和源地址兩個 MAC地址 字段,在Windows系統(tǒng)的dos窗口輸入ipconfig -all可以很方便的查看本機的MAC地址,比如我的是50-7B-9D-82-B5-C0,它由12個十六進制數(shù)兩兩連在一起表示的,一共是6字節(jié)48位長。MAC地址具有全球唯一性,故也稱為物理地址。前3個字段值由IEEE統(tǒng)一分配,指明網(wǎng)卡制造商,比如我的網(wǎng)卡根據(jù)50-7B-9D可查詢到是LCFC聯(lián)寶公司生產(chǎn)的,后3個字段由制造商自行分配來管理自己的產(chǎn)品流水號,并在設(shè)備出廠之前把完整的地址用程序編入網(wǎng)卡中。
接下來是以太網(wǎng)幀的 類型(Type) 字段或802.3的 長度(Length) 字段。以太網(wǎng)類型字段標(biāo)識使用了哪種網(wǎng)絡(luò)層協(xié)議,這樣接收方的操作系統(tǒng)就知道把幀交給哪個進程去處理該數(shù)據(jù)包,例如值為0x0800的類型代碼意味著幀內(nèi)包含一個IPv4的數(shù)據(jù)包;802.3長度字段為了兼容性,規(guī)定任何值小于或等于0x600(1536)可解釋為長度字段,任何大于0x600可解釋為類型字段。
接下里是數(shù)據(jù)(Data)字段,最短為46字節(jié),最長為1500字節(jié)。以太網(wǎng)有效幀從目標(biāo)地址算起直到校驗和(除數(shù)據(jù)和填充)稱為標(biāo)頭一共固定是18字節(jié),故有效幀最短為64字節(jié),最長為1518字節(jié)。如果幀的數(shù)據(jù)部分少于46個字節(jié),則使用填充(Pad)字段來填充該幀,使其達到最小長度要求。
最后一個字段是校驗和(Checksum),如32位的CRC差錯檢測碼。

使用MAC地址在子網(wǎng)內(nèi)實現(xiàn)通信

MAC主要解決的就是在一個子網(wǎng)內(nèi)實現(xiàn)點到點的傳輸,所有今天遇到的拓?fù)浣Y(jié)構(gòu)都是多個主機電腦分別和交換機(網(wǎng)橋)連接組成的,交換機根據(jù)目的MAC地址將幀從一個接口轉(zhuǎn)發(fā)到另一個接口。
傳統(tǒng)的以太網(wǎng)中,在任意一個時刻網(wǎng)絡(luò)中只能有一個站點發(fā)送數(shù)據(jù),其他站點只可以接收信息,若想發(fā)送數(shù)據(jù),只能退避等待。因此,共享式以太網(wǎng)的固定帶寬被網(wǎng)絡(luò)上所有站點共享,隨機占用,網(wǎng)絡(luò)中的站點越多,每個站點平均可以使用的帶寬就越窄,網(wǎng)絡(luò)的響應(yīng)速度就越慢。交換機的出現(xiàn)解決了這個問題。在交換式局域網(wǎng)中,采用了交換機設(shè)備,只要發(fā)送數(shù)據(jù)的源節(jié)點和目的節(jié)點不沖突,那么數(shù)據(jù)發(fā)送就完全并行,這樣大大提高了數(shù)據(jù)傳送的速率。

switch.png

執(zhí)行準(zhǔn)確轉(zhuǎn)發(fā)的簡單方法是每個交換機配備一個大的哈希表(Hash Table),該表列出每個可能的目的地址及它隸屬的輸出端口。例如交換機B1上的表將列出主機D屬于端口4,這樣只要有一個主機通過B1轉(zhuǎn)發(fā)幀給主機D,B1只需把幀從端口4發(fā)出去就行,至于怎么走后續(xù)路徑已經(jīng)不是B1所關(guān)心的事情了。
當(dāng)交換機被第一次接入網(wǎng)絡(luò)是,所有的哈希表都是空的,這時交換機使用 廣播(Broadcast) 策略:對于每個發(fā)現(xiàn)未知目標(biāo)地址的幀,交換機將它轉(zhuǎn)發(fā)到所有的端口(輸入端口除外)。這時通過ARP協(xié)議(Address Resolution Protocol, 地址解析協(xié)議),所有的主機取出數(shù)據(jù)包中的IP地址與自身的IP地址比較,如果相同做出回復(fù)向交換機報告自己的MAC地址,否則丟棄這個包;另外交換機本身會使用后向?qū)W習(xí)法,比如B1看到端口3上的一幀來自站C,那么它就知道通過端口3一定能到達C,因此它就在哈希表中構(gòu)造一項,以后所有抵達B1要去C的幀都將被轉(zhuǎn)發(fā)到端口3。這樣一旦知道了一個目標(biāo)地址,以后發(fā)給該地址的幀只被放到正確地端口,而不再廣播到所有端口。
當(dāng)打開、關(guān)閉或移動主機和交換時,網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)就會發(fā)生變化,為了解決這個問題,在構(gòu)造哈希表時幀的到達時間也被記錄更新在相應(yīng)的表中,該時間值反映了交換機最后看到該機器發(fā)出一幀的時間。交換機中有一個進程會定時掃描哈希表,將時間值在幾分鐘前的表項都清除掉,這樣如果一臺計算機從LAN上拔下來、移動或幾分鐘內(nèi)部發(fā)送任何數(shù)據(jù),那么任何發(fā)送給它的流量又將會被廣播。
一般情況下,查找和更新哈希表中的表項只需幾微妙即可完成。交換機在轉(zhuǎn)發(fā)中繼幀時,可以重寫MAC層的標(biāo)頭,這樣可以搭建虛擬局域網(wǎng)。

different layer.png

理論上單單依靠MAC地址,上海的網(wǎng)卡就可以找到洛杉磯的網(wǎng)卡了,技術(shù)上是可以實現(xiàn)的。但是,這樣做有一個重大的缺點。以太網(wǎng)采用廣播方式發(fā)送數(shù)據(jù)包,所有成員人手一"包",不僅效率低,而且局限在發(fā)送者所在的子網(wǎng)絡(luò)。也就是說,如果兩臺計算機不在同一個子網(wǎng)絡(luò),廣播是傳不過去的。這種設(shè)計是合理的,否則互聯(lián)網(wǎng)上每一臺計算機都會收到所有包,那會引起災(zāi)難?;ヂ?lián)網(wǎng)是無數(shù)子網(wǎng)絡(luò)共同組成的一個巨型網(wǎng)絡(luò),很像想象上海和洛杉磯的電腦會在同一個子網(wǎng)絡(luò),這幾乎是不可能的。故MAC地址執(zhí)行橋接功能,控制功能弱,沒有路由選擇功能。
解決主機A通過其所在的子網(wǎng)如何正確找到主機B所在子網(wǎng),是通過IP地址轉(zhuǎn)發(fā)數(shù)據(jù),具有路由功能。理論上單單依靠IP地址也能實現(xiàn)上海的計算機可以找到洛杉磯的目標(biāo)計算機,不過根據(jù)MAC地址轉(zhuǎn)發(fā)數(shù)據(jù),交換速度快,通過IP地址交換延遲高。從傳輸延遲的量級來看,如果MAC地址交換為幾十微秒,則IP地址交換為幾千微秒。
IP地址解決的是往哪走的問題,MAC地址解決的是怎么走的問題。兩種地址之間沒有任何聯(lián)系,MAC地址是綁定在網(wǎng)卡上的,IP地址則是網(wǎng)管分配的,它們只是隨機組合在一起。不過在整個互聯(lián)網(wǎng)協(xié)議中相輔相成,完成源機器找到目標(biāo)機器傳輸數(shù)據(jù)包。

虛擬局域網(wǎng)(VLAN, Virtual LAN)

在實際生活中,物理拓?fù)浣Y(jié)構(gòu)搭建的局域網(wǎng)往往不能滿足所有的需求,對于結(jié)構(gòu)組織總是在不停地變化的公司來說,用軟件方式分離成幾個邏輯拓?fù)浣Y(jié)構(gòu)的方案是很有必要的。網(wǎng)管首先要確定共有多少個VLAN、哪些計算機位于哪個VLAN、每個VLAN叫什么名稱。通常VLAN用顏色來命名。

VLAN.png

剛開始交換機的配置表時空的,灰色主機發(fā)送的數(shù)據(jù)幀只會被廣播給標(biāo)記為G的主機。比如交換機B2到交換機B1的端口沒有被標(biāo)記W,意味著白色主機上幀不會從B2轉(zhuǎn)發(fā)到B1,因為實際上也沒有白色VLAN上的機器被連接到B1。

總結(jié)

MAC層作為數(shù)據(jù)鏈路層的一個子層,采用廣播的方式傳輸數(shù)據(jù)幀,主要任務(wù)是:有效解決多個數(shù)據(jù)幀同時競爭信道的沖突問題,最大化的提高信道利用成功率和減少延遲;在子網(wǎng)內(nèi)根據(jù)MAC地址將幀從一個主機轉(zhuǎn)發(fā)到另一個主機。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容