????????802.11ax是WiFi 6標準,其引入了一些新的特性和技術來提升無線網絡的性能,其中包括幀聚合和幀分片。以下是它們的詳細處理流程:
1. 幀聚合
幀聚合是一種提高傳輸效率的技術,它允許多個數據幀被聚合到一起,然后作為一個單獨的數據包進行傳輸。在802.11ax中,主要使用了兩種類型的幀聚合:
空間流聚合:在此類型中,AP可以將多個客戶端設備的數據幀聚合到一起,然后通過相同的空間流(spatial stream)進行傳輸。這樣可以提高單個AP與多個客戶端設備之間的傳輸效率。
多用戶聚合:在此類型中,AP可以將多個用戶的數據幀聚合到一起,然后通過不同的空間流進行傳輸。每個用戶的數據幀被單獨處理,以避免碰撞和重傳。這樣可以提高AP與多個用戶之間的總傳輸效率。
2. 幀分片
幀分片是一種將大尺寸數據幀分割成更小片段的技術。在802.11ax中,幀分片主要用于支持長距離傳輸和高吞吐量。以下是幀分片的處理流程:
數據切分:在發送端,首先將大尺寸的數據幀切分成多個小尺寸的片段。每個片段都包含必要的元數據(如數據類型、序列號等),以便接收端可以正確地重新組合原始數據幀。
逐片段傳輸:然后,每個小尺寸的片段被單獨封裝成一個數據包,并通過無線介質進行傳輸。每個數據包都使用相同的空間流進行傳輸。
接收端重組:在接收端,根據元數據重新組合這些片段,恢復出原始的數據幀。如果某個片段在傳輸過程中丟失或損壞,可以通過重傳機制進行修復。
通過幀聚合和幀分片技術,802.11ax能夠顯著提高無線網絡的傳輸效率和可靠性。這些技術有助于支持高吞吐量和低延遲的應用場景,如在線游戲、高清視頻流等。
本文接下來主要介紹的是數據在發送端分片和在接收端重組的細節。
WiFi-6的STA應遵循ieee802.11-2020協議中規定的幀分片處理流程,但某些特殊情況除外。動態幀分片在聚合數據以適應受約束的PPDU持續時間方面提供了進一步的靈活性。
ieee802.11-2020協議定義了生成均勻片段化MSDU或MMPDU的程序,其中每個片段的長度相同,但最后一個片段除外。根據HT立即塊確認協議,這些幀分片并不包括在A-MPDU中。
WiFi-6的STA可以協商使用不同級別的動態分段:
級別1:支持一個非A-MPDU的動態片段;不支持不包含S-MPDU的A-MPDU中的動態片段。
級別2:支持不包含S-MPDU的A-MPDU中的動態片段,但需滿足以下條件:條件一,A-MPDU中任何給定MSDU或A-MSDU的不超過一個動態片段;該動態片段是在塊確認協議下發送的。?條件二,不超過一個MPDU,它是A-MPDU中MMPDU的動態片段。
級別3:支持不包含S-MPDU的A-MPDU中的動態片段,但需滿足以下條件:條件一,A-MPDU中任何給定MSDU或A-MSDU的不超過四個動態片段;這些動態片段是根據塊確認協議發送的。?條件二,不超過一個MPDU,它是A-MPDU中MMPDU的動態片段。
需要注意的是:在2級或3級中運行的HE STA也支持發送和接收1級動態片段。在級別2下,可能有多個數據幀是動態片段,但它們具有不同的序列號和狀態。
這里定義了生成非均勻分片的MSDU、A-MSDU或MMPDU的程序,其中每個分片的長度不一定相同。第一片段的長度應大于或等于接收方STA發送的HE Capabilities元素中的HE Capability Information字段中的minimum fragment size子字段中指示的最小片段大小。如果MSDU、A-MSDU或MMPDU的長度小于最小片段大小,則MSDU、A-MSDU或MMPDU不應被分段。用動態分片生成的碎片被稱為動態分片。
這些過程允許在級別1、級別2和級別3中包括作為非A-MPDU的一個動態片段,并且允許在級別2和級別3中包含一個或多個MPDU的A-MPDU內包括一個或更多個動態片段。
HE STA遵循協議定義的用于生成這些片段的規則以及用于對接收到的動態片段進行碎片整理的規則。在協議中,HE STA遵循其發送的HE能力元素中的HE MAC能力信息字段中的動態分段支持子字段中指示的分段級別,除非在塊確認建立過程期間交換的ADDBA請求和ADDBA響應幀中包括ADDBA擴展元素。在這種情況下,HE STA遵循其在塊ack設置過程期間接收的ADDBA響應幀中的ADDBA擴展元素中指示的分段級別。
HE STA應將ADDBA請求或ADDBA響應幀中的ADDBA擴展元素中的HE分段操作子字段(如果存在)設置為小于或等于其發送的HE能力元素中的動態分段支持子字段的值。
HE STA應將ADDBA響應幀中的ADDBA擴展元素(如果存在)中的HE分段操作子字段設置為小于或等于接收到的ADDBA請求幀中的DDBA擴展元素中的HE分片操作子字段(如果存在的話)的值。
下面是動態幀分片的相關細節:
對于級別1和級別2的動態分段,以下內容適用:
第一:發送一個或多個動態片段的始發STA應針對每個片段請求來自接收方STA的即時響應。
第二:發起方STA應按照10.4中定義的順序發送片段。
對于3級動態分段,并非所有動態分段都需要立即響應,并且不需要按順序發送動態分段。如果接收方發送的HE Capabilities元素中的A-MSDU Fragmentation Support子字段為1,則HE STA可以發送A-MSDU的動態片段。
發起方STA不應同時向同一接收方STA發送大于Nmax的多個未決MSDU和A-MSDU(如果支持的話)的動態片段,其中MSDU和A-MSDU的Nmax(如果支持)是基于接收方STA傳輸的HE Capabilities元素中的Maximum number of Fragmented MSDU/a-MSDU子字段來計算的。術語未決是指包含MSDU、A-MSDU或MMPDU的全部或部分的MPDU,對于該MPDU,傳輸已經開始,并且MSDU、A-MSDU或MMPDU的遞送尚未完成(即,尚未接收到對最終片段的確認,并且由于重傳、生存期或某些其他原因,MSDU、A-MSDU或MMADU尚未被丟棄)。
注意:未完成MMPDU的動態片段不計入針對Nmax限制的檢查中。
如果先前發送的MSDU、A-MSDU或MMPDU的所有動態片段在接收STA處已明確失敗,則發起方STA可重新發送完整MSDU、A-MSDU或MMPDU。如果先前發送的MSDU、A-MSDU或MMPDU的片段中的一個或多個在接收STA處明確失敗,則始發STA可以重新發送失敗的片段(關于術語明確失敗的定義,參見下一段)。重傳片段的幀體長度和內容應與最初傳輸的片段相同,并且在該STA的MSDU、A-MSDU或MMPDU的使用壽命內應保持固定,除非幀未加密,在最初傳輸片段之前的所有片段都已接收,并且初始發送的片段之后的所有片段要么已經明確失敗,要么還沒有被發送。在這種情況下,重新發送的片段的幀體長度和內容可能與最初發送的片段不同。
如果發起方STA接收到包含以下內容的即時響應,則片段在接收STA處明確是失敗的:
1、有效的第一個MPDU不是Ack幀、壓縮的塊確認幀或多STA塊確認幀,其所有先前的EOF前MPDU定界符都被接收。
2、不包含BA信息字段且TID等于分段的BA信息字段的多STA塊確認幀。
3、壓縮的塊確認幀或多STA塊確認幀,其中包含BA信息字段,其TID等于分段的TID,但不確認收到分段。
發起方STA不得向接收方STA發送未在A-MPDU中攜帶的MPDU或攜帶不滿足上述條件的動態片段的A-MPDU。
級別1的動態幀分片
如果從接收方STA接收的HE Capabilities元素的HE MAC Capabilities Information字段中的 Dynamic Fragmentation Support 子字段為 1、2 或 3,則發起方 STA 可以使用級別 1 動態分段向接收方STA傳輸MSDU、A-MSDU(如果接收方支持)或MMPDU(非A-MPDU)或 MMPDU的一個動態分段,該MMPDU是非A-MPDU,并且未根據塊確認協議發送到接收方 STA。
發起方 STA 可以使用 1 級動態分段根據塊確認協議將分段的 MSDU 或 A-MSDU(如果受接收方支持)傳輸到接收方 STA,前提是滿足以下條件:從接收方 STA 接收的 HE Capabilities 元素中的 Dynamic Fragmentation Support 子字段為 1、2 或 3;對于與 MSDU 或 AMSDU 的 TID 關聯的塊確認協議,如果從接收方 STA 接收的 ADDBA 響應幀中存在 ADDBA 擴展元素,則 HE 分段操作子字段為 1。
級別2的動態幀分片
如果滿足以下條件之一,發起方STA可以根據塊確認協議將分段的MSDU或A-MSDU(如果接收方支持)傳輸到使用級別2動態分段的接收方STA:
條件1:從接收方STA接收的HE Capabilities元素中的Dynamic Fragmentation Support子字段為2;對于與MSDU或AMSDU的TID關聯的塊確認協議,如果從接收方STA接收的ADDBA響應幀中存在ADDBA擴展元素,則HE分段操作子字段為2。
條件2:從接收方STA接收的HE Capabilities元素中的Dynamic Fragmentation Support子字段為3;對于與MSDU或A-MSDU的TID關聯的塊確認協議,ADDBA Extension元素存在,并且從接收方STA接收的ADDBA響應幀中的HE Fragmentation Operation子字段為2。
發起方STA可以向接收方STA傳輸以下內容:
1、MSDU、A-MSDU(如果收件人支持)或MMPDU的一個動態分段,該分段是使用1級動態分段的非A-MPDU。
2、每個MSDU或A-MSDU最多有一個MSDU或A-MSDU(如果接收方支持)的動態分段,在A-MPDU中最多有一個MMPDU的動態分段,其中AMPDU包含至少一個使用2級動態分段的動態分段;MSDU或A-MSDU的動態片段應根據塊確認協議發送。
級別3的動態幀分片
只要滿足以下條件,發起方STA可以根據塊確認協議或分段MMPDU使用級別3動態分段將分段的MSDU或A-MSDU(如果接收方支持)傳輸到接收方STA:
條件1:從接收方STA接收的HE Capabilities元素中的Dynamic Fragmentation Support 子字段為3。
條件2:對于與MSDU或A-MSDU的TID關聯的塊確認協議,如果從接收方STA接收的 ADDBA響應幀中存在ADDBA擴展元素,則HE分段操作子字段為3。
另外,級別3分段允許在同一A-MPDU中包含的MSDU或A-MSDU的多個分段,減少片段的傳輸延遲。
發起方 STA 可以向接收方 STA 傳輸以下內容:
1、MSDU、A-MSDU(如果收件人支持)或 MMPDU 的一個動態分段,該分段是使用 1 級動態分段的非 A-MPDU。發起方 STA 應遵循協議定義的生成 S-MPDU 的規則。
2、每個MSDU或A-MSDU最多有四個MSDU或A-MSDU的動態片段(如果接收方支持),A-MPDU中最多有一個MMPDU的動態片段,其中AMPDU包含至少一個使用3級動態分段的動態片段;MSDU或A-MSDU的動態片段應根據塊確認協議發送。
2.1、發起方 STA 應將每個 MPDU 的 Fragment Number 子字段設置為小于 4 的值。
2.2、發起方 STA 應遵循協議定義的生成 A-MPDU 的規則,但 A-MPDU 應包含序列號子字段范圍不超過 BL/4 的 MPDU,其中 BL 是對應于傳輸片段的 TID 的壓縮 BlockAck 或多 STA BlockAck 幀的 Block Ack 位圖字段的長度。
下面是動態幀聚合的相關細節
如果HE STA不支持動態分段,則應將它傳輸的HE Capabilities元素的HE MAC Capabilities Information字段中的Dynamic Fragmentation Support子字段設置為0。否則,HE STA應按如下方式設置 Dynamic Fragmentation Support 子字段:
如果STA支持級別1的動態幀分片的過程接收動態分段,則設置為1、2 或 3。
如果STA支持級別2的動態幀分片的過程接收動態分段,則設置為2 或 3。
如果STA支持級別3的動態幀分片的過程接收動態分段,則設置為3。
如果HE STA支持接收動態分段,則應將dot11HEDynamicFragmentationLevel設置為其傳輸的HE Capabilities元素中Dynamic Fragmentation Support子字段的值。
如果分片是在 級別1、級別2或者級別3分片方式下發送的,則該分片屬于動態分片。
動態幀聚合整理應遵循協議中定義的規則,但以下情況除外:
1、接收方STA應支持同時接收多個未完成的MSDU和A-MSDU的動態分段,當支持來自等于Nmax的同一發送STA時,其中MSDU和A-MSDU(如果支持)的Nmax 是從STA傳輸的HE功能元素中的分段MSDU/A-MSDU指數子字段獲得的。術語“未完成”是指包含全部或部分MSDU或A-MSDU的MPDU,其傳輸已開始,但MSDU或AMSDU的交付尚未完成(即,尚未收到對最終片段的確認,并且MSDU、A-MSDU或MMPDU未因重試而被丟棄, 壽命,或其他原因)。接收方STA應支持從發送STA并發接收一個未完成的MMPDU的動態片段。
2、接收方STA可能受10.5中定義的每個MSDU、A-MSDU和MMPDU的接收計時器規則的約束。
具有 dot11AMSDUFragmentationOptionImplemented true的STA應將HE Capabilities 元素中的A-MSDU Fragmentation Support子字段設置為1。否則,STA應將HE Capabilities元素中的A-MSDU Fragmentation Support子字段設置為0。
級別1的動態幀聚合
在接收到非A-MPDU或攜帶動態分段的A-MPDU時,接收方STA會使用Ack幀或多STA BlockAck幀進行響應(如果接收到的分段包含在請求立即響應的MPDU中)。接收方STA應遵循協議中定義的規則,用于為作為MPDU或在S-MPDU或啟用ACK的單TID A-MPDU 中攜帶的請求動態片段生成Ack幀,用于生成包含對請求S-MPDU 的確認的規則,該請求包含對攜帶一個動態分段并在HE TB PPDU中攜帶的請求S-MPDU的確認,啟用ACK的單TID A-MPDU或啟用ACK的多TID A-MPDU。
級別2的動態幀聚合
在接收到作為動態分段的非A-MPDU或攜帶一個或多個動態分段的A-MPDU時,接收方STA使用以下幀之一進行響應:
如果接收到的片段是非A-MPDU或包含在A-MPDU中并請求立即響應,則為Ack幀或多 STA BlockAck幀。接收方STA應遵循協議中定義的規則,為請求動態分段生成Ack幀,該動態分段是MPDU或在S-MPDU或啟用了確認的單TID A-MPDU中傳輸,以及上面定義的規則,用于生成多STA BlockAck幀,該幀包含對HE TB PPDU中攜帶的請求S-MPDU的確認,啟用ACK的單TID A-MPDU或啟用ACK的多TID A-MPDU。
如果接收到的MSDU或A-MSDU(如果有)(每個MSDU或A-MSDU最多一個片段)的片段包含在包含請求立即響應的MPDU的A-MPDU中,則為壓縮BlockAck幀或多STA BlockAck 幀。接收方STA應遵循協議中定義的生成BlockAck幀的規則和生成Multi-STA BlockAck幀的規則,但STA應該如下處理:
處理1:將壓縮 BlockAck 幀或多 STA BlockAck 幀的 Block Ack Starting Sequence Control 子字段中的Fragment Number子字段的LSB設置為0,該子字段對應于根據塊確認協議發送的已接收分段的TID。
處理2:將Block Ack Bitmap字段的每個位設置為1,該字段對應于根據請求A-MPDU(不是S-MPDU)中包含的塊確認協議發送的已接收片段的 Sequence Number 子字段和 TID子字段。
STA應更新僅當MSDU或 A-MSDU 成功重建時才收到分段的MSDU或A-MSDU的相應塊確認記錄。否則,STA 不應更新該MSDU或A-MSDU的塊確認記錄。
注意:接收方STA設置與MPDU的序列號和TID子字段對應的Block Ack位圖字段的位,該子字段不是協議中定義的片段。
如果接收方STA從發起方STA接收到該TID的BlockAckReq幀,則接收方STA應丟棄在TID的HT即時塊確認會話期間接收的任何不完整MSDU或A-MSDU片段,如果這些片段的序列號字段值小于BlockAckReq幀的起始序列號字段的值,或者序列號小于WinStartB。兩個值的比較按照協議中所述的圓模4096進行。
級別3的動態幀聚合
在接收到作為動態分段的非A-MPDU或攜帶一個或多個動態分段的A-MPDU時,接收方STA使用以下幀之一進行響應:
如果接收到的片段是非A-MPDU或包含在請求立即響應的A-MPDU中,則為Ack幀或多 STA BlockAck幀。接收方STA應遵循協議中定義的規則,為請求動態分段生成 Ack幀,該動態分段是MPDU或在S-MPDU或啟用了ack的單TID A-MPDU 中傳輸,以及協議中定義的規則,用于生成多STA BlockAck幀,該幀包含對HE TB PPDU中攜帶的請求S-MPDU的確認,啟用ACK的單TID A-MPDU或啟用ACK的多TID A-MPDU。
如果與 TID 對應的 MSDU 或 A-MSDU(如果有)的接收片段(每個 MSDU 或 AMSDU 的一個或多個片段)包含在 A-MPDU 中,則壓縮 BlockAck 幀或多 STA BlockAck 幀,其中至少一個接收到的 MPDU 的片段編號字段對應于與接收的片段相同的 TID 具有非零值,該字段請求立即響應。接收方STA應遵循協議中生成BlockAck幀的規則和生成Multi-STA BlockAck幀的規則,但STA應該如下處理:
處理1:將壓縮 BlockAck 幀或多 STA BlockAck 幀的 Block Ack Starting Sequence Control 子字段中的 Fragment Number 子字段的 LSB 設置為 1,該子字段對應于根據塊確認協議發送的已接收分段的 TID。
處理2:將 Block Ack 位圖字段位置 B 的每個位設置為 1,該字段對應于根據塊確認協議發送的接收片段,否則應將其設置為 0,B 計算為 B = 4 × (SN – SSN) + FN,其中對序列號的操作執行模 4096。SN 是 MPDU 的 Sequence Number 子字段的值,其中包含指示其接收狀態的片段。SSN 是 BlockAck 幀的 Block Ack Starting Sequence Control 子字段的 Starting Sequence Number 子字段的值。FN 是 Fragment Number 子字段中的值。
壓縮 BlockAck 幀或多 STA BlockAck 幀,如果接收到的 MSDU 或 A-MSDU(如果有)的片段對應于 TID(每個 MSDU 或 AMSDU 的一個或多個片段)包含在 A-MPDU 中,其中所有接收的 MPDU 的片段編號字段對應于與接收的片段相同的 TID,則請求立即響應。接收方STA應遵循協議中生成BlockAck幀的規則和生成Multi-STA BlockAck幀的規則,但STA應該如下處理:
處理1:將壓縮 BlockAck 幀或多 STA BlockAck 幀的 Block Ack Starting Sequence Control 子字段中的 Fragment Number 子字段的 LSB 設置為 0,該子字段對應于根據塊確認協議發送的已接收分段的 TID。
處理2:將 Block Ack Bitmap 字段的每個位設置為 1,該字段對應于根據非 S-MPDU 請求的 A-MPDU 中包含的塊確認協議發送的接收片段的序列號子字段和 TID 子字段。
STA 應更新僅當 MSDU 或 A-MSDU 成功重建時才收到分段的 MSDU 或 A-MSDU 的相應塊確認記錄。否則,STA 不應更新該 MSDU 或 A-MSDU 的塊確認記錄。
注意:接收方 STA 設置與 MPDU 的序列號和 TID 子字段對應的 Block Ack 位圖字段的位,該子字段不是協議中定義的片段。
如果接收方 STA 從發起方 STA 接收到該 TID 的 BlockAckReq 幀,并且該分段的序列號字段值小于 BlockAckReq 幀的起始序列號字段值,或者序列號小于 WinStartB,則接收方 STA 應丟棄在 TID 的 HT 即時塊確認會話期間接收的任何不完整 MSDU 或 A-MSDU 片段。兩個值的比較按照協議中所述的4096進行。
以上只是我個人的一些理解,具體還是要以標準一些的規定為主。