以太網的MAC幀格式有好幾種,被廣泛應用的是DIX Ethernet V2標准,還有一種是IEEE的802.3標准,該標准經過了多年的發展,已經出現了很多種子標准。DIX Ethernet V2 標准與 IEEE 的 802.3 標准只有很小的差別,因此可以將 802.3 局域網簡稱為“以太網”。嚴格說來,“以太網”應當是指符合 DIX Ethernet V2 標准的局域網
一、DIX Ethernet V2(Ethernet II)
1.幀結構
2.字段分析
=======================================================================================================
源MAC地址 ===> 發送方的MAC地址
=======================================================================================================
目的MAC地址 ===> 接收方的MAC地址
=======================================================================================================
上層協議類型 ===> 該MAC數據報中包裝的網絡層數據報協議類型
若該字段的值小於1518,那么這個字段就是長度字段,並定義后面的數據字段的長度。
若該字段的值大於1518,它就定義使用因特網服務的上層協議(小於0600H的值是用於IEEE802的,表示數據包的長度)
具體協議類型可以參考如下兩個表:
表1:
協議ID(Type) | 以太網協議 |
---|---|
0x0800 | Internet Protocol, Version 4(IPv4) |
0x0806 | Address Resolution Protocol(ARP) |
0x0842 | Wake-on-LAN Magic Packet |
0x1337 | SYN-3 Heartbeat Protocol(SYNdog) |
0x22F3 | IETF TRILL Protocol |
0x6003 | DECnet Phase IV |
0x8035 | Reverse Address Resolution Protocol(RARP) |
0x809B | AppleTalk(Ethertalk) |
0x80F3 | AppleTalk Address Resolution Protocol(AARP) |
0x8100 | VLAN-tagged frame(IEEE 802.1Q) |
0x8137 | Novell IPX(alt) |
0x8138 | Novell |
0x8204 | QNX Qnet |
0x86DD | Internet Protocol, Version 6(IPv6) |
0x8808 | MAC Control |
0x8809 | Slow Protocols(IEEE 802.3) |
0x8819 | CobraNet |
0x8847 | MPLS unicast |
0x8848 | MPLS multicast |
0x8863 | PPPoE Discovery Stage |
0x8864 | PPPoE Session Stage |
0x886F | Microsoft NLB heartbeat |
0x8870 | Jumbo Frames |
0x887B | HomePlug 1.0 MME |
0x888E | EAP over LAN(IEEE 802.1X) |
0x8892 | PROFINET Protocol |
0x889A | HyperSCSI(SCSI over Ethernet) |
0x88A2 | ATA over Ethernet |
0x88A4 | EtherCat Protocol |
0x88A8 | Provider Bridging(IEEE 802.1ad) |
0x88AB | Ethernet Powerlink |
0x88CC | LLDP |
0x88CD | sercos III |
0x88D8 | Circuit Emulation Services over Ethernet(MEF-8) |
0x88E1 | HomePlug AV MME |
0x88E3 | Media Redundancy Protocol(IEC62439-2) |
0x88E5 | MAC security(IEEE 802.1AE) |
0x88F7 | Precision Time Protocol(IEEE 1588) |
0x8902 | IEEE 802.1ag Connectivity Fault Management(CFM) Protocol / ITU-T Recommendation Y.1731(OAM) |
0x8906 | Fibre Channel over Ethernet |
0x8914 | FCoE Initialization Protocol |
0x9000 | Configuration Test Protocol(Loop) |
0x9100 | Q-in-Q |
表2:
以太類型值 (16 進制 ) | 對應協議 | 備注 |
---|---|---|
0x0000 - 0x05DC | IEEE 802.3 長度 | |
0x0101 – 0x01FF | 實驗 | |
0x0660 | XEROX NS IDP | |
0x0661 | ||
0x0800 | DLOG | |
0x0801 | X.75 Internet | |
0x0802 | NBS Internet | |
0x0803 | ECMA Internet | |
0x0804 | Chaosnet | |
0x0805 | X.25 Level 3 | |
0x0806 | ARP | |
0x0808 | 幀中繼ARP | |
0x6559 | 原始幀中繼RFR | |
0x8035 | 動態 DARP,反向地址解析協議 RARP | |
0x8037 | Novell Netware IPX | |
0x809B | EtherTalk | |
0x80D5 | IBM SNA Services over Ethernet | |
0x80F3 | AppleTalk 地址解析協議 AARP | |
0x8100 | 以太網自動保護開關 EAPS | |
0x8137 | 因特網包交換 IPX | |
0x814C | 簡單網絡管理協議 SNMP | |
0x86DD | 網際協議 v6 IPv6 | |
0x8809 | OAM | 重要字段含義: 為組播 MAC 地址 0180c2000002
為發送端的橋 MAC 地址,該地址是一個單播 MAC 地址
態信息
0x00 表示 Information OAMPDU 、 0x01表示 Event Notification OAMPDU 、 0x04 表示 Loopback Control OAMPDU
的狀態信息(包括本地信息、遠端信息和自定義信息) 發給遠端的以太網OAM 實體,保持以太網 OAM 連接
報文一般用於鏈路監控,是用於對連接本端和遠端 以太網 OAM 實體的鏈路發生的故障進行告警
報文主要用於遠端環回控制環回控制 OAMPDU 報文用來控制遠端設備的 OAM 環回狀態,該報文 中帶有使能或去使能環回功能的信息,根據該信息 開啟或關閉遠端環回功能 |
0x880B | 點對點協議 PPP | |
0x880C | 通用交換管理協議 GSMP | |
0x8847 | 多協議標簽交換(單播)MPLS | |
0x8848 | 多協議標簽交換(組播)MPLS | |
0x8863 | 以太網上的 PPP(發現階段) | |
0x8864 | 以太網上的 PPP(會話階段) | |
0x88BB | 輕量級訪問點協議 LWAPP | |
0x88CC | 鏈接層發現協議 LLDP | |
0x8E88 | 局域網上的 EAP EAPOL | |
0x9000 | 配置測試協議( Loopback ) | |
0x9100 | VLAN 標簽協議標識符 | |
0x9200 | VLAN 標簽協議標識符 | |
0xFFFF | 保留 |
=======================================================================================================
數據 ===> 攜帶的數據;大小為46-1500字節
因為標准規定以太網幀的總長度最短為64字節,最長為1518字節。而除了數據外其它部分已占用了 6+6+2+4=18 字節長度。因此數據部分的長度就是 [64 ~ 1518] - 18 = [46 ~ 1500] 字節。我們知道mac數據報中大部分情況是包含的Ip數據報。而IP數據報最小可以為20字節。這種情況下20個字節滿足不了mac幀數據部分的最短要求。於是當數據字段的長度小於46字節時,MAC子層就會在數據字段的后面加入一個整數字節的填充字段,以保證以太網的MAC幀長不小於64字節
問題一:
上層協議如何知道填充字段的長度呢?
當上層使用IP協議時,其首部就有一個“總長度”字段。此“總長度”加上填充字段的長度,等於MAC幀數據字段的長度。因此填充字段的長度=MAC幀數據字段的長度-IP數據報中的總長度字段
問題二:
在以太網V2的MAC幀格式中,首部並沒有一個數據長度字段,那么,MAC子層又怎樣知道從接收到的以太網幀中取出多少字節的數據交付上一層協議呢?
曼徹斯特編碼的一個重要特點就是:在曼徹斯特編碼的每一個碼元(不管碼元是1或0)的正中間一定有一次電壓的轉換(從高到低或從低到高)。當發送方把一個以太網幀發送完畢后,就不再發送其他碼元了(既不發送1,也不發送0)。因此,發送方網絡適配器的接口上的電壓也就不再變化了。這樣,接收方就可以很容易地找到以太網幀的結束位置。在這個位置往前數4字節(FCS字段長度是4字節),就能確定數據字段的結束位置
=======================================================================================================
幀檢驗序列 FCS ===> 4byte;使用CRC檢驗。當傳輸媒體的誤碼率為 1x10^-8 時MAC子層可使未檢測到的差錯小於 1x10^-14
=======================================================================================================
3.注意事項
1.MAC數據報的隔離
在以太網上傳送數據時是以幀為單位傳送的。以太網在傳送幀時,各幀之間還必須有一定的間隙。因此,接收端只要找到幀開始定界符,其后面的連續到達的比特流就都屬於同一個MAC幀。
2.無效數據幀
什么類型的數據幀被認為是無效數據幀?
(1)幀的長度不是整數個字節
(2)用收到的幀檢驗序列FCS查出有差錯
(3)收到的幀的MAC客戶數據字段的長度不在46~1500字節之間
對無效數據幀的處理措施
對無效MAC幀就簡單地丟棄。以太網不負責重傳丟棄的幀
3.以太網V2 MAC幀(Ethernet II)和 IEEE 802.3標准規定的MAC幀的區別
(1)IEEE802.3規定的MAC幀的第三個字段是“長度/類型”(Ethernet II 規定該字段是類型)。當該字段值大於0x0600時,就表示“類型”(同Ethernet II)當該字段值小於0x0600時才表示“長度”,即MAC幀的數據部分長度(因為以太網采用了曼徹斯特編碼,長度字段並無實際意義)
(2)當“長度/類型”字段值小於0x0600時,數據字段必須裝入上面的邏輯鏈路控制LLC子層的LLC幀
二、IEEE 802.3 SAP
1.IEEE 802.3 SAP 幀格式
2.LLC幀格式
DSAP | SSAP | 控制字段 | LLC數據 |
DSAP ===> 1byte;目的服務訪問點,指示數據接收方LLC子層的SAP。全1 為全局地址,全0為空地址。在以太網中,該值固定為0xAA
SSAP ===> 1byte;源服務訪問點,指示數據發送方LLC子層的SAP。在以太網中,該值固定為0xAA
控制字段 ===> 1byte ;控制屬性,指示數據鏈路層所用的服務類型。在以太網中都是無連接服務,所以該值固定為0x03
LLC數據 ===> n byte
三、IEEE 802.3 SNAP
在SNAP以太網標准中,除了LLC頭部還有5個字節的SNAP頭作為LLC的擴展
目的地址 | 源地址 | 長度/類型 | DSAP | SSAP | 控制 | OUI ID | Type | 數據 | FCS |
目的地址 ===> 6byte
源地址 ===> 6byte
長度 ===> 2byte
DSAP ===> 1byte
SSAP ===> 1byte
控制 ===> 1byte
OUI ID ===> 3byte;組織唯一標識符,指示幀中Data字段數據報對應協議的發布組織,IEEE發布的以太網協議類型此字段為0x00000
Type ===> 2byte;指示幀中數據包所對應的協議類型
數據 ===> 38byte - 1492byte
FCS ===> 4byte