天天看點

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

序言

在802.11的MAC層中,分成了兩種基本工作模式:

  • DCF(Distributed Coordination Function)
  • PCF(Point Coordination Function)

其中,由于DCF具有良好的分布式特性,進而應用更加廣泛,而PCF模式則較為少用。在802.11e協定中,DCF被擴充為EDCA模式,PCF模式被擴充為HCCA模式。本文所讨論的主要内容即有關DCF模式以及其核心CSMA/CA機制。

CSMA/CA機制

由于無線信道隻有一個沖突域的特性,是以需要設定一種随機接入機制,以避免多個節點同時通路網絡所帶來的沖突問題,在WiFi協定中,該随機接入機制即是CSMA/CA。CSMA/CA的全稱是Carrier Sense Multiple Access with Collision Avoidance,即載波偵聽多路通路/沖突避免。如果熟悉有線網絡的可以知道,在集線器與中繼器中也會采用一種CSMA/CD的機制,從協定設計的大思路上,兩者是類似的,或者說兩個都是基于CSMA機制的,而細節上,兩者有很多的出入,在本文中,我們尚不細緻讨論兩者協定的具體差别,而僅僅叙述CSMA/CA的工作機制。

為了友善文中讨論,我們首先假定一個網絡拓撲環境如下:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

在該拓撲中,存在一個AP,與兩個節點(STA 1與STA 2),如果對于無線術語不是很熟悉的話,可以把AP了解成無線路由器。由于無線環境下的廣播特性,若STA 1與STA 2同時向AP發送資料,那麼就會在AP處發生沖突,進而兩者都無法正确接收,最終傳輸失敗。CSMA/CA就是提供一種避免沖突發生的接入規則。

接下來我們需要具體描述CSMA/CA的工作機制,為了友善了解,我們這裡首先要給出四個概念:

  • DIFS與SIFS:該兩種都是屬于Inter-frame Spacing(IFS),即幀間間隙。DIFS全稱為Distributed Inter-frame Spacing,即分布式幀間間隙,SIFS稱為Short inter-frame space,即短幀間間隔。在CSMA/CA中,發一個幀之前,都需要"等待"一個相應的幀間間隔,比如發送資料之前至少要等待DIFS時間,發送ACK之前需要等待SIFS時間。在802.11中還存在其他的一些幀間間隔,比如RIFS,PIFS,AIFS,EIFS,本文不再一一贅述。(注:該段落中所提到的等待,不是真正意義上節點什麼都不做,具體的功能會在後文相應位置進行描述)
  • Slot Time:時隙是指的一個時間片段,在CSMA/CA中,節點競争接入信道之前需要經過相應的随機回退(backoff)過程,其中backoff過程就是由很多個時隙所組成的。
  • Contention window:競争視窗是用來讓節點選擇随機回退計數值(backoff counter)的範圍。
  • Backoff:随機回退過程是指每一個節點在競争信道時,所經曆的随機退避過程。在這一過程開始時,節點首先在競争視窗中選擇一個随機數為基準的随機回退計數值,同時每一個時隙,節點為"監聽"信道是否空閑,若信道空閑,那麼進行一次倒數,即計數值減1,若信道忙,則不進行相應倒數。當該随機回退計數值回退到0時,節點可以發送資料。(注:1.該段落中所提到的監聽,不僅包含了實體監聽,也包含了虛拟監聽機制,具體功能後文相應位置進行描述。2.該文中所讨論的一些概念與有線網絡中的概念會存在一些差別,我們這裡并不加以細節對比,還請見諒)

接着,我們利用時序圖描述CSMA/CA的具體工作機制:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time
  1. 當STA 1與STA 2相繼存在資料,需要在競争信道進行發送時,其首先需要"等待" DIFS時間,若DIFS時間内,信道保持空閑狀态,那麼就可以進行backoff過程。
  2. 若STA 1與STA 2進入backoff過程時,其首先需要從競争視窗(Contention window)選擇一個随機數,在802.11協定中,預設的初始競争視窗為31,即随機回退計數值的範圍即是[0,31]。在上圖中,STA 1則是選擇了8,而STA 2選擇了2。
  3. 在backoff過程中,每經過一個slot time,節點會"監聽" 一次信道,若信道空閑,則相應的随機回退計數器的值減1。如上圖中,經過3個slot time後,STA 1的随機倒數計數器從8遞減至5,而STA 2相應從2遞減至0。
  4. 當節點的随機倒數計數器倒數至0時,節點競争獲得信道,進而可以發送資料。如上圖,STA 2獲得信道後,發送PACKET A給AP。在AP接收到資料後,會采用CRC機制對資料進行校驗,若校驗通過,AP會在SIFS後,回報ACK确認幀。
  5. 當STA 2成功發送完資料, "等待" 了SIFS的時間之後,AP會向節點回報ACK确認幀。當STA 2成功接收到ACK幀之後,這一次傳輸完成。
  6. 當這一次傳輸完成後,節點需要再次 "等待" DIFS的時間後,重新開始backoff過程。若節點剛剛發送完資料,那麼在backoff過程開始時,需要重新從競争視窗中選擇一個随機數進行倒數。若節點沒有發送資料,那麼直接從上一次的倒數結果繼續倒數。如上圖中,STA 1沒有競争到信道,那麼其在第二次的backoff過程中,直接基于上次的5直接進行倒數至4。這樣的設計目的是為了保證網絡傳輸的公平性。
802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

若在上述的第5步中,AP沒有成功接收節點的資料,或者AP對資料進行CRC校驗錯誤,那麼其不會回報相應的ACK給節點。節點在ACK timeout之後,則知道對方沒有成功接收資料,該ACK timeout時間在理論分析時,一般與ACK接收時間相等,在具體工程設計中,可能會大一點點。那麼發送錯誤的節點,需要等待EIFS時間才可以再次接入信道,EIFS>DIFS,這樣是為了避免一些較差的節點持續争搶信道資源。比如圖中STA 2即需要在等待EIFS之後,節點首先進行BEB(該機制我們後面詳細讨論),然後重新開始backoff過程,而STA 1則直接在DIFS之後進行backoff。

注:在這裡的描述中,我們所述,在媒體忙時,節點通過監聽信道,判斷媒體忙,進而挂起随機回退計數值,這也是很多學術研究中可以看到的常見描述。

有關挂起機制,筆者還存在一些了解。我們知道在節點競争信道的過程中,也有可能會接收資料。由于802.11協定的特殊性,節點隻有在完整解調整個資料包之後,經過CRC校驗後,才可以完整判斷資料幀是不是自己的,進而進行丢包處理。故挂起機制實際上是一種接收機制,即無論信道中的資料幀是不是發給節點的,該節點都需要對此資料幀進行接收,進而判斷是否丢棄該幀。故節點由于處于接收狀态,進而無法繼續進行backoff回退操作,故這裡即是處于挂起的動作。

同時在《CWNA教材第三版》中,這裡有可能會産生一種誤導的了解,即利用Duration字段,即具體采用NAV機制來完成這裡挂起随機回退計數值的工作。在該書中,Duration字段用來保留之後SIFS+ACK的時間,而不是用來作為NAV字段保護該資料幀傳輸過程中挂起其他節點的。換言之,我們前面所提到的ACK timeout的機制,即是采用資料幀中的duration字段來具體設定的。不過除了CWNA書本上的例子外,現實中筆者沒有抓到過資料幀MAC頭部中Duration存在填充的情況,在這種預設情況下,ACK timeout可能就是SIFS+ACK的标準時間。

BEB機制

這裡BEB機制的全稱為Binary Exponential Back off,即二進制指數退避算法。在CSMA/CA的機制中,還是存在發生沖突的可能性,進而為了避免在CSMA/CA機制下的再次沖突,故這裡引入了BEB機制。我們舉例進行說明:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

與之前所述CSMA/CA過程類似,在 "等待" DIFS後,STA 1與STA 2從各自的競争視窗CW中選擇一個随機數,不過碰巧的是,兩者随機到了一樣的數值,如圖中,STA 1與STA 2都是随機到了3作為随機回退計數值。在經過3個slot time之後,由于兩者同時倒數至0,那麼意味着兩者會同時發送資料,如圖中的紅色虛線框表示,在AP處由于兩者信号互相幹擾,進而都無法正确解碼,進而CRC校驗錯誤,即發生沖突。在沖突之後,即若AP處CRC校驗失敗,則不會給任意節點回報ACK資料包,故兩節點在ACK timeout之後,則等待EIFS之後,準備進入下一次競争。

而在正式進入下一次競争之前,節點需要對競争視窗(CW)采用BEB機制,按我們之前所述,在初始競争時,節點的預設CW範圍是[0,31]。而如果在節點數較多的情況下,那麼就有可能引發之前我們所述的沖突問題,進而我們需要擴大競争視窗CW。具體在CSMA/CA中,我們則是采用二進制指數退避的方法對競争視窗CW進行擴充,即發生一次沖突後,那麼CW範圍就會從[0,31]變化到[0,63],如圖中,在沖突之後,STA 1重新随機選擇50,STA 2重新随機選擇32。在802.11中,一共允許回退6次,第7次不倍增視窗,再次嘗試重發,若再次失敗,則丢包。

參考CWNA教材,有給出具體每一次回退的CW視窗大小,如下:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

RTS/CTS模式

在DCF模式下,我們還需要知道存在兩種子模式:Basic模式與RTS/CTS模式。在之前CSMA/CA讨論中,我們所描述的都是Basic模式,這一章我們了解RTS/CTS模式。

為了更好的了解RTS/CTS模式,我們首先要介紹無線網絡中著名的隐藏終端問題(hidden terminal problem)。

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

在上圖中,還是隻有一個AP和兩個節點(STA 1與STA 2)。圖中藍色虛線代表STA 1的發送範圍,綠色虛線代表STA 2的發送範圍。

從圖中,我們可以得知,由于兩個節點的發送範圍無法互相覆寫,進而兩者在發送資料時,是無法通過實體監聽的方法,探測對方是否有發送資料。進而按照我們之前所述的CSMA/CA機制,STA 1和STA 2一直會誤認為信道空閑,進而不斷倒數,當計時器到0時,則發送資料,如下圖:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

在上圖中,由于STA 1與STA 2無法互相監聽,即STA 2發送資料後,STA 1還繼續進行backoff過程,進而繼續倒數。當STA 1的随機回退計數值倒數至0時,STA 1也會發送資料。由于STA 1與STA 2的發送存在重疊區域,即也是發生了沖突,AP無法正确接收資料,即不會回報ACK,最終這一輪傳輸失敗。這一輪失敗之後,STA 1與STA 2采用BEB算法重新選擇随機數進行回退,但是由于兩者沒有辦法互相監聽,是以很容易再次出現同時傳輸的現象。是以在隐藏終端的情況下,網絡性能最差時是無法傳遞資料包的,換言之,STA 1與STA 2的吞吐量都趨近于0。

為了解決這個問題,故在DCF中,引入了RTS/CTS機制。

  • RTS:Request To Send,即請求發送。RTS幀是一個單點傳播幀,沒有加密,其duration字段中填充包含後續發送過程中總體所需要時間。
  • CTS:Clear To Send,即信道清除幀。節點在收到CTS後,确認信道是空閑的,可以發送。CTS也是一個單點傳播幀,沒有加密,其duration字段包含除去RTS以及一個SIFS後,發送過程總體所需要時間。

接着我們采用下圖解釋RTS/CTS具體的工作方法:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

在上圖中,STA 2已經倒數至0,其首先發送RTS資料幀給AP。若在AP處沒有沖突,即AP成功解調出STA 2的RTS,AP會在等待SIFS之後發送CTS幀給STA 2。由于無線信道是一個廣播信道,要是幀沒有加密的話,那麼所有節點都是可以解析其資訊的,是以這裡AP雖然是發送CTS給STA 2,不過STA 1也可以解析該CTS資訊,這也是很多書上寫,RTS/CTS都是一個廣播過程的原因。

  • 當STA 1接收到CTS之後,該CTS不是我所請求所獲得的,或者說,該CTS不是對應發給我的CTS。進而STA 1會将CTS資料幀的duration給提出,并設定在自己本地的NAV(Network Allocation Vector)上。若NAV沒有倒數到0,那麼其會主動懸挂其随機回退計數值,在NAV沒有倒數到0之前,其随機回退計數值不再繼續倒數。
  • 當STA 2接收到CTS後,其發現該其是之前發送RTS的回報。故節點已知信道空閑,在等待SIFS後,STA 2發送資料。當資料傳輸完成之後,AP向STA 2回報ACK,進而最終完成一次傳輸。

RTS/CTS工作機制對應的時序圖如下:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

在上圖中,我們可以發現,NAV的部分和我們在CSMA/CA的流程圖中的Busy medium是一樣的,其差別在于一者是實體載波監聽(即之前的Busy medium是由于實體載波監聽所引起的),而另者是虛拟載波監聽(即NAV是由虛拟載波監聽所引起的),在下一節,我們會讨論實體載波監聽與虛拟載波監聽機制。

在實際的路由器中,RTS/CTS模式不是以開關的形式存在,而是以RTS_threshold的形式存在的。RTS/CTS另外一個思維就是 "采用小的資料包碰撞,來避免大的資料包碰撞" ,進而如果資料包太小,那麼則不需要采用RTS/CTS機制。設定RTS_threshold的範圍一般為2347,其機關是byte,即如果資料包大小如果大于2347 byte,那麼才會采用RTS/CTS模式,在現實應用中,可以根據具體的情況,設定一個最适合的值。

注:在本段中,我們所述RTS/CTS着重解決隐藏終端問題,同時RTS/CTS也是利用小資料包碰撞來避免大資料包碰撞的方法,該方法對于在沒有隐藏終端,但是節點數很多的網絡中,也時很有效果的。同時,本章節中,我們提到采用RTS/CTS模式來設定NAV,這裡需要強調的是,RTS/CTS可以設定NAV,但是NAV不是僅僅隻能用RTS/CTS來設定,隻要資料幀MAC頭部的duration字段有數值,那麼就可以設定NAV,該機制在802.11協定中,有非常廣泛的應用,比如PCF的Contention Free周期,EDCA中的TXOP機制等。

實體載波監聽和虛拟載波監聽

在這一章節,我們讨論實體載波監聽和虛拟載波監聽機制,兩者是在CSMA/CA過程中同時使用的,在《CWNA第一版》一書中,對此有較好的描述:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

從該圖中,我們可以明顯看出,實體載波監聽和虛拟載波監聽是同時執行判斷的,其中隻要有一個是出于Busy狀态,那麼就不會觸發随機回退計數值減1的過程,換言之,即是挂起了随機回退計數值。從該圖中,我們可以明顯得知,虛拟載波監聽就是對應的NAV機制,而實體載波監聽則是對應到了CCA(Clear Channel Assessment)機制。下面我們着重關注實體載波監聽的CCA機制:

在CSMA/CA中,CCA由能量檢測和載波檢測一起完成:

  • 能量檢測(Energy Detection):是直接用實體層接收的能量來判斷是否有信号進行接入,若信号強度大于ED_threshold,則認為信道是忙,若小于ED_threshold,則認為信道是閑。同時該ED_threshold的設定與發送功率有關,比如發送功率大于100mW,那麼ED_threhold約為-80dBm,發送功率在50mW至100mW之間,那麼ED_threshold應該為-76dBm。不過至于具體的數值,需要檢視其具體所對應版本的802.11協定。
  • 載波偵聽(Carrier Sense):載波監聽的方法指的是用來識别802.11資料幀的實體層頭部(PLCP header)中的preamble部分。簡單的說,802.11中的preamble部分采用特定的序列所構造,該序列對于發送方和接收方都是已知的,其用來做幀同步以及符号同步。在實際監聽過程中,節點會不斷采樣信道信号,用其做自相關或者互相關運算,其中自相關在基于OFDM的802.11技術中常用,比如802.11a,而互相關在基于DSSS技術中常用,比如802.11b。與能量檢測類似,相關計算值需要與一個門檻值進行判斷,若大于,則認為檢測到了一個信号,若小于則沒有檢測到。

協定中規定,兩種檢測方式同時采用,且隻要兩者檢測方式中,有一種判斷信道是busy的話,那麼就認為信道是busy的,隻有兩者都認為信道空閑時,那麼再判斷虛拟載波監聽機制是否為0,以上條件都滿足時,那麼才可以進行backoff倒數。

DIFS,SIFS與Slot time

最後我們淺談下DIFS,SIFS與Slot time的具體功能。在前面的叙述中,我們使用"等待" 這一詞來描述節點在DIFS與SIFS過程中的動作,同時我們描述slot time内持續監聽信道。在實際過程中,DIFS與SIFS不是純粹的等待動作,而slot time也不是整個周期都是監聽信道。我們首先談談slot time的構造,由于筆者這一部分沒有詳細翻閱協定,參考一篇論文《WiFi-Nano: Reclaiming WiFi Efficiency Through 800 ns Slots》,其舉例一個9us的slot time的組成如下:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

即Slot time由電磁波傳播時延(Propagation),信道檢測CCA時間(Clear Channel Assessment)以及天線的發送/接收切換(Rx/Tx Hardware Turnaround)組成。故這裡就明确回答了,在一個slot time内不是整個周期都在監聽信道,而隻有CCA時間這一部分在監聽信道。而最後一個天線發送轉換也好了解一些,這裡我們在說CCA監聽信道的過程中,除了為了之前我們所述的backoff過程,實際上節點也在利用CCA來監聽,是不是有給我的資料包。如果該資料包不是給我的,那麼CCA監聽結果就是忙,然後等一個slot以後繼續監聽。如果監聽該資料包是給我的,那麼就直接轉換到接收狀态,而不是繼續進行每一個slot監聽的動作了。

同時,這裡我們之是以将DIFS,SIFS與Slot time放在一起讨論,是由于DIFS = SIFS + 2*Slot time。SIFS的功能我們可以了解成,包含天線發送接收轉換,以及上層處理資料所需要的延遲時間。而DIFS中,由于正巧包含了兩倍的Slot time,是以很大程度上,在DIFS内,應該執行了兩次信道監聽過程,但是這兩次的監聽過程沒有觸發backoff。隻有監聽到連續兩次信道空閑後,那麼DIFS之後才會進行backoff過程,該設計思想應該是源于P堅持-CSMA的,同時,這個思路也是和我們在讨論實體載波監聽和虛拟載波監聽中的插圖所符合的。類似的,在802.11協定中,其他的部分幀間間隔也是基于slot time和SIFS計算所得,比如PIFS = SIFS + SLOT,EIFS = ACK time + SIFS + DIFS。

PS:在協定中,SIFS和Slot time組成如下:

aSIFSTime= aRXRFDelay+aRXPLCPDelay+aMACProcessingDelay+aRxTxTurnaroundTime

aSlotTime= aCCATime+aRxTxTurnaroundTime+aAirPropagationTime+aMACProcessingDelay

從其名字可以大緻看出其具體的包含内容。

注:以上就是筆者對于DCF與CSMA/CA的基本了解,大部分内容都是參考筆者前一篇資料總結中所列之參考文獻。上述表述中,也許存在一些錯誤,還請見諒,也有一些細節,并沒有在這一篇中展開叙述,有空筆者再繼續進行整理。同時,筆者所學有限,若文中出現了的錯誤的地方,還請指出,謝謝。

序言

在802.11的MAC層中,分成了兩種基本工作模式:

  • DCF(Distributed Coordination Function)
  • PCF(Point Coordination Function)

其中,由于DCF具有良好的分布式特性,進而應用更加廣泛,而PCF模式則較為少用。在802.11e協定中,DCF被擴充為EDCA模式,PCF模式被擴充為HCCA模式。本文所讨論的主要内容即有關DCF模式以及其核心CSMA/CA機制。

CSMA/CA機制

由于無線信道隻有一個沖突域的特性,是以需要設定一種随機接入機制,以避免多個節點同時通路網絡所帶來的沖突問題,在WiFi協定中,該随機接入機制即是CSMA/CA。CSMA/CA的全稱是Carrier Sense Multiple Access with Collision Avoidance,即載波偵聽多路通路/沖突避免。如果熟悉有線網絡的可以知道,在集線器與中繼器中也會采用一種CSMA/CD的機制,從協定設計的大思路上,兩者是類似的,或者說兩個都是基于CSMA機制的,而細節上,兩者有很多的出入,在本文中,我們尚不細緻讨論兩者協定的具體差别,而僅僅叙述CSMA/CA的工作機制。

為了友善文中讨論,我們首先假定一個網絡拓撲環境如下:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

在該拓撲中,存在一個AP,與兩個節點(STA 1與STA 2),如果對于無線術語不是很熟悉的話,可以把AP了解成無線路由器。由于無線環境下的廣播特性,若STA 1與STA 2同時向AP發送資料,那麼就會在AP處發生沖突,進而兩者都無法正确接收,最終傳輸失敗。CSMA/CA就是提供一種避免沖突發生的接入規則。

接下來我們需要具體描述CSMA/CA的工作機制,為了友善了解,我們這裡首先要給出四個概念:

  • DIFS與SIFS:該兩種都是屬于Inter-frame Spacing(IFS),即幀間間隙。DIFS全稱為Distributed Inter-frame Spacing,即分布式幀間間隙,SIFS稱為Short inter-frame space,即短幀間間隔。在CSMA/CA中,發一個幀之前,都需要"等待"一個相應的幀間間隔,比如發送資料之前至少要等待DIFS時間,發送ACK之前需要等待SIFS時間。在802.11中還存在其他的一些幀間間隔,比如RIFS,PIFS,AIFS,EIFS,本文不再一一贅述。(注:該段落中所提到的等待,不是真正意義上節點什麼都不做,具體的功能會在後文相應位置進行描述)
  • Slot Time:時隙是指的一個時間片段,在CSMA/CA中,節點競争接入信道之前需要經過相應的随機回退(backoff)過程,其中backoff過程就是由很多個時隙所組成的。
  • Contention window:競争視窗是用來讓節點選擇随機回退計數值(backoff counter)的範圍。
  • Backoff:随機回退過程是指每一個節點在競争信道時,所經曆的随機退避過程。在這一過程開始時,節點首先在競争視窗中選擇一個随機數為基準的随機回退計數值,同時每一個時隙,節點為"監聽"信道是否空閑,若信道空閑,那麼進行一次倒數,即計數值減1,若信道忙,則不進行相應倒數。當該随機回退計數值回退到0時,節點可以發送資料。(注:1.該段落中所提到的監聽,不僅包含了實體監聽,也包含了虛拟監聽機制,具體功能後文相應位置進行描述。2.該文中所讨論的一些概念與有線網絡中的概念會存在一些差別,我們這裡并不加以細節對比,還請見諒)

接着,我們利用時序圖描述CSMA/CA的具體工作機制:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time
  1. 當STA 1與STA 2相繼存在資料,需要在競争信道進行發送時,其首先需要"等待" DIFS時間,若DIFS時間内,信道保持空閑狀态,那麼就可以進行backoff過程。
  2. 若STA 1與STA 2進入backoff過程時,其首先需要從競争視窗(Contention window)選擇一個随機數,在802.11協定中,預設的初始競争視窗為31,即随機回退計數值的範圍即是[0,31]。在上圖中,STA 1則是選擇了8,而STA 2選擇了2。
  3. 在backoff過程中,每經過一個slot time,節點會"監聽" 一次信道,若信道空閑,則相應的随機回退計數器的值減1。如上圖中,經過3個slot time後,STA 1的随機倒數計數器從8遞減至5,而STA 2相應從2遞減至0。
  4. 當節點的随機倒數計數器倒數至0時,節點競争獲得信道,進而可以發送資料。如上圖,STA 2獲得信道後,發送PACKET A給AP。在AP接收到資料後,會采用CRC機制對資料進行校驗,若校驗通過,AP會在SIFS後,回報ACK确認幀。
  5. 當STA 2成功發送完資料, "等待" 了SIFS的時間之後,AP會向節點回報ACK确認幀。當STA 2成功接收到ACK幀之後,這一次傳輸完成。
  6. 當這一次傳輸完成後,節點需要再次 "等待" DIFS的時間後,重新開始backoff過程。若節點剛剛發送完資料,那麼在backoff過程開始時,需要重新從競争視窗中選擇一個随機數進行倒數。若節點沒有發送資料,那麼直接從上一次的倒數結果繼續倒數。如上圖中,STA 1沒有競争到信道,那麼其在第二次的backoff過程中,直接基于上次的5直接進行倒數至4。這樣的設計目的是為了保證網絡傳輸的公平性。
802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

若在上述的第5步中,AP沒有成功接收節點的資料,或者AP對資料進行CRC校驗錯誤,那麼其不會回報相應的ACK給節點。節點在ACK timeout之後,則知道對方沒有成功接收資料,該ACK timeout時間在理論分析時,一般與ACK接收時間相等,在具體工程設計中,可能會大一點點。那麼發送錯誤的節點,需要等待EIFS時間才可以再次接入信道,EIFS>DIFS,這樣是為了避免一些較差的節點持續争搶信道資源。比如圖中STA 2即需要在等待EIFS之後,節點首先進行BEB(該機制我們後面詳細讨論),然後重新開始backoff過程,而STA 1則直接在DIFS之後進行backoff。

注:在這裡的描述中,我們所述,在媒體忙時,節點通過監聽信道,判斷媒體忙,進而挂起随機回退計數值,這也是很多學術研究中可以看到的常見描述。

有關挂起機制,筆者還存在一些了解。我們知道在節點競争信道的過程中,也有可能會接收資料。由于802.11協定的特殊性,節點隻有在完整解調整個資料包之後,經過CRC校驗後,才可以完整判斷資料幀是不是自己的,進而進行丢包處理。故挂起機制實際上是一種接收機制,即無論信道中的資料幀是不是發給節點的,該節點都需要對此資料幀進行接收,進而判斷是否丢棄該幀。故節點由于處于接收狀态,進而無法繼續進行backoff回退操作,故這裡即是處于挂起的動作。

同時在《CWNA教材第三版》中,這裡有可能會産生一種誤導的了解,即利用Duration字段,即具體采用NAV機制來完成這裡挂起随機回退計數值的工作。在該書中,Duration字段用來保留之後SIFS+ACK的時間,而不是用來作為NAV字段保護該資料幀傳輸過程中挂起其他節點的。換言之,我們前面所提到的ACK timeout的機制,即是采用資料幀中的duration字段來具體設定的。不過除了CWNA書本上的例子外,現實中筆者沒有抓到過資料幀MAC頭部中Duration存在填充的情況,在這種預設情況下,ACK timeout可能就是SIFS+ACK的标準時間。

BEB機制

這裡BEB機制的全稱為Binary Exponential Back off,即二進制指數退避算法。在CSMA/CA的機制中,還是存在發生沖突的可能性,進而為了避免在CSMA/CA機制下的再次沖突,故這裡引入了BEB機制。我們舉例進行說明:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

與之前所述CSMA/CA過程類似,在 "等待" DIFS後,STA 1與STA 2從各自的競争視窗CW中選擇一個随機數,不過碰巧的是,兩者随機到了一樣的數值,如圖中,STA 1與STA 2都是随機到了3作為随機回退計數值。在經過3個slot time之後,由于兩者同時倒數至0,那麼意味着兩者會同時發送資料,如圖中的紅色虛線框表示,在AP處由于兩者信号互相幹擾,進而都無法正确解碼,進而CRC校驗錯誤,即發生沖突。在沖突之後,即若AP處CRC校驗失敗,則不會給任意節點回報ACK資料包,故兩節點在ACK timeout之後,則等待EIFS之後,準備進入下一次競争。

而在正式進入下一次競争之前,節點需要對競争視窗(CW)采用BEB機制,按我們之前所述,在初始競争時,節點的預設CW範圍是[0,31]。而如果在節點數較多的情況下,那麼就有可能引發之前我們所述的沖突問題,進而我們需要擴大競争視窗CW。具體在CSMA/CA中,我們則是采用二進制指數退避的方法對競争視窗CW進行擴充,即發生一次沖突後,那麼CW範圍就會從[0,31]變化到[0,63],如圖中,在沖突之後,STA 1重新随機選擇50,STA 2重新随機選擇32。在802.11中,一共允許回退6次,第7次不倍增視窗,再次嘗試重發,若再次失敗,則丢包。

參考CWNA教材,有給出具體每一次回退的CW視窗大小,如下:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

RTS/CTS模式

在DCF模式下,我們還需要知道存在兩種子模式:Basic模式與RTS/CTS模式。在之前CSMA/CA讨論中,我們所描述的都是Basic模式,這一章我們了解RTS/CTS模式。

為了更好的了解RTS/CTS模式,我們首先要介紹無線網絡中著名的隐藏終端問題(hidden terminal problem)。

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

在上圖中,還是隻有一個AP和兩個節點(STA 1與STA 2)。圖中藍色虛線代表STA 1的發送範圍,綠色虛線代表STA 2的發送範圍。

從圖中,我們可以得知,由于兩個節點的發送範圍無法互相覆寫,進而兩者在發送資料時,是無法通過實體監聽的方法,探測對方是否有發送資料。進而按照我們之前所述的CSMA/CA機制,STA 1和STA 2一直會誤認為信道空閑,進而不斷倒數,當計時器到0時,則發送資料,如下圖:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

在上圖中,由于STA 1與STA 2無法互相監聽,即STA 2發送資料後,STA 1還繼續進行backoff過程,進而繼續倒數。當STA 1的随機回退計數值倒數至0時,STA 1也會發送資料。由于STA 1與STA 2的發送存在重疊區域,即也是發生了沖突,AP無法正确接收資料,即不會回報ACK,最終這一輪傳輸失敗。這一輪失敗之後,STA 1與STA 2采用BEB算法重新選擇随機數進行回退,但是由于兩者沒有辦法互相監聽,是以很容易再次出現同時傳輸的現象。是以在隐藏終端的情況下,網絡性能最差時是無法傳遞資料包的,換言之,STA 1與STA 2的吞吐量都趨近于0。

為了解決這個問題,故在DCF中,引入了RTS/CTS機制。

  • RTS:Request To Send,即請求發送。RTS幀是一個單點傳播幀,沒有加密,其duration字段中填充包含後續發送過程中總體所需要時間。
  • CTS:Clear To Send,即信道清除幀。節點在收到CTS後,确認信道是空閑的,可以發送。CTS也是一個單點傳播幀,沒有加密,其duration字段包含除去RTS以及一個SIFS後,發送過程總體所需要時間。

接着我們采用下圖解釋RTS/CTS具體的工作方法:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

在上圖中,STA 2已經倒數至0,其首先發送RTS資料幀給AP。若在AP處沒有沖突,即AP成功解調出STA 2的RTS,AP會在等待SIFS之後發送CTS幀給STA 2。由于無線信道是一個廣播信道,要是幀沒有加密的話,那麼所有節點都是可以解析其資訊的,是以這裡AP雖然是發送CTS給STA 2,不過STA 1也可以解析該CTS資訊,這也是很多書上寫,RTS/CTS都是一個廣播過程的原因。

  • 當STA 1接收到CTS之後,該CTS不是我所請求所獲得的,或者說,該CTS不是對應發給我的CTS。進而STA 1會将CTS資料幀的duration給提出,并設定在自己本地的NAV(Network Allocation Vector)上。若NAV沒有倒數到0,那麼其會主動懸挂其随機回退計數值,在NAV沒有倒數到0之前,其随機回退計數值不再繼續倒數。
  • 當STA 2接收到CTS後,其發現該其是之前發送RTS的回報。故節點已知信道空閑,在等待SIFS後,STA 2發送資料。當資料傳輸完成之後,AP向STA 2回報ACK,進而最終完成一次傳輸。

RTS/CTS工作機制對應的時序圖如下:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

在上圖中,我們可以發現,NAV的部分和我們在CSMA/CA的流程圖中的Busy medium是一樣的,其差別在于一者是實體載波監聽(即之前的Busy medium是由于實體載波監聽所引起的),而另者是虛拟載波監聽(即NAV是由虛拟載波監聽所引起的),在下一節,我們會讨論實體載波監聽與虛拟載波監聽機制。

在實際的路由器中,RTS/CTS模式不是以開關的形式存在,而是以RTS_threshold的形式存在的。RTS/CTS另外一個思維就是 "采用小的資料包碰撞,來避免大的資料包碰撞" ,進而如果資料包太小,那麼則不需要采用RTS/CTS機制。設定RTS_threshold的範圍一般為2347,其機關是byte,即如果資料包大小如果大于2347 byte,那麼才會采用RTS/CTS模式,在現實應用中,可以根據具體的情況,設定一個最适合的值。

注:在本段中,我們所述RTS/CTS着重解決隐藏終端問題,同時RTS/CTS也是利用小資料包碰撞來避免大資料包碰撞的方法,該方法對于在沒有隐藏終端,但是節點數很多的網絡中,也時很有效果的。同時,本章節中,我們提到采用RTS/CTS模式來設定NAV,這裡需要強調的是,RTS/CTS可以設定NAV,但是NAV不是僅僅隻能用RTS/CTS來設定,隻要資料幀MAC頭部的duration字段有數值,那麼就可以設定NAV,該機制在802.11協定中,有非常廣泛的應用,比如PCF的Contention Free周期,EDCA中的TXOP機制等。

實體載波監聽和虛拟載波監聽

在這一章節,我們讨論實體載波監聽和虛拟載波監聽機制,兩者是在CSMA/CA過程中同時使用的,在《CWNA第一版》一書中,對此有較好的描述:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

從該圖中,我們可以明顯看出,實體載波監聽和虛拟載波監聽是同時執行判斷的,其中隻要有一個是出于Busy狀态,那麼就不會觸發随機回退計數值減1的過程,換言之,即是挂起了随機回退計數值。從該圖中,我們可以明顯得知,虛拟載波監聽就是對應的NAV機制,而實體載波監聽則是對應到了CCA(Clear Channel Assessment)機制。下面我們着重關注實體載波監聽的CCA機制:

在CSMA/CA中,CCA由能量檢測和載波檢測一起完成:

  • 能量檢測(Energy Detection):是直接用實體層接收的能量來判斷是否有信号進行接入,若信号強度大于ED_threshold,則認為信道是忙,若小于ED_threshold,則認為信道是閑。同時該ED_threshold的設定與發送功率有關,比如發送功率大于100mW,那麼ED_threhold約為-80dBm,發送功率在50mW至100mW之間,那麼ED_threshold應該為-76dBm。不過至于具體的數值,需要檢視其具體所對應版本的802.11協定。
  • 載波偵聽(Carrier Sense):載波監聽的方法指的是用來識别802.11資料幀的實體層頭部(PLCP header)中的preamble部分。簡單的說,802.11中的preamble部分采用特定的序列所構造,該序列對于發送方和接收方都是已知的,其用來做幀同步以及符号同步。在實際監聽過程中,節點會不斷采樣信道信号,用其做自相關或者互相關運算,其中自相關在基于OFDM的802.11技術中常用,比如802.11a,而互相關在基于DSSS技術中常用,比如802.11b。與能量檢測類似,相關計算值需要與一個門檻值進行判斷,若大于,則認為檢測到了一個信号,若小于則沒有檢測到。

協定中規定,兩種檢測方式同時采用,且隻要兩者檢測方式中,有一種判斷信道是busy的話,那麼就認為信道是busy的,隻有兩者都認為信道空閑時,那麼再判斷虛拟載波監聽機制是否為0,以上條件都滿足時,那麼才可以進行backoff倒數。

DIFS,SIFS與Slot time

最後我們淺談下DIFS,SIFS與Slot time的具體功能。在前面的叙述中,我們使用"等待" 這一詞來描述節點在DIFS與SIFS過程中的動作,同時我們描述slot time内持續監聽信道。在實際過程中,DIFS與SIFS不是純粹的等待動作,而slot time也不是整個周期都是監聽信道。我們首先談談slot time的構造,由于筆者這一部分沒有詳細翻閱協定,參考一篇論文《WiFi-Nano: Reclaiming WiFi Efficiency Through 800 ns Slots》,其舉例一個9us的slot time的組成如下:

802.11協定精讀2:DCF與CSMA/CA序言CSMA/CA機制BEB機制RTS/CTS模式實體載波監聽和虛拟載波監聽DIFS,SIFS與Slot time

即Slot time由電磁波傳播時延(Propagation),信道檢測CCA時間(Clear Channel Assessment)以及天線的發送/接收切換(Rx/Tx Hardware Turnaround)組成。故這裡就明确回答了,在一個slot time内不是整個周期都在監聽信道,而隻有CCA時間這一部分在監聽信道。而最後一個天線發送轉換也好了解一些,這裡我們在說CCA監聽信道的過程中,除了為了之前我們所述的backoff過程,實際上節點也在利用CCA來監聽,是不是有給我的資料包。如果該資料包不是給我的,那麼CCA監聽結果就是忙,然後等一個slot以後繼續監聽。如果監聽該資料包是給我的,那麼就直接轉換到接收狀态,而不是繼續進行每一個slot監聽的動作了。

同時,這裡我們之是以将DIFS,SIFS與Slot time放在一起讨論,是由于DIFS = SIFS + 2*Slot time。SIFS的功能我們可以了解成,包含天線發送接收轉換,以及上層處理資料所需要的延遲時間。而DIFS中,由于正巧包含了兩倍的Slot time,是以很大程度上,在DIFS内,應該執行了兩次信道監聽過程,但是這兩次的監聽過程沒有觸發backoff。隻有監聽到連續兩次信道空閑後,那麼DIFS之後才會進行backoff過程,該設計思想應該是源于P堅持-CSMA的,同時,這個思路也是和我們在讨論實體載波監聽和虛拟載波監聽中的插圖所符合的。類似的,在802.11協定中,其他的部分幀間間隔也是基于slot time和SIFS計算所得,比如PIFS = SIFS + SLOT,EIFS = ACK time + SIFS + DIFS。

PS:在協定中,SIFS和Slot time組成如下:

aSIFSTime= aRXRFDelay+aRXPLCPDelay+aMACProcessingDelay+aRxTxTurnaroundTime

aSlotTime= aCCATime+aRxTxTurnaroundTime+aAirPropagationTime+aMACProcessingDelay

從其名字可以大緻看出其具體的包含内容。

注:以上就是筆者對于DCF與CSMA/CA的基本了解,大部分内容都是參考筆者前一篇資料總結中所列之參考文獻。上述表述中,也許存在一些錯誤,還請見諒,也有一些細節,并沒有在這一篇中展開叙述,有空筆者再繼續進行整理。同時,筆者所學有限,若文中出現了的錯誤的地方,還請指出,謝謝。

繼續閱讀