以太网帧格式

在以太网链路上的数据包称作以太帧。以太帧起始部分由前导码和帧开始符组成。后面紧跟着一个以太网报头，以MAC地址说明目的地址和源地址。帧的中部是该帧负载的包含其他协议报头的数据包（例如IP协议）。以太帧由一个32位冗余校验码结尾。它用于检验数据传输是否出现损坏。

## 结构

来自线路的二进制数据包称作一个帧。从物理线路上看到的帧，除其他信息外，还可看到前导码和帧开始符。任何物理硬件都会需要这些信息。

下面的表格显示了在以1500个八位元组为MTU传输（有些吉比特以太网甚至更高速以太网支持更大的帧，称作巨型帧）时的完整帧格式。一个八位元组是八个位组成的数据（也就是现代计算机的一个字节）。

前导码｜帧开始符｜MAC 目标地址｜MAC 源地址｜802.1Q 标签 （可选）｜以太类型｜负载｜冗余校验｜帧间距

10101010 7个octet｜10101011 1个octet｜6 octets｜6 octets｜（4 octets）｜2 octets｜46–1500 octets｜4 octets｜12 octets

64–1522 octets 72–1530 octets 84–1542 octets

### 前导码和帧开始符

一个帧以7个字节的前导码和1个字节的帧开始符作为帧的开始。快速以太网之前，在线路上帧的这部分的位模式是10101010 10101010 10101010 10101010 10101010 10101010 10101010 10101011。由于在传输一个字节时最低位最先传输（LSB），因此其相应的16进制表示为0x55 0x55 0x55 0x55 0x55 0x55 0x55 0xD5。

10/100M 网卡（介质无关接口 PHY）一次传输4位（一个半字节）。因此前导符会成为7组0x5+0x5,而帧开始符成为0x5+0xD。1000M网卡（GMII）一次传输8位，而10Gbit/s（XGMII） PHY芯片一次传输32位。注意当以octet描述时，先传输7个01010101然后传输11010101。由于8位数据的低4位先发送，所以先发送帧开始符的0101，之后发送1101。

### 报头

报头包含源地址和目标地址的MAC地址，以太类型字段和可选的用于说明VLAN成员关系和传输优先级的IEEE 802.1Q VLAN 标签。

### 帧校验码

帧校验码是一个32位循环冗余校验码，以便验证帧数据是否被损坏。

### 帧间距

当一个帧发送出去之后，发送方在下次发送帧之前，需要再发送至少12个octet的空闲线路状态码。

## 以太帧类型

以太帧有很多种类型。不同类型的帧具有不同的格式和MTU值。但在同种物理媒体上都可同时存在。

- 以太网第二版 或者称之为Ethernet II 帧，DIX帧，是最常见的帧类型。并通常直接被IP协议使用。
- Novell的非标准IEEE 802.3帧变种。
- IEEE 802.2 逻辑链路控制 （LLC）帧
- 子网接入协议（SNAP）帧

所有四种以太帧类型都可包含一个IEEE 802.1Q选项来确定它属于哪个VLAN以及他的IEEE 802.1p优先级（QoS）。这个封装由IEEE 802.3ac定义并将帧大小从64字节扩充到1522字节（注：不包含7个前导字节和1个字节的帧开始符以及12个帧间距字节）。

IEEE 802.1Q标签，如果出现，需要放在源地址字段和以太类型或长度字段的中间。这个标签的前两个字节是标签协议标识符（TPID）值0x8100。这与没有标签帧的以太类型/长度字段的位置相同，所以以太类型0x8100就表示包含标签的帧，而实际的以太类型/长度字段则放在Q-标签的后面。TPID后面是两个字节的标签控制信息（TCI）。（IEEE 802.1p 优先级（QoS）和VLAN ID）。Q标签后面就是通常的帧内容。

### Ethernet II

以太 II 帧 （也称作DIX以太网，是以这个设计的主要成员，DEC,Intel和Xerox的名字命名的。）,把紧接在目标和源MAC地址后面的这个两字节定义为以太网帧数据类型字段。

例如，一个0x0800的以太类型说明这个帧包含的是IPv4数据报。同样的，一个0x0806的以太类型说明这个帧是一个ARP帧，0x8100说明这是一个IEEE 802.1Q帧，而0x86DD说明这是一个IPv6帧。

当这个工业界的标准通过正式的IEEE标准化过程后，在802.3标准中以太类型字段变成了一个（数据）长度字段。（最初的以太包通过包括他们的帧来确定它们的长度，而不是以一个明确的数值。）但是包的接收层仍需知道如何解析包，因此标准要求将IEEE802.2头跟在长度字段后面，定义包的类型。多年之后，802.3x-1997标准，一个802.3标准的后继版本，正式允许两种类型的封包同时存在。实际上，两种封包都被广泛使用，而最初的以太封包在以太局域网中被广泛应用，因为他的简便和低开销。

为了允许一些使用以太II版本的数据报和一些使用802.3封装的最初版本的数据包能够在同一个以太网段使用，以太类型值必须大于等于1536（0x0600）。这个值比802.3封包的最大长度1500byte （0x05DC）要更大。因此如果这个字段的值大于等于1536，则这个帧是以太II帧，而那个字段是类型字段。否则（小于1500而大于46字节），他是一个IEEE 802.3帧，而那个字段是长度字段。1500～1536（不包含）的数值未定义。

### 802.2 LLC

一些协议，尤其是为OSI模型设计的，会直接在802.2 LLC层上操作。802.2 LLC层同时提供数据报和面向连接的网络服务。

802.2以太网变种没有在常规网络中普遍使用。只有一些大公司的没有与IP网络融合的Netware设备。以前，很多公司Netware网络支持802.2以太网，以便支持从以太网到IEEE 802.5令牌环网或FDDI网络的透明桥接。当今最流行的封包是以太网版本二，由基于IP协议的网络使用，将其以太类型设置为0x0800用于封装IPv4或者0x86DD来支持IPv6。

还有一个互联网标准来使用LLC/SNAP报头将IPv4封装在IEEE 802.2帧中。这几乎从未在以太网中实现过。（但在FDDI以及令牌环网，IEEE 802.11和其他IEEE 802网络中使用）。如果不使用SNAP,IP传输无法封装在IEEE 802.2 LLC帧中。这是因为LLC协议中虽然有一种IP协议类型，却没有ARP。IPv6同样可使用LLC/SNAP在IEEE 802.2以太网上传播，但，如同IPv4，它也绝少被这样使用。（尽管LLC/SNAP的IPv6封包在IEEE 802网络中被使用）。

### 子网接入协议

通过检查802.2 LLC头，可以确定他是否后继一个SNAP头。LLC头包含两个附加的8位地址字段，在OSI模型术语中称作服务访问点（SAPs）。当源和目标SAP都设置为0xAA时，就会使用SNAP服务。SNAP头允许以太类型值被任何IEEE 802协议使用，即使支持的是私有协议ID空间。在IEEE 802.3x-1997中，IEEE 以太标准被修改为明确允许紧接着MAC地址的16位字段即可用于长度字段，也可用于类型字段。

Mac OS使用 802.2/SNAP 封包来实现以太网上的AppleTalk V2协议套件（"EhterTalk"）。

### Novell raw 802.3

Novell的"raw"802.3帧格式基于早期IEEE 802.3的工作。Novell以它作为起点来创建他自己的以太网上IPX协议的的第一个实现。他们没有使用LLC头，而是直接在长度字段后面开始IPX数据包。这不符合IEEE 802.3标准，但由于IPX的前两个字节一直是FF（而在IEEE 802.2 LLC中这种模式虽然理论上是可能的但实际上概率极其微小），实用中这种方式与其他以太实现共同存在。但须注意在一些早期的可能无法识别之。

直到90年代中期，Novell NetWare默认使用这个帧类型，而由于Netware曾如此流行，而那时IP还不是那么流行，在过去的一些时候，大多数的以太网上都运载着负载IPX的"raw" 802.3封包。直到Netware 4.10，当使用IPX时，Netware才默认使用IEEE 802.2和LLC（Nerware 帧类型Ethernet_802.2）。

## 效率

我们可以计算以太网的效率和比特率：

$$\text{Efficiency} = \frac{\text{Payload size}}{\text{Frame size}}$$

当达到允许的最大负载值时可达到最高效率，对于无标签的以太网封包是$\frac{1500}{1538} = 97.53\%$，而使用802.1Q VLAN标签时是$\frac{1500}{1542} = 97.28\%$。

由效率中可计算比特率：

$$\text{Net bit rate} = \text{Efficiency} \times \text{Wire bit rate}\,\!$$

不带802.1Q标签的100BASE-TX以太网的最大比特率是97.53 Mbit/s.

注：不带标签的最大帧尺寸=1518 + 20 (7-byte 前导符,1-byte 帧开始符, 12-byte 帧间距)= 1538。

## 矮帧

矮帧是一个尺寸不及IEEE 802.3定义的最小长度64字节的以太网帧。可能的原因是以太网碰撞，数据不足，网卡错误或软件错误。