Chapter 07

프레임 해부

와이어샤크로 와이파이를 잡아 보면 데이터보다 “데이터가 아닌 것”이 훨씬 많이 보인다. 비컨, 프로브, ACK, RTS, 블록 ACK… 이 장에서는 와이파이 프레임을 바이트 단위로 뜯어보며, 이더넷 프레임에는 없는 칸들이 왜 필요한지 하나씩 확인한다.

세 종류의 프레임

이더넷 프레임은 사실상 한 종류(데이터)다. 와이파이는 공기라는 불안정한 매체 위에서 연결을 맺고, 차례를 정하고, 확인 응답까지 해야 해서 세 종류가 있다.

종류(type)하는 일대표 하위 종류(subtype)
관리(management, 0)네트워크를 알리고 찾고 연결을 맺고 끊는다비컨, 프로브 요청/응답, 인증, 연결 요청/응답, 연결 해제(Deauth·Disassoc), 액션
제어(control, 1)매체 사용을 돕는다. 몸통이 없거나 아주 짧다ACK, RTS, CTS, 블록 ACK 요청/블록 ACK, PS-Poll, 트리거(Wi-Fi 6)
데이터(data, 2)위 계층(IP) 패킷을 나른다QoS 데이터(오늘날 거의 전부), Null·QoS Null(데이터 없이 절전 상태만 알림)

종류·하위 종류 값과 Frame Control 비트 위치: Linux include/linux/ieee80211.h의 IEEE80211_FTYPE_*, IEEE80211_STYPE_*, IEEE80211_FCTL_*

주소가 네 개인 이유

이더넷 프레임에는 주소가 둘(목적지, 출발지)이다. 와이파이 프레임은 공중에서 “지금 이 전파를 보내는 기기(TA)와 받는 기기(RA)”가 최종 출발지(SA)·목적지(DA)와 다를 수 있다. 휴대폰이 인터넷 공유기 너머의 서버로 보내는 프레임은 공중에서는 휴대폰 → AP지만, 최종 목적지는 유선 쪽 게이트웨이다. 그래서 ToDS·FromDS 두 비트로 주소 칸의 의미를 정한다.

ToDSFromDS상황주소 1주소 2주소 3주소 4
00관리·제어 프레임, 단말끼리 직접DA (= RA)SA (= TA)BSSID—
10단말 → AP → 유선BSSID (= RA)SA (= TA)DA—
01유선 → AP → 단말DA (= RA)BSSID (= TA)SA—
11AP ↔ AP 무선 중계(메시 백홀, WDS)RATADASA

SA·DA를 고르는 규칙: Linux ieee80211_get_SA()(주소 4가 있으면 주소 4, FromDS면 주소 3, 아니면 주소 2) · ieee80211_get_DA()(ToDS면 주소 3, 아니면 주소 1)

주소 1은 언제나 “공중에서 이 프레임을 받을 기기”다. 그래서 기기는 주소 1만 보고 자기 것인지 판단하고, ACK도 주소 2(TA)로 보낸다. 받은 프레임을 이더넷 프레임으로 바꿀 때는 위 표로 SA·DA를 꺼내 쓴다. 이 변환이 AP가 하는 “브리지”의 핵심이다.

예측해 보기

거실 메시 공유기(메인)가 안방 메시 공유기(위성)로 무선 백홀을 통해 노트북의 패킷을 넘긴다. 노트북은 안방 공유기에 연결되어 있다. 이 백홀 프레임에는 주소가 몇 개 필요할까?

공중의 송신·수신 기기와, 최종 출발지·목적지가 모두 다르다.

RA = 위성 공유기, TA = 메인 공유기, DA = 노트북, SA = 인터넷 쪽 게이트웨이. 넷이 모두 달라 주소 4가 필요하다. 많은 메시 제품은 이 4주소 방식을 쓴다.

비컨과 정보 요소

AP는 보통 100 TU마다 비컨을 보낸다. TU(Time Unit)는 1,024 µs여서 100 TU = 102.4 ms, 1초에 약 10번이다. 비컨의 몸통은 타임스탬프(8바이트, 단말이 시계를 맞춤), 비컨 간격(2), 능력 정보(2) 뒤에 정보 요소(Information Element, IE)가 줄줄이 붙는다. 정보 요소는 모두 ID(1) · 길이(1) · 내용의 TLV 형식이라, 모르는 ID는 길이만큼 건너뛰면 된다. 덕분에 새 세대가 나와도 옛 기기가 비컨을 읽다 멈추지 않는다.

ID정보 요소내용
0SSID네트워크 이름(0~32바이트). 길이 0이면 “숨긴 SSID” 또는 프로브의 “아무나”
1Supported Rates지원 속도. 맨 윗비트가 켜진 것은 모두가 지원해야 하는 기본 속도(0.5 Mb/s 단위)
3DS Parameter Set현재 채널 번호
5TIMAP에 데이터가 쌓인 절전 단말의 목록(11장)
48RSN보안 방식: 암호(CCMP·GCMP), 인증(PSK·SAE·802.1X), 관리 프레임 보호(10장)
45 / 61HT Capabilities / OperationWi-Fi 4 능력과 현재 운영(40 MHz 등)
191 / 192VHT Capabilities / OperationWi-Fi 5
255Extension확장 ID로 다시 나눔: 35/36 HE(Wi-Fi 6), 106/108 EHT(Wi-Fi 7)
221Vendor Specific회사별(OUI) 정보. WMM 매개변수, WPS 등

정보 요소 ID: Linux include/linux/ieee80211.h의 enum ieee80211_eid, enum ieee80211_eid_ext · TU = 1,024 µs: 같은 파일의 TU_TO_JIFFIES(x) = usecs_to_jiffies(x × 1024)

비컨은 모든 단말이 알아듣도록 가장 느린 기본 속도로 나간다. 2.4 GHz에서 옛 802.11b 호환을 켜 두면 1 Mb/s다. 그런데 공유기 한 대가 SSID를 여러 개(일반·게스트·IoT) 열면 SSID마다 비컨이 따로 나가고, 아파트에서는 같은 채널에 이웃 공유기 비컨까지 들린다. 이것이 붐비는 2.4 GHz가 느린 숨은 이유 중 하나다.

SIMULATOR

비컨이 먹는 채널 시간

비컨 속도
비컨 하나—
초당 비컨—
채널 시간 중 비컨—
막대: 102.4 ms 한 주기 안에서 비컨이 차지하는 시간(빨강)과 나머지(회색). 해볼 것: ① 1 Mb/s, 400바이트, SSID 3개, 공유기 4대면 채널 시간의 약 40%가 비컨이다. ② 같은 조건에서 비컨 속도만 6 Mb/s로 올리면 약 7%로 준다. 그래서 2.4 GHz에서는 802.11b 호환(1·2·5.5·11 Mb/s 기본 속도)을 끄고, 쓰지 않는 SSID를 줄이라고 권한다. 계산: 비컨 앞의 대기·백오프는 뺌. 1 Mb/s는 긴 프리앰블 192 µs + 8 µs/바이트, 6·24 Mb/s는 OFDM(6장 식).

DSSS 전송 시간 = 긴 프리앰블 144 µs + PLCP 머리말 48 µs + ⌈8 × 바이트 ÷ Mb/s⌉: Linux ieee80211_frame_duration()의 802.11b 분기 (주석: 802.11b 18.3.4) · 기본 속도·비컨 간격 설정: hostapd hostapd.conf (basic_rates, beacon_int)

핵심 정리

  1. 프레임은 관리(연결)·제어(매체 사용)·데이터 세 종류. 오늘날 데이터는 거의 전부 QoS 데이터다.
  2. 머리말은 24바이트 기본에 주소 4(6)·QoS(2)·HT Control(4)이 붙어 최대 36바이트. ACK·CTS는 10바이트. 무엇이 붙는지는 Frame Control이 정한다.
  3. ToDS·FromDS가 주소 칸의 의미를 정한다. 주소 1은 언제나 공중의 수신자(RA). 둘 다 1이면 주소가 넷(메시 백홀).
  4. 시퀀스 번호 + Retry로 중복을 버리고, FCS(CRC-32)가 틀리면 ACK 없이 버려 재전송을 부른다.
  5. 비컨은 100 TU(102.4 ms)마다 가장 느린 기본 속도로 나가며, 정보 요소는 ID·길이·내용 TLV라 새 기능을 덧붙이기 쉽다. SSID 수와 802.11b 호환이 채널 시간을 크게 먹을 수 있다.

확인 퀴즈

Frame Control 값이 0x0080인 프레임은?

종류 비트 0(관리), 하위 종류 8(비컨). QoS 데이터는 0x0088, ACK는 0x00D4, RTS는 0x00B4다.

휴대폰이 AP를 거쳐 유선의 서버로 보내는 데이터 프레임에서 주소 3은?

ToDS = 1: 주소 1 = BSSID(RA), 주소 2 = SA(휴대폰), 주소 3 = DA.

ACK를 잃어 보낸 쪽이 같은 프레임을 다시 보냈다. 받는 쪽이 같은 패킷을 두 번 올려 보내지 않는 방법은?

시퀀스 번호(12비트)와 Retry 비트로 중복을 걸러낸다. 그래도 ACK는 다시 보낸다.

비컨 간격 100 TU는 몇 ms인가?

1 TU = 1,024 µs.