Chapter 09

연결과 로밍

설정에서 와이파이를 켜면 몇 초 뒤 목록이 뜨고, 이름을 누르면 1~2초 만에 연결된다. 그 사이 공중에서는 열 개가 넘는 프레임이 오간다. 거실에서 안방으로 걸어가면 휴대폰은 언젠가 더 가까운 공유기로 갈아탄다. 그런데 왜 꼭 신호가 나빠질 대로 나빠진 뒤에야 갈아탈까? 이 장은 실제 단말 소프트웨어(wpa_supplicant)의 코드를 근거로 그 과정을 따라간다.

스캔: 목록이 뜨기까지

단말이 주변 네트워크를 찾는 방법은 둘이다.

6 GHz는 채널이 너무 많아 다른 길을 쓴다. AP가 2.4·5 GHz 비컨 안에 “나는 6 GHz 몇 번 채널에도 있다”는 RNR(Reduced Neighbor Report)을 넣어 알려 주고, 단말은 스캔할 때 PSC 15개 채널(2장)만 직접 살핀다.

회의실 건물 둘러보기

처음 온 건물에서 회의에 들어가려면 층마다 다니며 문 앞 안내판(비컨)을 보거나, 복도에서 “여기 ○○ 회의 있어요?”라고 묻는다(프로브). 회의를 고르면 사회자에게 이름을 대고(인증·연결), 출입증을 받는다(4방향 핸드셰이크). 걸어 다니다 더 가까운 회의실로 옮기는 것이 로밍이다.

SIMULATOR

전체 스캔에 걸리는 시간

능동 채널—
수동 채널—
전체 스캔—
막대: 채널마다 머무는 시간을 차례로 이은 것(파랑 = 능동, 주황 = 수동). 해볼 것: 모든 대역을 켜면 약 4초다. DFS 채널 16개가 그중 절반 가까이다. 연결 중에 이렇게 오래 채널을 떠나 있으면 통화가 끊기므로, 연결 중 스캔은 몇 채널씩 나눠서 하고 로밍에는 아래의 이웃 목록(802.11k)을 쓴다. 계산: Linux mac80211 소프트웨어 스캔의 채널당 시간(능동: 프로브 전 대기 HZ/33 + 응답 대기 HZ/33 ≈ 61 ms, 수동: HZ/9 ≈ 111 ms). 칩이 직접 스캔하는 드라이버는 자기 값을 쓴다. 채널 목록은 한국 기준(2장).

채널당 시간: Linux net/mac80211/scan.c의 IEEE80211_PROBE_DELAY = HZ / 33, IEEE80211_CHANNEL_TIME = HZ / 33, IEEE80211_PASSIVE_CHANNEL_TIME = HZ / 9 · PSC: 2장 계산(cfg80211_channel_is_psc())

연결 버튼을 누른 뒤

연결은 네 단계다. 이름은 헷갈리지만 각각 하는 일이 다르다.

  1. 인증(Authentication): 이름과 달리 WPA2에서는 형식뿐인 “열린 인증” 두 프레임이다. 진짜 비밀번호 확인은 뒤의 4단계 핸드셰이크에서 한다. WPA3-Personal은 여기서 SAE로 비밀번호를 직접 증명한다(10장).
  2. 연결(Association): 단말이 자기 능력(지원 속도, HT/VHT/HE, 보안 방식)을 알리고 AP가 연결 번호(AID)를 준다.
  3. 4단계 핸드셰이크: EAPOL-Key 프레임 네 개로 이번 연결에 쓸 암호 키를 만든다(10장). 회사 망(802.1X)은 그 전에 EAP로 사용자 인증을 한다.
  4. DHCP: 이제 데이터 프레임이 오갈 수 있으니 IP 주소를 받는다. 이것은 와이파이가 아니라 IP 계층의 일이다.
INTERACTIVE

연결 과정 따라가기

보안 방식
공중 프레임—
단말이 기다리는 왕복—
지금 단계—
ACK는 그리지 않았다. 왕복 수 = 단말이 보내고 답을 기다리는 횟수(AP가 먼저 보내는 프레임에 단말이 답하는 것도 하나로 셈). 엔터프라이즈의 EAP 부분은 방식(EAP-TLS, PEAP 등)과 인증서 크기에 따라 왕복이 크게 달라 대표 흐름만 보였다. FT는 같은 ESS 안에서 다른 AP로 옮기는 경우로, IP 주소가 그대로라 DHCP도 생략한다(실제 단말은 확인용 DHCP를 보내기도 한다).

상태 기계: wpa_supplicant wpa_supplicant/events.c, src/rsn_supp/wpa.c(4단계 핸드셰이크), src/rsn_supp/wpa_ft.c(FT) · 프레임 종류: 7장

로밍: 언제 갈아탈까

와이파이에서 로밍은 단말이 결정한다. AP는 “나가 줄래?”라고 권할 수는 있어도 붙잡거나 넘길 수 없다. 단말은 연결 중에 가끔 배경 스캔을 하고, 같은 SSID의 다른 BSS가 충분히 좋아 보이면 옮긴다. “충분히”가 어느 정도인지가 핵심이다. 리눅스와 안드로이드가 쓰는 wpa_supplicant의 규칙은 대략 이렇다.

규칙만 보면 합리적이지만, 걸어가며 신호가 서서히 나빠지는 상황에서는 결과가 기대와 다르다. 아래에서 직접 걸어 보자.

로밍 판단: wpa_supplicant wpa_supplicant/events.c의 wpa_supplicant_need_to_roam_within_ess()(min_diff 표, GREAT_SNR = 25는 scan.h) · 배경 스캔: wpa_supplicant/bgscan_simple.c, 설정 예 bgscan="simple:30:-45:300"(wpa_supplicant.conf)

SIMULATOR

복도를 걸으며 로밍하기

갈아탄 위치—
갈아타기 직전 신호—
−75 dBm 아래로 버틴 시간—
그래프: 공유기 1(왼쪽) 옆에서 공유기 2(오른쪽)까지 초속 1 m로 걸을 때 두 공유기의 신호. 굵은 선 = 연결된 공유기, 아래 눈금 = 배경 스캔 시각. 해볼 것: ① 기본값(40 m)에서는 중간 지점 20 m를 한참 지난 약 29 m에서야 갈아탄다. 신호가 −70 dBm(SNR 25 dB)보다 나빠질 때까지는 후보가 아무리 강해도 머물기 때문이다. 이것이 “끈적한 단말”이다. ② 짧은 스캔 간격을 30초로 늘리면 다음 스캔 전에 복도 끝에 닿아 끝까지 옮기지 않을 수도 있다. ③ 802.11v를 켜면 AP가 −67 dBm에서 권해 약 22 m에서 옮긴다. ④ 공유기 사이를 15 m로 줄이면 신호가 늘 좋아 아예 옮기지 않는다(그래도 괜찮다). 배경 스캔은 신호가 기준 아래로 내려가는 순간 한 번 바로 하고, 그 뒤 짧은 간격으로 한다(bgscan simple의 신호 변화 알림). 모델: 송신 20 dBm, 1 m 손실 40 dB, 경로 손실 지수 3.5(벽 몇 개 있는 실내), 공유기 높이 차 2 m, 잡음 −95 dBm, 페이딩 없음. wpa_supplicant 규칙 중 처리량 추정·대역 점수 보정은 뺐다(두 공유기가 같은 대역·같은 사양이라 가정).

로밍을 빠르게: 802.11k·v·r

로밍은 세 부분으로 나뉜다. 어디로 갈지 찾기(스캔), 언제 갈지 정하기(판단), 옮겨 가기(재연결과 키 교환). 세 개정안이 하나씩 맡는다. 셋을 묶어 Wi-Fi Alliance는 “Voice-Enterprise”·“Agile Multiband” 같은 인증을 만들었다.

개정안줄이는 것방법
802.11k (무선 자원 측정)스캔 시간AP가 이웃 보고서(Neighbor Report)로 같은 ESS의 이웃 AP와 그 채널을 알려 준다. 단말은 전체 스캔(수 초) 대신 그 몇 채널만 본다.
802.11v (무선 네트워크 관리)판단 지연AP가 BSS 전환 관리 요청(BTM Request)으로 “이 AP로 옮겨 달라”고 권한다. 따를지는 단말이 정한다. 위 시뮬레이터의 체크 상자.
802.11r (빠른 BSS 전환, FT)옮기는 시간처음 연결할 때 만든 키 계층을 같은 이동 도메인의 AP들이 나눠 가져, 옮길 때 인증·연결 프레임 안에서 키 교환을 끝낸다. 4단계 핸드셰이크와(엔터프라이즈라면) EAP가 빠진다.

hostapd 설정: rrm_neighbor_report(11k), bss_transition(11v), mobility_domain·ieee80211r(11r) — hostapd/hostapd.conf · 단말의 BTM 처리: wpa_supplicant wnm_sta.c

예측해 보기

메시 공유기 세 대를 설치했는데, 거실 휴대폰이 여전히 멀리 있는 현관 공유기에 붙어 있다. 공유기 앱에서 무엇을 켜면 가장 직접적인 도움이 될까?

단말이 “지금 신호도 그럭저럭 괜찮다”고 판단해 옮기지 않는 상황이다.

11r은 옮기는 “속도”를, 11k는 “찾는” 시간을 줄인다. 옮길지 말지 판단을 앞당기는 것은 11v의 권고다(단말이 따라야 효과가 있다). 많은 메시 제품은 여기에 더해 약한 단말의 연결 요청을 거절하는 방법도 쓴다.

핵심 정리

  1. 능동 스캔(프로브)은 채널당 약 60 ms, DFS 채널의 수동 스캔은 약 110 ms. 모든 대역 전체 스캔은 수 초가 걸린다. 6 GHz는 RNR과 PSC로 찾는다.
  2. 연결 = 인증(WPA2는 형식, WPA3는 SAE) → 연결(능력·AID) → 4단계 핸드셰이크(키) → DHCP(IP).
  3. 로밍은 단말이 정한다. wpa_supplicant는 SNR 25 dB 이상이면 옮기지 않고, 그 아래에서는 신호가 나쁠수록 작은 차이(5 → 1 dB)로도 옮긴다.
  4. 배경 스캔 간격과 이 규칙 때문에 단말은 중간 지점을 지나서야 옮기기 쉽다(끈적한 단말).
  5. 11k(이웃 보고서) = 찾기, 11v(BTM) = 권하기, 11r(FT) = 빨리 옮기기.

확인 퀴즈

DFS 채널에서 단말이 프로브 요청을 바로 보낼 수 없는 이유는?

그래서 DFS 채널은 수동 스캔(비컨 기다리기)을 하고 시간이 더 걸린다.

WPA2-Personal에서 비밀번호가 맞는지 실제로 확인되는 단계는?

메시지 2의 MIC가 맞는지로 AP가 단말의 비밀번호(PSK)를 확인한다(10장).

지금 신호가 −68 dBm(잡음 −95 dBm)이다. 후보 AP가 −60 dBm으로 보인다. wpa_supplicant 규칙으로는?

지금 SNR이 25 dB를 넘으면 차이와 상관없이 머문다(처리량 추정이 크게 좋아지는 경우 등 예외는 있다).

802.11r(FT)이 줄이는 것은?

키 계층을 미리 나눠 두고 인증·재연결 프레임 안에서 키 교환을 끝낸다.