Chapter 12

메시와 사물 인터넷

사무실 천장의 조명 300개를 벽 스위치 하나로 한꺼번에 끄고 싶다. 스위치에서 가장 먼 조명까지는 40 m, 벽도 몇 개 있다. 2장의 링크 버짓으로는 한 번에 닿지 않는다. 대형 마트의 전자 가격표 5,000개를 밤사이 모두 바꾸고 싶다. 6장의 연결을 하나씩 맺으면 몇 시간이 걸리고 가격표의 배터리가 남아나지 않는다. 이 장에서는 블루투스가 일대일 연결을 넘어 많은 기기를 다루는 두 가지 방법을 본다. 기기들이 서로 소문을 전하는 메시, 그리고 하나의 송신기가 시간표를 짜서 수천 기기와 주고받는 5.4의 PAwR이다.

소문 퍼뜨리기: 관리된 플러딩

블루투스 메시(Bluetooth Mesh)는 Core 위에 얹힌 별도의 사양(Mesh Protocol)이다. 2017년 처음 나왔고, 기본 아이디어는 단순하다. 메시지를 광고 패킷에 실어 뿌리고(5장의 비연결 광고, 메시 메시지 전용 AD 구조), 그것을 들은 이웃 노드가 다시 뿌린다. 경로를 계산하지 않고 모두가 조금씩 중계하므로 이를 플러딩(flooding)이라 한다. 연결을 맺고 유지할 필요가 없어서 노드가 수백 개여도 구조가 단순하고, 노드 하나가 꺼져도 다른 길로 전해진다.

무작정 다시 뿌리면 메시지가 끝없이 돌며 공중을 가득 채운다(6장의 이더넷 브로드캐스트 폭풍과 같다). 그래서 “관리된” 플러딩이다.

카페의 소문

카페 한쪽 끝에서 누가 “3번 테이블 손님, 주문 나왔어요!”라고 외친다. 반대쪽 끝까지는 안 들린다. 그래서 중간중간 앉은 몇몇 손님(릴레이)이 들은 말을 한 번씩만 다시 외쳐 준다. 이미 들은 말은 다시 전하지 않고(캐시), 너무 멀리 퍼지지 않도록 “앞으로 다섯 번만 전해 주세요”라는 꼬리표(TTL)를 단다. 모두가 다 외치면 카페가 시끄러워 오히려 아무것도 안 들린다.

SIMULATOR

메시 플러딩: 릴레이와 TTL로 사무실 전체에 닿기

 
도달한 노드—
총 전송 횟수—
최대 홉—
캐시로 무시한 수신—
50 m × 30 m 사무실. 왼쪽 위 사각형이 스위치(출발지), 테두리 있는 점이 릴레이, 색은 메시지를 받은 홉 수(진할수록 늦게 받음), 회색은 못 받은 노드다. 해볼 것: ① 릴레이 0%에서는 스위치 주변만 받는다. ② 릴레이를 100%로 올리면 도달률은 조금 오르지만 전송 횟수가 크게 는다(공중 혼잡, 충돌 증가). 대개 20~40%면 충분하다. ③ TTL을 2~3으로 낮추면 먼 구석이 끊긴다. TTL은 건물 크기에 맞춰 정한다. 단순화: 원판 모양의 도달 거리, 충돌·손실 없음, 노드는 받은 즉시 한 번 중계(실제로는 무작위 지연과 반복 전송을 쓴다).

노드의 역할과 주소: 발행과 구독

메시의 노드는 기능을 골라 켠다.

메시지는 특정 노드가 아니라 주소로 보낸다. 노드마다 고유한 유니캐스트 주소가 있고, 여럿이 함께 듣는 그룹 주소가 있다. 스위치는 “3층 회의실 조명” 그룹 주소로 발행(publish)하고, 조명들은 그 그룹을 구독(subscribe)한다. 조명을 새로 달면 그 조명이 그룹을 구독하게 설정하기만 하면 되고, 스위치는 바꿀 필요가 없다.

스위치발행 → 그룹 주소 릴레이TTL − 1 그룹 "3층 회의실 조명"을 구독 조명 조명 조명 새것 구독만 추가, 스위치는 그대로 프렌드메시지를 맡아 둠 저전력 노드가끔 깨어 "내 것?" 휴대폰 GATT 프록시GATT ↔ 메시 메시지는 네트워크 키로, 다시 애플리케이션 키로 암호화된다 → 릴레이는 전달만 하고 내용은 못 본다
그림 12-1. 메시 노드의 역할과 주소. 스위치는 특정 조명이 아니라 그룹 주소로 발행하고, 그 그룹을 구독한 조명들이 받는다. 릴레이는 TTL을 줄이며 다시 퍼뜨리고, 프록시는 메시 기능이 없는 휴대폰을 GATT 연결로 잇는다. 프렌드는 저전력 노드 앞으로 온 메시지를 맡아 두었다가 건넨다. 이 역할과 주소 규칙은 Core 밖의 Mesh Protocol 사양에 있다.

새 기기를 메시에 들이는 과정은 프로비저닝이다. 휴대폰 같은 프로비저너가 기기와 ECDH(8장)로 키를 맺고 네트워크 키와 주소를 건넨다. 메시의 모든 메시지는 네트워크 키로 암호화되고 애플리케이션 키로 한 번 더 암호화되므로, 중계 노드는 메시지를 전달하되 내용(예: 도어락 명령)은 볼 수 없게 할 수 있다.

메시의 플러딩·TTL·역할·프로비저닝·키는 Core 밖의 Mesh Protocol 사양에 있다. 메시가 쓰는 Core 기능: 비연결 광고와 AD 구조([Vol 3] Part C §11), GATT([Vol 3] Part G), ECDH와 AES-CMAC([Vol 3] Part H §2.2)

Matter와 블루투스

스마트홈 표준 Matter는 기기가 Wi-Fi나 Thread로 동작하지만, 처음 설정할 때(커미셔닝) 휴대폰과 기기 사이의 통로로 블루투스 LE를 쓰는 경우가 많다. 아직 네트워크에 붙지 않은 기기도 LE 광고로 “설정 대기 중”을 알릴 수 있고, 휴대폰은 거의 모두 LE를 지원하기 때문이다. 블루투스는 여기서 메시가 아니라 5~7장의 광고·연결·GATT로 일한다.

5.4의 PAwR: 시간표로 수천 기기와 주고받기

전자 가격표(ESL)는 메시와 반대 문제다. 가격표끼리는 이야기할 필요가 없고, 천장의 송신기 하나가 수천 개에게 각자 다른 명령(“이 가격으로 바꿔”)을 보내고, 결과(“바꿨음, 배터리 70%”)를 받아야 한다. 연결을 수천 개 유지할 수는 없고, 그냥 방송하면 응답을 받을 수 없다.

5.4의 응답 있는 주기적 광고(PAwR, Periodic Advertising with Responses)는 5장의 주기적 광고에 서브이벤트와 응답 슬롯을 더했다.

PAwR 간격 7.5 ms ~ 81.91875 s, 서브이벤트 간격 7.5 ~ 318.75 ms, 최대 128 서브이벤트, 응답 슬롯: [Vol 6] Part B §4.4.2.2.4 · 서브이벤트 채널은 알고리즘 #2(paEventCounter ⊕ paSubEventCounter): §4.4.2.1 · 5.4 새 기능: [Vol 1] Part C §13.1 · 전자 가격표 프로파일(ESL)은 Core 밖

CALCULATOR

가격표 5,000개 바꾸기: PAwR 시간표 계산

주기적 광고 간격—
간격 한 번에 바꾸는 가격표—
전체 갱신 시간—
가격표가 깨어 있는 비율—
한 줄이 주기적 광고 간격 하나, 칸 하나가 서브이벤트다(진한 칸 = 명령 + 응답 슬롯). 가격표 하나는 자기 서브이벤트만 듣는다. 해볼 것: ① 서브이벤트를 128개로, 응답 슬롯을 10개로 두면 간격 한 번에 1,280개를 바꾼다. 5,000개는 간격 네 번이면 된다. ② 서브이벤트 간격을 늘리면 간격 전체가 길어져 갱신은 느려지지만 가격표가 깨는 비율(배터리)은 그대로다. 가격표는 간격마다 한 서브이벤트만 듣기 때문이다. 가정: 응답 슬롯 하나 = 가격표 하나의 갱신(명령은 서브이벤트 패킷에 함께 실림), 손실 없음. 가격표가 깨어 있는 시간은 서브이벤트당 약 3 ms로 잡았다.
예측해 보기

같은 일을 블루투스 메시로 하면 어떨까? 가격표 5,000개가 모두 메시 노드라면 무엇이 가장 문제일까?

메시는 메시지가 플러딩으로 퍼지고, 노드가 중계하려면 늘 듣고 있어야 한다.

메시는 “여럿이 같은 명령을 받는” 조명 제어에 강하고, 각자 다른 데이터를 많이 받는 일에는 약하다. PAwR은 중앙의 시간표로 각자에게 짧게 말해 배터리와 공중을 모두 아낀다. 문제에 맞는 구조를 고르는 것이 설계다(14장).

핵심 정리

  1. 블루투스 메시(Core 밖의 Mesh Protocol)는 연결 없이 광고 패킷으로 메시지를 뿌리고 이웃이 다시 뿌리는 관리된 플러딩이다. TTL(7비트)과 메시지 캐시가 폭주를 막고, 일부 노드만 릴레이를 켠다.
  2. 역할: 릴레이, 프록시(GATT로 휴대폰 연결), 프렌드–저전력 노드(대신 받아 두기). 메시지는 유니캐스트·그룹 주소로 발행·구독한다. 프로비저닝은 ECDH, 메시지는 네트워크 키·애플리케이션 키로 두 번 암호화한다.
  3. 릴레이와 TTL은 도달률과 전송 횟수(혼잡)의 교환이다.
  4. 5.4의 PAwR은 주기적 광고 간격을 최대 128 서브이벤트(간격 7.5~318.75 ms)로 나누고 응답 슬롯을 두어, 송신기 하나가 수천 기기에게 각자 명령을 보내고 답을 받는다. 각 기기는 자기 서브이벤트만 깨어 듣는다.

확인 퀴즈

메시 메시지가 노드 사이를 끝없이 도는 것을 막는 두 장치는?

TTL은 홉 수를 제한하고, 캐시는 이미 본 메시지를 다시 중계하지 않게 한다.

모든 노드에서 릴레이를 켜면 생기는 일로 가장 적절한 것은?

릴레이가 충분히 촘촘하면 더 늘려도 도달률은 거의 그대로고 전송만 는다. 메시 설계의 핵심은 필요한 만큼만 릴레이를 켜는 것이다.

배터리로 동작하는 메시 센서가 자기 앞으로 온 메시지를 놓치지 않는 방법은?

프렌드십은 저전력 노드가 잠을 자면서도 메시에 속할 수 있게 해 준다. 릴레이는 오히려 늘 들어야 하므로 배터리 기기에 맞지 않는다.

Core 6.3에서 PAwR 주기적 광고 간격 하나에 둘 수 있는 서브이벤트의 최대 수는?

“Up to 128 subevents can be used in a Periodic Advertising Interval”([Vol 6] Part B §4.4.2.2.4). 31은 BIG의 최대 BIS 수, 37은 범용 채널 수다.

건물의 조명 300개를 스위치 하나로 동시에 켜는 일에 더 잘 맞는 구조는?

같은 명령을 많은 기기가 받는 일, 그리고 한 번에 닿지 않는 넓은 공간에는 메시의 그룹 발행이 맞다.