概述
以太网(Ethernet)是数字设备、英特尔、施乐在1982年联合公布的标准(实际上这是以太网的第二版,即Ethernet II)。它采用CSMA/CD介质访问控制,传输速率仅为10Mbps。1985年,IEEE的802委员会公布一个系列的以太网标准,见下图:
不幸的是,802.2和802.3定义了一个与Ethernet II不同的帧格式,加上Novell开发的私有帧,给以太网造成了一定的混乱。
在帧格式上,主要有过六种:
Ethernet I
最原始的以太网标准,它由施乐公司提出,它是3Mbps+CSMA/CD的封装格式。其中最关键的字段是Type(类型)字段,以便支持多种网络层的协议包,如TCP/IP、IPX/SPX等。但应用不广泛,随后被新的以太网版本取代
Ethernet II
由上述提到DIX三家公司在1982年发布的,即DIX2.0以太网帧格式。主要更改了上一版本的电气特性和物理接口,帧格式无变化。当时并无LLC子层,最小帧(含首尾信息块)长度为64字节,最长为1518字节。如下图所示:
Ethernet 802.3 Raw
这是Novell公司在1983年公布的以太网标准,仅支持IPS/SPX协议。当时以并未正式发布的802.3标准为基础创建,相对Ethernet II帧来说,就多了2个字节的0xFFFF用于区分,由于总的帧长度不变,所以数据字段中的最小和最大长度也相应减少2个字节,为44~1498字节。如下图所示:
Ethernet 802.3 SAP
这是IEEE在1985年发布的第一个以太网帧标准,SAP是服务点的意思,该标准添加了LLC头,其包含目的服务访问点(DSAP)、源服务访问点(SSAP)和控制(Control)三个字段,另外源Ethernet II的Type字段更换成了Length字段。因为添加了三个字段,所以数据长度范围相应改为43~1497字节。该版本很快就被IEEE更新为LLC和SNAP版本。其格式如下图所示:
802.3/802.2 LLC
IEEE在1997年正式发布,由SAP版本发展而来,帧格式保持一致,但这是IEEE正式划分LLC子层后第一个以太网标准,第一次把DSAP、SSAP、Control三个字段当做LLC头。
802.3/802.2 SNAP
这是为了在保证支持LLC标准上支持更多上层协议,主要是更好的支持IP协议,该标准于1998年发布,SNAP(Sub Network Access Protocol)是子网访问协议,支持传输多种协议的网络访问协议。
与LLC帧格式一样,SNAP也有LLC头,但扩展了其属性:添加了2个字节的类型字段,用于标识更多上层协议类型;另新增了3字节的OUI(组织唯一标识)字段,用于所选上层协议的组织。对应的,数据字段长度范围也调整为38~1492字节。如下图所示:
上述就是6种主要帧格式的介绍,曾经或现在主流应用的是II、LLC、SNAP三种,其主要差别如下图所示:
以太网LLC帧头格式
上述就提及到,自802.3 SAP标准发布后,以太网帧中就有了LLC帧头,在802.3系列里,LLC的格式都是一样的,均为3字节。
大小(字节) | 1 | 1 | 1 |
---|---|---|---|
字段 | DASP | SSAP | Control |
DASP(Destination Service Access Point):目的服务访问点,指示数据接收方LLC子层的SAP,占1字节。在以太网中,该值固定为0xAA。
SSAP(Source Service Access Point):源服务访问点,指示数据发送方LLC子层的SAP,占1字节。在以太网中,该值固定为0xAA。
Control:控制属性,指示数据链路层所用的服务类型,占1字节。在以太网中都是无连接服务,所以该值固定为0x03。
以太网SNAP帧头格式
在SNAP以太网标准中,除了LLC头部还有5个字节的SNAP头作为LLC的扩展。
大小(字节) | 3 | 2 |
---|---|---|
字段 | OUI ID | Type |
OUI(Organizationally Unique Identifier):组织唯一标识符,指示帧中Data字段数据报对应协议的发布组织,占3字节。IEEE发布的以太网协议类型此字段为0x00000。
Type:类型属性,指示帧中数据包所对应的协议类型,占2字节。除了支持802.3以太网协议,还支持802.4、802.5等等协议,还支持非802协议。IEEE发布的以太网协议对应的字段取值如下:
协议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 |
以太网MAC帧
MAC帧通常被认为是数据链路层帧,是在MAC子层间交换的PDU,前面提及到的LLC帧头和SNAP帧头与上层的数据报一起封装在数据字段中,如下:
尺寸(字节) | 7 | 1 | 6 | 6 | 2 | 38~1500 | 4 |
---|---|---|---|---|---|---|---|
字段 | 前导符 | 帧起始 | 目的MAC | 源MAC | 长度/类型 | 数据 | FCS |
1. 前导符(Preamble):由1和0交互构成(10101010…..),共占7个字节,用于使PLS子层电路与收到的帧达成时钟同步。
2. 帧起始(Start-of-Frame Delimiter, SFD):为10101011,共占1个字节,表示一个帧的开始。它和前导符共同使接收方能根据1、0交替来迅速实现比特同步,当检测到连续的两位1时,将后续信息交给MAC子层。通常来说,Pre和SFD这两个字段只用于提醒接收端新帧到达,并不计入MAC帧大小,也不算作是MAC帧头的组成部分。
3. 目的MAC(Destination Address, DA)/源MAC(Source Address, SA):分别用于标识目的MAC地址和源MAC地址,两个字段各占6个字节。它们可以是单播地址也可以是广播地址。当地址的最高位为0时表示单播,最高位为1时为组播,全为1时为广播。
4. 长度(Length)/类型(Type):这是一个二选一的字段,共占2个字节,对于不同的网络协议,它有不同的含义。但是,作为类型使用时,如上表所示,最小值也总是大于1536(十六进制0x600);所以不会产生冲突。另外,在IEEE 802.3中,数据字段的长度为38~1500个字节。
5. 数据(Data):该字段对于不同的以太网帧包含的内容不一,对于较老的以太网标准,它是网络层来的数据报;而较新的标准,则是一个LLC帧的全部内容。也因为如此,对于不同的标准而言,数据字段的长度范围也有不同。总的而言,不管是什么标准,整个MAC帧最小长度为64字节,如果内容长度小于最小长度,则需要在数据字段里使用PAD填充字段填充。
6. 帧校验序列(FCS):它是一个包含32位CRC校验值的字段,一共占4个字节。由发送端对MAC帧的DA字段到Data字段间(不包含前导符和帧起始)的二进制序列进行计算。
文中图片来自《深入理解计算机网络》