802.11協議精讀10:節能模式(PSM)
序言
在802.11主要的版本中,總共定義了四種節能模式,本文主要關注最初始的PSM模式,對於在802.11e中新增的ASPD以及802.11n中新增的PSMP,SMPS機制,我們在下一篇再進行論述。
PSM(Power Save Mode):802.11協議中初始的節能模式,其對基礎架構模式和IBSS模式下的節能機制分別進行了定義,並且在DCF和PCF模式下,其具體的MAC層工作機制也有不同。
如同我們之前的描述,802.11的節能模式基本思想是:AP快取下行資料,只有當節點休眠結束後主動向AP請求,AP才進行下行資料的反饋。這裡實際上存在一個問題,即節點不知道AP上有沒有自己的快取資料。故實際思路應該是,AP週期性向對應的節點其廣播快取區情況,從而節點可以知道自己是否被資料快取了。在休眠結束後,被快取資料的節點就會進行資料請求,反之就繼續休眠。這樣可以有效避免節點進行一些無意義的資料請求(即AP上沒有快取資料,但是節點進行資料請求)。
所以本文我們首先要回答兩個問題:1)AP如何廣播自己的快取區資訊(即AID,TIM與Bitmap機制),2)AP什麼時候廣播對應節點的快取區資訊(即TSF,TBTT,Listen Interval field與CFP repetition interval)。在此之後,我們再對協議中具體的MAC層工作機制。
PS:本篇的概念又多又繁雜,且與前面描述的DCF和PCF基本工作模式關聯較大。故本篇已儘量按照先需求後設計的思路進行描述,其他不足之處,還請見諒。同時在802.11的一些分支版本中也定義了一些特定的節能模式,比如802.11v的WNM-Sleep Mode,這些我們就不進行展開了。
AID,TIM與Bitmap
在802.11協議中,設計了一種用較少欄位就能夠廣播自己快取區資訊的機制,如下圖,我們首先描述其大致的思想:
實際上是AP是採用一種Bitmap結構,用來通知節點自己的buffer資訊的,若將其看做一個矩陣的話,那麼該矩陣的每一行有8列,最下包含1行,最大包含251行,換言之該矩陣最大的儲存空間為251個By。該矩陣中每一個位置代表了一個節點,比如紅色方框位置就代表了STA0,藍色方框位置就代表STA4,紫色方框位置就代表STA24。而矩陣中具體的某一個元素則代表了Buffer的情況,若該元素為1,那麼代表其對應節點有資料快取,若元素為0,那麼就沒有資料快取。AP週期廣播這樣一個bitmap,節點就會檢視自己對應的位置是1還是0,從而再決定是否要傳送PS-poll請求資料。
那麼具體該矩陣中的某一個位置,對應的就是節點的關聯ID(AID)。
- AID(Association IDentifier):關聯ID,該引數相當於給STA起一個別名。在AP身上有一個association ID table,其中每一個AID都是和其對應STA的MacAddr進行繫結的。AID的範圍是從0~2007,所以也說明了在協議中,一個AP最多可以關聯2007個節點。AID=0的位置為保留欄位,並不分配給節點,用以代表所有的組播和廣播。
比如上圖中,紅色方框處描述了AID=0有資料快取,也就是存在組播或者廣播的快取(即實際上STA0不存在),藍色方框為AID=4的節點(也就是實際存在的節點STA4)其資料被快取,紫色方框為AID=24的節點,其資料被快取。
AID的分配:當一個節點(STA)向AP發起關聯請求(Association Request)後,AP會反饋的關聯相應幀(Association Response)。AID也是在這個過程中被分配,並告知節點(PS:在重關聯過程中,該AID也會被分配,不過這裡我們並不討論)。如下圖,是一個Association Response幀格式其中就包含了Association ID這個引數。
通常AP在分配AID引數時,應該是按照從1開始,一個個下發給節點的,同時這裡雖然顯示的是2 Byte,也就是16位,但是為了與我們後面提到的Duration/ID欄位相容,所以其最高的兩位都是置1,作為保留欄位,所以範圍是1~2007。因為AID的分配不像DHCP協議那樣,可以設定一個失效時間,即AP不會主動回收已經分配給某些節點的AID。所以導致新的節點加入AP時,被分配的AID有的時候會比較後,後面我們分析TIM欄位中的bitmap設計對此就有所考量。下圖是在抓包中,具體的AID的顯示:
當AID分配之後,節點就可以利用bitmap來廣播自己所快取的buffer資訊,在802.11協議中,由於該buffer也是週期性的進行反饋,所以被放置在beacon幀中,作為一個欄位被攜帶,該欄位就是TIM欄位。
TIM(Traffic Indication Map):流量指示圖,實際上是一個基於bitmap結構的流量指示圖,用以標識AP的快取資訊。其具體結構如下:
- Element ID:元素識別碼,用來標識beacon幀中所包含的不同欄位。
- Length:長度,描述的是該Element的長度,實際上Element ID和Length是一般管理幀中information element必備的元素,這裡就不詳細展開了。
- DTIM Count,DTIM Period:DTIM計數以及間隔的時間。在802.11協議中,我們可以看到三個概念,TIM,DTIM,ATIM。TIM是一種基本的流量指示圖的結構,標準的TIM中僅僅指示AP快取的單播資訊,DTIM(Delivery Traffic Indication Map)是一種特殊的TIM,其除了快取的單播資訊,也同時指示AP快取的組播資訊。一般情況下,每一個beacon幀中都包含一個TIM資訊,不過該TIM具體是不是DTIM,則需要考量DTIM Count和DTIM Period兩個引數。DTIM Period是一個週期,是一個固定值,代表經過幾個TIM之後就會出現一個DTIM。而DTIM count是一個計數值,是變化的,當DTIM count=0時,則代表這個TIM是一個DTIM。實際上如果DTIM Period設定成1,那麼每一個TIM欄位中,DTIM count都等於0,所以每一個TIM就是DTIM了。PS:至於ATIM,ATIM是一個幀,在IBSS模式下被使用,由於本文主要討論的就是基礎架構模式下的無線網路,所以這裡就不展開了。
- Bitmap Control,Partial Virtual Bitmap:該欄位就是Bitmap的具體欄位,實際上與我們一開始描述的bitmap結構還存在一些區別。以下我們重點描述下協議中具體使用的bitmap結構。
Bitmap:在前面,我們所給出的是一個最為初始的一種bitmap結構,該結構還是有一些缺點的
佔據較長的傳輸時間:同時由於在802.11協議中,Beacon的實際傳送一般都是採用最低速率的,其包含兩個原因,1)beacon幀是一個廣播幀,其沒有ACK反饋,所以無法設定重傳機制,2)beacon幀目的是廣播AP的基本資訊,所以希望所有的節點都能夠有效的接收該資料,從而採用較低的速率以保證訊號較差的節點也可以接收該資訊。所以,如果每一個Beacon幀中,都包含一個完整的251 Bytes的bitmap,那麼就會佔據比較長的傳輸時間,降低通道的利用率,對整體的吞吐量造成影響。所以在實際應用中,對於後面沒有使用到的AID位置,我們傳輸時可以省略,從而減少bitmap的空間。
缺少靈活性:由於bitmap中每一位置就對應了一個節點的AID,同時在我們之前敘述,AP對於AID的分配並沒有一個回收機制。所以有可能出現,AID從0~300的位置都是沒有再使用過的節點資訊,而真正活躍的節點都是在AID從300~330左右的位置。這樣如果僅僅去除後面沒用的AID位置,也會多出來300 bits左右的空間浪費(即之前0~300個沒有再次使用的AID範圍)。故這裡不僅僅需要省略後面的bitmap空間,也要對前面的bitmap空間進行優化省略。
如上圖,我們可以更明確的看到其缺點,並且想到改進的思路。比如在該圖的情況下,只有AID=120~127位置的節點,存在資料快取。其餘AID<120的節點沒有資料快取,AID>127的節點也同樣沒有,所以具體傳輸時,我們只要通知AID為120~127的節點即可,其餘兩個部分都是冗餘,也就是沒有意義的,所以對此我們要進行壓縮。在802.11中,具體是設計了Bitmap Control和Partial Virual Bitmap的結構來解決這個問題,如下圖所示
在802.11協議中,Bitmap control和Partial Virtual Bitmap是放在一起使用的,其中Bitmap control欄位還分成兩個部分:
- 第[0]位是用來指示是否有組播/廣播資料包被快取的,這個是一個特殊位。如果為1,那麼有組播/廣播資料被快取,反之沒有。
- 第[1:7]位是用來標識Bitmap offset,用來指示AID的偏移情況。該引數是用來描述在Partial Virtual Bitmap中起始AID的,在上圖中,由於Bitmap offset部分都為0,所以起始AID是從0開始的(PS:由於協議規定AID=0是一個保留欄位,用來標識所有廣播和組播資訊,所以沒有分配給節點進行使用。但是Bitmap control欄位中的第一位也是這個功能,所以實際上AID=0是沒有被使用的。),之後的AID=1就代表了節點1,而AID=8則代表了節點8。Partial Virtual Bitmap是一個變長的欄位,範圍是1~251,也就是說,如果後面的AID沒有對應的快取,那麼就不會存放在Partial Virtual Bitmap中。(PS:這裡需要注意的是,由於這裡是按照Byte的形式進行儲存的,所以是按照8位進行步進,如果不夠8位的部分,則需要補全)
我們現在關注Bitmap Offset的使用方法,前面提到,Bitmap offset是用來描述首位AID的偏移的,若該欄位都為0,代表偏移值為0,所以在Partial Virtual Bitmap中是以AID=0開始計數的。現在我們描述Bitmap Offset不為0的情況,首先我們給Bitmap control每一位標註x1~x7,這裡標註順序與一般二進位制表示的順序剛好相反。每一位代表特定的偏移量,這些偏移量計算都是以8做為奇數的,若僅僅x1為1,其餘都為0,那麼AID起始為2*8=16,若僅僅x4為1,其餘都為0,那麼AID的起始為16*8=128。以下我們再舉一些例子:
若沒有組播/廣播資料,且AID=24的節點有資料,那麼Bitmap Control欄位為【0 1 0 0 0 0 0 0】,Partial Virtual Bitmap為【0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0】。實際上AID=24,也就等於3*8,如果是二進位制的話,那麼可以分解成(2^1+2^0)*8,也就是有兩位置1即可,但是由於Bitmap Offset中最小的單元是2,而不是1(可以看到,2^0也就是x0這一位實際上是被組播/廣播資料提示這一位佔據了,所以用不了),所以與AID=24最接近的起始位置是AID=16,從而就確定了bitmap control欄位,然後Partial Virtual Bitmap按序找到AID=24的位置,進行標註即可,最後要補全一個位元組。
若存在組播/廣播資料,且AID=100的節點有資料,那麼Bitmap Control欄位為【1 0 1 1 0 0 0 0】,Partial Virtual Bitmap為【0 0 0 0 1 0 0 0】,具體計算方法和上面一樣。
PS:在802.11協議中,實際上給出了Bitmap的C語言實現的demo,在07版協議的Annex L中就有給出,用興趣可以自行閱讀。
前面我們描述的是AID在AP傳送的TIM欄位中的應用,在節點發往AP的請求中,實際上也是用的AID引數。在節點向AP請求資料,所傳送的PS-Poll幀當中,就是將Duration/ID標識為AID,下圖是一個PS-Poll的幀結構:
其中Duration/ID欄位直接被標識成了AID欄位,其具體內容如下:
從而節點向AP傳送PS-Poll幀中,直接沒有包含源地址,而是採用AID作為替代,當AP接收到PS-Poll後,根據其AID,在快取空間搜尋其對應的快取內容,進而反饋給節點。
TSF,TBTT,Listen Interval field與CFP repetition interval
按照之前的描述,AP是週期性的傳送beacon幀,在該beacon幀中的TIM欄位包含了對應快取區的資訊。但是如果每一個幀中都包含所有節點的TIM資訊會有兩個缺點:
限制了節點的休眠時間,由於每一個beacon幀都包含了TIM資訊,所以節點需要定時醒來接收對應的beacon,這一點也是比較耗費能量的,如果讓節點多休眠一會,那麼會更節能
增加了TIM的資訊,如果beacon幀中,並沒有包含所有節點的TIM資訊,那麼就可以按照我們前面所述的Bitmap control和Partial Virtual Bitmap進一步壓縮空間,減少beacon傳輸時間的浪費
所以802.11協議設計中,節點是週期性的醒來,並且AP知道節點對應的甦醒週期。當節點醒來之後,AP才會在對應beacon的TIM欄位中,為其指示快取區資訊。(在實際情況下,AP除了在對應的睡眠週期到達後要醒來,同時也會計算DTIM到達時醒來,因為後者是廣播資訊,前者是單播資訊)。
那麼為了做到前面所述的需求,AP和節點之間首先要做到時間同步,然後要規定一個週期,進而完成周期性獲取TIM資訊這樣一個需求。
- TSF(Timing Synchronization Function):協議中是用TSF機制來描述定時同步功能。TSF定時器一共64位,單位是us。在基礎架構模式中,定時同步是同步AP傳送的beacon幀來完成的,在beacon中有一個Timestamp欄位,該欄位也是64位,並且是在beacon中不是按照Element形式進行存放的,所以每一個beacon幀中必定會有一個Timestamp。當STA接收到AP的beacon幀後,提取Timestamp欄位的時間戳,並且新增一下本地估算出來的延遲(從天線埠接收到最後處理的本地延遲),從而完成節點與AP時間同步的功能。
上圖就是beacon幀中,timestamp相應的欄位,在其之後,我們可以看到一個Beacon Interval欄位,該引數實際上在路由器配置中可以看到,一般被描述為Beacon時槽,且大小為100ms,即0.1s(PS:通常情況下,網速都是按照10進位制進行步進的,即1kbps=1000bps這樣,k是kilo的意思。而在802.11協議中,這裡規定了一個時間單位TU,Time Unit,TU是少有的按照二進位制進行步進的單位,1TU=1024us,這裡實際上是kilo-binary的計數方法。所以一般我們設定的是0.1s,但是在實際的Beacon幀中是0.1024s,這裡有一個區別),該引數與TBTT時間是一致的。
- TBTT(Target Beacon Transmission Time):信標預定傳送時間,實際上這個是一個定時後的傳送/接受beacon動作的週期,其週期的時間就是由Beacon Interval所決定的。當TBTT時間到達的時候,AP會主動傳送beacon幀,而節點也都會主動接受該beacon幀(包括休眠模式的節點,也會甦醒過來接受該beacon),然後利用beacon進行時間同步,並且檢視TIM欄位,若沒有自己的資料快取,那麼節點繼續轉為休眠模式,直到下一個TBTT時間到來。
Beacon幀是按照TBTT時間進行週期性傳送的,但是節點也不會是嚴格每一個beacon都需要監聽的,為了更有效的設計節能模式,節點應該是每間隔幾個TBTT週期,再監聽一次beacon幀,從而就可以延長自己的休眠時間。
- Listen Interval:監聽間隔是指工作站兩次甦醒之間,歷經多少次TBTT,也就是跳過了多少個Beacon幀。較長的監聽間隔,節點休眠的時間就越長,從而越節能,但是會耗費AP的快取區空間,也增加了接入時延。
Listen Interval是節點通過Association Request幀傳送給AP的,從而AP就知道節點的甦醒時間,在對應節點甦醒的時候,其才會在Beacon幀中,為其指示Buffer的狀態。該欄位一共16位,其單位是Beacon的週期間隔,也就是TBTT時間,若Listen Interval設定成2,那麼代表節點每經過兩個beacon週期,才甦醒一次。在抓包中,如下圖所示:
在802.11時間週期這一塊實際上規定的是比較繁雜的,由於我們討論的是協議中完整的節能模式,該節能模式實際上也分DCF和PCF下不同的工作模式,所以我們還需要明白CFP repetition interval,即CFP週期和上面TBTT時間的一個關係。
- CFP repetition interval:CFP重複週期是用來協調PCF和DCF兩個不同工作模式的一個排程週期,其中包含CFP和CP兩個部分,CFP是用來給PCF時間進行工作的,CP時間是給DCP來工作的。這一部分內容我們在討論PCF的時候有討論過。
最後用一張圖,我們標識一下這幾個排程週期之間的關係:
TBTT週期是beacon之間的週期(如圖上藍色部分),每間隔TBTT,AP就會發送一個beacon,該beacon中有可能包含TIM資訊(圖中紅色部分),也可能包含DTIM資訊(圖中紫色部分),其間隔是由DTIM Period引數進行設定的。同時我們還可以關注到,beacon的傳送有可能在CFP時間內,也有可能在CP時間內,其實際上就僅僅按照TBTT間隔傳送即可,若在CFP時間內,beacon傳送的間隔是很準確的等於TBTT,而在CP時間內,因為DCF的競爭接入機制,所以beacon的間隔會出現一些小偏差,基本是約等於TBTT時間。
CFP repetition interval是較為注意的一個間隔(圖中綠色部分),CFP時間間隔是要等於TBTT時間的倍數的。實際上我們知道,CFP的NAV時間設定是通過beacon幀的NAV或者CF Parameter Set機制來完成的(具體可以檢視我們之前PCF的敘述),所以CFP的起始一定會有一個beacon幀,而結束不一定。同時在CFP或者CP中,都有可能出現多個beacon幀。如上圖中,第一個CFP的開始一定是一個beacon幀,而結束則不是與beacon同時的。那麼CFP時間結束後,到CFP週期結束前,其剩餘的就是就是CP的時間。且在這張圖中,我們可以看到在第一個CFP週期內,就存在2個beacon幀。
PSM模式(Power Save Mode)
在初始的802.11 PSM模式中,DCF和PCF模式下,還有不同的工作機制。以下我們首先敘述節點如何進入PSM模式,然後敘述DCF的工作形式,最後我們敘述PCF。(PS:至於該兩個時間週期的排程關係,我們已經在前面提到過了,這裡就不加以展開了。)
1、如何進入PSM模式
節點如果要工作在PSM模式下,首先要告知AP,自己將要工作在節能模式。在802.11幀中,這個資訊是包含了MAC層頭部中的Frame Control Field中的,也就是說,任意一個幀都可以用來進行工作模式的切換,節點可以在關聯上AP的時候,就切換到PSM模式,也可以在工作狀態中,切換到PSM模式。在Frame Control Field欄位中,我們有兩個內容需要注意,如下圖:
這個兩個內容即Pwr Mgt(Power Management)以及More Data。
-
Pwr Mgt(Power Management): 該欄位用來標識在該幀過後,節點是否會進入省電模式(PSM mode)。若為1,那麼就進入PSM mode,反之就保持當前工作狀態。由於在基礎架構模式下,AP本身有電源供給,且AP負責整個網路的核心管理,所以AP發出的下行幀中,該欄位預設設定為0。
-
More Data:該欄位是AP指示節點,是否還有該節點的快取資料沒有傳送。若為1,代表AP還有對應節點的資料快取,反之則沒有。由於我們前面提到過,在PSM mode中,請求資料實際上是一種“兵乓”機制,一個請求只會有一個反饋。所以AP在反饋下行幀的時候,會不斷指示節點是否還存在快取,如果有快取的話,那麼節點會繼續請求資料。只有當AP中所有對應該節點的快取都被清空以後,那麼節點才會重新進入休眠狀態。
2、DCF下的PSM模式
DCF是基於競爭的工作模式,所有的節點需要接入通道需要進行競爭,包含AP以及工作在節能模式下的節點。
因為節能模式有關的引數較多,用一個圖例來說明比較困難,所以我們儘量嘗試說清楚,不足的地方還請見諒。
那麼上圖描述了1個AP,2個節能節點工作的時序圖,黑色的軸所代表的是資料包傳送和接收的時序,紫色的線上代表節點甦醒的情況。圖中STA1的Listen Interval等於2,STA2的Listen Interval=1(為了圖意簡便,就沒有標識在圖上了)。
- 一開始,我們假設由AP傳送一個beacon幀(即1st Beacon),由於這個beacon幀是作為最初時刻的beacon,所以節點需要提前wake up並接收該beacon幀。如圖中所示,beacon幀中的TIM欄位標識,STA1節點有資料包待傳,而STA2節點沒有資料包。所以STA1在接收到beacon之後,保持wake up狀態,而STA2則轉為sleep狀態。
- STA1由於已知AP中有自己的資料包,其首先要進行Backoff(這裡有關DIFS,backoff,SIFS的過程與標準DCF相同,所以這裡都以省略形式帶過),當Backoff完成後,其向AP傳送一個PS-Poll幀,用以請求資料。
- 當AP接收到該PS-Poll幀之後,其首先要反饋一個ACK(在初探節能模式中,我們並沒有強調該ACK的反饋,實際上802.11中的單播幀都是需要ACK反饋的),當ACK反饋後,AP再將資料傳送給STA1,並且在該資料的Frame control欄位中,標識more data=1。
- 當STA1接收到AP的資料後,其首先也是需要反饋ACK,並且檢視該資料幀中的More data欄位,由於該欄位等於1,所以STA1無法轉為sleep狀態。其還需要持續向AP請求資料,那麼其再次經過backoff,然後傳送PS-Poll幀給AP。
- 當AP再次收到PS-Poll後,首先還是ACK,然後反饋資料。假設這次反饋的資料包是STA1快取在AP的最後一個數據包,那麼AP在反饋中會把more data欄位設定為0。
- 當節點收到該資料包後,由於more data=0,所以STA1會在反饋完ACK後,進入休眠。
- 當第二個Beacon傳輸時(2nd Beacon),由於STA1的Listen interval=2,所以其還是處於休眠狀態,而STA2的Listen interval=1,所以每一個beacon週期其都需要醒來,接收該beacon。假設第二個beacon中,STA2還是沒有資料(圖上未標明),那麼其接收完beacon後就轉為休眠模式。
- 當三個Beacon傳輸時(3rd Beacon),STA1和STA2都會甦醒並接收該beacon。同時,該beacon中標識,兩個節點都有資料包被快取在AP中,所以兩個節點都需要進行競爭接入。在上圖中,我們假設STA2首先完成backoff,並接入通道。在STA2佔據通道傳輸時,STA1會檢測通道是繁忙的,所以不會同時進行傳送,這點實際上就是DCF的競爭過程。
- 當STA2給AP傳送PS-Poll,並且得到AP反饋的資料後,STA2檢查該資料包中的more data欄位為0,所以其接收完該資料包後,就進入sleep。而STA1由於還沒有接收到資料,則還會競爭接入通道,直到接收完AP中對應其的快取,那麼其才會再次進入sleep模式。
以上,我們描述了一個PSM-DCF的基本工作模式,這裡我們還需要額外注意的一點是DTIM時間,由於繪圖情況較為複雜,所以我們只能夠描述一下情況。在PSM模式下,節點甦醒的條件有兩個,達到其中一個其就會甦醒。
節點根據Listen interval進行甦醒,即每隔Listen interval時間,節點會甦醒一次,直到接收完AP中自己的快取,才會轉為睡眠模式。
DTIM週期,由於我們知道DTIM實際上是用來下發AP上快取的組播/廣播幀的,所以所有的節點都需要在這個時刻甦醒,並且接收這個幀。所以只要該beacon攜帶的是DTIM,所有的節點也會甦醒(即使不在Listen interval規定的甦醒時刻)。在節點都甦醒後,AP會首先傳輸其快取的組播和廣播幀,節點接收完該組播或廣播幀後,同時自己又不在TIM快取中(筆者理解,由於AP知道節點的Listen interval,所以不會每一個beacon中都會攜帶其的TIM資訊),那麼該節點就會進入sleep,直到自己規定的時刻再次甦醒。
同時這裡我們並沒有對上行資料做具體說明,當節點本地有資料需要傳送給AP時,其經過backoff後,會主動進行資料傳送。至於節點會首先發送PS-Poll還是傳送本地資料,筆者並沒有考究。
3、PCF下的PSM模式
PCF是基於排程的接入方式,節點的接入順序是通過AP的輪詢完成的。
實際上由於PCF的排程機制,所以一般更加設定節能方案,在上圖中,我們假設STA1的Listen Interval=1,STA2的Listen Interval=1,並且我們假設DTIM period為4,並且第一個beacon,即1st beacon中攜帶的就是DTIM。
- 首先AP傳送一個Beacon,即1st Beacon,節點也保證在這個beacon週期之前就已經甦醒,用以保證能接收該beacon的資訊。在1st Beacon中,攜帶的是DTIM資訊,並且標識AP中有廣播資料包的快取。
- 當Beacon時間結束之後,AP首先會發送快取的廣播幀,由於是廣播幀,所以這裡不需要等待ACK的反饋。當廣播幀傳送之後,AP會依次向節點發送資料幀,並輪詢節點。由於DTIM中攜帶的資訊表示,STA1和STA2都有資料被AP快取,所以在沒有收到下行資料包之前,STA1和STA2都是保持wake up狀態。
- AP會首先向STA1傳送DATA+CF-Poll幀,這是一個幀,但是同時具有兩個功能(即向STA1傳送資料,並請求STA1的上行資料),這裡在PCF工作模式介紹中,已經提到過了。
- 當STA1接收到該資料後,其會向AP傳送ACK以及自己的快取,同樣的,該資訊也是封裝在一個幀中,即DATA+CF-ACK幀中一次性反饋上去,節約了一些幀間間隔。同時由於AP下發的資料中,more data欄位等於1,所以STA1接收完該資料後,還需要保持wake up狀態,等待AP下方剩餘的資料。
- 在PCF中,AP是按照AID的升序對節點依次進行輪詢的,所以即使傳送給STA1的資料欄位中,more data=1,但是其還是有先輪詢下一個節點,而不會一直逗留在STA1上。AP會向STA2傳送Data+CF-ACK+CF-Poll幀,可以注意這個幀有三個功能,既向STA1進行ACK確認,也向STA2傳送資料,並進行資料請求。
- 當STA2接收資料後,其同樣想AP傳送DATA+CF-ACK幀,並且由於more data欄位等於0,所以STA2傳輸完該資料後,就進入sleep狀態。且由於STA1與STA2的Listen interval都等於1,所以STA2會在下一個beacon到來之前就醒來,並接收該beacon資料。
- 在第二個beacon中,即2rd Beacon,TIM指示STA1有資料,則STA1和AP繼續進行資料交換(圖中省略了),而STA2沒有資料快取,所以在接收完beacon後,STA2就進行sleep了。
- 在第三個beacon中,即3rd Beacon,TIM欄位指示STA1有資料,而STA2沒有資料。所以STA2還是接收完beacon就進入sleep了,而STA1首先接收AP傳送的下行資料,這裡由於我們假設DTIM period為4,所以該beacon中攜帶的是TIM資訊,即AP沒有組播/廣播包需要首先發送。所以一開始AP就傳送DATA+CF-Poll給STA1,並且由於該幀中,more data欄位等於0,所以AP在成功接收該資料幀,並反饋ACK之後,就進入sleep了。