基于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可以方便解析,但是有時我們是直接驅動代碼中打印原始數據,此時則需要手動去解析。
審核編輯 黃宇
-
以太網
+關注
關注
40文章
5423瀏覽量
171684 -
驅動
+關注
關注
12文章
1840瀏覽量
85287 -
Mac
+關注
關注
0文章
1106瀏覽量
51471
發布評論請先 登錄
相關推薦
評論