본문 바로가기

IoT Communication/Bluetooth

블루투스 (Bluetooth) 프로토콜 (Protocol) 스택 (Stack)

 지난번 블루투스의 간단한 원리와 역사에 대해서 알아봤다. 앞으로는 아마 블루투스에 관한 자료들을 많이 포스팅할 것 같아서 기본 개념부터 차근차근 하나씩 올려볼까 한다. 오늘은 블루투스의 스택에 대해서 올려보고자 한다. 앞으로 블루투스 개발에 대해서 올릴 건데 자주 등장하는 개념일 것이다. 일단 프로토콜이란 '디바이스 간에 데이터를 송수신하기 위한 하나의 약속'이라고 정의된다. 이러한 프로토콜에 따라 통신 시스템의 성능을 좌우하게 된다. 통신에 대해서 공부를 해봤다면 OSI 7 Layer, TCP/IP 스택에 대해서 공부를 해봤을 것이다. 오늘은 이러한 블루투스의 프로토콜 스택에 대해서 알아보도록 하겠다.

 

 

1. 블루투스 장치의 구분

 

 일반적으로 블루투스!라고 하면 Bluetooth Classic부터 Bluetooth Low Energy (BLE) 까지를 모두 포함한다. 이 말은 블루투스의 종류는 하나가 아니라  개념적으로 3가지로 나뉠 수 있다. Bluetooth Classic (BLE 이전까지 사용되던 표준), Bluetooth Smart Ready 그리고 우리가 아는 BLE라 부르는 Bluetooth Low Energy (블루투스 4.0에 도입)가 존재한다. 아지만 나는 현재 BLE 개발만 담당하기 때문에 다른 거는 재껴두고 일단 BLE의 스택에 대해서 설명을 하려고 한다. 


블루투스 개념적 차이


 일단 각각의 특징만 간단히 알아보도록 하겠다. 

 

  • 블루투스 클래식 (Classic)
    • BLE 이전의 스펙을 사용하는 기기를 지칭하며 멀티미디어, 대용량 텍스트 등을 다루는 장치
  • 블루투스 스마트 레디 (Classic and Smart)
    • 블루투스 클래식과 BLE 모두 지원하는 장치를 말하며 핸드폰이나 PC 등이 해당
  • 블루투스 스마트 (BLE)
    • BLE 연결만 지원하는 장치를 말하며 저전력으로 구동되어 소량의 데이터만을 송수신하는 장치가 해당

 

2. 블루투스 프로토콜 스택

 

BLE Stack (출처: intsain.com/w/?p=322 )

 

 위의 그림이 우리가 이번 포스팅에서 알아보고자 하는 BLE Stack이다. Application Layer를 제외하면 총 8개의 Stack이 존재함을 알 수 있다. 앞으로의 나오는 내용은 그림의 출처 부분에서 공부한 내용으로 내용이 거의 유사하다..... 

 가장 크게 Controller와 Host로 나뉠 수 있다. HCI를 기준으로 아래는 'HCI Bottom'이라 불리고 위를 'HCI Top'라 말한다. 두 개의 HCI Top과 HCI Bottom 사이는 물리 링크인 UART, USB, PCMCIA 등의 인터페이스로 연결된다. 일단 간단하게 각각의 Layer를 설명하고 각 레이어마다의 설명을 들어가도록 하겠다.

 

- Physical: 2.4 GHz ISM 대역에서 1 Mbps의 속도로 패킷 송수신 역할 (실제 Bluetooth Analog Signal과 통신할 수 있는 회로가 구성되어 있음)

- LL (Link Layer): 5가지의 RF 상태 제어 (standby, advertising, scanning, initiating, connected) 및 디바이스의 Role 정의

- HCI (Host Controller Interface): Host 영역과 Controller 영역의 Interface 역할

- L2CAP (Logical Link Control and Adaptation Protocol): 데이터 encapulation service 제공

- SM (Security Manager): paring and key distributuiion 방법 정의 및 인증과 보안에 사용

- ATT (Attribute Protocol): 다른 기기로 'attribute'라는 데이터 노출 및 데이터 교환을 위한 클라이언트, 서버 프로토콜 정의

- GAP (Generic Access Protocl): 장치 간의 paring과 bonding 사용을 통해 장치 간 인터페이스 역할

- GATT (Generic Attribute Profile): ATT를 이용하는 sub-procedure를 정의하는 프레임워크, ATT 영역에서 읽어 들인 서비스의 기능 수행

 

 이제 각 레이어의 자세한 역할에 대해서 알아보도록 하겠다!!!!

 

3 Physical Layer

 

아래의 그림과 같이 블루투스에서는 총 40개의 채널로 나누어 통신을 하며, 3개의 채널을 제외한 37개의 채널을 데이터 채널로 활용하며 주변 채널 간섭을 피하기 위해 주파수 호핑 방식을 사용한다.

 

- 2.4 GHz 영역에서 ISM Band 사용하며, 2 MHz 간격으로 총 40개의 채널을 사용

- 3개의 (37, 38, 39) Advertising 채널과 나머지 37개의 Data 채널을 사용

- 같은 ISM Band를 사용하는 wifi와의 간섭을 피하기 위해 주파수 호핑 방식 사용

 

 

4 Link Layer

 

 Link Layer는 하드웨어와 소프트웨어 조합으로 구성되어 있으며, 하드웨어 단에서는 Preamble, Access Address, CRC, AES 등이 처리되고 소프트웨어 단에서는 디바이스의 연결 상태를 관리한다. 가장 중요한 건 디바이스의 Role을 정의하고 이에 따라 변경되는 State를 가지고 있다.

 Connection 전의 역할 (advertiser, scanner)과 Connection 후의 역할인 (Master, Slave)로 분류된다

 

Role

 

  • Master : 연결을 시도하고, 연결 후에 전체 connection을 관리하는 역할.
  • Slave : Master의 연결 요청을 받고, Master의 timing 규약을 따르는 역할.
  • Advertiser : Advertising Packet을 보내는 역할.
  • Scanner : Advertising Packet을 Scanning 하는 역할. Scanner는 아래와 같은 2가지 Scanning 모드가 있다.
  • Passive Scanning : Scanner는 Advertising Packet을 받고 이에 대해 따로 응답을 보내지 않는다. 따라서 해당 Packet을 보낸 Advertiser는 Scanner가 Packet을 수신했는지에 대해서 알지 못한다.
  • Active Scanning : Advertising Packet을 받은 Scanner는 Advertiser에게 추가적인 데이터를 요구하기 위해 *Scan Request라는 것을 보낸다. 이를 받은 Advertiser는 *Scan Response로 응답한다.

 

State

 

 Link Layer는 5가지의 RF 상태 제어가 가능하다고 말했었다. 각 디바이스는 서로 연결이 되는 과정에서 이 State를 변화시키며, 각 State의 내용은 아래와 같다.

  • Standby State : Signal Packet을 보내지도, 받지도 않는 상태.
  • Advertising State : Advertising Packet을 보내고, 해당 Advertising Packet에 대한 상대 디바이스의 Response를 받을 수 있고 이에 응답할 수 있는 상태.
  • Scanning State : Advertising Channel에서 Scaning 하고 있는 상태.
  • Initiating State : Advertiser의 Connectable Advertising Packet을 받고 난 후 Connetion Request를 보내는 상태.
  • Connection State : Connection 이후의 상태.

 

5. GAP (Generic Access Profile)

 

 GAP 역할은 크게 Broadcaster, Observer, Peripheral, Central로 나뉠 수 있다. GAP에 대해서 간단히 설명하자면 GAP는 서로 다른 제조사가 만든 BLE 디바이스들끼리 서로 호환되어 통신할 수 있게 해주는 주춧돌 역할을 한다. 어떻게 디바이스가 서로를 인지하고 데이터를 advertising 하고 connection을 맺을지에 대한 프레임워크를 제공한다. (GAP는 최상위 control layer라고도 불린다)

 

Role

 

  • Broadcaster : Link Layer에서 Advertiser 역할에 상응한다. 주기적으로 Advertising Packet을 보낸다. 예를 들면, 온도센서는 온도 데이터를 자신과 연결된 디바이스에게 일정 주기로 보낸다.
  • Observer : Link Layer에서 Scanner 역할에 상응한다. Broadcaster가 뿌리는 Advertising Packet에서 data를 얻는다. 온도센서로부터 온도 데이터를 받아서 디스플레이에 나타내는 태블릿 컴퓨터의 역할이다.
  • Central : Link Layer에서 Master 역할과 상응한다. Central 역할은 다른 디바이스의 Advertising Packet을 듣고 Connection을 시작할 때 시작된다. 좋은 성능의 CPU를 가지고 있는 스마트폰이나, 태블릿 컴퓨터들의 역할이다.
  • Peripheral : Link Layer에서 Slave 역할과 상응한다. Advertising Packet을 보내서 Central 역할의 디바이스가 Connection을 시작할 수 있도록 하게끔 유도한다. 센서 기능이 달린 디바이스들의 역할이다.

 

 

하지만 여기서 계속 커넥션이라고 하는데 커넥션 과정에는 paring과 bonding 과정이 있다. 그럼 각각의 차이점은 무엇일까????

 

Paring과 Bonding

 

 아래의 그림은 Peripheral이 advertising packet을 일정한 간격으로 발생시키고 Central은 Observer (scan)을 통해 패킷을 읽어 들여 커넥션 요청을 하는 과정을 보여주며 여기서 페어링과 본딩에 대한 개념이 나온다.

 

 

Paring은 기기간의 영구 보안을 생성하는 것이 아니다. Paring은 Bonding을 허용하는 메커니즘
이다.
Paring은 security를 정보를(I/O 기능, requirement for 중간자 등) 교환하며, client로 부터 교환
요청이 시작된다.
한번 Paring 이 완료되면, temporary security key가 교환되고 연결이 encrypted 된다.
이러한 encrypted 연결에서는 long term key - IRK(Identity resolving key)가 교환되는데 이는 encryption key와 encryption
key의 연결이고 디지털 서명된 key이다.
Exact key들의 교환은 각각의 device의 security feature에 의해 결정된다.

Bonding은 Paring 된 이후에 long term key 교환하고 이를 나중에 사용하기 위해 보관하는 것

기기는 key를 보관하고 다음 연결에 사용된다. Key는 Bonding procedure를 통해 교환된다.
기기간에 Bonding 된 경우 security 정보를 교환하지 않고도 연결을 암호화할 수 있다.
bonding 된 기기간에는 "turn on encryption"를 보낼 수 있으며, 기기는 이미 저장된 key를 사용
하여 누군가 snooping 하여 key 교환을 볼 수 없으므로 통신 메시지는 Paring 할 때와 마찬가지로
decoding 될 수 있다.

 

[출처] BLE에서 Pairing 과 Bonding?|작성자 chodahi

 

 

6. GATT (General Attribute Profile)

 

 BLE 데이터 교환을 관리하는 GATT는 디바이스들이 데이터를 발견하고 읽고, 쓰는 것을 가능하게 하는 기조적인 데이터 모델과 절차를 정의한다. (BLE 기기간의 모든 통신은 GATT sub-procudure로 핸들링되므로 application, profiles는 GATT를 직접적으로 이용하게 된다.) 디바이스 간의 Low-level에서의 모든 인터렉션을 정의하는 GAP와는 달리 GATT는 오직 데이터의 포맷 및 전달에 대해서만 처리한다.

 GATT는 ATT를 이용하여 장치 사이에 데이터를 전송하는 방식을 결정하는 프레임 워이다. ATT는 Service와 Characteristic이라는 개념을 사용하여 어떤 데이터 'attribute'를 다른 장치에게 보여주도록 하며, 이때 어트리뷰트를 보여주는 장치를 서버라고 하고, 보는 장치를 클라이언트라고 한다. 

 

Role

 

  • Client (Master): Central 역할을 했던 장치에서 Client역할을 하며, 연결 과정에서 연결 간격을 조정하고 Service 항목을 통해 데이터 요청의 기능을 수행
  • Server (Slave): Peripheral 역할을 했던 장치에서 Server역할을 하며, 연결 과정에서 초기 연결 간격을 명시하며 Client에서 보낸 연결 간격 조정 값의 적용 여부를 판단하고 Client의 데이터 요청에 대한 응답 기능을 수행

 

 

 

 

https://igotit.tistory.com/entry/BLE-Protocol-Stack-Bluetooth-Low-Energy

 

BLE Protocol Stack - Bluetooth Low Energy. GAP, GATT, Profile, Service, Characteristic

개요 블루투스 스펙 4.0, 4.1, 4.2 에서는 이전 스펙들에서의 BR/EDR 에 추가로 Bluetooth Low Energy (BLE) 가 추가되었다. - BR/EDR : Basic Rate/Enhanced Data Rate BLE system 은 저전력으로 한번에 극히 작..

igotit.tistory.com

 

https://blog-kr.zoyi.co/bluetooth-low-energy-ble/

 

Bluetooth Low Energy(BLE) 파헤치기

1. What is BLE? 스마트폰이 출시되어 대중화가 될 무렵, ‘스마트’한 개념의 밴드, 워치, 글래스 등이 출시되면서 웨어러블 디바이스 시장이 태동하기 시작했다. 그리고, 2015년 상반기, 애플워치의 등장으로 작은 생태계를 이루고 있던 웨어러블 디바이스들이 다시 한번 각광을 받게 되었다. 각기 생긴 모습은 다르지만 이들의 공통점은 스마트폰과 연동되어 작동한다는 것이었다. 과거부터 기기들간의

blog-kr.zoyi.co