콘텐츠로 이동

Block Ack

규격 · 개정판

802.11e (도입) → 802.11n (HT 즉시 BA, 압축 비트맵) → 802.11-2024 Clause 10 (Block Ack 메커니즘), Clause 9 (BlockAckReq / BlockAck 프레임, ADDBA) · 11ax: 256 비트맵, Multi-STA BlockAck · 11be: 512/1024 비트맵, MLD 단위 합의

한눈에 보기

A-MPDU로 프레임을 수십–수백 개 묶어 보내면, 받는 쪽은 프레임마다 ACK를 보내는 대신 "어느 것은 받았고 어느 것은 못 받았는지"를 비트맵 하나로 알려 줍니다. 이것이 Block Ack입니다.

  • 시작 번호(SSN)부터 비트 하나가 MPDU 하나를 나타냄: 1 = 받음, 0 = 못 받음
  • 송신 측은 0인 것만 다시 보냄
  • 쓰기 전에 ADDBA 요청·응답으로 "이 TID에 대해 Block Ack를 쓰자, 윈도 크기는 얼마"를 합의함

윈도 크기는 세대마다 커졌습니다: 64(11n/ac) → 256(11ax) → 1024(11be).

Block Ack 합의

sequenceDiagram
    participant O as Originator (송신)
    participant R as Recipient (수신)
    O->>R: ADDBA Request (TID, 버퍼 크기, 정책, 타임아웃)
    R->>O: ADDBA Response (수락, 버퍼 크기 확정)
    loop 데이터 전송
        O->>R: A-MPDU (SN 100–163)
        R->>O: BlockAck (SSN 100, 비트맵)
        O->>R: A-MPDU (재전송 + 새 MPDU)
        R->>O: BlockAck
    end
    O->>R: DELBA (합의 해제)
ADDBA 파라미터 의미
TID 트래픽 식별자 (0–7)
Block Ack Policy 즉시(Immediate) — 사실상 이것만 쓰임
Buffer Size 수신 재정렬 버퍼 크기 = 윈도 상한
A-MSDU Supported A-MPDU 안 A-MSDU 허용
Block Ack Timeout 일정 시간 미사용 시 자동 해제
Starting Sequence Number 시작 시퀀스 번호

Block Ack 변형

변형 비트맵 용도
Basic BA 64 MPDU × 16 단편 (1024비트) 11e 원형. 거의 안 쓰임
Compressed BA 64비트 (8옥텟) 11n/ac 표준 형태, 단편 없음
Compressed BA (HE) 64 / 256비트 11ax
Compressed BA (EHT) 64 / 256 / 512 / 1024비트 11be
Multi-TID BA TID별 비트맵 여러 TID 동시 확인
Multi-STA BA STA·TID별 정보 반복 11ax UL OFDMA 응답을 한 프레임으로 여러 STA에게
GCR BA 그룹 주소 멀티캐스트 신뢰 전송 (802.11aa)

수신 측 재정렬

A-MPDU 안의 일부 MPDU가 깨지면, 수신 측은 시퀀스 번호 순서가 맞을 때까지 뒤의 MPDU를 재정렬 버퍼에 들고 있다가 순서대로 상위 계층에 넘깁니다. 윈도가 클수록 버퍼 메모리가 많이 필요합니다(1024 × 최대 MPDU 11 454옥텟 ≈ 11.7 MB, 실제로는 MPDU 크기가 작아 훨씬 적음).

이벤트 동작
윈도 안의 새 MPDU 버퍼에 저장, 비트맵 갱신
윈도 시작(WinStart) MPDU 도착 연속된 것까지 상위로 전달하고 윈도 이동
윈도 밖 앞쪽 (새 번호) 윈도를 앞으로 밀고, 밀려난 MPDU는 구멍이 있어도 전달
송신 측 포기 (재시도 한도) BlockAckReq로 SSN을 앞당겨 수신 측 윈도 이동
타임아웃 구멍을 기다리다 일정 시간 후 강제 전달
전문가 노트 — 세부 규칙

암묵적 BAR. 11n 이후 A-MPDU의 QoS Control Ack Policy를 "Normal Ack/Implicit BAR"로 두면 BlockAckReq를 따로 보내지 않아도 수신 측이 SIFS 뒤에 즉시 BlockAck를 보냅니다. 별도 BAR는 재시도 포기 후 윈도를 옮길 때 주로 쓰입니다.

윈도와 시퀀스 공간. 시퀀스 번호는 12비트(4096)이므로 비교 연산은 모듈러로 하고, 윈도는 2048 미만이어야 "앞인지 뒤인지"가 모호하지 않습니다. 11be의 1024가 사실상 상한입니다.

HE의 BA 비트맵 길이 협상. 11ax ADDBA는 Buffer Size 10비트를 그대로 쓰되 256까지 허용하고, BlockAck 프레임의 Fragment Number 하위 필드 일부 비트로 비트맵 길이(64/256)를 알립니다. 11be는 ADDBA Extension 요소로 1024까지 확장합니다. 송신 측은 수신 측이 보낸 비트맵 길이에 맞춰 SSN을 해석해야 합니다.

MLO의 Block Ack. MLD 간 Block Ack 합의는 링크와 무관하게 MLD 단위로 하나만 맺고, 어느 링크로 MPDU가 오든 같은 재정렬 버퍼를 씁니다. 그래서 한 링크에서 실패한 MPDU를 다른 링크로 재전송할 수 있습니다.