채널 차지하기: CSMA/CA와 EDCA
공유기 속도 표시는 1,201 Mb/s인데, 실제로 파일을 받으면 그 절반쯤이다. 아파트에서 저녁만 되면 더 느려진다. 4장의 링크 속도는 “말하는 순간의 속도”일 뿐이고, 와이파이는 말할 차례를 얻는 데 시간을 꽤 쓴다. 이 장에서는 한 채널을 여러 기기가 나눠 쓰는 규칙, 즉 먼저 듣고(CS) 무작위로 기다렸다가(CA) 말하는 방법과 그 비용을 숫자로 본다.
- 와이파이가 이더넷처럼 충돌을 “감지”하지 못하고 “회피”해야 하는 이유를 안다.
- SIFS·슬롯·AIFS와 무작위 백오프가 만드는 한 번의 프레임 교환을 마이크로초 단위로 그린다.
- 기기가 많아질수록 충돌과 대기가 어떻게 늘어나는지 시뮬레이션으로 확인한다.
- 숨은 단말 문제와 RTS/CTS, NAV를 설명한다.
- EDCA의 네 가지 접근 범주(음성·영상·일반·배경)가 우선순위를 만드는 방법을 계산한다.
왜 “회피”인가
예전 이더넷은 한 선을 여럿이 나눠 썼고, 말하면서 동시에 들어 충돌을 알아챘다(CSMA/CD). 무선은 그럴 수 없다. 내 안테나에서 나가는 신호는 몇 미터 밖에서 오는 신호보다 수백만 배(60 dB 이상) 세서, 보내는 동안에는 다른 소리를 들을 수 없다. 그래서 와이파이는 충돌을 감지하는 대신 충돌이 덜 나도록 미리 피하고(Collision Avoidance), 받은 쪽이 ACK로 확인해 주지 않으면 충돌이나 오류로 보고 다시 보낸다.
회의실(채널)에서 누가 말하는 중이면(캐리어 센스) 모두 기다린다. 말이 끝나면 바로 끼어들지 않고 각자 마음속으로 무작위 숫자를 골라 세다가 0이 된 사람이 말한다(백오프). 그 사이 누가 먼저 말을 시작하면 세던 숫자를 멈췄다가 다음 번에 이어서 센다. 두 사람이 같은 숫자를 골랐다면 동시에 말해 서로 망친다(충돌). 그럴 때는 다음번에 더 큰 범위에서 숫자를 고른다.
한 번의 프레임 교환을 마이크로초로 보기
와이파이의 시간은 몇 가지 간격으로 짜여 있다. 5 GHz OFDM 기준으로:
- SIFS(Short Interframe Space) 16 µs: 데이터를 받고 ACK를 보내기 전처럼 “이미 차례를 가진” 쪽이 기다리는 가장 짧은 간격. 2.4 GHz에서는 10 µs에 신호 확장 6 µs가 붙는다.
- 슬롯(slot time) 9 µs: 백오프 숫자 하나를 세는 단위. 옛 802.11b가 섞인 2.4 GHz에서는 20 µs.
- AIFS: 새로 차례를 얻으려는 쪽이 채널이 비고 나서 먼저 기다리는 시간 = SIFS + AIFSN × 슬롯. 일반 데이터(AIFSN 3)는 16 + 27 = 43 µs. 옛 방식의 DIFS(AIFSN 2)는 34 µs다.
- 백오프: 그다음 0~CW 사이의 무작위 슬롯 수만큼 더 기다린다. 일반 데이터의 CW는 처음 15, 충돌할 때마다 31, 63, … 최대 1023까지 두 배씩 늘어난다(이진 지수 백오프).
SIFS가 AIFS보다 짧기 때문에, 데이터를 받은 쪽의 ACK는 다른 누구도 끼어들기 전에 나간다. 간격의 길이 차이가 곧 우선순위다.
프레임 하나 보내는 데 드는 시간
OFDM 전송 시간 = 프리앰블 16 µs + SIGNAL 4 µs + 4 µs × ⌈(16 + 8 × 바이트 + 6) ÷ (4 × Mb/s)⌉: Linux net/mac80211/util.c의 ieee80211_frame_duration() (주석: 802.11-2012 18.3.2.4, aSIFSTime 16 µs / 802.11g 10 µs + 신호 확장 6 µs) · 슬롯 9 µs, SIFS 16/10 µs: Linux ath9k 드라이버 drivers/net/wireless/ath/ath9k/hw.c · AIFSN·CW 기본값: hostapd hostapd.conf WMM 기본 설정
기기가 많아지면
CW가 15라면 기기 둘이 같은 숫자를 고를 확률은 1/16 정도로 작다. 하지만 기기가 열, 스물이 되면 누군가와 겹칠 확률이 빠르게 커진다. 충돌한 프레임은 공중 시간을 통째로 버리고, 충돌한 기기들은 CW를 키워 더 오래 기다린다. 와이파이 6가 아파트·경기장처럼 붐비는 곳을 겨냥해 새 장치(OFDMA, BSS 컬러링, 12장)를 들여온 이유가 여기에 있다.
백오프 경쟁: 기기 수와 충돌
EDCA: 통화가 먼저다
영상 통화의 음성은 몇십 밀리초만 늦어도 끊기지만, 백업 업로드는 1초 늦어도 아무도 모른다. 802.11e(상품명 WMM)는 트래픽을 네 가지 접근 범주(Access Category, AC)로 나누고, 범주마다 AIFSN과 CW를 달리해 확률적으로 우선순위를 준다. 이것이 EDCA(Enhanced Distributed Channel Access)다. 기기 안에서도 범주마다 따로 줄을 서서 경쟁한다.
| 범주 | 예 | AIFSN | AIFS (5 GHz) | CW 처음 ~ 최대 | 한 번에 쓸 수 있는 시간(TXOP) |
|---|---|---|---|---|---|
| AC_VO 음성 | 통화 음성 | 2 | 34 µs | 3 ~ 7 | 47 × 32 µs = 1.504 ms |
| AC_VI 영상 | 영상 통화, 스트리밍 | 2 | 34 µs | 7 ~ 15 | 94 × 32 µs = 3.008 ms |
| AC_BE 일반 | 웹, 대부분의 트래픽 | 3 | 43 µs | 15 ~ 1023 | 프레임 하나 |
| AC_BK 배경 | 백업, 업데이트 | 7 | 79 µs | 15 ~ 1023 | 프레임 하나 |
단말용 기본값: hostapd hostapd.conf의 wmm_ac_* (CW는 지수 표기 n → 2ⁿ − 1, TXOP는 32 µs 단위). AP 자신이 보낼 때는 음성·영상의 AIFSN이 1로 더 짧다(tx_queue_data*). Linux mac80211이 WMM 정보가 없을 때 쓰는 기본값도 같은 표를 따른다(ieee80211_set_wmm_default()).
어떤 범주의 트래픽인지는 IP 헤더의 DSCP나 VLAN 우선순위 값을 보고 정한다(Linux는 cfg80211_classify8021d()). 앱이 표시하지 않으면 대부분 일반(BE)으로 간다.
두 범주가 같은 순간 경쟁하면
핵심 정리
- 무선은 보내면서 들을 수 없어 충돌을 감지하지 못한다. 그래서 먼저 듣고 무작위로 기다려 피하고(CSMA/CA), ACK가 없으면 다시 보낸다.
- 5 GHz: SIFS 16 µs, 슬롯 9 µs, AIFS = SIFS + AIFSN × 슬롯. 짧은 간격이 곧 우선순위다(ACK는 SIFS 뒤).
- 54 Mb/s로 1,500바이트를 보내도 대기·프리앰블·ACK 때문에 실제는 약 30 Mb/s. 작은 패킷일수록, 빠른 전송률일수록 고정 비용의 비중이 커진다.
- 기기가 많으면 충돌이 늘고 CW가 커져 대기도 는다(10대면 보낸 프레임의 약 37%가 충돌).
- 숨은 단말은 RTS/CTS와 Duration·NAV(가상 캐리어 센스)로 막는다. 대가는 교환마다 약 88 µs.
- EDCA는 음성·영상·일반·배경 네 범주에 다른 AIFSN·CW·TXOP를 줘 확률적 우선순위를 만든다.
확인 퀴즈
데이터를 받은 기기가 ACK를 다른 기기보다 먼저 보낼 수 있는 이유는?
5 GHz에서 일반(BE) 트래픽의 AIFS는?
전송률을 54 Mb/s에서 더 올려도 작은 패킷의 처리량이 크게 늘지 않는 이유는?
숨은 단말 C가 A의 전송 중에 조용히 하게 만드는 것은?