Android/BLE

[BLE] GAP란? - Advertising & Connections

seunghwaan 2023. 2. 23. 23:55
반응형

 

GAP(Generic Access Profile)란?

GAP(Generic Access Profile)는 서로 다른 제조사에서 제작한 두 개 이상의 BLE 디바이스가 서로 호환되어 상호 운용할 수 있도록하는 프레임워크를 제공합니다. 즉, GAP는 서로를 검색할 수 있도록 이 프레임워크는 모든 BLE 디바이스가 구현을 해야합니다. 그러므로, GAP에서는 광고(Advertisement)와 연결 설정(Connection Establishment)등의 상호 운용성을 보장하며 BLE Device의 모드(Modes)와 역할(Roles), 프로시저(Procedures), 보안(Security)을 정의합니다.

 

두 개의 BLE 디바이스는 서로를 발견하기 위해서는 둘 중 하나는 광고(Advertising)을 해야하며 이 장치를 Peripheral이라고 부릅니다. 그리고 Central 디바이스는 Peripheral 디바이스가 전송한 Advertising Packet을 찾기 위해 Scanning을 해야합니다. 만약, Central 디바이스에 의해 Peripheral 디바이스가 발견되었고 연결(Connection)을 지원한다면 연결할 수 있도록 설정할 수 있습니다. 

Roles

GAP에는 디바이스가 BLE 네트워크를 사용하기 위해 아래의 4가지 역할(Role)들이 존재합니다. 여기서 중요한 점은 GAP 역할과 BLE GATT client / server 역할은 아무런 연관이 없는 다른 개념이며 혼동하면 안됩니다. 예를 들면, 스마트 워치의 GAP 역할은 Peripheral이지만 스마트폰이 스마트워치의 센서로부터 데이터를 요청할 때는 GATT server로 동작합니다. 간단히 말하면, GAP 역할은 스마트폰은 Central이고 스마트워치는 Peripheral로 고정되는 반면, GATT client / server 역할은 데이터 요청 및 응답 트랜잭션이 흐르는 방향에 따라 결정됩니다.

Broadcaster

Broadcaster는 GAP 계층 내에서 정의된 역할이며 Link Layer(LL)에서는 Advertiser라고 부릅니다. Broadcaster는 주기적으로 데이터가 포함된 광고 패킷을 보내는 디바이스입니다. 하지만, Peripheral과의 차이점은 연결을 지원하지 않습니다(Non-connectable). 즉, Non-Connectable Advertising Packet을 보내며 연결하지 않고 하나 이상의 디바이스와 통신할 수 있는 방법을 제공합니다. 데이터 크기가 작다면 Connection 과정을 거치지 않고 Advertise를 하는 것이 좋은 방법이 될 수 있습니다. Central이 광고 패킷을 검색할 때 광고 패킷의 유형에 따라 연결을 시도할 수 있는지 여부를 알 수 있습니다. Broadcaster의 대표적인 예로는 비콘(Beacon)이라는 기술이 존재합니다. 비콘은 자신의 존재를 광고(Advertising)하고 방송(Broadcasting)하는 목적만을 가진 장치입니다. 비콘은 다른 디바이스의 연결요청을 수락하지 않으며, 실내 위치 서비스 및 리테일 마케팅 서비스에서 인기 있는 기술입니다.

Observer

Observer는 GAP 계층 내에서 정의된 역할이며 Link Layer(LL)에서는 Scanner라고 부릅니다. Observer는 Non-Connectable Advertising Packet을 받기 위해 주기적으로 광고 패킷에 포함된 데이터 수신을 전용으로 하는 디바이스이며 Peripheral과의 연결 신청을 할 수 없습니다. 예를 들면, 브로드캐스트를 전용으로 하는 온도센서로 부터 데이터를 디스플레이 하는 컴퓨터의 역할이 있을 수 있습니다.

Peripheral

Peripheral은 GAP 계층 내에서 정의된 역할이며 Link Layer(LL)에서는 Slave라고 부릅니다. Peripheral은 광고 패킷을 전송하여 자신의 존재를 알리고 다른 Central 디바이스가 연결 가능하게 하는(Connectable) 디바이스입니다.  BLE 프로토콜 상에서 Slave는 적은 배터리 소모와 메모리 효율성을 위해 리소스가 거의 필요하지 않게 구현되어 있습니다.

Central

Central은 GAP 계층 내에서 정의된 역할이며 Link Layer(LL)에서는 Master라고 부릅니다. Central은 광고하는 다른 BLE 디바이스를 검색하고 데이터를 수신하는 디바이스입니다. Central의 역할은 광고 패킷을 수신하는 것을 시작으로 peripheral 디바이스에 대한 연결을 개시할 수 있습니다.  BLE의 프로토콜은 비대칭이며 링크 레이어 Master의 역할이 Slave의 역할보다 많은일을 하고 있습니다. 이유는 Central 역할은 일반적으로 스마트폰이나 태블릿 등 좋은 성능의 CPU와 메모리를 가지고 있기 때문입니다. 그래서 Central 디바이스는 여러개의 Peripheral에 연결하고 유지할 수 있습니다.

Modes

GAP Mode는 특정 목표를 달성하거나 'Procedure'를 수행하기 위해 일정 시간동안 변화하는 Peripheral의 상태(State)를 말합니다. BLE Device는 일반적으로 Role을 변경하는 것보다 Mode를 더 자주 변경하며, 사용자가 직접 변경하거나 필요에 따라 자동으로 변경시킬 수 있습니다.

Discoverability modes

Non-discoverable mode -> 이 모드에서는 Central 디바이스가 Scanning해도 Peripheral을 발견할 수 없습니다. Advertising Packet의 Flag AD 필드에 ADV_NONCONN_IND or ADV_SCAN_IND or ADV_SCAN_IND로 설정하여 Advertising 합니다.

Limited discoverable mode -> 이 모드는 낮은 우선 순위로 제한된 기간 동안만 검색 가능합니다. Advertising Packet의 Flags AD 필드가 Limited Discoverable로 설정하여 Advertising 합니다. 이 모드로 설정된 Peripheral을 검색하려면 limited discovery procedure인 Central 디바이스를 통해서만 발견할 수 있습니다.

General discoverable mode -> 이름 그대로 일반적인 검색 가능한 모드로, 이 모드로 설정한 Peripheral은 Advertising하면 발견 가능합니다. Advertising Packet의 Flag AD 필드에 General Discoverable Flag로 설정하여 Advertising 합니다.

Connetion establishment modes

Central 디바이스가 Peripheral 디바이스와 연결 설정을 시작하려면 Peripheral이 연결 가능 모드여야 합니다. 

 

Non-connectable mode -> 이 모드에서 Peripheral 디바이스는 Advertising Packet을 보내지 않거나 Advertising Packet에 Flag AD 필드에 ADV_NONCONN_IND or ADV_SCAN_IND를 설정하여 Advertising 합니다. 이 모드에서 Peripheral은 Peer와의 연결 설정을 권장하지 않습니다.

Direct connectable mode -> 이 모드에서 Peripheral 디바이스는 Advertising Packet의 Flag AD 필드에 ADV_DIRECT_IND를 설정하여 특정 Central 디바이스에게만 Advertising 합니다. 이는 Central 디바이스가 이미 연결을 시도하고 있다는 가정과 함께 "빠른 연결" 모드를 제공합니다. 

Undirected connectable mode -> 표준 모드로서 Adertising Packet에 ADV_IND 플래그가 설정하여 Advertising 합니다.

 

Mode Applicable Role(s) Applicable Peer Procedure(s)
Broadcast Broadcaster Observation
Non-discoverable Peripheral N/A
Limited discoverable Peripheral Limited and General discovery
General discoverable Peripheral General discovery
Non-connectable Peripheral, Broadcaster, Observer N/A
Any connectable Peripheral Any Connection establishment

Procedures

GAP Procedure는 특정 목표를 달성하기 위해 Central 디바이스가 취하는 일련의 작업을 말합니다. 두 디바이스간의 연결상태를 유지하기 위한 절차이며 peer 디바이스의 mode와 관련되어 있습니다.

 

Central 디바이스가 Peripheral 디바이스를 검색하고 연결을 설정하기 위해서는 Central 디바이스는 특정 프로시저를 따라야 합니다.

Discovery Procedures

Limited discovery procedure -> Central 디바이스는 Advertiser에 대한 whitelist 필터링 없이 Scanning을 시작하고 수신하는 각 Advertising Packet을 분석합니다. Advertising Packet의 Flag AD 필드에 Limited Discoverable Flag가 설정되었을 경우, Central 디바이스의 응용 프로그램이 추가 작업을 할 수 있도록 Peer 디바이스가 보고됩니다.

General discovery procedure -> Central 디바이스는 Advertiser에 대한 whitelist 필터링 없이 Scanning을 시작하고 수신하는 각 Advertising Packet을 분석합니다. Limited Discoverable 혹은 General Discoverable 플래그가 포함된 Advertising Packet가 설정되었을 경우, Central 디바이스의 응용 프로그램이 추가 작업을 할 수 있도록 Peer 디바이스가 보고됩니다.

Connection establishment procedures

Auto connection establishment procedure -> Central 디바이스는 whitelist를 Peripheral 배열로 채운 뒤, whitelist에서 첫 번째로 발견 된 디바이스에 연결하도록 컨트롤러에 지시합니다. 

General connection establishment procedure -> Central 디바이스의 기본 Procedure 입니다. whitelist 없이 디바이스를 Scan하여 들어오는 모든 Advertising Packet을 수락하고 연결 가능한 디바이스 목록을 표시합니다. Central 디바이스의 어플리케이션에서는 스캔된 디바이스에 대해 연결할지 선택할 수 있습니다.

Selective connection establishment procedure -> Central 디바이스의 이전에 수신했던 whitelist를 사용하여 Advertising Packet을 필터링한다는 점을 제외하고 general connection establishment procedure와 동일합니다. 이 procedure는 이미 알고있는 Peripheral을 선택하고 연결하고 싶을 때 유용합니다.

Direct connection establishment procedure -> Central 디바이스는 링크 계층을 사용하여 Bluetooth Address로 검색된 단일 디바이스에 대해 아무런 지식 없이 연결을 시도합니다. 만약, Peripheral이 사용할 수 없거나 연결 가능한 모드가 아닌 경우 procedure는 실패할 수 있습니다. 

 

그 외 추가적인 GAP procedures도 존재하는데 Name discovery procedure, Connection parameter update procedure, Terminate connection procedure 등이 존재합니다만 설명은 생략하도록 하겠습니다.

Procedure Application Role(s) Applicable Peer Mode(s)
Observation Broadcaster Broadcast
Limited discovery Central Limited discoverable
General discovery Central Limited & General discovery
Name discovery Peripheral, Central N/A
Any connection establishment Central Any connectable
Connection parameter update Peripheral, Central N/A
Terminate connection Peripheral, Central N/A

Security

Security는 BLE의 보안 기능이며 BLE 연결은 특정 보안 모드에서 작동합니다. 각 모드에서는 여러 Security Level이 존재하며 연결에 필요한 Security Mode/Level은 수시로 변경할 수 있으므로 해당 Level을 높이는 Procedure가 필요합니다.

 

BLE 디바이스 Pairing 과정

 

1단계: Pairing Feature 교환

2단계: (LE Legacy Pairing): STK(Short-Term Key) 생성

3단계: (LE Security Connections): LTK(Long-Term Key) 생성

4단계: 키 배포

 

보안 기능이 없는 두 디바이스가 보안이 필요한 작업을 수행하려는 경우 먼저 디바이스를 페어링해야 합니다. 여기서 보안이 필요한 작업을 예를 들면, 인증된 액세스가 필요한 Peripheral 디바이스의 데이터(Characteristic)에 액세스하려고 시도할 때를 말하며 Central 디바이스에 의해 트리거됩니다. 페어링의 첫 번째 단계에서는 Pairing Feature를 교환하고 페어링의 마지막 단계에서는 두 디바이스 사이에 배포될 키를 결정하고 배포합니다. 배포될 키를 결정하는 단계에서는 STK(Short-Term Key)를 사용하여 링크를 암호화한 다음, 암호화에 사용되는 LTK(Long-Term Key)를 배포하여 본딩을 통해 나중에 더 빠른 재연결 할 수 있도록 합니다.

페어링(Pairing)과 본딩(Bonding)

페어링(Pairing) -> 페어링은 일반적으로 암호화된 연결 설정하는데 필요한 정보를 교환하는 프로세스입니다. 프로세스에는 페어링할 두 디바이스의 ID 인증(authentication), 링크 암호화(link encryption), security를 다시 시작할 수 있도록 STK(Short-Term Key)를 배포하는 것입니다.

본딩(Bonding) -> 본딩은 페어링 과정에서 얻은 정보 및 LTK(Long-Term Key)를 디바이스에 저장하는 과정으로 본딩이 되면 연결했던 장치에 다시 연결을 할 때 페어링 과정을 반복할 필요 없이 재연결할 수 있습니다.

Security Modes/Levels of a Connection

BLE 연결에서 GAP는 두 개의 security modes와 mode 하나 당 여러 개의 security level이 정의되어 있습니다. 각각의 연결은 시작할 때 Security mode 1의 Level 1에서 시작하며 procedure를 통해 security level을 올릴 수 있습니다.

Security Mode 1

이 모드는 암호화를 통해 보안을 적용하며 세 개의 Level이 존재합니다.

  • Level 1: No security (the link is not authenticated and not encrypted).
  • Level 2: Unauthenticated encryption.
  • Level 3: Authenticated encryption.

Security Mode 2

이 모드는 Security Manager의 데이터 서명을 통해 보안을 적용하며 두 개의 Level이 존재합니다.

  • Level 1: Unauthenticated data signing.
  • Level 2: Authenticated data signing.

Bonding Modes and Procedures

본딩에는 두 개의 mode와 한 개의 procedure가 존재합니다.

 

Non-bondable mode -> 디바이스의 기본 모드입니다. 이 모드를 사용하면 디바이스는 페어링 procedure는 자유롭게 실행할 수 있지만 bonding procedure는 수행할 수 없습니다. 그러므로, 이 모드에서는 디바이스에서 키를 교환하거나 또는 저장하지 않습니다.

Bondable mode -> 이 모드를 사용하면 디바이스가 peripheral 디바이스와 본딩할 수 있습니다. 본딩 후에는 비밀 키를 교환하고 저장합니다.

Bonding procedure -> Central 디바이스가 Peripheral 디바이스에게 본딩을 요청할 때 bonding procedure를 시작합니다. Peripheral 디바이스가 bondable하면 bonding bit set으로 응답합니다.

 

Bonding Modes Applicable Role Applicable Peer Procedure
Non-Bondable Peripheral -
Bondable Peripheral Bondable Procedure

Advertising Data Format

Advertising Packet의 일반적인 형식은 31-byte로 GAP의 핵심 사양에 정의되어있으며 일반적인 데이터 이외에도 별도의 사용자 데이터가 포함되어있습니다. 허용되는 AD(Advertising Data) 타입은 Bluetooth SIG의 사양 문서에서 확인할 수 있고 아래의 표는 일반적인 앱 개발에서 사용하는 AD 타입에 대해 정리되어있습니다. 다만, 아래의 내용도 완전하지 않으므로 문서를 보는 것이 더 정확할 수도 있습니다.

 

또한, Service UUID는 Bluetooth SIG에서 정의한 여러 공식 UUID를 제공하여 사용할 수 있지만, 자신만의 고유 Service UUID를 만들 수도 있습니다. 서비스는 장치의 상호 운용성을 가능하게 해줍니다. 예를 들면, Battery Service를 구현하는 모든 디바이스는 동일한 UUID 및 데이터 형식을 사용하여 Bluetooth SIG에서 정의한 동일한 데이터 규약에 따라 작업을 수행해야 합니다.

Name Actual data length in bytes Description
Flags 1(확장 가능) Discovery mode를 설정하는데 사용됩니다.
Local Name variable UTF-8 포맷의 사용자가 읽을 수 있는 Local Name.
Appearance 2 Advertising Packet을 보내는 디바이스의 타입.
TX Power Level 1 Advertising Packet을 전송하는 데 사용되는 dBm 단위의 파워 레벨. Central 혹은 Observer의 path loss를 계산하는데 사용됩니다.
Service UUID variable 패킷을 전송하는 디바이스(GATT server)에서 제공하고 있는 GATT Service 목록.
Slave Connection Interal Range 4 Peripheral에 대해 추천하는 Connection Interval Range
Service Soliciation variable 패킷을 전송하는 디바이스(GATT client)에서 지원할 수 있는 GATT 서비스 목록. Peripheral이 GATT client로 작동할 때 Central에게 요청을 통해 액세스할 수 있는 서비스 목록을 찾을 수 있지만 노출 시키지 않을 경우에는 GATT server는 서비스를 찾을 수 없음.
Service Data variable GATT 서비스와 관련된 데이터를 나타내는 UUID
Manufacturer Specific Data variable 재량에 따라 자유롭게 서식을 변경할 수 있는 데이터

References

Kevin Townsend, Carles Cufi, "Getting Started with Bluetooth Low Energy: Tools and Techniques for Low-Power Networking", O'REILLY MEDIA (2014)

https://developer.qualcomm.com/hardware/qca4020-qca4024/learning-resources/understanding-generic-access-profile

 

Understanding the Generic Access Profile (GAP)

GAP allows BLE devices to interoperate with each other. It provides a set of rules or procedures so that devices can discover each other, broadcast data, establish secure connections, perform functional operations and set device configurations. GAP defines

developer.qualcomm.com

 

반응형