주파수 도약과 공존
거실에서 노트북은 2.4 GHz Wi-Fi로 영상을 내려받고, 같은 휴대폰이 블루투스로 이어폰에 음악을 보낸다. 두 신호는 같은 주파수 대역을 쓰는데도 음악은 끊기지 않고 영상도 멈추지 않는다. 같은 방에 블루투스 기기가 열 개, 스무 개가 있어도 마찬가지다. 비결은 블루투스가 한 채널에 머물지 않는다는 데 있다. 이 장에서는 블루투스가 언제, 어느 채널로, 어떤 규칙에 따라 옮겨 가는지, 그리고 시끄러운 채널을 어떻게 알아내 피하는지 따라간다.
- 주파수 도약이 간섭과 다중 경로 페이딩을 동시에 줄이는 원리를 확률로 설명한다.
- 클래식(BR/EDR)의 625 µs 슬롯과 초당 1,600번 도약, 1.2에서 추가된 적응형 주파수 도약(AFH)과 최소 20채널 규칙을 안다.
- LE의 채널 맵(최소 2채널)과 채널 선택 알고리즘 #1(더하기 규칙)·#2(의사 난수)를 직접 계산하고, 사양의 샘플 데이터와 맞춰 본다.
- Wi-Fi 1·6·11번 채널이 블루투스 채널 어디를 덮는지 알고, 한 기기 안에서 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슬롯짜리 긴 패킷은 그동안 한 채널에 머문다.
도약 순서는 센트럴의 블루투스 주소와 시계로 정해진다. 같은 연결(피코넷)의 기기는 센트럴의 주소와 시계를 알기 때문에 다음 채널을 똑같이 계산할 수 있고, 다른 피코넷은 다른 순서를 따른다.
적응형 주파수 도약 (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가 쓰는 채널은 일정 비율의 시간 동안 막혀 있다고 본다.
Wi-Fi 옆에서 도약하기: 시간-주파수 지도
이웃 Wi-Fi 1·6·11번이 모두 시간의 50%씩 말한다. 무작위 도약하는 블루투스의 패킷 손실률은 대략 얼마일까?
시뮬레이터에서 “무작위 도약”, “1·6·11번”, 50%로 맞추고 기대 손실률을 보자. 2장의 대역 지도에서 Wi-Fi 세 채널이 LE 채널을 몇 개나 덮는지도 떠올려 보자.
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를 정하고, 이벤트마다 그만큼 더한다.
알고리즘 #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
채널 선택 알고리즘 #1·#2 계산기 (사양 샘플 데이터로 검증)
공존: 한 휴대폰 안의 Wi-Fi와 블루투스
지금까지는 남의 Wi-Fi였다. 더 까다로운 경우는 같은 휴대폰 안의 Wi-Fi와 블루투스다. 요즘 휴대폰은 Wi-Fi와 블루투스를 칩 하나(콤보 칩)에 넣고 안테나도 나눠 쓰는 경우가 많다. 안테나가 몇 cm 떨어져 있어도, 한쪽이 +15 dBm으로 보내는 순간 다른 쪽 수신기에는 수신 감도보다 100 dB 가까이 센 신호가 들어온다. 이때는 도약으로도 피할 수 없다. 해결책은 시간을 나눠 쓰는 것이다.
- 패킷 교통 정리(PTA, Packet Traffic Arbitration): 칩 안의 중재기가 매 순간 누가 말할지 정한다. 블루투스 오디오 패킷처럼 늦으면 안 되는 것을 먼저 보내고, Wi-Fi는 그 틈을 쓴다.
- AFH 연동: Wi-Fi가 지금 쓰는 2.4 GHz 채널을 블루투스 쪽에 알려 그 범위를 채널 맵에서 뺀다. 사양은 호스트가 컨트롤러에게 나쁜 채널을 알려 주는 명령(HCI_LE_Set_Host_Channel_Classification)을 둔다.
- 다른 무선과의 신호: LTE·5G 모뎀의 일부 대역(예: 2.3 GHz, 2.5~2.6 GHz)은 2.4 GHz 바로 옆이다. Core 사양 Vol 7은 블루투스 칩과 셀룰러 모뎀이 “지금 송신 중” 같은 신호를 주고받는 공존 인터페이스를 정의한다.
집 공유기가 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)
핵심 정리
- 주파수 도약은 나쁜 채널(간섭·페이딩)의 피해를 짧고 드문 손해로 바꾼다. 재전송 한 번이면 대부분 복구되고, 여러 연결이 조정 없이 공존한다.
- 클래식은 625 µs 슬롯, 1슬롯 패킷이면 초당 1,600번 79채널을 도약한다. 1.2의 AFH는 나쁜 채널을 빼되 최소 20채널은 쓴다.
- LE는 연결 이벤트마다 범용 채널 37개 중 하나로 옮긴다. AFH는 필수이고 채널 맵은 최소 2채널이면 된다.
- 채널 선택 알고리즘 #1은 (이전 + hopIncrement) mod 37의 규칙적인 걸음, #2(5.0)는 접근 주소와 이벤트 카운터로 만든 의사 난수다. #2는 예측하기 어렵고 고르게 퍼지며, 카운터만으로 아무 이벤트의 채널이나 계산할 수 있다.
- Wi-Fi 20 MHz 하나는 LE 채널 9~10개를 덮는다. 같은 기기 안의 Wi-Fi와 블루투스는 도약으로 피할 수 없어 시간을 나눠 쓰고(PTA), Wi-Fi 채널을 채널 맵에서 뺀다.
확인 퀴즈
클래식 블루투스가 1슬롯 패킷만 주고받을 때 1초에 도약하는 횟수는?
AFH가 있어도 클래식 블루투스가 최소 20개 채널은 쓰도록 하는 이유로 가장 적절한 것은?
LE 연결에서 채널 선택 알고리즘 #1, hopIncrement = 7, 모든 채널 사용. 이벤트 0의 채널은?
채널 선택 알고리즘 #2가 #1보다 나은 점이 아닌 것은?
같은 휴대폰의 Wi-Fi(2.4 GHz)와 블루투스가 서로를 방해하는 문제를 주파수 도약만으로 해결하기 어려운 이유는?
LE의 채널 맵에 대한 설명으로 옳은 것은?