學習802.11之MAC幀格式(一篇就夠?。?/h1>
802.11規(guī)范的關(guān)鍵在于MAC(媒介訪問控制層),MAC位于各式物理層之上,控制數(shù)據(jù)傳輸。負責核心成幀操作以及與有線骨干網(wǎng)絡(luò)之間的交互。
802.11 MAC采用載波監(jiān)聽多路訪問(CSMA)機制來控制對傳輸媒介的訪問,不過沖突會浪費寶貴的傳輸資源,因而802.11采用沖突避免(CSMA/CA)機制,而非Ethernet所采用的沖突檢測(CSMA/CD)機制。
在802.11無線局域網(wǎng)中,MAC幀是實現(xiàn)MAC協(xié)議和保證數(shù)據(jù)有效通訊的基礎(chǔ)。802.11MAC幀格式很特別,它的長度是可變的。不同功能的數(shù)據(jù)幀長度不一樣。

802.11 MAC一般格式
?
【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【749907784】整理了一些個人覺得比較好的學習書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦!?。。ê曨l教程、電子書、實戰(zhàn)項目及代碼)? ? ?

Frame Control(幀控制)
所有幀的開頭均為2個字節(jié)的Frame?Control。

1:Protocol字段:有2位組成,用以顯示該幀所使用的MAC版本,目前802.11 MAC只有1個版本,它的協(xié)議編號為0
2:Type與Subtype字段:用來指定使用的幀類型。
其中Type表示幀類型:
00: 管理幀(Management Frame)?
01: 控制幀(Control Frame)?
10: 數(shù)據(jù)幀(Data Frame)?
管理幀:負責監(jiān)督,主要用來加入或退出無線網(wǎng)絡(luò)以及處理接入點之間關(guān)聯(lián)的轉(zhuǎn)移事宜。

???
????SubType:
0000:Association? Request(關(guān)聯(lián)請求)?
0001:Association Response(關(guān)聯(lián)響應(yīng))
0010:Reassociation Request(重新關(guān)聯(lián)請求)
0011:Reassocation response(重新關(guān)聯(lián)響應(yīng))
0100:Probe Request(探測請求)
0101:Probe Response(探測響應(yīng))
1000:Beacon(信標)
1001:ATIM(通知傳輸指示消息)
1010:Disassociation(取消關(guān)聯(lián))
1011:Authentication(身份驗證)
1100:Deauthentication(解除身份驗證)
控制幀:通常與數(shù)據(jù)幀搭配使用,負責區(qū)域的清空、信道的取得、載波監(jiān)聽的維護,并于收到數(shù)據(jù)時予以肯定確認,借此提高工作站之間數(shù)據(jù)傳輸?shù)目煽啃浴?/p>
SubType:
1010:Power Svae(PS)-Poll(省電-輪詢)
1011:RTS(請求發(fā)送)
1100:CTS(清除發(fā)送)
1101:ACK(確認)
1110:CF-End(無競爭周期結(jié)束)
1111:CF-End(無競爭周期結(jié)束)+CF-ACK(無競爭周期確認)
數(shù)據(jù)幀:負責在工作站之間搬運數(shù)據(jù)。會將上層協(xié)議的數(shù)據(jù)置于幀主體中加以傳遞。
SubType:
0000:Data(數(shù)據(jù))
0001:Data+CF-ACK
0010:Data+CF-Poll
0011:Data+CF-ACK+CF-Poll
0100:Null data(無數(shù)據(jù):未傳送數(shù)據(jù))
0101:CF-ACK(未傳送數(shù)據(jù))
0110:CF-Poll(未傳送數(shù)據(jù))
0111:Data +CF-ACK+CF-Poll(未傳送數(shù)據(jù))
1000:QoS Data(數(shù)據(jù))
1001:QoSData+CF-ACK
1010:QoSData+CF-Poll
1011:QoSData+CF-ACK+CF-Poll
1100:QoS Null(無數(shù)據(jù):未傳送數(shù)據(jù))
1101:QoS CF-ACK(未傳送數(shù)據(jù))
1110:QoS CF-Poll(未傳送數(shù)據(jù))
1111:QoS CF-ACK+CF-Poll(未傳送數(shù)據(jù))
3:To DS與From?DS:用來指示幀的目的地是否為分布式系統(tǒng)。
To DS=0,From DS=0:表示Station之間的AD Hoc類似的通信,或者控制偵、管理偵。
To DS=0,From DS=1:Station接收的偵。
To DS=1,From DS = 0:Station發(fā)送的偵。
To DS=1,From DS = 1:無線橋接器上的數(shù)據(jù)偵。
4:More Fragments:上層的封包經(jīng)過MAC分段處理,除了最后一個片段,其他片段均會將該為置1。
5:Retry:重傳標記,任何重傳的幀都會將該為置位1,以協(xié)助接收端剔除重復(fù)的幀。
6:Power Management:用來指示工作站在完成當前原子幀交換之后是否進入省電(Power-Save)模式,1表示工作站即將進入深感模式,0表示工作站會一直保持清醒狀態(tài)。接入點不允許進入省電模式,所以接入點傳送的幀中此位必然為0。
7:More data:接入點會為處于省電模式的工作站緩存幀,接入點如果設(shè)置此位,表示至少有1個幀待傳給休眠中的工作站。
8:Protected frame:該位被置1,幀收到鏈路層安全協(xié)議包含,
9:Order:該位被置1,幀與幀嚴格要求依次傳送。
Duration/ID字段
緊跟在FrameControl字段之后,此字段有很多功能,有三種可能是形式:
1:Duration:持續(xù)時間,bit15被設(shè)定為0。用來記載網(wǎng)絡(luò)分配矢量(NAV),訪問媒介的時間限制由NAV指定。,Duration/ID字段被用來設(shè)定NAV。
2:無競爭周期所傳送的幀(CFP)。bit15被設(shè)為1,bit14被設(shè)為0。其余所有位均為0,字段值為32768。
3:PS-Poll幀:bit15和bit14均被設(shè)為1,用于從省電模式醒來的Station發(fā)送
AID(關(guān)聯(lián)標知符)以取得在AP中的緩存幀。?
Address字段
一個802.11幀最多可以包含4個Address字段。通常有3個,SA、DA、BSSID,由To?DS/From DS位來決定。

其中:
BSSID:基本服務(wù)集標識符
DA:目的地址
SA:源地址
RA:接收端地址
TA:發(fā)送端地址
SequenceControl(順序控制)字段
此字段16位,用來重組幀片段及丟棄重復(fù)幀。它是由4位的片段編號(fragment number)字段以及12位的順序(sequence nubmer)編號。
控制幀未使用順序編號,無此字段。

當上層幀交給MAC傳送時,會被賦予一個順序編號。此字段的作用相當于已傳幀的計數(shù)器取4096的模,此計數(shù)器從0起算,MAC每處理一個上層封包它就會累加1,如果上層封包被分段處理,則所有幀片段都會具有相同的順序編號。如果是重傳幀,則順序編號不會有任何改變。
幀片段之間的差異在于片段編號,第一個片段的編號為0,其后每個片段編號依次累加1,重傳的片段編號會保持原始的順序編號以協(xié)助重組。
FrameBody((幀主體)字段
也稱為數(shù)據(jù)字段,負責在工作站之間傳遞上層有效載荷。
FCS(幀校驗序列)字段
循環(huán)冗余校驗(CRC)碼,F(xiàn)CS讓工作站能攻檢查所收到的幀的完整性。FCS的計算范圍涵蓋MAC標頭里所有字段以及幀主體。
當幀送至無線接口時會先計算FCS,然后在經(jīng)過RF鏈路傳送出去。接收端隨后會為收到的幀計算FCS,然后與記錄在幀中的FCS進行比較。如果兩者相符,則該幀極有可能在傳送過程中未受損。
最后來一張Omnipeek抓包截圖:

原文作者:燕十三的物聯(lián)網(wǎng)之旅
