Chapter 04

주파수 도약과 공존

거실에서 노트북은 2.4 GHz Wi-Fi로 영상을 내려받고, 같은 휴대폰이 블루투스로 이어폰에 음악을 보낸다. 두 신호는 같은 주파수 대역을 쓰는데도 음악은 끊기지 않고 영상도 멈추지 않는다. 같은 방에 블루투스 기기가 열 개, 스무 개가 있어도 마찬가지다. 비결은 블루투스가 한 채널에 머물지 않는다는 데 있다. 이 장에서는 블루투스가 언제, 어느 채널로, 어떤 규칙에 따라 옮겨 가는지, 그리고 시끄러운 채널을 어떻게 알아내 피하는지 따라간다.

왜 옮겨 다니나: 한 테이블에 앉으면 생기는 일

한 채널에만 머무는 무선 링크를 생각해 보자. 그 채널이 마침 옆집 Wi-Fi와 겹치면 Wi-Fi가 말하는 동안 블루투스 패킷은 계속 깨진다. 2장에서 본 다중 경로 페이딩의 골짜기에 빠져도 그 위치에 있는 한 계속 끊긴다. 재수 없는 채널을 고르면 계속 재수가 없다.

채널을 계속 바꾸면 이야기가 달라진다. 79개(또는 37개) 채널 가운데 Wi-Fi가 덮는 것이 20개라면, 무작위로 고른 다음 채널이 막혀 있을 확률은 20/79, 약 25%다. 하지만 그 손해는 그 패킷 하나로 끝나고, 다음 패킷은 다른 채널에서 성공할 가능성이 높다. 재전송 한 번이면 대부분 복구된다. 나쁜 채널의 피해를 모든 시간에 고르게 나눠, 큰 사고를 작은 손해 여러 번으로 바꾸는 것이다. 이것이 주파수 도약(frequency hopping)이다.

테이블을 옮겨 다니는 약속

시끄러운 카페에서 둘이 대화한다. 한 테이블에만 앉아 있으면 옆 테이블의 단체 손님(Wi-Fi)이 떠드는 동안 아무 말도 들리지 않는다. 그래서 두 사람은 “말 한마디 할 때마다 정해진 순서로 테이블을 옮기자”고 약속한다. 어떤 테이블은 시끄럽지만 다음 테이블은 조용하다. 엿듣는 사람도 다음 테이블이 어디인지 모르면 대화를 따라가기 어렵다. 그리고 단체 손님이 늘 앉는 테이블을 알게 되면, 아예 그 테이블들을 순서에서 빼고 옮겨 다닌다(AFH).

도약에는 숨은 장점이 하나 더 있다. 같은 방에 블루투스 연결이 여럿 있어도 각자 다른 순서로 도약하므로, 두 연결이 같은 순간 같은 채널에 있을 확률은 낮다. 특별한 조정 없이도 수십 개 연결이 한 공간에서 산다. 다만 기기 수가 늘수록 이 우연한 충돌도 늘어난다.

클래식: 625 µs마다 한 번, 79개 채널

클래식 블루투스의 시간은 625 µs 슬롯으로 나뉜다. 연결을 이끄는 센트럴(예전 용어로 마스터)이 짝수 슬롯에서 보내고, 페리페럴은 그다음 홀수 슬롯에서 답한다. 패킷이 한 슬롯짜리면 슬롯마다 채널을 바꾸므로 1초에 1/0.000625 = 1,600번 도약한다. 3슬롯, 5슬롯짜리 긴 패킷은 그동안 한 채널에 머문다.

도약 순서는 센트럴의 블루투스 주소와 시계로 정해진다. 같은 연결(피코넷)의 기기는 센트럴의 주소와 시계를 알기 때문에 다음 채널을 똑같이 계산할 수 있고, 다른 피코넷은 다른 순서를 따른다.

주파수(채널) 시간 → (한 칸 = 625 µs 슬롯) Wi-Fi 6번 채널이 차지한 띠 (약 20 MHz) 3슬롯 패킷 충돌
그림 4-1. 클래식 블루투스의 시간-주파수 지도. 파란 칸이 슬롯마다 다른 채널로 간 패킷이고, 주황 띠는 Wi-Fi가 계속 쓰는 주파수다. 도약 순서가 우연히 Wi-Fi 띠에 들어간 패킷(빨강)만 깨지고, 다음 슬롯은 다른 채널에서 성공한다.

적응형 주파수 도약 (AFH)

2000년대 초 802.11b/g Wi-Fi가 퍼지자 무작위 도약만으로는 손해가 커졌다. Wi-Fi 하나가 20 MHz, 즉 클래식 채널 79개 중 20개 남짓을 막고, 공유기 세 대가 1·6·11번을 쓰면 60개 가까이가 시끄러워진다. 그래서 1.2(2003)에 AFH(Adaptive Frequency Hopping)가 들어왔다. 센트럴이 채널별로 패킷 오류율이나 잡음을 재서 나쁜 채널을 표시한 채널 맵을 만들고, 페리페럴에게 알린 뒤 둘 다 나쁜 채널을 빼고 도약한다. 단 너무 적은 채널로 도약하면 도약의 장점이 사라지고 규제(일부 지역의 도약 방식 요건)에도 걸리므로, 사양은 최소 20개 채널은 쓰도록 한다.

625 µs 슬롯: [Vol 2] Part B §2.2.3 · AFH 최소 채널 Nmin = 20: [Vol 2] Part B §2.3.1 · 1.2의 새 기능 AFH: [Vol 1] Part C §2.1

간섭 실험: 고정, 도약, 적응형 도약

세 방식이 Wi-Fi와 섞였을 때 얼마나 손해를 보는지 직접 비교해 보자. 시뮬레이터는 LE 연결(범용 채널 37개)을 기준으로, Wi-Fi가 쓰는 채널은 일정 비율의 시간 동안 막혀 있다고 본다.

SIMULATOR

Wi-Fi 옆에서 도약하기: 시간-주파수 지도

블루투스 방식
이웃 Wi-Fi (2.4 GHz)
패킷 손실 (이 화면)—
기대 손실률—
쓰는 채널 수—
연속 2번 이상 실패—
가로는 연결 이벤트(시간), 세로는 LE 범용 채널 0~36이다. 주황 칸은 Wi-Fi가 그 순간 말하고 있던 칸, 파랑은 성공한 패킷, 빨강은 Wi-Fi와 부딪혀 깨진 패킷이다. 해볼 것: ① “고정 채널”에서 채널 번호를 Wi-Fi 띠 안(예: 10)과 밖(예: 36)으로 옮겨 보자. 운에 따라 0%와 50%를 오간다. ② “무작위 도약”은 손실률이 Wi-Fi가 덮는 채널 비율 × 말하는 시간 비율로 수렴한다. ③ “적응형 도약”은 Wi-Fi 채널을 빼므로 손실이 거의 0이다. 연속 실패가 적다는 것이 오디오처럼 기다려 주지 않는 데이터에 특히 중요하다. 가정: Wi-Fi는 중심 ±10 MHz를 막고, 주어진 비율의 시간 동안 무작위로 말한다. 적응형 도약은 Wi-Fi 채널을 완벽히 알아냈다고 보았다.
예측해 보기

이웃 Wi-Fi 1·6·11번이 모두 시간의 50%씩 말한다. 무작위 도약하는 블루투스의 패킷 손실률은 대략 얼마일까?

시뮬레이터에서 “무작위 도약”, “1·6·11번”, 50%로 맞추고 기대 손실률을 보자. 2장의 대역 지도에서 Wi-Fi 세 채널이 LE 채널을 몇 개나 덮는지도 떠올려 보자.

Wi-Fi 하나(폭 약 20 MHz)는 2 MHz 간격의 LE 범용 채널 10개 안팎을 덮는다. 1·6·11번 세 개면 30개 안팎으로, 37개 중 약 80%다(LE 범용 채널이 쓰는 2,404~2,478 MHz의 대부분이 1·6·11번 띠 안에 있고, 비는 곳은 2,424 MHz, 2,448~2,450 MHz, 2,474~2,478 MHz 근처의 6개 남짓뿐이다). 그래서 막힐 확률 ≈ 0.8 × 50% ≈ 40%이고, 시뮬레이터의 기대 손실률은 31/37 × 50% = 41.9%다. “1/3쯤”은 Wi-Fi 채널이 셋뿐이라는 데서 오는 흔한 착각이다. 적응형 도약은 덮인 채널을 빼서 이 손해를 없앤다.

LE의 도약: 연결 이벤트마다 한 번

LE는 클래식처럼 슬롯마다 뛰지 않는다. 6장에서 보겠지만 LE 연결은 정해진 연결 간격마다 짧게 깨어나 이야기하는 연결 이벤트(connection event)로 이루어진다. LE는 연결 이벤트마다 한 번 채널을 바꾸고, 한 이벤트 안에서 주고받는 패킷들은 같은 채널을 쓴다. 광고 채널 37·38·39를 뺀 범용 채널 37개(0~36)가 도약 대상이다.

LE에서 AFH는 필수다. 센트럴은 범용 채널마다 “좋음·나쁨·알 수 없음”을 분류하고, 이를 바탕으로 쓸 채널(used)과 안 쓸 채널(unused)을 표시한 채널 맵(channel map)을 만든다. 채널 맵은 연결을 맺을 때(CONNECT_IND) 페리페럴에게 전달되고, 바뀌면 LL_CHANNEL_MAP_IND로 알린다. 사양이 요구하는 최소 사용 채널은 2개뿐이라 클래식보다 훨씬 공격적으로 나쁜 채널을 뺄 수 있다. 5.3부터는 페리페럴도 자기 쪽에서 본 채널 상태를 센트럴에게 보고할 수 있다(LL_CHANNEL_STATUS_IND).

범용 채널 AFH 필수, 채널 분류(unknown/bad/good), 최소 사용 채널 2개: [Vol 6] Part B §4.5.8.1 · 채널 맵 갱신 절차: [Vol 6] Part B §5.1.2

채널 선택 알고리즘 #1: 일정한 걸음

4.0부터 있던 방식이다. 연결을 맺을 때 5~16 사이의 무작위 수 hopIncrement를 정하고, 이벤트마다 그만큼 더한다.

unmappedChannel = (lastUnmappedChannel + hopIncrement) mod 37
결과가 쓰는 채널이면 그대로 쓴다. 안 쓰는 채널이면 remappingIndex = unmappedChannel mod (쓰는 채널 수)로 다시 계산해, 쓰는 채널을 오름차순으로 늘어놓은 표에서 고른다. 37은 소수라서 어떤 hopIncrement를 골라도 37번 만에 모든 채널을 한 번씩 거친다.

알고리즘 #1은 단순하지만 약점이 있다. 순서가 너무 규칙적이라 엿듣는 쪽이 두세 개의 채널만 보고도 다음 채널을 예측할 수 있고, 같은 hopIncrement를 고른 두 연결은 한번 부딪히면 계속 같이 움직인다. 또 안 쓰는 채널을 다시 매핑할 때 일부 채널에 몰리는 치우침이 생긴다.

채널 선택 알고리즘 #2: 의사 난수

5.0에서 추가된 방식이다. 연결마다 고유한 접근 주소(6장)에서 16비트 channelIdentifier를 만들고(위 16비트 XOR 아래 16비트), 이를 이벤트 카운터와 섞어 의사 난수 prn_e를 만든다. 섞는 방법은 8비트씩 비트 순서를 뒤집기(permutation)와 “17을 곱하고 더한 뒤 216으로 나눈 나머지”(MAM)를 세 번 반복하는 것이다. unmappedChannel = prn_e mod 37이고, 그 채널이 안 쓰는 채널이면 ⌊쓰는 채널 수 × prn_e ÷ 216⌋번째 쓰는 채널로 바꾼다. 카운터만 알면 어느 이벤트의 채널이든 바로 계산할 수 있어서, 주기적 광고와 등시성 채널(10장)처럼 많은 수신자가 따라가야 하는 곳에 쓰기 좋다.

알고리즘 #1(hopIncrement 5~16): [Vol 6] Part B §4.5.8.2 · 알고리즘 #2: [Vol 6] Part B §4.5.8.3 · 샘플 데이터(Table 3.1·3.2): [Vol 6] Part C §3

SIMULATOR

채널 선택 알고리즘 #1·#2 계산기 (사양 샘플 데이터로 검증)

알고리즘 #1 (hopIncrement ) · 이벤트 0부터 20개
알고리즘 #2 (접근 주소 , channelIdentifier ) · 이벤트 카운터 0부터 20개
채널 맵 미리 설정
접근 주소 (#2)
#1 다시 매핑된 비율—
#2 다시 매핑된 비율—
사양 샘플과 일치—
위 칸을 눌러 채널을 빼거나 넣어 보자(최소 2개). 주황 칸은 원래 계산된 채널이 안 쓰는 채널이라 다시 매핑된 경우다. 아래 그래프는 이벤트 3,700번 동안 각 채널이 쓰인 횟수(#1 파랑, #2 청록)다. 해볼 것: ① 37개 모두일 때 #1은 숫자가 일정한 걸음(hopIncrement)으로 증가하는 것이 눈에 보인다. #2는 불규칙하다. ② “사양 샘플 2”를 고르고 접근 주소를 샘플로 두면, #2의 이벤트 6·7·8이 사양 Table 3.2의 값(23, 9, 34)과 일치하는지 표시된다. 이 계산기는 사양의 절차를 그대로 구현했다. ③ Wi-Fi 채널을 뺀 맵에서 #1의 막대가 고르지 않은 것을 보자(다시 매핑이 일부 채널에 몰린다).

공존: 한 휴대폰 안의 Wi-Fi와 블루투스

지금까지는 남의 Wi-Fi였다. 더 까다로운 경우는 같은 휴대폰 안의 Wi-Fi와 블루투스다. 요즘 휴대폰은 Wi-Fi와 블루투스를 칩 하나(콤보 칩)에 넣고 안테나도 나눠 쓰는 경우가 많다. 안테나가 몇 cm 떨어져 있어도, 한쪽이 +15 dBm으로 보내는 순간 다른 쪽 수신기에는 수신 감도보다 100 dB 가까이 센 신호가 들어온다. 이때는 도약으로도 피할 수 없다. 해결책은 시간을 나눠 쓰는 것이다.

집에서 블루투스를 편하게 해 주는 법

집 공유기가 2.4 GHz와 5 GHz를 둘 다 지원한다면 휴대폰·노트북은 5 GHz(또는 6 GHz)에 붙이자. Wi-Fi가 2.4 GHz를 떠나면 블루투스는 채널 맵을 넓게 쓸 수 있고, 같은 칩 안의 시간 나누기도 줄어든다. 2.4 GHz를 꼭 써야 한다면 1·6·11번 중 하나로 고정하는 것이 이웃에게도 블루투스에게도 낫다.

이동통신 모뎀과의 표준 공존 신호(Vol 7), LTE TDD 프레임에 맞춘 시간표, 필터와 격리 계산, 칩 안의 중재는 13장 “공존”에서 자세히 다룬다.

호스트 채널 분류 명령: [Vol 4] Part E §7.8.19(HCI_LE_Set_Host_Channel_Classification) · 무선 공존 신호: [Vol 7] Part A(전송: Part B WCI-1, Part C WCI-2)

핵심 정리

  1. 주파수 도약은 나쁜 채널(간섭·페이딩)의 피해를 짧고 드문 손해로 바꾼다. 재전송 한 번이면 대부분 복구되고, 여러 연결이 조정 없이 공존한다.
  2. 클래식은 625 µs 슬롯, 1슬롯 패킷이면 초당 1,600번 79채널을 도약한다. 1.2의 AFH는 나쁜 채널을 빼되 최소 20채널은 쓴다.
  3. LE는 연결 이벤트마다 범용 채널 37개 중 하나로 옮긴다. AFH는 필수이고 채널 맵은 최소 2채널이면 된다.
  4. 채널 선택 알고리즘 #1은 (이전 + hopIncrement) mod 37의 규칙적인 걸음, #2(5.0)는 접근 주소와 이벤트 카운터로 만든 의사 난수다. #2는 예측하기 어렵고 고르게 퍼지며, 카운터만으로 아무 이벤트의 채널이나 계산할 수 있다.
  5. Wi-Fi 20 MHz 하나는 LE 채널 9~10개를 덮는다. 같은 기기 안의 Wi-Fi와 블루투스는 도약으로 피할 수 없어 시간을 나눠 쓰고(PTA), Wi-Fi 채널을 채널 맵에서 뺀다.

확인 퀴즈

클래식 블루투스가 1슬롯 패킷만 주고받을 때 1초에 도약하는 횟수는?

슬롯이 625 µs이므로 1 ÷ 0.000625 = 1,600. 3·5슬롯 패킷은 그동안 한 채널에 머물러 도약 횟수가 줄어든다.

AFH가 있어도 클래식 블루투스가 최소 20개 채널은 쓰도록 하는 이유로 가장 적절한 것은?

사양은 Nmin = 20을 정한다([Vol 2] Part B §2.3.1). LE는 이 하한이 2로 훨씬 낮다.

LE 연결에서 채널 선택 알고리즘 #1, hopIncrement = 7, 모든 채널 사용. 이벤트 0의 채널은?

첫 이벤트의 lastUnmappedChannel은 0이므로 (0 + 7) mod 37 = 7. 다음은 14, 21, 28, 35, 5(=42 mod 37)…

채널 선택 알고리즘 #2가 #1보다 나은 점이 아닌 것은?

어느 알고리즘이든 “어떤 채널을 쓸지”는 채널 맵이 정한다. 채널 맵을 만드는 방법(채널 분류)은 구현에 맡겨져 있다.

같은 휴대폰의 Wi-Fi(2.4 GHz)와 블루투스가 서로를 방해하는 문제를 주파수 도약만으로 해결하기 어려운 이유는?

가까운 송신기는 옆 채널이라도 수신기를 포화시킨다. 그래서 칩 안에서 시간을 나누는 중재(PTA)를 쓴다.

LE의 채널 맵에 대한 설명으로 옳은 것은?

센트럴이 정하고 CONNECT_IND로 전달하며, LL_CHANNEL_MAP_IND로 언제든 바꿀 수 있다. 페리페럴은 5.3부터 채널 상태를 보고할 수 있지만 결정은 센트럴이 한다.