以太网的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