80211省電知識


轉:https://blog.csdn.net/zwl1584671413/article/details/119034391

轉:https://www.intel.cn/content/www/cn/zh/support/articles/000005615/wireless.html

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

英特爾已經確定了與某些接入點相關的很多 (互操作性) 問題, 從而降低了 Rx 數據吞吐量。在行使 uAPSD 時, 接入點停止在下行鏈路上進行聚合, 從而降低 Rx 數據吞吐量:

  • 11n 20 MHz 通道, 約 30 mbps, 而不是高達 100 mbps。
  • 11n 40 MHz 通道, 約 60 mbps, 而不是高達 200 mbps。

當禁用 uAPSD 功能時, 不會實現電源節省。
 

========================================================================================================

 

背景介紹

802.11 Power Save機制

了解WIFI節能的機制之前,首先要了解WIFI能耗的消耗發生在什么狀態下,顯而易見,發送和接收肯定是消耗能量的,還有一點是要認識到的,Power Save通常是在STA端進行的,AP需要一直廣播並且很多AP都是固定位置並接電源的,移動性小,所以AP的power save基本上是要求支持STA的power save,不至於STA進入省電跟AP不兼容,我當前的認識里只有2個AP是可以省電的,一個就是TPC,可以對AP進行發射功率配置;另一個是SMPS,協商選擇關閉某些天線的收發來達到節能效果。回過來接着講耗能的狀態,其實一般的WIFI設備還有兩個狀態:sleep狀態(別以為sleep status下不耗能)和接收空閑狀態。下面是四個狀態:

· Sleep :節點進入休眠狀態,關閉接收和發送,能耗最低;

· Rx idle:接收空閑狀態,其實這個是CCA檢測狀態,並未進行數據的接收;

· RX:接收狀態,STA檢測到要發送給自己的數據,對數據進行接收;

· TX:發送狀態,就是發送數據。

這四種狀態是可以相互轉換的,譬如數sleep狀態轉換成RX idle,然后RX idle可以轉換到RX或者TX狀態。數據通信的部分都是發生在TX和RX狀態下,但是為了不產生傳輸沖突,WIFI大部分狀態是處於Rx idle下的,而且這個狀態下接近於RX狀態,良好的使用power save機制是可以很大限度的進行節能的。

沿着這個思路其實就是要盡量降低RX idle的時間和增加Sleep的時間,從而引出了AP的緩存技術和STA的PS機制,這里只講PS機制。

Power save機制

省電模式的前提機制

省電模式的前提機制,AP的beacon中攜帶TIM(Traffic indication Map)字段,里面包含DTIM Count,DTIM Period,Bitmap Control和Part Virt Bmap字段,下文會有詳細介紹,先看DTIM period,這個通常在AP的配置上可以設置,不同廠商這個DTIM周期值會不同,有配置2也有配置3的,這個值如果較大,那么對AP的緩存能力有較高要求,設置較小sta 需要頻繁從sleep中喚醒,PS效果不佳,這個值的意義就在於處於PS狀態下的STA會在多少個beacon幀后醒來,就是sta的喚醒周期;而DITM Count就是對period的計數,表明當前beacon是period的第幾個。這種狀態是sta和AP關聯上之后的場景,另一個是STA並未關聯上AP,此時的STA狀態是不定時地去進行信道掃描,每隔一些時間掃描一次,掃描后進行sleep,周期性的從sleep中醒來再掃描一次,這是未關聯時的省電方式。

傳統省掉模式(Legacy Power Save)

有了上面的了解,下面說一下傳統省電模式的原理,也是我們所說的乒乓模式。假設某個時間STA進入sleep,它通過發送數據幀或null-date幀來告訴AP我進入省電了,這個幀的節能位會被置1,如下圖:

AP收到這個幀后就不發數據幀給處於省電模式下的STA了。然后DITM period后STA wake up,並收到AP的beacon,在beacon 中DTIM 信息元素中根據AID 來告訴sta,在你sleep的時候有發給你的數據,我替你存下了,你現在醒了,快來取吧。這個時候STA發送PS-Poll幀給AP,告訴AP我來取數據了,AP收到PS-Poll后就將對應sta的緩存數據發給STA,,如果有多個數據幀的話那就在數據幀的more data位上置1,表示后續還有緩存數據,STA繼續發送PS-Poll給AP,AP再傳數據幀,一來一回,一來一回,直到data幀的more date位為0,AP會給STA發一個Null-data。LPS的流程示意圖:

PS-Poll幀的結構可以參考如下信息:

可以明顯看到PS-poll並沒有Duration/ID信息,看地址信息也只有BSSID和Transmitter,沒有包含Source AD,這里多了一個AID來告訴AP,我是來取這個AID的緩存數據的。Null-data還是很正常的。

傳統省電模式的不足

PS-Poll省電機制定義在802.11的協議中,這個機制存在兩個不足:一是效率低,二是時延大。

1. 效率低主要是STA要獲到緩存於AP中的數據,必須通過發送PS-Poll幀,完成一次完整的交互過程(PS-Poll,ACK)。每次幀交互都需要進行退避機制及信道接入,造成額外開銷增多,效率比較低。

2. 時延比較大,是因為STA每次根據DTIM間隔定時醒來接收AP的廣播幀,如果AP為STA緩存數據幀,則STA發送PS-Poll,否則STA繼續進入睡眠狀態。因為DTIM一般Beacon間距的整數倍,Beacon間距時間一般為100ms,所以STA與AP進行數據交互的時延比較大,對一般時間敏感的業務數據(如語音或視頻數據)並不能很好的支持。如果STA使用傳統省電機制,如果需要進行語音數據傳輸,一般有兩種做法,一是讓STA保持ACTIVE狀態,二是降低DTIM間距。

快速省電模式(Fast Power Save)

快速省電模式是在L PS的基礎上來的,被稱為PS-NULL-Poll機制。這個PS-null-Poll的機制是當STA wake up后,解析到beacon中有自己的緩存幀,則會發送一個null data幀給AP,並將PS位置為0,表示不節能了,需要獲取所以緩存的數據,AP收到這個null-data后,從緩存隊列中依次取出一個緩存data幀發送給STA,直到所有的緩存數據幀發送完,當然最后一個data幀的more data位會被置0。STA收到所有緩存幀后,直接發一個null data幀 給AP,並將PS位置1,表示自己再次進入PS狀態。

快速PS和LPS的區別顯而易見,LPS是一個PS-poll獲取一個緩存幀,一次一幀,而且ps-poll ack都不能少,而Fast PS是一次null-data表示sleep or wake狀態。並獲取所以緩存幀,就好比搬運貨物,LPS是徒手,一次一個箱子,來回跑,而Fast PS是用傳送帶,建立連接后,箱子一個一個的往傳送帶上搬運。

快速省電模式的不足

提升了LPS的效率,但是對敏感優先級的data不友好,時延問題並未解決。

APSD(Automatic Power Save Delivery)

APSD是基於802.11e新增的PS機制,這里面包含了帶有QOS屬性的PS機制,其實APSD是有些類似FAST PS的,也是一次觸發,多次傳輸。APSD有兩種模式:S-APSD(基於調度的自動省電模式)和U-APSD(非排程自動省電模式)。

S-APSD(Scheduler - Automatic Power Save Delivery)

S-APSD更像一個PCF下的PS模式,大家都知道PCF是AP來輪詢下面的STA是否有數據要收發,若有數據上下行,只有AP輪詢到某一個STA的時候,這個STA才會進行接入信道進行數據的收發,這種模式很少見,在常用的wifi收發中用到的基本上都是U-APSD,而S-APSD實際也沒啥包可抓,下圖是S-APSD的一個簡單的工作模式。

在S-APSD中,SP(Service Period)是預先AP調度的,在調度時間將要到來之時,QOS-AP會發送一個triger frame,同時QOS-STA也會提前醒來接受該幀,從而開啟一個服務時間。該服務時間是通過管理幀中的Schedule Element字段進行調度的,所以QOS-STA可以提前知道什么時候應該醒來。在上圖中,QOS-AP發送的triger就是PS-Poll,然后就開始和QOS-STA交換數據,即STA向AP反饋數據之后,AP再向STA反饋數據,這樣交替切換,直到SP時間結束。

在這里,QOS-AP和QOS-STA交換數據還是上下行按序切換的。

U-APSD(Unscheduled Automatic Power Save Delivery)

U-APSD這個才像是DCF下的qos-PS模式。比較常見的一種WMM –PS模式,包很容易抓到。AP 支持省電在WMM IE 信息元素其中的一個bit位會表明是否支持WMM 省電 (即U-APSD support)。STA 支持省電在關聯請求中查看WMM IE 的Qos info字段4個AC 是否支持UAPSD(即比特位為1),抓包見下圖:

 

U-APSD 是對傳統省電的改進,在客戶端關聯的時候雙方確定了哪些AC(BE/BK/VI/VO---qos的屬性

)具有發送屬性,哪些AC 有觸發屬性,以及觸發后最多允許的發送報文數量--MAX-SP;客戶端在休眠的時候,發往客戶端的具有發送屬性的AC將緩存在發送緩存隊列,客戶端需要發送具有觸發屬性的AC 去獲取緩存幀。AP收到觸發報文后,按照接入時候確定的發送報文數量,發送屬於發送隊列的幀。沒有發送屬性的 AC 仍然使用802.11傳統的方式來傳送。

在UAPSD省電下的STA 只有兩種狀態 DOVE和AWAKE;AP只能在STA 在AWAKE下才能給STA發數據,AP在STA DOVE的情況下給STA 緩存數據;換個角度想STA 可以在任何的情況下向AP 發送數據,因為AP永遠是awake;

UAPSD的主要設計思想在於稱作U-SP(unscheduled service period)。


STA 發送觸發幀(空幀或數據幀)給AP ,AP向STA回復ACK后,U-SP被啟動,AP通過EDCA的方式開始向STA發送緩存數據,U-SP的長度有MAX-SP(service period)決定;MAX-SP在WMM IE 的Qos info 中被定義,用於定義發往客戶端的報文數量(在關聯時候就被定義)。

MAX-SP在關聯和重關聯的時候被定義,在U-SP期間,AP必須向STA發送至少一個數據幀,如果AP沒有緩存幀,則發送一個空幀,但是不能超過最大幀數;在U-SP期間,AP收到的STA的幀數據不叫做觸發幀。U-SP結束后,AP通過在Qos 控制字段里的EOSP(Eed of service period)字段置為1來結束一次U-SP(EOSP在發送的緩存幀中查看是否最后一個置為1)。STA收到這個幀后,STA 就可以進入DOVE,AP 繼續為STA緩存數據直到下一個U-SP傳輸開始;AP通過協調幀控制字段中的More Data字段來通知STA有更多的緩存幀,如果EOSP=1,more data=1 ,在立即發起一次新的U-SP傳輸,如果AP 沒有數據發送給STA ,則發送一個空幀給STA;

展示一個QOS-null-data的幀:

APSD省電主要應用在具備優先級的數據中,沒有優先級的data還是按照傳統的省電模式進行。

UAPSD省電的優缺點

UAPSD克服了PS-Poll省電機制的缺點,提升了效率,同時時延相對較小。如果STA每20ms向AP發送數據,則AP也可以每20ms向STA發送數據,因此數據時延大致為20ms, 相對PS-Poll時延為n*100ms小。UAPSD也有缺點,因為STA通過向AP發送觸發幀來發起一次U-SP傳輸,當STA發送觸發幀后,STA進入AWAKE狀態,並且等待AP向STA發送數據幀或空幀,直到AP發送的幀數據中EOSP字段被置1,STA才能重新進入省電模式DOVE。 注釋(必須等待AP 發的幀數據EOSP 字段被職位1 才能進去省電)。上圖的EOSP位就是置1的。

PSMP(Power-Save Multi-Poll)

備注:來源於網上。

實際上從802.11e中引入TXOP,Block ACK,802.11n中引入的RIFS,幀聚合,802.11ac中引入MU-MIMO,這些技術都會導致AP的突發(burst)下行傳輸的效率相比上行接入效率要高。

所以從節能模式的角度而言,在APSD中,先分節點,再分上下行的傳輸模式,就沒有先分上下行,再分節點的傳輸效率高,那么后者就是PSMP設計的基本想法。

PSMP(Power-Save Multi-Poll):在802.11n中新增的模式,可以理解是引入了更嚴格的調度機制,其首先利用一個PSMP幀來調度整個節能模式的傳輸周期,將其分成PSMP下行傳輸時段,PSMP-DTT(PSMP Downlink Transmission Time)和PSMP上行傳輸時段,PSMP-UTT(PSMP Uplink Transmission Time)。在PSMP-DTT過程中,AP進行突發傳輸,其中幀間間隔可能會更小,比如RIFS。RIFS的時間會比SIFS會更小,SIFS時間是包含了一個發送狀態到接受狀態的切換時間,而RIFS僅僅是兩次發送狀態之間的切換時間。在該過程中,節點可以不采用CCA,直接在被調度的具體時間內醒來,並接受數據,從而可以獲得更多的休眠時間,從而節能。在PSMP-UTT時間內,節點僅僅會在被調度的周期內醒來,並反饋上行數據幀,從而也減少了較多的監聽過程,節約了能量。在PSMP中,若AP的下行傳輸中存在廣播/組播包,那么會在PSMP-DTT時間內,第一個數據幀進行發送,這點實際上和之前的PSM模式傳輸組播或者廣播幀是一樣的。

如下圖表述了一個PSMP的時序調度:

那么AP首先發送一個PSMP幀,該幀中包含了后續時間內,下行鏈路和上行鏈路具體的調度安排。然后開始進入PSMP-DTT時間,第一個是發送本地緩存的組播/廣播幀(即PSMP-DTT1時刻內),然后按序發送節點所對應的緩存單播幀,這里PSMP-DTT時間內,幀間間隔可以采用RIFS,以達到更高的效率。對於ACK的部分,由於筆者沒有做詳細考證,所以沒有加以描述。當PSMP-DTT時間結束后,節點會依次在自己對應的上行調度周期內,發送數據幀,如STA1就在PSMP-UTT1中發送上行數據。當PSMP-UTT時間結束后,這一輪PSMP的數據交換就完成了。

通過上述過程,也可以看出PSMP基本上也是一種基於調度的PS機制,使用到新的IFS,目前我也沒有見過類似的基於RIFS的PS商用產品。優缺點個人感覺是對AP的調度要求高,對於傳動的基於DCF競爭機制的AP會有一定的難容性。當然技術上實現也會難一些。

SMPS(Spatial Multiplexing Power Save)

SMPS是空間復用省電機制,也是11n引入的基於多天線引入的省電機制。基於的原理很簡單,當業務量很少,負載不大時,選擇關閉其中部分天線的收發功能來達到省電的目的。實際上STA不好貿然關閉自己的天線,因為AP端有可能單流也可能多流,發送流大於接收流的話,會造成無法正確接收。所以STA在SMPS的機制中需要跟AP有溝通,協商並配合完成通道關閉和激活。

在SMPS中有設置中有三種,3關閉SMPS,0靜態SMPS,1動態SMPS,出自802.11n-2009—page68—table 7-43j。

SMPS的能力信息位表示在HT Capability info 的SM Power Save字段上或者通過SMPS Action幀交互SMPS能力信息。如圖:

備注:我抓到很多SMPS位是11,但是他表示的卻是:Spatial Multiplexing enable,我表示很無奈啊。

靜態SMPS的流程很簡單,STA需要1根天線來進行收發時,STA發送一個ACTION幀告訴AP你要切換到單流進行發送幀,若要恢復到多流則發送一個SMPS 靜態disable的ACTION幀給AP,來結束單條流的下行。下圖是靜態SMPS的流程圖:

動態SMPS聽名字就可以理解它的作用,就是根據情況在單流和多流之間切換進行下行操作。交互幀是跟靜態有區別的,看下圖:

其中當STA發送一個動態模式的action frame后,需要通過接收一個單流的RTS使能多接收通道;當接收到目的地地址是自己的MAC地址的時,接收者切換到對應的多個接收通道,並且在接收結束時,關閉多流模式切換回原有的模式。而在靜態模式中,這個切換需要一個顯示的action frame,這里需要注意一點,SMPS不能區分多流傳輸之前的RTS/CTS和其他RTS/CTS,所以STA收到RTS后,給CTS后就會切入到多流收發狀態下。

問題:為什么要發單流的RTS 才能使能多接收通道,如何讓STA知道要接收MIMO 數據?

這個用一個單播幀就可以,協議建議用RTS,當然單播數據幀也可以,看廠商實現方式了。收到發送給自己的RTS,就認為有雙流數據發送給自己,就需要切換到多通道;SMPS默認只開一條天線,如果收到RTS就把所有天線都打開。

綜上:

· 靜態的SMPS模式下,STA僅維護一個接收通道空閑,AP不會發送MIMO數據給處於Static SMPS模式的STA。HT STA可以使用SMPS Action幀交互SMPS狀態;一個非AP的HT STA 可以利用HT Capability info域中的SM Power save 字段達到相同的目的。后者,使能STA關聯后立刻用單通道接收。

· SMPS使得STA在一段時間內只激活一條接收通道,若STA處於動態的SMPS,也只有當AP 發送多流數據時才會根據AP發送的RTS切換為多接收通道,從而達到節能目的;

· SMPS Frame是一種HT 管理幀,用來指示SMPS的狀態改變。AP和STA可以通過該幀來交互SMPS狀態;

· SMPS幀控制字段信息其中:

Category字段為7,即HT類型。

HT Action字段為1,即SMPS。

TXOP-PS(Transmit Opportunity-Power Save)

TXOP的含義,當STA需要傳輸MSDU時,並不會在獲得接入機會的同時接入信道,而是等待一段時間后再進行發送,一個STA從其獲取接入信道的機會到其開始傳輸的時間叫做一個TXOP。

TXOP-PS是802.11AC協議新加的一種STA測的節能機制。其思想是“盡可能的早地識別出當前接收幀是否發給自己”,如果不是,則STA可以在該幀所處的當前TXOP剩下的時間內進入TXOP節能模式,待下一個TXOP才重新醒來,通過這種方式,可以實現TXOP內的少量節能。

TXOP-PS需要AP和STA同時都支持才可以實現,並且只有VHT AP和STA才有可能支持。

在VHT Cap info域中,B21代表TXOP-PS的能力,而AP 通過 beacon 、probe response、association response幀宣告自己具有TXOP-PS能力,而STA通過probe request、association request宣稱自己具有TXOP-PS 能力。

VHT 能力域中對 VHT PS 字段的定義及解析:

我以為沒法抓到支持VHT-TXOP的AP,但實際上我竟然看到一個支持的AP,挺強:

問題1:在TXOP-PS中STA怎么做到識別該幀不是發給自己的,然后在剩下時間段的TXOP內進入省電?

11AC並沒有引入BSS顏色(11AX才引入),而這里的其實是根據PPDU的SGI字段的信息來進行判斷,先看一下11AC VHT的 物理幀格式:

其中前面的是傳統的preamble信息,后面有VHT的preamble這里面還有兩個信息:VHT-SGI-A和VHT-SGI-B。跟LP的定義一樣,VHT preamble的信息也記錄了調制方式、速率、時間同步等信息。這里面VHT-SGI-A是用來區分VHT PPDU和HT PPDU,非HT PPDU,SGI-B是用來區分不同帶寬的。其同樣是采用BPSK調制,以1/2速率的二進制卷積碼進行傳輸的。下面看下SGI的結構。


這里面就包含了AID和TXOP-PS如果STA 的PHY接收到1個PPDU,解析SGI中的Partial AID跟自己的AID不一致,站點將停止后續的接收,進入TXOP-PS狀態。
問題2:在TXOP-PS 階段內,硬件會先判別終端發來的幀是否是我們的幀,如果我不是我們的幀,硬件會把包丟棄, 沒有交到上層。上層是處於什么狀態呢?

首先要明確TXOP-PS所處於的狀態是active狀態下的,上層其實是醒來的狀態,這個醒可以認為就是省電狀態下的醒,而TXOP-PS只是覺得,雖然我是醒的狀態,但是包不是給我的,我都懶得再繼續解析了;一般的醒來是還要解析到MAC頭,看目的地址是不是發給我的,不是我的就丟掉,而這個是提前了。

協議上的一些信息貼在這,供學者參考。

上面來自於P802.11ac_D2.0的10.2章節。

總結&遺留問題

到這里Power save算是基本說完了,但是可能有同學有疑問,一個AP下那么多STAs,sta是通過什么機制確定AP有自己的緩存幀呢,如果STA關聯上AP后一致沒業務,占着茅坑不拉X怎么辦,AP怎么不踢掉這樣的STA呢,所以下面的內容做一下補充。

TIM域信息講解:

AID的取值范圍:0-2007

AID的分配:關聯時在關聯響應包中存在AID信息

AID確定后在后面sleep時可以通過AP的beacon中的TIM信息確認AP為哪個STA緩存數據。

· 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緩存的組播信息。

Bitmap Control,Partial Virtual Bitmap:該字段就是Bitmap的具體字段,實際上與我們一開始描述的bitmap結構還存在一些區別。以下我們重點描述下協議中具體使用的bitmap結構。

AP是采用一種Bitmap結構,用來通知節點自己的buffer信息的,若將其看做一個矩陣的話,那么該矩陣的每一行有8列,最下包含1行,最大包含251行,換言之該矩陣最大的存儲空間為251行,251*8-1=2007(除去多播標識)。

而Bitmap Control的信息代表了起AID的偏移量,假設AID=88,然后找出88號在Bitmap的哪一行,先看下Bitmap Control的位信息代表的意思:

第一位如果置1則代表緩存有多播幀,這里先討論單播緩存的場景,第一位置0,若第二位置1,則緩存數據屬於Bitmap矩陣圖的第二行,若要計算此STA的AID值,首先起始值從2*8=16開始算起,然后如何確認具體AID,這個具體AID=起始AID之和+偏移量。而我們所說的偏移量就需要通過Part Virt Bmap的信息來確定。

就拿上面所說的AID=88,起始AID很容易推算出是X3位,因為X3位代表起始AID=8*8=64,而X4位是16*8=128,大於88,所有BitMap control的X3位置1,88=64+24,24介於2*8—4*8之間,所有X1位也置1,綜上Bitmap control的信息位為:0 1 0 1 0 0 0 0。然后在計算具體的偏移量。

88=64+16+a,很顯然可以計算a=8,所有偏移量Part Virt Bmap的值應該0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0,轉化為16進制就是80.

從TIM域信息也可以反推AID的值,實際情況可以抓包驗證下。

Keep-alive 機制

Keepalive機制其實就是一種保活機制,在長時間沒有業務的情況下維持自己的連接狀態,這個比較簡單,流程一般如下:

· 使能保活機制:

1. STA關聯上AP;

2. 長時間沒業務,STA每隔30s (時間可以自定義)會給AP發一個QOS-null-data/Null-data數據,根據省電的模式來的,告知AP我還沒走;

3. AP會回一個ACK表示我知道了;

· Disable保活機制:

1. STA關聯上AP;

2. 長時間沒業務,STA給AP發送任何信息,而AP會每隔5分鍾會給這個sta發送一個null-data,如果AP收到ack回復,則繼續上述操作,表示sta還在,如果AP沒收到ACK回復,AP會發三次,也就是15分鍾三個Null-data.;

3. AP三個Null-data都沒有收到ACK,AP就確認這個sta掉線了,會發單播去關聯給這個STA,解除關聯狀態;

盡管他不是省電的內容,其實在了解省電的時候可能會有這種疑問,所以就把保活放在后面,以供參考。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM