티스토리 뷰

IT

[IT] BLE

DwEnn 2019. 1. 4. 10:47
728x90
반응형

BLE

  1. BLE ?

  2. BLE 의 연결 방식

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

  4. GAP(Generic Access Profile)

  5. GATT(Generic Attribute Profile)

  6. GATT 구조

  7. References

BLE ?

Bluetooth 4.0 이전에는 Master, Slave 관계를 형성해 통신하는 Bluetooth Classic 방식을 사용했었다.

하지만 이 방식은 배터리 소모량이 많아 불편함과 제약이 많았다.

2010년에 Bluetooth 표준으로 Bluetooth 4.0 이 나왔는데,

Classic 방식보다 훨신 적은 전력으로 비슷한 수준의 통신을 할 수 있게 되었다.

이를 BLE(Bluetooth Low Energy) 라고 부른다.

블루투스 장치의 구분

블루투스 통신을 사용하는 장치들은 3가지로 구분되지만, 개념적인 구분일 뿐이니 참고만 하면 된다.

  • Bluetooth Classic : BLE 이전의 스펙을 사용하는 기기를 지칭한다. 멀티미디어, 대용량 텍스트 등을 다루는 장치들이다.

  • Bluetooth Smart Ready : Bluetooth Classic 과 BLE 를 모두 지원하는 장치를 말한다. (듀얼모드) 핸드폰이나 PC, 태블릿 등이 해당되며, 보통 Bluetooth Smart Ready 마크를 붙여 해당 기능을 가지고 있음을 표시한다.

  • Bluetooth Smart : BLE 연결만 지원하는 장치를 말한다. (싱글모드) 저전력으로 구동되며 소량의 데이터를 생산하는 센서 장치가 여기에 해당한다.

BLE 의 연결 방식

BLE 의 연결 방식은 크게 2가지 이다.

Advertisde Mode

주로 자신의 존재를 알리거나, 적은 양의 User data를 보낼 때 사용한다.

  • Advertiser(Peripheral) : 일정한 주기로 신호를 방송하듯 주변에 뿌리는 디바이스.

  • Observer(Central) : Advertiser 에게 신호를 받기 위해 주기적으로 Scanning 을 하는 디바이스.

기존 Classic 방식은 Master 가 주변 Slave 에게 요청을 날리고, Slave 가 그에 응답한 뒤 페어링을 시도하는 방식이었다.

반면, BLE 는 Peripheral(Slave) 가 주변에 일정 간격으로 Advertise 를 하고,

Central(Master) 이 스캔에 성공함으로서 페어링을 하게 된다.

두 디바이스가 연결되면 Advertise Mode 는 종료되고 Connection Mode 로 1대1 통신을 하게 된다.

Advertise 방식은 말 그대로 signal 을 일방적으로 뿌리는 것이기 때문에 보안에 취약하다.

Connection Mode

양 방향 통신을 하거나, Advertise 만으로는 많은 양의 데이터를 주고 받을 수 없을 때 사용한다.

1대1 통신이다.

  • Peripheral(Slave) : 연결하기 위한 Advertise 신호를 주기적으로 보내다가, Central 디바이스가 연결 요청을 보내면, 이를 수락해 연결한다.

  • Central(Master) : 다른 디바이스의 Advertise 신호를 주기적으로 스캔하다가, 연결을 요청한다.

그럼 BLE 의 통신을 얘기하기 위해 블루투스 포로토콜 스택을 살펴보자.

블루투스 프로토콜 스택

프로토콜 스택(Protocol Stack)

일반적으로 통신을 하기 위해서는, 통신을 위한 규약인 Protocol 을 정의해야 한다.

이렇게 정의된 Protocol 들을 층층이 쌓아놓은 그룹이 Protocol Stack 이다.

Bluetooth Signal Packet 을 수신하거나 송신할 때 이 Protocol Stack 을 거치면서 Packet 들이 분석되거나 생성된다.

싱글 모드로 동작하는 Bluetooth Smart 장치(센서장치) 들은 아래와 같이 3개의 계층 구조를 이루며 동작한다.

  • Controller 계층 : 블루투스 기기의 물리적인 회로와 이를 제어하는 저레벨의 software를 지칭한다.

  • Host 계층 : 개발자가 직접 구현하는 부분은 아니다. 이미 이 계층을 위한 코드들은 칩 개발사에서 제공한다. 하지만 우리 입맛에 맞게 블루투스 기기의 동작 속성을 바꾸고, 블루투스 장치와 연결되는 PC-스마트 폰에 올라가는 어플리케이션 작성을 위해 Host 계층이 동작하는 방식을 알아야 한다. Host 계층 중에서도 GAPGATT 가 중요하다.

GAP(Generic Access Profile)

최상위 Control Layer

서로 다른 제조사가 만든 BLE 디바이스들끼리 서로 호환되어 통신할 수 있도록 프레임워크를 제공한다.

Advertising/Scanning 단계부터 Connection 이 완료되어 데이터 통신을 위한 준비가 끝날 때까지 BLE 장치가 취해야 할 Action 과 State 들을 정의한다.

GAP 에서는 BLE 장치가 서로 연동할 때 다음과 같은 5가지 관점으로 접근하여 각 관점에서 어떤 일을 해야 하는지 정의한다.

Role, Mode, Procedure, Security, Additional GAP Data Formats

GATT(Generic Attribute Profile)

최상위 Data Layer

디바이스 간에 Low-Level 에서의 모든 인터렉션을 정의하는 GAP 와는 달리, GATT 는 오직 data 의 format 및 전달에 대해서만 처리한다.

BLE 에서는 어떤 장치와 연결되더라도 일관된 방식으로 데이터를 주고 받을 수 있어야 하기 때문에, 데이터 형식(format) 과 동작방식(procedure) 을 추상화 했다.

Role

GATT 도 data 처리와 관련해서 다음과 같은 역할을 정의한다.

  • Client : Server 에게 Data 를 요청한다. 하지만 처음에는 Server 에 대해서 아는 것이 없기 때문에, Service Discovery 라는 것을 수행한다. 이후, Server 에서 전송된 Response, Indication, Notification 을 수신할 수 있다.

  • Server : Client 에게 Request 를 받으면 Response 를 보낸다. 또한 Client 가 사용할 수 있는 User data 를 생성하고 저장해놓는 역할을 한다.

GATT 구조

BLE 에서 사용하는 GATT 기반 동작구조는 Profile, Service, Characteristic 에 기초하여 위와 같은 수직 구조를 이룬다.

예 )

[운동 보조 기구 profile]

[움직임 측정 Service]

가속도 센서 값 characteristic

자이로 센서 값 characteristic

지자기 센서 값 characteristic

[신체 변화 감지 Service]

심박 측정 값 characteristic

체온 측정 값 characteristic

Profile

GATT server 역할을 하는 BLE 장치가 어떤 일을 하는 장치인지를 나타내는 개념적인 구분이다.

BLE 장치 자체가 profile 이라고 봐도 무방하다.

실제 Service discovery 동작을 하더라도 profile 정보는 오지 않는다.

Service

특정한 기능과 관련이 있는 데이터들의 집합이다. 서로를 구분하기 위해 고유한 UUID 값을 가지는데, 블루투스 표준에 정의된 Service 인 경우 이미 정의된 16bit UUID 값을 가진다.

Service 는 Primary Service, Secondary Service 두 종류가 있다.

  • Primary Service : GATT 에서 정의한 일반적인 서비스이다.

  • Secondary Service : 하나 이상의 Primary Service 에 의해 참조되면서 부가적인 기능을 추가해 주는 역할을 한다.

    거의 사용되지 않는다.

Characteristic

실질적인 데이터를 담고 관리한다. 센서장치가 Characteristic 에 설정된 값을 변경하면 GATT Client 가 read 요청을 보냈을 때 읽어가는 값도 변경된다. 혹은 GATT client 에서 characteristic 에 값을 쓸 수도 있다.

아래는 characteristic 의 구조이다.

  • Characteristic definition

    • Characteristic declaration : characteristic 을 설명하는 메타 데이터.

      • Characteristic properties

      • Characteristic Value Handle

      • Characteristic UUID

    • Characteristic value

    • Characteristic descriptor

Characteristic Properties 는 다음 값들을 가질 수 있다.

Broadcast, Read, Write without response, Write, Notify, Indicate 등

Characteristic Properties 를 통해 GATT client 는 어떤 데이터를 읽고 쓸 수 있는지 알 수 있다.

이 중 특이한 것은 Notify, Indicate 로, 다른 동작들은 GATT client 가 server 에 요청을 보내고 그에 대한 응답을 받는데 반해, Notify-Indicate 는 GATT server 가 먼저 데이터 변경 알림을 보내기 때문이다.

그래서 이 기능은 GATT client 가 사전에 이 기능을 사용하겠다고 통보해야 활성화 됩니다. 이때 Characteristic Descriptor 가 사용된다.

Descriptor 도 다양한 종류가 있으며, 이 중 CCCD(Client Characteristic Configuration Descriptor) 가 가장 많이 사용된다.

CCCD(Client Characteristic Configuration Descriptor)

Notify-Indicate 기능을 on/off 할 수 있는 descriptors

References

BLE 통신

https://learn.adafruit.com/introduction-to-bluetooth-low-energy/gatt

블루투스 소개

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


반응형

'IT' 카테고리의 다른 글

[IT] PKI ( Public Key Infrastructure )  (0) 2019.01.14
[IT] BLE Security  (0) 2019.01.14
[IT] Sniffing  (0) 2019.01.11
[IT] MITM(Man In The Middle, 중간자 공격)  (0) 2019.01.11
공지사항
최근에 올라온 글