几种以太网帧格式
相当长的一段时间里我都没搞明白一个很基础的问题—以太网的封装格式,最近查了查相关文档,总结如下:
首先说明一下,Ethernet 和 802.3 并不是一回事,虽然我们经常混用这两个术语:
历史上以太网帧格式有五种:
1.Ethernet V1:这是最原始的一种格式,是由 Xerox PARC 提出的 3 Mbps CSMA/CD 以太网标准的封装格式,后来在 1980 年由 DEC,Intel 和 Xerox 标准化形成 Ethernet V1 标准;
2.Ethernet V2(ARPA):这是最常见的一种以太网帧格式,也是今天以太网的事实标准,由 DEC,Intel 和 Xerox 在 1982 年公布其标准,主要更改了 Ethernet V1 的电气特性和物理接口,在帧格式上并无变化;Ethernet V2 出现后迅速取代 Ethernet V1 成为以太网事实标准;Ethernet V2 帧头结构为 6 bytes 的源地址 + 6 bytes 的目标地址 + 2 Bytes 的协议类型字段+数据。
常见协议类型如下:
0800 IP
0806 ARP
8137 Novell IPX
809b Apple Talk
如果协议类型字段取值为0000-05dc(十进制的0-1500),则该帧就不是 Ethernet V2(ARPA) 类型了,而是下面讲到的三种 802.3 帧类型之一;Ethernet 可以支持 TCP/IP,Novell IPX/SPX,Apple Talk Phase I 等协议;RFC 894 定义了 IP 报文在Ethernet V2 上的封装格式;
3.RAW 802.3:这是 1983 年 Novell 发布其划时代的 Netware/86 网络套件时采用的私有以太网帧格式,该格式以当时尚未正式发布的 802.3 标准为基础;但是当两年以后 IEEE 正式发布 802.3 标准时情况发生了变化:IEEE在802.3 帧头中又加入了802.2 LLC(Logical Link Control)头,这使得 Novell 的 RAW 802.3 格式跟正式的 IEEE 802.3 标准互不兼容;可以看到在Novell 的 RAW 802.3 帧结构中并没有标志协议类型的字段,而只有 Length 字段(2 bytes,取值为 0000-05dc,即十进制的0-1500),因此 RAW 802.3 帧只支持 IPX/SPX 一种协议;
4.802.3/802.2 LLC:这是 IEEE 正式的 802.3 标准,它由 Ethernet V2 发展而来。它将 Ethernet V2 帧头的协议类型字段替换为帧长度字段(取值为0000-05dc;十进制的1500);并加入 802.2 LLC 头用以标志上层协议,LLC 头中包含 DSAP,SSAP 以及 Crontrol 字段;
常见SAP值:
| 0 | Null LSAP | [IEEE] |
| 4 | SNA Path Control | [IEEE] |
| 6 | DOD IP | [79,JBP] |
| AA | SNAP | [IEEE] |
| FE | Global DSAP | [IEEE] |
SAP 值用以标志上层应用,但是每个 SAP 字段只有 8 bits 长,而且其中仅保留了 6 bits用于标识上层协议,因此所能标识的协议数有限(不超过 32 种);并且 IEEE 拒绝为某些重要的协议比如 ARP 协议定义 SAP 值(奇怪的是同时他们却定义了 IP 的 SAP 值);因此 802.3/802.2 LLC 的使用有很大局限性;
5.802.3/802.2 SNAP:这是 IEEE 为保证在 802.2 LLC 上支持更多的上层协议同时更好的支持 IP 协议而发布的标准,与802.3/802.2 LLC 一样 802.3/802.2 SNAP 也带有 LLC 头,但是扩展了 LLC 属性,新添加了一个 2 Bytes 的协议类型域(同时将 SAP 的值置为 AA),从而使其可以标识更多的上层协议类型;另外添加了一个 3 Bytes 的 OUI 字段用于代表不同的组织,RFC 1042 定义了 IP 报文在 802.2 网络中的封装方法和 ARP 协议在 802.2 SANP 中的实现;
今天的实际环境中大多数 TCP/IP 设备都使用 Ethernet V2 格式的帧。这是因为第一种大规模使用的 TCP/IP 系统(4.2/3 BSD UNIX)的出现时间介于 RFC 894 和 RFC 1042 之间,它为了避免不能和别的主机互操作的风险而采用了 RFC 894 的实现;也由于大家都抱着这种想法,所以 802.3 标准并没有如预期那样得到普及;
CISCO 设备的 Ethernet Interface 默认封装格式是 ARPA(Ethernet V2)
不同厂商对这几种帧格式通常有不同的叫法,比如:
| Frame Type | Novel | Cisco |
| Ethernet Version 2 | Ethernet_II | arpa |
| 802.3 Raw | Ethernet_802.3 | novell_ether |
| IEEE 802.3/802.2 | Ethernet_802.2 | sap |
| IEEE 802.3/802.2 SNAP | ETHERNET_SNAP | snap |

