DCF机制详解
綜述
802.11中規(guī)定了兩類媒體訪問控制機(jī)制,PCF(點(diǎn)協(xié)調(diào)功能)和DCF(分布協(xié)調(diào)功能)。DCF是基于競(jìng)爭(zhēng)機(jī)制,提供分布式接入,多個(gè)分布式無線節(jié)點(diǎn)搶同一資源,PCF使用無競(jìng)爭(zhēng)模式,提供有中心控制的輪詢式接入,所有的帶寬分配(傳輸時(shí)間片)都由一個(gè)全局的Point控制。PCF是以DCF作為基礎(chǔ)擴(kuò)展的,802.11中PCF與DCF可以兼容工作。在PCF模式中,兩者的兼容實(shí)際上是基于一種交替工作的機(jī)制,即PCF和DCF各占據(jù)一段時(shí)間,交替進(jìn)行工作。該交替周期即是CFP重復(fù)周期(CFP repetition interval),在該周期內(nèi),包含CFP和CP兩個(gè)部分。?
這篇文章主要介紹DCF機(jī)制,DCF機(jī)制是基于CSMA/CS載波偵聽沖突避免的多址接入?yún)f(xié)議。利用載波偵聽和沖突避免技術(shù)來防止單一共享信道的沖突,同時(shí)通過四次握手機(jī)制完成分布式數(shù)據(jù)業(yè)務(wù)的信道接入,基本解決暴露終端和隱藏終端的問題。?
DCF主要包含四個(gè)核心機(jī)制:?
1.載波偵聽機(jī)制?
2.幀間間隔機(jī)制?
3.隨機(jī)退避機(jī)制?
4.基于 RTS/CTS 的四次握手機(jī)制
1.載波偵聽機(jī)制
載波偵聽機(jī)制分為物理載波偵聽和虛擬載波偵聽,任意一個(gè)指標(biāo)指示信道繁忙,則信道繁忙。
1.1物理載波偵聽機(jī)制
物理層相關(guān)背景:?
1.1.1 CCA概述
物理載波監(jiān)聽采用三種信道空閑檢測(cè)方式,能量檢測(cè)、載波檢測(cè)和能量載波混合檢測(cè),統(tǒng)稱為CCA。CCA工作模式由PHY MIB的屬性:dot11CCAModeSupported來指出。
1.?能量檢測(cè)(ED):對(duì)接收信號(hào)的能量大小進(jìn)行判斷,當(dāng)接收的功率大于物理層規(guī)定的閾值ED_threshold時(shí),就認(rèn)為信道被占用。?
2.?載波檢測(cè)(CS)?: 檢測(cè)信道中是否存在高速PHY信號(hào),PMD層將會(huì)識(shí)別該信號(hào)的preamble部分,展開運(yùn)算得出SQ值衡量信號(hào)質(zhì)量,如果信號(hào)質(zhì)量超過設(shè)定閾值,認(rèn)為信道存在PHY高速信號(hào),信道被占用。其中,802.11中的preamble部分采用特定的序列所構(gòu)造,該序列對(duì)于發(fā)送方和接收方都是已知的,其用來做幀同步以及符號(hào)同步。在實(shí)際監(jiān)聽過程中,節(jié)點(diǎn)會(huì)不斷采樣信道信號(hào),用其做自相關(guān)或者互相關(guān)運(yùn)算,其中自相關(guān)在基于OFDM的802.11技術(shù)中常用,比如802.11a,而互相關(guān)在基于DSSS技術(shù)中常用,比如802.11b。?
在直接序列擴(kuò)頻DSSS技術(shù)的物理層中,PMD層對(duì)接收信號(hào)與本地的偽隨機(jī)碼(PN碼)進(jìn)行運(yùn)算比較,如果其值超過某一極限,就認(rèn)為信道被占用。?
3.?能量和載波混合檢測(cè)(ED & CS)?
在802.11中根據(jù)具體物理層使用的技術(shù)來決定檢測(cè)技術(shù)的采用。DSSS技術(shù)結(jié)合了能量檢測(cè)和載波檢測(cè),而FHSS則僅采用載波檢測(cè)技術(shù)。混合檢測(cè)中,任意一種被檢測(cè)到超限,就認(rèn)為信道正在被占用。
1.1.2 CCA實(shí)現(xiàn)過程
1.802.11能量檢測(cè)實(shí)現(xiàn)過程?
當(dāng)物理層接收到信號(hào),它首先對(duì)該信號(hào)的能量展開歸一化處理,得到RSSI(Received Signal Strength Indicator)是接收信號(hào)的強(qiáng)度指示。并在PMD層生成原語PMD_RSSI.indicate將RSSI提供給PLCP層,PLCP再把RSSI傳遞給MAC層。PLCP層通過原語PMD_RSSI.request將閾值ED_THRESHOLD傳遞給PMD層,其中,閾值是從MIB中獲得。若RSSI的值超過閾值,則PMD層將原語PMD_ED.indicate的參數(shù)設(shè)置為enable通知PLCP層中,則PLCP層原語PHY_CCA.indication(STATE)的中的參數(shù)值值則為BUSY,通知MAC層信道繁忙。?
2.802.11載波檢測(cè)實(shí)現(xiàn)過程?
CCA啟動(dòng)一個(gè)3.65ms長的定時(shí)器,在該定時(shí)范圍內(nèi),如果檢測(cè)到高速PHY信號(hào),就認(rèn)為信道忙。如果定時(shí)結(jié)束仍未檢測(cè)到高速PHY信號(hào),就認(rèn)為信道空閑。3.65ms是一個(gè)5.5Mbps速率的PSDU數(shù)據(jù)幀可能持續(xù)的最長時(shí)間。?
簡(jiǎn)單的說,當(dāng)物理層接收到信號(hào),根據(jù)preamble部分得出SQ信號(hào)質(zhì)量,在PMD層生成原語PMD_SQ.indicate(SQ)來通知PLCP層,實(shí)時(shí)更新參數(shù)SQ的值。當(dāng)SQ的值超過了閾值參數(shù)CS_THRESHOLD,PMD層向PLCP層發(fā)送原語PMD_CS.indicate(enable),通知PLCP層信道檢測(cè)到PHY高速信號(hào),正在解析該數(shù)據(jù)包,信道被占用。?
備注:?
RSSI:RSSI是接收到的射頻能量的測(cè)量值(但不是能量的本身值)。RSSI值范圍0~255,RSSI值隨PHY Preamble部分的能量單調(diào)遞增。因此RSSI值可以只選取PHY Preamble(前導(dǎo)碼)的測(cè)量就行了。?
PMD_RSSI.indicate:該可選的原語可由PMD產(chǎn)生,用于向PLCP提供接收到的信號(hào)強(qiáng)度。該原語有一個(gè)參數(shù):RSSI,它是高速PHY接收的射頻能量的測(cè)量值,長度為0-8bit。RSSI和SQ作為CCA機(jī)制的部分一起協(xié)同使用。
1.2虛擬載波偵聽機(jī)制
虛擬載波偵聽機(jī)制由MAC提供, 802.11標(biāo)準(zhǔn)使用網(wǎng)絡(luò)分配向量NAV實(shí)現(xiàn)虛擬偵聽。MAC幀中的Dur/ID字段中存放著的“持續(xù)時(shí)間”,對(duì)接收到的信息判斷信道將被占用的時(shí)間,確定自身的發(fā)送需要延遲的時(shí)間。?
NAV可以理解為一個(gè)Timer定時(shí)器用來定義當(dāng)前鏈路還需要被占用多久,開始值是最后一次接收到的幀的持續(xù)時(shí)間,倒計(jì)時(shí)至0結(jié)束。每一個(gè)監(jiān)聽的Sta都使用該NAV定時(shí)器,數(shù)據(jù)通信時(shí),占領(lǐng)信道的Sta會(huì)通過幀中的duration字段來告知其他Sta我還需要用多久,而未獲取信道資源的Sta通過對(duì)比收到包中的duration值來更新自身NAV的值。?
更新條件?
1、只有收到包的duration值大于本身的NAV timer才被更新;?
2、該幀并非發(fā)往本工作站,即該更新NAV的站點(diǎn)是偵聽棧。?
*當(dāng)NAV值為0,且物理載波監(jiān)聽表明信道空閑時(shí),才認(rèn)為當(dāng)前鏈路為空閑狀態(tài)。?
?
上圖標(biāo)出了三類距離范圍:傳輸范圍、載波偵聽范圍、載波監(jiān)聽?zhēng)?
?
針對(duì)不同的距離范圍,節(jié)點(diǎn)更新自身NAV的值也不同,傳輸范圍內(nèi)的節(jié)點(diǎn)可以接收CTS并且正確解析其中的duration,據(jù)此更新NAV;載波監(jiān)聽?zhēng)?nèi)的節(jié)點(diǎn)可以接收CTS但不能正確解析其中的duration,此時(shí)節(jié)點(diǎn)采用延時(shí)EIFS的策略。
2.幀間間隔機(jī)制
提供訪問媒介的不同優(yōu)先級(jí)?
SIFS 短幀間隔 < PIFS PCF幀間隔 < DIFS DCF幀間隔 < EIFS 擴(kuò)展幀間隔
2.1slot time
時(shí)隙是指一個(gè)時(shí)間片段,在CSMA/CA中,節(jié)點(diǎn)競(jìng)爭(zhēng)接入信道之前需要經(jīng)過相應(yīng)的隨機(jī)回退(backoff)過程,其中backoff過程就是由很多個(gè)時(shí)隙所組成的。
A Slot Time= a CCA Time(CCA時(shí)間)+a Rx/Tx turnaround Time(發(fā)送接收天線轉(zhuǎn)換時(shí)間)+a Air Propagation Time(傳播延遲)+a MAC Processing Delay(MAC層處理延遲)?
2.2 SIFS, Short Interframe Space(SIFS)
在802.11系列無線局域網(wǎng)中SIFS是固定值,SIFS是最小的幀間 間隔,因此采用SIFS的節(jié)點(diǎn)具有訪問無線鏈路的最高優(yōu)先級(jí)。它等于節(jié)點(diǎn)從發(fā)送狀態(tài)切換到接收狀態(tài)并能正確解碼所需要的時(shí)間,或者從接收狀態(tài)轉(zhuǎn)為發(fā)送狀態(tài)所需要的時(shí)間,在SIFS過期后可能發(fā)送的數(shù)據(jù)包包括ACK、CTS幀,不同標(biāo)準(zhǔn)中規(guī)定的SIFS值不同。
A SIFS Time= a RXRF Delay(射頻延遲)+a RXPLCP Delay(物理層頭部接收延遲)+a MAC Processing Delay(MAC層處理延遲) + a RxTx Turnaround Time(發(fā)送接收天線轉(zhuǎn)換時(shí)間)?
2.3DIFS, DCF Interframe Space(DIFS)
在DCF協(xié)議中,節(jié)點(diǎn)在開始發(fā)送數(shù)據(jù)之前需要監(jiān)測(cè)信道是否空閑。如果信道已經(jīng)空閑,則節(jié)點(diǎn)仍需等待DIFS段時(shí)間才開始發(fā)送數(shù)據(jù);而如果在DIFS時(shí)間段內(nèi)任一時(shí)刻信道被監(jiān)測(cè)為忙,則節(jié)點(diǎn)不得不推遲它的數(shù)據(jù)發(fā)送。DIFS和SIFS間的計(jì)算關(guān)系如下:
DIFS = SIFS + (2 * Slot time)- 1
- 2
2.4PIFS, PCF Interframe Space(PIFS)
PCF使得AP等待PIFS而不是DIFS時(shí)間以訪問信道,由于DIFS > PIFS > SIFS,因此AP總比普通節(jié)點(diǎn)具有更高的訪問信道的優(yōu)先級(jí)。
PIFS = SIFS + Slot time- 1
- 2
?
####2.5 EIFS, Extended Interframe Space(EIFS)?
在前一幀出錯(cuò)的情況下,發(fā)送節(jié)點(diǎn)不得不延遲EIFS而不是DIFS時(shí)間段后再發(fā)送下一幀。
- 1
- 2
####2.6DSSS 物理層特征?
此處附上DSSS 物理層特征,通過PLME-CHARACTERISTICS原語提供,在初始化的時(shí)候,原語生成,為層管理實(shí)體提供物理層特性參數(shù)。IEEE 802.11中定義的DSSS 物理層的特征見下表:?
隨機(jī)退避機(jī)制以及基于 RTS/CTS 的四次握手機(jī)制寫在下一篇介紹中,文章篇幅太長看得難受。
3.隨機(jī)退避機(jī)制
802.11中采用二進(jìn)制指數(shù)退避法解決節(jié)點(diǎn)發(fā)送失敗或者發(fā)生沖突時(shí)需要退避的時(shí)間。?
下圖是基本接入機(jī)制:?
?
當(dāng)MAC層有幀需要發(fā)送,在物理載波偵聽和虛擬載波偵聽都表示信道空閑之后,若退避窗口的計(jì)數(shù)值不為0,則繼續(xù)一slot time為單位減少計(jì)數(shù)值,否則隨機(jī)生成一個(gè)退避窗口進(jìn)行退避。
此時(shí),節(jié)點(diǎn)在競(jìng)爭(zhēng)窗口中選擇一個(gè)隨機(jī)數(shù)為基準(zhǔn)的隨機(jī)回退計(jì)數(shù)值,退避時(shí)間選定后,就相當(dāng)于設(shè)置了一個(gè)退避計(jì)時(shí)器(backoff timer)。站點(diǎn)在slot time內(nèi)持續(xù)監(jiān)聽信道。這可能發(fā)生兩種情況:?
若檢測(cè)到信道空閑,退避計(jì)時(shí)器就繼續(xù)倒計(jì)減一;?
若檢測(cè)到信道忙,就凍結(jié)退避計(jì)時(shí)器的剩余時(shí)間,重新等待信道變?yōu)榭臻e并再經(jīng)過時(shí)間DIFS后,從剩余時(shí)間開始繼續(xù)倒計(jì)時(shí)。退避計(jì)時(shí)器的時(shí)間減小到零時(shí),就開始發(fā)送整個(gè)數(shù)據(jù)幀。
- 1
- 2
其中,Random()是均勻分布在[0,CW]范圍內(nèi)的隨機(jī)整數(shù),CW就是contention window競(jìng)爭(zhēng)窗口?
競(jìng)爭(zhēng)窗口的值是一個(gè)介于物理特征值最小競(jìng)爭(zhēng)窗口CWmin與最大競(jìng)爭(zhēng)窗口CWmax之間的參數(shù)值,用來讓節(jié)點(diǎn)選擇隨機(jī)回退計(jì)數(shù)值(backoff counter)的范圍。
- 1
- 2
不同的物理層技術(shù)有相應(yīng)的物理特征值,下圖為DSSS物理層的數(shù)據(jù)標(biāo)準(zhǔn)?
下圖為競(jìng)爭(zhēng)窗口增長圖
?
a.初始時(shí)CW=CWmin,則Backoff time為[0,CWmin]中的隨機(jī)值乘上SlotTime,并使用該Backoff Time進(jìn)行競(jìng)爭(zhēng);?
b.若Backoff Time到0時(shí)報(bào)文仍未發(fā)送成功(發(fā)送失敗或者發(fā)生沖突(另有節(jié)點(diǎn)的退避值同樣等于0)),則CW值翻倍,并重新計(jì)算Backoff Time.?
c.?以此類推,若發(fā)送不成功則CW值繼續(xù)指數(shù)增長(x2),待CW=CWmax后,一直保持CW=CWmax,只有等到重傳次數(shù)到達(dá)極限后(分為短包/長包重傳最大次數(shù),分別計(jì)數(shù)),丟棄此包并復(fù)位CW為CWmin;若報(bào)文發(fā)送成功,則CW初始為CWmin。?
短包/長包重傳最大次數(shù)會(huì)在下面重傳部分詳講。
下圖是退避實(shí)例過程:?
?
從上圖我們可以看出,A在發(fā)送成功以后,自行進(jìn)入退避進(jìn)程,不論它的后續(xù)有無幀需要發(fā)送,都要進(jìn)入退避。當(dāng)信道空閑DIFS時(shí)長后,其余各節(jié)點(diǎn)的退避計(jì)時(shí)器都開始以slot time為單位減少計(jì)時(shí)器的計(jì)數(shù)值。C的退避計(jì)時(shí)器最早到達(dá)0,則開始發(fā)送幀,而其余節(jié)點(diǎn)掛起退避計(jì)時(shí)器,等待下一次信道空閑。
4.RTS/CTS機(jī)制
802.11中可以選擇使用或者不適用RTS/CTS機(jī)制來預(yù)約信道。在802.11中,并不是每次的數(shù)據(jù)幀、管理幀的傳輸過程都要借助RTS/CTS來預(yù)約信道,多余的RTS/CTS會(huì)導(dǎo)致效率降低,該機(jī)制并不是總是有效,尤其對(duì)于短數(shù)據(jù)幀(可能是短幀的發(fā)送成功率高,沖突可能性低吧)。廣播和多目標(biāo)傳輸不能使用RTS機(jī)制,因?yàn)槠鋾?huì)引起多個(gè)目標(biāo)地址進(jìn)行CTS應(yīng)答。?
只有當(dāng)定向幀的MPDU或者M(jìn)MPDU的長度超過了屬性值dot11RTSThreshold后STA才在幀交換前使用RTS/CTS交換。
屬性dot11RTSThreshold是MIB的一個(gè)管理項(xiàng)目,它的值被MAC的LME(層管理實(shí)體)讀和寫。如果該值為0則表示所有的MPDU在傳送前都使用RTS/CTS,dot11RTSThreshold的默認(rèn)值是2347比特,默所有的MPDU在傳送前都不需要RTS/CTS。這個(gè)值可以通過本地或者外地管理器修改。?
STA設(shè)置了不發(fā)起RTS/CTS之后,仍然可以接收RTS和CTS,執(zhí)行虛擬載波監(jiān)聽機(jī)制。同時(shí)可以對(duì)發(fā)送到該節(jié)點(diǎn)的RTS進(jìn)行應(yīng)答。
以下探討采用RTS/CTS機(jī)制的原理及實(shí)現(xiàn):?
由于兩個(gè)節(jié)點(diǎn)的發(fā)送范圍無法互相覆蓋,從而兩者在發(fā)送數(shù)據(jù)時(shí),是無法通過物理監(jiān)聽的方法,探測(cè)對(duì)方是否有發(fā)送數(shù)據(jù)。如果沒有更多的措施,STA 1和STA 2一直會(huì)誤認(rèn)為信道空閑,從而不斷倒數(shù),當(dāng)計(jì)時(shí)器到0時(shí),則發(fā)送數(shù)據(jù),如下圖(圖為引用802.11協(xié)議精讀2:DCF與CSMA/CA):?
?
隱藏終端的情況下,網(wǎng)絡(luò)性能最差時(shí)是無法傳遞數(shù)據(jù)包的,換言之,STA 1與STA 2的吞吐量都趨近于0。?
DCF中,引入了RTS/CTS機(jī)制。
?
下圖結(jié)合退避過程理解,橫軸單位為slot time?
4.分段、重組
把一個(gè)長度較大的MSDU或MMPDU進(jìn)行分成較小的MPDU的過程叫做分段,信道特性使得傳輸短幀的可靠性比長幀更高,目的STA接收分段后重新組裝成MPDU。?
MAC的屬性值dot11FragmentationThreshold 定義了物理層能接收的最長幀長度,當(dāng)發(fā)送的幀長度超過該參數(shù),必須分段。其默認(rèn)值依賴于物理層的信息管理庫中的屬性aMPDUMaxLength。若aMPDUMaxLength>=2347,則默認(rèn)值設(shè)置為2347,aMPDUMaxLength<2347,則默認(rèn)值設(shè)置為aMPDUMaxLength。該設(shè)置值可以通過外部管理器修改,但是要小于aMPDUMaxLength。?
5.分段|MAC幀的傳輸規(guī)則
當(dāng)MSDU或者M(jìn)MPDU不是作為整體,當(dāng)其分成幾個(gè)片段,每個(gè)片段都是完整的幀需要傳送時(shí),信道控制過程為:?
當(dāng)源節(jié)點(diǎn)爭(zhēng)取到信道的使用權(quán),這個(gè)使用權(quán)有停駐時(shí)間邊界。STA開啟突發(fā)傳送模式,持續(xù)發(fā)送片段幀,直至把MSDU或者M(jìn)MPDU發(fā)送完成。期間可能出現(xiàn)的情況有:?
1、 MSDU或者M(jìn)MPDU發(fā)送完成,不論STA有無剩余的MSDU或者M(jìn)MPDU需要發(fā)送,在接收到ACK之后進(jìn)入退避模式,等待下一次使用權(quán);?
2、 一個(gè)需要ACK的分段,在傳輸之后沒有收到應(yīng)答,源STA將在Ack定時(shí)器過后,進(jìn)入退避程序(在ACK定時(shí)器后仍未接收到ACK,則認(rèn)為傳輸失敗)。之后重新競(jìng)爭(zhēng)信道,爭(zhēng)取到信道使用權(quán)后,重新傳輸。?
3、 在超出傳送次數(shù)限制之后,MAC層丟棄該包,進(jìn)入退避程序。
傳送次數(shù)限制:MAC層會(huì)為每個(gè)MSDU或者M(jìn)MPUD(按照幀長度)分配一個(gè)長幀計(jì)數(shù)器LRC或短幀計(jì)數(shù)器SRC,MIB中設(shè)置了屬性dot11ShortRetryLimit(默認(rèn)值為7)和dot11LongRetryLimit(默認(rèn)值為4),是SRC和LRC的上限。?
當(dāng)傳送失敗時(shí),相應(yīng)LRC或SRC加1,當(dāng)超出設(shè)置的上限時(shí),丟包,計(jì)數(shù)器置零;傳送成功時(shí),計(jì)數(shù)器置零。?
4、 當(dāng)剩下的停駐時(shí)間已經(jīng)不足以支持發(fā)送一個(gè)分組和一個(gè)應(yīng)答,源節(jié)點(diǎn)將會(huì)在這個(gè)停駐時(shí)間段結(jié)束后進(jìn)入退避模式,參與信道使用權(quán)競(jìng)爭(zhēng)。?
5、 接收節(jié)點(diǎn)會(huì)將重復(fù)的分段幀過濾丟掉
?
a.判斷幀發(fā)送的失敗與否規(guī)則?
發(fā)送RTS之后,物理層發(fā)送原語PHY-TXEND.confirm表示發(fā)送結(jié)束,STA進(jìn)入CTS規(guī)程。在等待了一個(gè)CTSTimeout間隔之后,如果沒有收到PHY-RXSTART.indication原語,即沒有表明物理層收到CTS幀,則表示發(fā)送失敗。在CTSTimeout間隔之后調(diào)用退避規(guī)程。?
發(fā)送數(shù)據(jù)幀或者管理幀之后,確認(rèn)本次傳輸失敗前,應(yīng)該等待一個(gè)ACKTimeout。?
b.過濾重復(fù)幀方法?
通過內(nèi)置在數(shù)據(jù)幀和管理幀中的順序控制域。
總結(jié)
- 上一篇: 802.11帧格式
- 下一篇: 大话WiFi省电模式