以太网帧 格式
时间: 2025-05-31 11:47:25 浏览: 35
### 以太网帧格式详解
以太网帧是数据链路层中用于封装数据的一种基本单位。其结构设计旨在满足高效传输和可靠性的需求,以下是关于以太网帧格式的具体说明。
#### 前导码 (Preamble)
前导码是一个7字节的序列,由一系列固定的比特模式组成 `101010...`,主要用于同步接收端和发送端的时钟频率[^1]。它帮助硬件识别即将到达的有效载荷并准备解码过程。
#### 起始定界符 (Start Frame Delimiter, SFD)
起始定界符位于前导码之后,占1个字节,固定值为 `10101011`。它的作用标志着实际帧数据部分的开始[^2]。
#### 目的地址 (Destination Address) 和源地址 (Source Address)
- **目的地址**: 占6字节,表示目标设备的物理地址(MAC 地址)。
- **源地址**: 同样占用6字节,标明发送方的 MAC 地址。
这些字段允许交换机或其他中间节点基于 MAC 地址转发流量到正确的终端设备[^3]。
#### 类型/长度 (Type/Length Field)
此字段有两种用途:
- 如果该值小于等于 1500,则代表的是后续数据域的实际长度;
- 若大于 1500,则表明这是高层协议类型编码,比如 IPv4 使用 `0x0800`, ARP 请求则对应于 `0x0806` 等等[^2]。
#### 数据 (Data Payload)
数据区域承载着来自更高层次的应用程序信息,默认范围是从至少 46 字节至最多 1500 字节之间。当有效负载不足 46 字节时会填充额外无意义的内容来达到最低限度的要求;而对于巨型帧支持的情况可超出标准 MTU 的上限。
#### 循环冗余校验 (Cyclic Redundancy Check, CRC 或 FCS)
最后附加有四个字节用来计算整个帧内容的错误检测码——FCS(Frame Check Sequence),通过特定算法得出的结果能够发现绝大多数随机发生的位错情况从而提高通信质量。
```python
class EthernetFrame:
def __init__(self, preamble, sfd, dst_mac, src_mac, type_length, payload, fcs):
self.preamble = preamble # 7 bytes of alternating bits '1' and '0'
self.sfd = sfd # Start frame delimiter: '10101011'
self.dst_mac = dst_mac # Destination MAC address (6 bytes)
self.src_mac = src_mac # Source MAC address (6 bytes)
self.type_length = type_length # Either length or protocol ID (2 bytes)
self.payload = payload # Data field between 46 to 1500 bytes typically
self.fcs = fcs # Error checking code computed over the whole frame
def validate(self):
"""Validate integrity using FCS."""
pass # Implementation omitted here.
```
阅读全文
相关推荐














