시험 준비 및 공부 기록 아카이브용으로 작성하는 글입니다.
다소 내용이 정제되어 있지 않을 수도 있습니다.
Bluetooth
블루투스의 도입으로 기기들을 연결할 때 필요하던 케이블 없이 무선으로 연결하게 해 케이블이 대체되었으며, 전자기기들이 약 10m 이내의 짧은 거리에서 무선으로 통신할 수 있게 되었고, 비용이 저렴하고 크기가 작은 소형 칩 표준을 정의할 수 있게 됨.
초기 블루투스(v1.2~3.0)는 속도를 높이는 데에 집중하였으나, 4.0 이후 저전력에 집중하기 시작함.

Classic Bluetooth: 데이터와 오디오 전송용인 Bluetooth ACL/HS, 음성 통화용 Bluetooth SCO
Wi-Fi: 음성 통화(VoIP), 데이터, 오디오, 비디오 등 대용량 전송에 강함, 전력 소모가 심해 센서용으로는 비효율적.
저전력 기술(BLE, ZigBee): 전력 소모를 최소화해 센서용에 적합함.
BLE 5.0: 센서 정보 뿐만 아니라 음성 통화, 오디오 전송까지 지원하기 시작.
BLE
BLE(Bluetooth Low Energy)는 기존 블루투스와 달리 새로운 무선 통신 방식, 프로토콜 스택, 아키텍처를 적용하였고, 저용량 배터리로도 오랫동안 작동할 수 있게 설계된 IoT를 위한 핵심 무선 표준임. 새로운 물리 계층(PHY)를 사용하고, 광고 메커니즘을 도입해 주변 기기를 쉽게 찾을 수 있으며, 비동기 비연결 MAC 방식을 통해 지연 시간을 줄이고 데이터 전송 속도를 높였으며, Generic Attribute Profile을 도입해 기기와 소프트웨어 개발을 더 단순하게 만듦. BLE는 비동기식 클라이언트/서버 아키텍처를 따름.

블루투스 5.1: AoA(Angle of Arrival, 도달 각도)와 AoD(Angle of Departure, 출발 각도)를 통해 기존에 측정할 수 있었던 거리 뿐만 아니라 방향까지 알 수 있게 됨.
블루투스 5.2: LE Audio를 통해 전력을 훨씬 적게 쓸 수 있으며, Auracast를 통해 일대다 방송이 가능해졌으며, 지연 시간이 100~200ms에서 20~30ms로 획기적으로 줄어듦
블루투스 5.3: 데이터 전송이 적을 때와 많을 때 사이를 빠르게 전환해 배터리를 아끼면서 반응 속도를 높이는 Connection Subrating, 중복된 광고 패킷은 안 받음, 채널의 좋고 나쁨을 구별해 AFH(Adaptive Frequency Hopping)에 활용, Wi-Fi의 MAC, PHY 제거
블루투스 5.4: PAwR(Periodic Advertising with Response)를 통해 하나의 호스트가 수천 개의 초저전력 기기와 양방향 통신할 수 있음, 광고 데이터에 대한 보안 추가
블루투스 6.0: 전파 왕복 시간을 이용해 거리를 cm 단위로 정밀하게 인식할 수 있음, PAwR 업그레이드로 수천~수만 노드까지 연결 가능, 중복된 광고 패킷 필터링
블루투스 6.2: 지연 속도를 7.5ms에서 0.375ms로 줄임
광고 / 데이터 전송

BLE는 채널 37, 38, 39를 광고 전용 채널로 사용하고, 37, 38, 39 순으로 패킷을 전송함
광고하는 기기는 주기적으로 광고 패킷을 전송(ADV_IND)하고, 듣는 기기가 더 많은 정보가 필요하면 스캔 요청(SCAN_REQ)을 보내며, 스캔 요청을 받은 광고하는 기기는 스캔에 응답(SCAN_RSP)해 추가 정보를 제공함.
패킷을 주고 받는 사이의 간격은 150µs이며, 한 채널에서 광고를 마치고 다음 채널로 넘어갈 때까지의 시간은 10ms 미만임.

듣는 기기가 훨씬 더 많은 데이터를 전송하고 싶을 때 연결 요청(CONNECT_REQ)을 보내며, 이때 광고하는 기기는 주변 기기(Slave)가 되고, 듣는 기기는 중앙 기기(Master)가 됨. 연결 요청 후 첫 데이터 전송까지는 최소 1.25ms의 시간이 필요하며, Master와 Slave는 150µs 간격으로 통신함. 중앙 기기는 주변 기기와 호핑 시퀀스를 공유하고, 37개의 데이터 채널을 골고루 사용하며, 모든 통신 내용은 암호화되고 데이터를 주고 받지 않는 시간에는 절전 모드로 들어가 전력을 아낌.
광고 패킷 포맷

프리앰블, 접속 주소, 패킷 페이로드, CRC로 구성되며, 이때 패킷 페이로드 중 6바이트는 MAC 주소가 차지함.

애플은 데이터 부분을 더 세분화한 iBeacon 규격을 만들어 자사 제품에 사용하기도 함.
GAP, GATT, ATT
여기서 Protocol은 통신에 관한 설명, Profile은 애플리케이션 서비스에 관한 설명을 의미함.

BLE에서 서버는 상태를 가지고, 자신의 상태를 외부에 노출하는 기기이며 클라이언트는 그 상태를 사용하는 기기임.
클라이언트는 서버에서 값을 가져오거나(READ) 값을 바꾸라고 명령(WRITE)하며, 서버는 클라이언트에게 자신의 상태가 업데이트되었음을 알림(NOTIFY).

ATT(Attribute Protocol)는 BLE 장치끼리 데이터를 주고받을 때 사용하는 프로토콜로, 서버는 ATT를 통해 클라이언트에게 데이터를 전송함.
프로토콜 메소드에는 Request -> Response, Indication -> Confirmation, Command, Notification이 있음.

GATT(Generic Attribute Profile)은 ATT를 사용하기 위한 절차로, 데이터는 서비스로 캡슐화되고, 특성(Characteristic)으로 나타내짐. 이때, UUID를 부여해 서비스와 특성끼리 서로 중복되지 않게 하며, 이를 attribute로 분류함.
GAP(Generic Access Profile)은 연결 가능 여부, 지원하는 서비스, 연결 전 알아야 할 정보, 기기 이름을 기록해둠.

