MAC層
MAC層的硬件地址
在局域網中,硬件地址又稱為物理地址或MAC地址。在所有計算機系統的設計中,標識系統都是一個核心問題,在標識系統中,地址就是識別某個系統的一個標識符,[SHOC78]給出的如下定義:名字指出我們所要尋找的那個資源,地址指出那個資源在何處,路由告訴我們如何到達該處。
MAC幀的格式
常用的以太網幀格式有兩種標准,一種是DIX Ethernet V2標准,另一種是IEEE的802.3標准,下面只介紹使用的最多的以太網V2的MAC幀格式,如下圖所示:
以太網V2的MAC幀由5個字段組成。前兩個字段分別為6字節長的目的地址和源地址字段。第三個字段是2字節的類型字段,用來標志上一層使用的是什么協議,以便把收到的MAC幀數據上交給上一層的這個協議。例如,當類型字段的值是0x0800時,就表示上層使用的是IP數據報。若類型字段的值為0x8137,則表示該幀是由Novell IPX 發過來的。第四個字段是數據字段,其長度在46到1500字節之間(46是這么算的,最小長度64字節減去18字節的首部和尾部,即得到數據字段的最小長度),最后一個字段是4字節的幀檢驗序列FCS(使用CRC檢驗)。
可以發現,在以太網V2的MAC幀格式中,其首部並沒有一個幀長度(或數據字段長度)。那么,MAC子層又怎樣知道從接收到的以太網幀中取出多少字節的數據交付上一層協議呢?前面的文章提到過,以太網發送的數據都使用曼徹斯特編碼的信號,曼徹斯特編碼的一個重要特點就是:在每一個碼元的正中間(不管碼元是0還是1),一定有一次電壓的轉換,從高到低或者從低到高,當發送方把一個以太網幀發送完畢后,就不再發送其它碼元了。因此,發送方網絡適配器的接口上的電壓也不再變化了。這樣,接收方就可以很容易的找到以太網幀的結束位置,在這個結束位置往前數4字節,就能確定數據字段的結束位置。
當數據字段的長度小於46字節時,MAC子層就會在數據字段的后面加入一個整數字節的填充字段,以保證以太網的MAC幀長不小於64字節,然而MAC幀的首部並沒有指出數據字段的長度是多少,在有填充字段的情況下,接收端的MAC子層在剝去首部和尾部后,就把數據字段和填充字段一起交給上層協議。問題來了,上層協議如何知道填充字段的長度呢?當上層使用IP協議時,其首部就有一個“總長度”字段,因此“總長度”字段加上填充字段的長度,就等於MAC幀數據字段的長度。
從上圖還可看到,在傳輸媒體上,實際傳送的要比MAC幀還多8個字節。這是因為當一個站剛開始接收MAC幀時,由於適配器的時鍾尚未與到達的比特流達成同步,因此MAC幀的最前面的若干位就無法接收,結果整個MAC就成為無用的幀。為了接收端實現位同步,從MAC子層向下傳到物理層時還要在幀的前面插入8字節,它由2個字段構成。第一個字段是7個字節的前同步碼(1和0交替),它的作用是使接收端的適配器在接收MAC幀時能夠迅速調整其時鍾頻率,使它和發送端的時鍾同步,也就是實現位同步(比特同步)。第二個字段是幀開始定界符,定義為:10101011,最后兩個連續的1,即告訴接收端適配器,MAC幀的信息馬上要來了,請注意接收。MAC幀的FCS字段的檢驗范圍不包括前同步碼和幀開始定界符。
在以太網上傳送數據時是以幀為單位傳送的。以太網在傳送幀時,各幀之間有一定的間隙。因此,接收端只要找到幀開始定界符,其后面的連續到達的比特流都屬於一個MAC幀。可見以太網不需要使用幀結束定界符,也不需要字節插入來保證透明傳輸。
IEEE802.3標准規定凡出現下列情況之一的即為無效MAC幀:
- 幀的長度不是整數個字節
- 幀檢驗序列FCS查出有差錯
- 收到的幀的數據字段的長度不在46字節到1500字節之間