집성 (A-MSDU·A-MPDU)¶
규격 · 개정판
A-MSDU: 802.11e/n · A-MPDU: 802.11n · 형식 Clause 9 (A-MSDU, A-MPDU 형식), 동작 Clause 10 · 최대 길이: HT/VHT/HE/EHT Capabilities 요소의 Maximum A-MPDU Length Exponent, Maximum MPDU Length
한눈에 보기
Wi-Fi 패킷 하나를 보낼 때마다 경쟁 대기, 프리앰블, ACK 같은 고정 비용이 수십–수백 µs 듭니다. 데이터가 1201 Mbps로 10 µs만에 끝나도 고정 비용은 그대로라, 패킷을 하나씩 보내면 효율이 매우 낮습니다.
**집성(aggregation)**은 여러 패킷을 한 번에 묶어 고정 비용을 나눠 내는 방법입니다.
- A-MSDU: IP 패킷 여러 개를 MAC 프레임 하나에 넣음. 헤더 하나, FCS 하나 → 하나라도 깨지면 전부 재전송
- A-MPDU: MAC 프레임 여러 개를 PHY 패킷 하나에 넣음. 프레임마다 FCS가 있어 깨진 것만 재전송 → Block Ack로 확인
둘을 함께 쓰는 것(A-MSDU들을 담은 A-MPDU)이 가장 효율적입니다. Wi-Fi 5 이후 모든 데이터는 A-MPDU 형식입니다.
A-MSDU vs A-MPDU¶
| 항목 | A-MSDU | A-MPDU |
|---|---|---|
| 묶는 계층 | MAC 상위 (MSDU) | MAC 하위 (MPDU) |
| 헤더 | MAC 헤더 1개 + 서브프레임 헤더(DA, SA, 길이 14옥텟) | MPDU마다 MAC 헤더 |
| 오류 검사 | FCS 1개 — 하나 깨지면 전체 손실 | MPDU마다 FCS — 개별 재전송 |
| 암호화 | 전체를 한 번 (CCMP/GCMP 헤더 1개) | MPDU마다 |
| 확인 | ACK 또는 BA (MPDU 단위) | Block Ack 필수 |
| 같은 목적지 | 필요 (같은 RA, 같은 TID) | 필요 (같은 RA; HT/VHT는 같은 TID, 11ax는 multi-TID 가능) |
| 최대 크기 | HT 3839/7935옥텟, VHT 이후 MPDU 한도(최대 11 454) 안 | HT 65 535, VHT 1 048 575옥텟, HE·EHT는 더 큼 |
최대 A-MPDU 길이¶
| 세대 | 최대 A-MPDU 길이 표현 | 최대값 |
|---|---|---|
| HT | \(2^{13+e} - 1\), e = 0–3 | 65 535옥텟 |
| VHT | \(2^{13+e} - 1\), e = 0–7 | 1 048 575옥텟 (약 1 MB) |
| HE | VHT 지수 + HE 확장 지수 | VHT보다 큼 |
| EHT | EHT 확장 지수 | HE보다 큼 |
실제로는 PPDU 시간 한도(약 5.484 ms)와 Block Ack 윈도(64/256/1024 MPDU)가 먼저 걸리는 경우가 많습니다. 예를 들어 1500바이트 MPDU를 64개 묶으면 약 96 KB이므로, 2 Gbps 링크에서는 0.4 ms면 끝나 윈도가 병목이 됩니다. 11ax가 BA 윈도를 256으로, 11be가 1024로 늘린 이유입니다.
A-MPDU 구분자¶
| 필드 | 비트 | 의미 |
|---|---|---|
| EOF | 1 | 마지막(또는 단일) MPDU 표시 (VHT 이후) |
| MPDU Length | 14 (HT 12) | 뒤따르는 MPDU 길이 |
| CRC | 8 | 구분자 자체의 오류 검사 |
| Delimiter Signature | 8 | 0x4E (ASCII 'N'). 오류 후 다음 구분자를 찾는 표식 |
수신기는 MPDU 하나가 깨져도 다음 4옥텟 경계마다 서명 'N'과 CRC를 확인하며 다음 구분자를 찾아 나머지 MPDU를 살립니다.
전문가 노트 — 최소 간격과 실무 튜닝
최소 MPDU 시작 간격. 수신기 처리 능력에 따라 연속 MPDU 시작 사이에 최소 간격(0, 1/4, 1/2, 1, 2, 4, 8, 16 µs)을 요구할 수 있고(HT Capabilities의 Minimum MPDU Start Spacing), 송신 측은 길이 0인 빈 구분자로 이 간격을 채웁니다.
A-MSDU in A-MPDU. HT에서 이 조합 사용 여부는 Block Ack 합의(ADDBA)의 A-MSDU Supported 비트로 협상합니다. 큰 A-MSDU는 헤더·암호화 오버헤드를 줄이지만, 채널이 나쁠 때 FCS 하나 실패로 여러 MSDU를 잃으므로 레이트 적응과 함께 조절해야 합니다. Linux mac80211은 기본적으로 낮은 MCS에서 A-MSDU 크기를 줄입니다.
Multi-TID A-MPDU (11ax). 서로 다른 TID의 MPDU를 한 A-MPDU에 담고 Multi-STA BlockAck의 Per-AID TID Info로 TID별로 확인합니다. 하향 OFDMA에서 STA마다 짧은 데이터를 효율적으로 실을 때 유용합니다.
암호화와 집성. CCMP/GCMP는 MPDU 단위라 A-MPDU의 MPDU마다 PN(패킷 번호)이 증가합니다. 수신 측 재정렬 버퍼와 PN 재전송 검사(replay check)를 TID별로 일관되게 처리해야 하며, MLO에서는 MLD 단위 PN 공간을 링크들이 공유합니다.