802.11協議筆記(二)——PHY物理層的幀格式(802.11b)
該文內容主要取自http://blog.chinaunix.net/uid-26611973-id-3431390.html,用於整理個人學習記錄。
這篇文章主要介紹layer1物理層802.11b的內容。
IEEE802.11b是一個工作在2.4GHz ISM頻段、物理層為改進的高速直接序列擴頻HR/DSSS(Barker,CCK,PBCC)、傳輸速率可高達11Mbps的無線區域網標準。該標準被IEEE組織於1999年正式批准。
為了獲得高的傳輸速率,IEEE802.11b協議定義了高速PLCP子層,用於HR/DSSS擴頻方式,以實現2、5.5和11Mbps的傳輸速率。
IEEE802.11b物理層滿足以下規範:
1.工作頻段:ISM 2.400-2.4835GHz
2.資料有效負載通訊能力:1、2、5.5、和11Mbps
3.調製方式為:差分二進位制相移鍵控(DBPSK)、差分正交相移鍵控(DQPSK)、補碼鍵控(CCK)和可選的分組二進位制卷積碼(PBCC)
前面有介紹,MPDU進入PLCP層以後,它的名字就換成了PSDU,PSDU加上前導碼和PLCP頭部以後,就形成了PPDU。在傳輸的過程中,傳送端通過向接收端傳送PLCP前導碼來提醒對方。前導碼是一序列0/1位元串,用於同步即將發生的傳輸。在802.11-2007 協議中有定義三種類型的前導碼格式:the Long PPDU format, the Short PPDU format, and the OFDM PLCP preamble。然而在802.11n中又定義了另外三種不同的PPDUs :non-HT legacy PPDU, HT-mixed PPDU, and HT-Greenf eld PPDU。下面來討論一下這些前導碼的格式。
1.Long PLCP Preamble
長前導碼的長度是144bit,前面128bit是同步域(sync field),後面16bit是Start of Frame Delimiter (SFD),如下圖:
同步碼(SYNC)是128位經過擾碼後的“1”(擾碼器的種碼為“1101100”),它被用於喚醒接收裝置,使其與接收訊號同步。起始幀界定符(SFD)用於通知接收機,在SFD結束後緊接著就開始傳送與物理介質相關的一些引數。
128bit的sync field是用來提醒接收端一個潛在的可接收訊號已經到來,當接收端收到這個提醒的sync field以後,接收端將會開始和這個訊號同步。
在sync field後面的是16bit的SFD,這裡的值是1111 0011 1010 0000,當收到SFD的時候,表示接下來的PLCP頭部也將傳送。這個長PPDU前導碼是使用差分二進位制相移鍵控(DBPSK)進行調製的,以1M的速率進行傳送。長前導碼的調製演算法是固定的,PLCP
當傳送端傳送sync field的時候,接收端未必能夠馬上識別的到,但是沒關係,因為接收端沒必要接收全部的sync field,主要SFD接收並識別到了就行了。
前導碼結束後,就是PLCP頭資訊(PLCP Header),這些資訊中包含了與資料傳輸相關的物理引數。這些引數包括:信令(SIGNAL)、業務(SERVICE)、將要傳輸的資料的長度(LENGTH)和16位的CRC校驗碼。接收機將按照這些引數調整接收速率、選擇解碼方式、決定何時結束資料接收。信令(SIGNAL)欄位長8位,定義資料傳輸速率,它有四個值:0Ah、14h、37h和6Eh,分別指定傳輸速率為1Mbps、2Mbps、5.5Mbps和11Mbps,接收機將按此調整自己的接收速率。業務(SERVICE)欄位長度也是8位,它指定使用何種調製碼(CCK還是PBCC)。長度(LENGTH)欄位長16位,用於指示傳送後面的PSDU需用多長時間(單位為微秒)。16位CRC校驗碼用於檢驗收到的信令、業務和長度欄位是否正確。
前導碼和PLCP頭部資訊以固定的1Mbps速率傳送,而PSDU資料部分則可以1Mbps(DBPSK調製)、2Mbps(DQPSK調製)、5.5Mbps(CCK或PBCC)和11Mbps(CCK或PBCC)速率進行傳送。
2.Short PLCP Preamble
短PLCP的preamble長度是72bit(是long PLCP preamble 144的一半),它由56bit的sync field和16bit的SFD組成:
16bit的SFD是0000 0101 1100 1111,和long SFD的順序相反,和長PLCP的一樣,Short PLCP Preamble 使用的是DBPSK調製,以1M的速率進行傳輸;但是Short PLCP Header使用的是DQPSK調製,傳輸速率是2M。前導碼的調製演算法是固定的,PLCP Header的調製演算法也是固定的,但是PSDU可以使用其他的調製演算法。
短PPDU幀結構的前導碼傳輸速率為1Mbps(DBPSK調製),整個PLCP頭部資訊的傳輸速率為2Mbps,PSDU資料傳輸速率為2Mbps、5.5Mbps、11Mbps。
3. OFDM PLCP Preamble(瞭解)
它也稱作OFDM訓練結構,它由10 short symbols and 2 long symbols組成:
t1-t10叫做short training symbols, GI2叫做long guard interval,T1和T2是兩個long training symbols,接下來的是SIGNAL feld and the DATA
felds,每個域都帶一個GI(守衛間隔)。前導碼的總長度是16us,短OFDM訓練字元由12個子載波組成,長OFDM訓練字元由53個子載波組成.
4. PPDU資料包的傳送過程
(以下內容來自http://blog.chinaunix.net/uid-26611973-id-3431390.html,也可以檢視《802.11-2012》
17.2.5 Transmit PLCP)
當資料按上述幀格式封裝好後,就可以進入PPDU資料包傳送過程了。IEEE定義了一系列指令(Primitives),用這些指令對MAC層管理體(MLME)和PHY層管理體(PLME)進行控制,即通過修改、更新管理資訊庫MIB實現MAC層和PHY層的動作,從而實現PPDU資料包的傳送和接收。下圖是PPDU包的傳送過程。
MAC層通過傳送一個“請求開始傳送”指令PHY-TXSTART.req(帶引數TXVECTOR)來啟動PPDU的傳送。除DATARATE(資料傳輸速率)和LENGTH(資料長度)兩個引數外,其他象PREAMBLE_TYPE(前導碼型別)和MODULATION(調製型別)等引數也與PHY-TXSTART.req(帶引數TXVECTOR)指令一起,經由物理層業務訪問點(PHY-SAP)被設定。物理層的PLCP子層在收到MAC層的傳送請求後,就向PMD子層發出“天線選擇請求”指令(PMD_ANTSEL.req)、“傳送速率請求”指令(PMD_RATE.req)和“發射功率請求”指令(PMD_TXPWRLVL.req)對PHY進行配置。
配置好PHY後,PLCP子層立即向PMD子層發出“請求開始傳送”指令(PMD_TXSTART.request),同時PHY實體(PLME)開始對PLCP前導碼(Preamble)進行編碼併發送。發射功率上升所需的時間應該包括在PLCP的同步(SYNC)欄位中。一旦PLCP前導碼傳送完畢,資料將在MAC層和PHY層之間通過一系列“資料傳送請求”指令(PHY_DATA.reqest)和“資料傳送確認”指令(PHY_DATA.confirm)完成頻繁的資料交換。
從PSDU資料包中第一個資料符號傳送開始,資料傳輸速率及調製方式就有可能根據PLCP頭資訊的定義而發生改變。隨著MAC層的資料位元組不斷流入,PHY層持續按8位一組地按由低到高的順序把PSDU資料包傳送出去。
傳送過程也可以被MAC層用指令PHY_TXEND.request提前終止。只有在PSDU最後一個位元組被髮送出去後,傳送才算正常結束。PPDU資料包傳送結束後,PHY管理實體就立即進入接收狀態。
5.PPDU資料包接收過程
(以下內容來自http://blog.chinaunix.net/uid-26611973-id-3431390.html,也可以檢視《802.11-2012》
17.2.6 Recieve PLCP)
討論PPDU的接收時,就必須介紹一個重要概念CCA(Clear Channel Assessment):空閒通道評估,它的作用是PHY根據某種條件來判斷當前無線介質是處於忙還是空閒狀態,並向MAC通報。高速PHY至少應該按照下面三個條件中的一個來進行通道狀態評估:
-CCA模式1:根據接收端能量是否高於一個閾值進行判斷。如果檢測到超過ED(能量檢測,Energy Detection)閾值的任何能量,CCA都將報告介質當前狀態為忙。
-CCA模式2:定時檢測載波。CCA啟動一個3.65ms長的定時器,在該定時範圍內,如果檢測到高速PHY訊號,就認為通道忙。如果定時結束仍未檢測到高速PHY訊號,就認為通道空閒。3.65ms是一個5.5Mbps速率的PSDU資料幀可能持續的最長時間。
-CCA模式3:上述兩種模式的混合。當天線接收到一個超過預設電平閾值ED的高速PPDU幀時,認為當前介質為忙。
當接收機收到一個PPDU時,必須根據收到的SFD欄位來判斷當前資料包是長PPDU還是短PPDU。如果是長PPDU,就以1Mbps速率按BPSK編碼方式對長PLCP頭資訊進行解調,否則以2Mbps速率按QPSK編碼方式對短PLCP頭資訊進行解調。接收機將按照PLCP頭資訊中的信令(SIGNAL)欄位和業務(SERVICE)欄位確定PSDU資料的速率和採 用的調製方式。
為了接收資料,必須禁止PHY_TXSTART.request指令的使用,以保證PHY管理實體處於接收狀態。此外,通過PLME(物理層管理實體)將站點的物理層PHY設定到合適的通道並指定恰當的CCA規則。其他接收引數,如接收訊號強度指示(RSSI)、訊號質量(SQ)及資料速率(DATARATE)可經由物理層業務訪問點(PHY-SAP)獲取。
當接收到發射能量後,按選定的CCA規則,隨著RSSI強度指示逐漸達到預設閾值(ED_THRESHOLD),PMD子層將向PLCP子層發出PMD_ED指令,意思是通知PLCP,介質上的能量已到達可接收水平,並且/或者在鎖定發射訊號的編碼方式後,PMD繼續向PLCP發出一個PMD_CS指令,即通知PLCP已檢測到訊號載波。在正確接收發射訊號的PLCP頭資訊之前,這些當前已被PHY探知的接收條件都將被PLCP子層用PHY_CCA.indicate(BUSY)指令通報MAC。 PMD子層還將用PMD_SQ和PMD_RSSI指令重新整理通報給MAC的SQ(接收訊號質量)和RSSI(接收訊號的強度)引數。
在發出PHY_CCA.indicate訊息後,PHY實體就將開始搜尋發射訊號的SFD欄位。一旦檢測到SFD欄位,就立即啟動CRC-16冗餘校驗處理,然後開始接收PLCP的信令(SIGNAL)、業務(SERVICE)和長度(LENGTH)欄位。如果CRC校驗出錯,PHY接收機將返回接收空閒狀態(RX IDLE State),CCA狀態也回到空閒。
如果PLCP頭資訊接收成功(並且信令欄位的內容完全可識別,且被當前接收機支援),接收機PLCP子層就向MAC發出一個帶接收引數的請求開始接收指令PHY_RXSTART.indicate(RXVECTOR),通知MAC準備開始接收資料。此後,PHY不斷將收到的PSDU的bit按8位一組重組後,通過與MAC之間不斷交換一系列的PHY_DATA.indicate(DATA)指令完成資料向MAC的傳遞。當接收完PSDU的最後一位後,接收機返回空閒態,PHY向MAC發出一個接收完成指令PHY_RXEND.indicate,通知MAC接收資訊已完成,最後向MAC發出一個通道空閒指示PHY_CCA.indicate(IDLE)。
,