基于DWC_ether_qos的以太网驱动开发-MAC帧格式介绍 (qq.com)
一.前言
在以太网驱动,应用,编写调试等开发时,往往会抓包分析,此时有必要了解MAC帧的格式以便进行分析,我们参考标注文档对其进行一个整理备忘。
《802.3-2000_part1.pdf》的3. Media access control frame structure规定了使用CSMA/CD MAC的数据通信系统的两种帧格式:
基本MAC帧格式
对基本MAC帧格式的扩展,Tagged MAC帧,即携带QTag前缀的帧。
二.基本MAC帧格式
基本MAC帧格式如下,包括9个部分
其中
OCTETS表示8位,
1.字节的低位先发送,除了CRC31校验域是高位先发送按照bit流x31, x30,…, x1, x0发送,即x0是最后发送字节的最后发送位。
2.多字节数据按照大端解析,高字节在前先发送。
各部分详细介绍如下:
序号 | 字段 | 大小(字节) | 功能 | 说明 |
1 | PREAMBLE | 7 | 前导字段 |
用于PLS (PHYSICAL LAYER SIGNALING)实现和接收帧保持同步(前导和SFD发送时有冲突也会发送完全部前导和SFD) 10101010 10101010 10101010 10101010 10101010 10101010 10101010 即0x55序列 |
2 | SFD | 1 | 帧开始定界符 | 10101011 即0xD5 |
3 |
DESTINATION ADDRESS (DA) |
6 | 目的地址字段 |
目的站的地址。它可以是单播或多播(包括广播)地址。 全1是广播地址。 见后面MAC地址部分说明。 |
4 |
SOURCE ADDRESS (SA) |
6 | 源地址字段 | 发送帧站点的地址。CSMA/CD MAC子层不解释源地址字段。 |
5 | LENGTH/TYPE | 2 | 长度/类型字段 |
如果小于等于maxValidFrame=maxUntaggedFrameSize(1518)-18=1500 则表示MAC CLIENT DATA区域长度 如果大于等于0x0600 则表示帧类型。 |
6 | MAC CLIENT DATA | / | 数据 | MAC+DATA范围 46~1500字节 |
7 | PAD | / | 填充 | 填充,使得DESTINATION ADDRESS~FCS满足最小帧长64字节。 |
8 |
FRAME CHECK SEQUENCE (FCS) |
4 |
CRC32校验值,校验DA到PAD区域之间的数据。生成多项式。 G(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1 注意FCS是x31最先发,x0最后发. |
|
9 | EXTENSION | / | 扩展域 |
0~(slotTime–minFrameSize) bits 长 1000 Mb/s 半双工才有 |
2.1 MAC地址
48位MAC地址的定义如下
位域 | 功能 | 说明 | |
1 | I/G | 地址类型 |
LSB即最先发出的bit 区分是单播还是组播地址: 0:即I individual 为单播地址, 1:即G group 为组播地址。 注意本位只针对目的地址,对于源地址始终是0. |
2 | U/L |
区分本地或全局地址: 0:即U universal 为全局地址, 1:即L locally 为本地地址。 广播地址该位是1. |
|
3 | 46-BIT ADDRESSS |
地址类型:
1 |
Individual Address 单播地址 |
地址和网络中特定的一个站点对应。 | |
2 |
Group Address 组播地址 |
Multicast-Group Address多播地址 | 通过更高级别的约定与一组逻辑相关的站相关联的地址。 |
Broadcast Address广播地址 |
一种可区分的预定义多播地址,它总是表示给定LAN上所有站点的集合。 全1是广播地址。 |
2.2无效帧
满足以下一个以上的条件
1.帧长度与长度/类型字段中指定的长度值不一致。如果长度/类型字段表示类型值,则假定帧长度与该字段一致,在此基础上不应视为无效帧。
2.长度不是八位的整数倍。
3.CRC32校验错误。
4.无效MAC帧的内容不得传递给LLC或MAC控制子层。无效MAC帧的出现可以被传送到网络管理。
三.Tagged MAC 帧格式
带标签的MAC帧是对普通MAC帧的扩展,在原来的基础上SA后添加了4字节的Qtag。见标准IEEE P802.1Q
序号 | 字段 | 大小(字节) | 功能 | 说明 |
1 | PREAMBLE | 7 | 前导字段 | 同基本MAC帧 |
2 | SFD | 1 | 帧开始定界符 | 同基本MAC帧 |
3 | DESTINATION ADDRESS | 6 | 目的地址字段 | 同基本MAC帧 |
4 | SOURCE ADDRESS | 6 | 源地址字段 | 同基本MAC帧 |
5 | LENGTH/TYPE = 802.1QTagType | 2 |
QTag长度/类型 固定为0x8100 表示802.1Q Tag Protocol Type。 |
|
6 | TAG CONTROL INFORMATION | 2 |
QTag 控制信息 a) A 3-bit User Priority field, b) A Canonical Format Indicator (CFI), and c) A 12-bit VLAN Identifier. |
|
7 | LENGTH/TYPE | 2 | 长度/类型字段 |
插入QTag之前的MAC帧的原始长度/类型。 同基本MAC帧 |
8 | MAC CLIENT DATA | / | 数据 | 同基本MAC帧 |
9 | PAD | / | 填充 |
同基本MAC帧 对于填充,最小64字节的帧长可以包含4字节的TAG也可以不包含,不包含TAG则实际帧长是64字节了。 |
10 | FRAME CHECK SEQUENCE | 4 | 同基本MAC帧 | |
11 | EXTENSION | / | 扩展域 | 同基本MAC帧 |
四. wireshark中的帧解析
比如如下是一个arp请求包,wireshark可以解析其不同字段,比如左下侧点击Type右边数据0806即高亮。Wireshark抓包中不显示前导,帧开始符和FCS,因为前二者是固定的,FCS错误则收不到,MAC层作为无效帧就丢弃了。
五. 总结
调试以太网,MAC帧的格式是必须要了解的,使用wireshark可以方便解析,但是有时我们是直接驱动代码中打印原始数据,此时则需要手动去解析。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !