以太网(802.3)帧格式

本文详细介绍了以太网帧的格式及各字段的作用,包括前导码、帧起始定界符、目的地址与源地址、长度/类型字段、数据主体及校验序列等。并解释了这些字段如何共同作用于数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 以太网帧格式

802.3 frame format

2. 字段说明

  • Preamble(前导码): 用于接收方与发送方的同步,7个字节,每个字节的值固定为0xAA.
  • SFD(start frame delimiter): 帧起始定界符,用于标识一个以太网帧的开始,值固定为0xAB.
  • DST && SRC: 分别表示标识目标地址和源地址。它们均为6个字节长。如果传输出去的目标地址第一位是0,则表示这是一个普通地址;如果是1, 则表示这是一个组地址。
  • Length/Type :通常这个字段用于指定报文头后所接的数据类型。通常使用的值包括:IPv4(0x0800), IPv6(0x86DD), ARP(0x0806)。 而值0x8100代表一个Q-tagged 帧(802.1q)。通常一个基础的以太网帧长为1518字节,但是更多的新标准把这个值扩展为2000字节。
  • MAC Client Data: 数据主体,最小长度为48字节(加上帧头12字节,CRC4字节刚好64字节), 当数据主体小于48字节时,会添加pad字段。选取最小长度是出于冲突检测的考虑(CSMA/CD)。而数据字段最大长度为1502字节。
  • FCS(Frame Check Sequence):也叫CRC(Cyclic Redundancy Check),CRC是差错检测码,用来确定接收到的帧比特是否正确。

3. 参考资料

  1. 802.3 AT 10Mbps
  2. 计算机网络(第五版)
  3. TCP/IP详解 卷一 第二版
### IEEE 802.3 Ethernet格式详解 IEEE 802.3 是一种以太网的标准,最初由 Novell 在其 NetWare/86 网络套件中引入。然而,随着 IEEE 正式发布 802.3 标准并加入 802.2 LLC 头部,这种格式变得与原始设计不同。以下是关于 IEEE 802.3 格式的具体结构及其用途。 #### 1. **头部结构** IEEE 802.3头部主要包括以下几个部分: - **目标地址 (Destination Address)** 长度为 6 字节,表示接收方的 MAC 地址。例如,在给定的数据包中,目标地址为 `01:80:C2:00:00:00`[^1]。 - **源地址 (Source Address)** 同样长度为 6 字节,表示发送方的 MAC 地址。在示例数据包中,源地址为 `00:04:0C:38:CD:C9`[^1]。 - **长度字段 (Length Field)** 替代了 Ethernet II 中的类型字段,用于指定后续数据的有效载荷大小。在这个例子中,有效载荷长度为 38 字节[^1]。 - **LLC 头部 (Logical Link Control Header)** IEEE 802.3 加入了一个额外的 LLC 层头部,主要用于识别上层协议。LLC 头部包含三个主要字段: - **DSAP (Destination Service Access Point):** 表示目标服务访问点,类似于端口号的作用。在此处 DSAP 值为 `0x42`[^1]。 - **SSAP (Source Service Access Point):** 表示源服务访问点,同样值为 `0x42`[^1]。 - **Control:** 控制字段通常用来描述通信模式或确认机制。此处控制字段值为 `3`[^1]。 #### 2. **尾部结构** 除了头部外,IEEE 802.3 还包括一个 FCS(Frame Check Sequence)字段,位于整个的最后位置,用于检测传输过程中可能发生的错误。FCS 使用 CRC-32 循环冗余校验算法计算得出。 #### 3. **适用场景** 由于加入了 LLC 头部,IEEE 802.3 更适合于需要明确区分多种高层协议的应用环境。尽管如此,现代网络更多倾向于使用简化版的 Ethernet II 格式作为主流标准。不过,在某些特定领域如 IPX/SPX 协议栈下,IEEE 802.3 仍然具有重要意义[^1]。 ```python def decode_ieee_802_3_frame(frame_bytes): destination_address = frame_bytes[:6].hex(':') source_address = frame_bytes[6:12].hex(':') length_field = int.from_bytes(frame_bytes[12:14], byteorder='big') llc_header_start = 14 dsap = frame_bytes[llc_header_start] ssap = frame_bytes[llc_header_start + 1] control = frame_bytes[llc_header_start + 2] fcs = frame_bytes[-4:].hex() decoded_info = { 'destination': destination_address, 'source': source_address, 'length': length_field, 'dsap': hex(dsap), 'ssap': hex(ssap), 'control': control, 'fcs': fcs } return decoded_info ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值