본문 바로가기

지식/Network

블루투스 구조

bluetooth
  블루투스 강좌

     블루투스(Bluetooth) 프로토콜 스택과 프로파일(Profile) (1)

이한욱 (BLUETOOTH Lab. 팀장)

    프로토콜(Protocol)이란 디바이스간에 데이터를 송수신하기 위한 하나의 약속을 말한다. 이 프로토

  콜은 하나의 통신 시스템의 성능을 결정하는 매우 핵심적인 것이다. 하지만 OSI 7 Layer 나 TCP/IP

  등 그 복잡한 계층과 패킷들은 생각만 해도 골치아프게 한다. 블루투스의 프로토콜 역시 그 스택을 보

  는 순간 `만만치는 않겠다'는 생각이 들게 한다.

    블루투스의 스펙을 크게 두 부분으로 나눈다면 `라디오(Radio) 스펙'과 `프로토콜 스펙'으로 나눌 수

  있다. 그러나 실제 블루투스 스펙을 보면 라디오 스펙에 관련된 부분은 100페이지도 되지 않는다. 나

  머지 800페이지 분량을 대부분 프로토콜에 관련된 설명으로 할애하고 있다. 아무리 블루투스의 RF 부

  분을 사양에 맞게 설계하였다 하더라도 초당 1600번 주파수 호핑을 하고 Inquiry, Connection 과 피

  코넷(Piconet) 구성 등은 모두 프로토콜의 몫인 것이다. 즉 블루투스를 `블루투스답게 만드는 것'이 바

  로 프로토콜이다.

    본고에서는 일단 블루투스의 프로토콜 스택의 전반적인 내용과 하위 계층에 해당하는 베이스밴드

  (Baseband)와 링크 매니져(Link Manager)에 대해 알아보기로 한다. HCI 이상의 상위 레이어에 대해

  서는 2부에서 다루기로 한다.

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

    블루투스의 프로토콜 스택은 <그림1>에서 보여지는 바와 같다. 프로토콜 스택이란 그림에서 보여지

  는 바와 같이 하위 계층부터 상위 계층까지 쌓아올린 프로토콜의 집합을 말한다. 이 프로토콜 스택은



<그림1> 블루투스의 프로토콜 스택(Protocol Stack)

 

  보통 HCI(Host Controller Interface)를 기준으로 호스트 컨트롤러(Host Controller) 프로토콜과 호스

  트(Host) 프로토콜로 나뉘게 된다. <그림1>을 보면 HCI가 두 개의 계층에 위치하는데 바로 아래쪽 HCI

  가 호스트 컨트롤러에 포함되는 것이고, 위쪽의 HCI가 호스트에 포함되는 것이다. 여기서 호스트 컨트

  롤러에 포함되는 HCI를 `HCI Bottom', 호스트에 포함되는 HCI를 `HCI Top'이라고 말하기도 하며, 두

  개의 HCI 사이는 물리 링크인 UART, USB, PCMCIA 등의 인터페이스로 연결된다.

    호스트 컨트롤러란 바로 블루투스 모듈에 해당한다. 그리고 호스트 컨트롤러 프로토콜은 보통 베이

  스밴드(Baseband), 링크 매니저(LM), HCI Bottom 정도가 포함된다. 대부분 이 세 개의 프로토콜이

  펌웨어(Firmware) 형태로 모듈 내부에 포함된다.

    호스트는 호스트 컨트롤러인 블루투스 모듈과 연결되어 블루투스 모듈을 제어하고 어플리케이션을

  수행하는 곳으로 그 종류는 시스템에 따라 달라질 수 있다. 보통 PC, PDA, 핸드폰 등이 모두 호스트가

  될 수 있고, 임베디드 시스템의 경우 마이크로 프로세서가 호스트가 된다. 또 호스트에 포함되는 프로

  토콜은 HCI Top부터 그 상위 계층 프로토콜(L2CAP, RFCOMM, SDP, TCS, OBEX) 모두에 해당된다.

  그러나 항상 상위 계층 프로토콜이 모두 포함되는 것은 아니고, 어플리케이션의 종류나 프로파일

  (Profile)에 따라 포함되는 프로토콜이 달라진다.

    그러나 항상 호스트와 호스트 컨트롤러 사이의 프로토콜 스택의 배분이 위와 같은 것은 아니다. 위에

  서 설명한 바와 같이 HCI를 기준으로 프로토콜을 배분하는 것이 가장 일반적인 방법이기는 하나 호스



<그림2> 프로토콜 스택의 구현 및 배분의 3가지 구조 (발췌:BlueStack User Manual, Mezoe, 2001)

 

  트의 종류에 따라 <그림2>와 같이 세종류로 나누어질 수 있다. <그림2>에서 `Standard Two

  Processor Architecture'가 위에서 설명했던 가장 일반적인 구조이다. 그러나 사실 HCI 상위 계층의

  L2CAP, RFCOMM, SDP, TCS 등의 많은 프로토콜을 구현하고 어플리케이션을 수행하는데는 호스트

  에 걸리는 작업 로드가 크고, 많은 리소스를 필요로 하게 된다. 따라서 핸드폰과 같이 블루투스 프로토

  콜 스택을 위해 할당된 리소스가 적은 호스트일 경우 <그림2>의 두 번째 구조인 `Embedded Two

  Processor Architecture' 형태로 프로토콜 스택을 배분한다. <그림3>의 세 번째 구조인 `Wholly

  Embedded Single Processor Architecture'는 별도의 호스트가 존재하지 않는 구조이다. 즉 호스트

  컨트롤러인 블루투스 모듈만이 존재하고, 이 모듈 내에 모든 프로토콜 스택이 구현되어 있다. 이런 구

  조에 가장 적합한 어플리케이션이 무선 헤드셋이다. 이 구조는 말 그대로 별도의 호스트가 필요없는

  완전한 임베디드 구조를 지니기는 하나 블루투스 모듈 내부의 자체 프로세서를 사용하므로 비교적 간

  단한 어플리케이션에 적합하다.

    이제 베이스밴드부터 각각의 프로토콜에 대해서 알아보기로 한다.

   베이스밴드 (Baseband)

    베이스밴드는 블루투스의 링크 컨트롤러(Link Controller)에 해당하는 프로토콜로서 블루투스만의

  고유한 통신 시스템 특성을 구현하는 곳이다. 한마디로 블루투스 프로토콜 중 `가장 바쁜 프로토콜'이

  라고 할 수 있다.

    우선 베이스밴드에서는 물리 채널을 정의하고 이에 대한 호핑(Hopping)을 담당한다. 블루투스에는

  밴드폭이 1MHz인 RF 채널을 79개(국가에 따라 23개이기도 함)로 나누고, 각 채널을 초당 1600회 호

  핑을 하는데, 이 채널 정의와 호핑 시퀀스 선택 등이 모두 베이스밴드에서 이루어진다.  또 각 채널별

  로 625µs의 길이를 지닌 타임 슬롯(Time Slot)을 설정하여 슬롯을 통해 패킷을 교환하는 시분할이중

  방식(TDD:Time-Division Duplex)도 베이스밴드에서 담당한다.

    두 번째로 베이스밴드에서 담당하는 역할은 링크 설정이다. 블루투스에는 SCO Link(Synchronous

  Connection-Oriented Link)와 ACL Link(Asynchronous Connection-Less Link)가 있다. SCO 링크

  는 주기적으로 예약된 타임 슬롯을 통해 패킷을 교환하는 방식으로 주로 음성 채널에 사용된다. 반면

  ACL 링크는 예약된 타임 슬롯을 사용하지 않고 패킷을 교환하는 링크이며, 일반 데이터 채널에 사용

  된다. 이러한 링크 설정이 모두 베이스밴드에서 이루어진다.

    또 베이스 밴드에서는 표준 패킷을 정의하고 생성한다. 표준 패킷은 억세스 코드(Access Code), 헤



<그림3> 표준 패킷의 포맷

 

  더(Header), 페이로드(Payload)로 구성되어 있고, 역할 및 링크의 종류에 따라 링크 컨트롤 패킷,

  ACL 패킷, SCO 패킷으로 나뉘어진다. 또 각 3종류의 패킷은 페이로드 길이, FEC 방식, CRC 여부 등

  에 따라 더 세분화된 패킷으로 나누어진다. 또 각 패킷의 종류에 따라 전송 속도도 달라지는데 가장 최

  고의 속도를 낼 수 있는 패킷은 DH5 패킷으로, 비대칭 모드로 최고 723.3kbps, 대칭 모드로는 최고

  433.9kbps까지 낼 수 있다.

    패킷과 관련되어 베이스 밴드에서는 에러 정정(Error Correction) 및 에러 검출(Error Checking)도

  담당한다. 블루투스에서 사용되는 에러 정정 방법은 1/3 rate FEC, 2/3 rate FEC, ARQ의 세가지이며





<그림4> ARQ Scheme

 

  그 사용은 패킷의 종류에 따라 다르다. 또 에러가 발생한 패킷은 재전송(Retransmission)을 하는데

  이것은 ACL 링크에서만 가능하며, SCO 링크에서는 재전송이 이루어지지 않는다.

    에러검출은 표준 패킷의 억세스 코드, 헤더, 페이로드 각각에 대해서 이루어진다. 패킷을 수신할 때

  는 먼저 억세스 코드를 체크하게 되는데, 이 억세스 코드를 통해 수신된 데이터 패킷이 자신의 피코넷

  데이터인지, 다른 피코넷 데이터인지를 구분해 낼 수 있다. 또 헤더의 경우에는 HEC, 페이로드의 경우

  에는 CRC 방식으로 에러 검출한다.

    또 베이스밴드는 여러 개의 상위 레이어들과 인터페이스를 위한 논리 채널(Logical Channel)도 정

  의한다. <그림1>의 스택 구조를 보면 베이스밴드는 LM, L2CAP, Voice 레이어 등과 직접 인터페이스

  를 할 수 있다. 베이스밴드에서는 5개의 논리 채널을 설정하여 LC(Link Control), LM(Link Manager)

  뿐만 아니라 L2CAP나 SCO(대부분 Voice) 등과 인터페이스가 가능하다.

    이외에도 저레벨 링크 라우틴(Low Level Link Routine)도 담당하여 각 링크의 트래픽(Traffic)을 관

  리하고 흐름 제어(Flow Control)도 담당한다.

    그러나 무엇보다 베이스밴드에서 담당하는 역할 중 가장 중요한 것은 바로 채널 컨트롤이다. 채널 컨

  트롤이란 마스터와 슬레이브 사이에 커넥션이 이루어지고 피코넷이 구성되는 과정에 관련된 것이고,



<그림5> 블루투스 링크 컨트롤러의 상태도(State Diagram)

 

  이러한 과정은 스테이트(State)로 구분지어진다. 블루투스에서는 2개의 메이저 스테이트(Major

  State)와 7개의 서브스테이트(Substate)로 나뉘게 된다. 2개의 메이저 스테이트는 STANBY와

  CONNECTION이며, 7개의 서브스테이트는 page, page scan, inquiry, inquiry scan, master

  response, slave response이며, 각 스테이트간의 천이도는 <그림5>에 나타나 있다.

    CONNECTION 상태가 되기 위해서는 inquiry와 paging을 거쳐야 한다. inquiry란 주위에 연결할 수

  있는 블루투스 디바이스를 찾고자 할 때  사용하는 것이다. 이렇게 하여 주위에 연결할 수 있는 블루투

  스 디바이스를 찾아내면 어드레스와 클럭(Clock) 정보 등으로 호핑 시퀀스를 동기화하며 실제 커넥션

  을 수행하는데 이것이 paging이다. 이러한 inquiry와 page는 마스터에서 수행하며 IAC(Inquiry

  Access Code)와 DAC(Device Access Code)를 이용한다. 따라서 슬레이브는 IAC와 DAC를 수신할

  수 있는 준비가 되어야 하는데, 이 상태가 inquiry scan, page scan이다. 보통 inquiry는 두 개의 디

  바이스가 처음으로 연결될 때만 수행한다. 실제로 inquiry를 수행하면 디바이스를 발견할 때까지 몇

  초 이상의 비교적 긴 시간이 소요되는데, 이것은 실제 inquiry 과정에서는 디바이스 간에 호핑 설정이

  없으므로, 여러 채널을 통한 브로드캐스팅(Broadcasting)을 수행하게 되므로 긴 시간이 소요되는 것

  이다. 그러므로 일단 한번 연결이 된 후 종료가 되어 다시 연결을 시도할 때는 inquiry를 거치지 않고,

  바로 paging으로 커넥션을 수행할 수 있으므로 inquriy로 소요되는 시간을 줄일 수 있다.

    위와 같은 과정을 거쳐 CONNECTION 상태가 되면 Active, Sniff, Hold,Park라는 4가지의 동작 모드

  로 나누어지게 된다. 이렇게 하는 것은 채널 및 링크를 효율적으로 확립하고, 전력 소비를 최소화하기

  위함이다. Active Mode는 가장 일반적이고 제약이 없는 CONNECTION 상태이다. Sniff Mode는 슬레

  이브에서만 가능하며 마스터와 슬레이브 사이에 통신이 가능한 타임 슬롯을 특정하게 제한하는 것이

  다.  즉 슬레이브의 듀티 사이클(duty cycle)이 제한되어 있어 특정 타임 슬롯일 때만 마스터와의 통신

  이 가능하다.

    Hold Mode는 일정 시간 동안 ACL 링크가 지원되지 않는 상태로, 이 모드에서는 scanning,

  inquiring, paging 등이 가능하고 심지어 다른 피코넷에 참여하여 스캐터넷을 구성할 수도 있다. 또 전

  력 사용을 최소화하는 Low-Power Sleep Mode로 들어갈 수도 있다. Hold Mode에 들어가기 전에

  마스터와 슬레이브는 그 Hold Mode duration을 서로 약속을 하여, 그 시간이 지나면 Hold Mode에서

  벗어나게 된다.

    Park Mode는 슬레이브가 현재로서는 피코넷에서 참여할 필요가 없지만 채널 동기 상태는 유지할

  필요가 있을 때 사용된다. 슬레이브가 Park Mode가 되면 Parked Member Address(PM_ADDR)이

  라는 새로운 어드레스가 부여되며 마스터는 PM_ADDR을 통해 Park Mode 상태인 슬레이브를 식별할

  수 있다. Park Mode인 슬레이브는 마스터와 정상적인 패킷 교환은 불가능하지만, Beacon 채널을 통

  해 주기적으로 마스터로부터 패킷을 수신하다. 이 Beacon 채널을 통해 Park Mode인 슬레이브 중 특

  정 디바이스를 원하는 시간에 피코넷에 참여시킬 수 있다. Park Mode를 이용하면 하나의 피코넷에 8

  개 이상의 슬레이브를 참여시킬 수 있다. 비록 동시에 피코넷에 참여할 수 있는 슬레이브는 7대로 한

  정되지만 Active 슬레이브와 Park 슬레이브를 적절히 교환시키면서 피코넷을 구성하면 실제로 규모가

  큰 피코넷을 구성하는 것이 가능하다.

    이외에도 베이스밴드는 오디오 채널에 대한 인터페이스를 제공하며 보안(Security)에 관련된 과정


<그림6> 인증(Authentication) 및 암호화(Encryption)에 관련된 인자들

 

  도 담당한다. 이상에서 살펴봤듯이 베이스밴드에서 처리하는 일들은  그 양이 많기도 하지만 블루투스

  의 핵심적인 부분이라고 말할 수 있다. 따라서 블루투스의 RF와 더불어 베이스밴드 설계 기술은 블루

  투스 기술의 핵심이라고 할 수 있다. 블루투스 초창기에는 블루투스의 RF와 베이스밴드가 별도의 칩

  셋으로 분리되었었다. 그러나 영국 CSR사는 처음으로 이 블루투스 RF와 베이스밴드를 원칩화 시킨

  칩셋을 설계하고 제품화하여 한동안 원칩화된 칩셋이 대세를 이루어가기도 했다. 그러나 최근에는 블

  루투스 자체가 다양한 시스템에 내장되어 가고 있는 추세이므로 베이스밴드가 SoC 형태로 다양하게

  칩셋화되어 가고 있다. PDA용 ARM7 칩셋이나 휴대폰 칩셋에 블루투스 베이스밴드가 내장된 제품이

  출시되고  있다.

   링크 매니져 (Link Manager:LM)

    블루투스 스펙을 보면 링크 매니져는 링크 설정, 보안, 제어를 담당한다고 설명하고 있다. 그렇다면

  과연 베이스밴드와 무슨 차이가 있냐는 의문을 갖게 할 수도 있다.  링크 매니져의 주된 역할은 LMP

  메시지를 이용한 통신이다. 즉 링크 설정, 커넥션 스테이트(Park, Sniff, Hold)의 설정, 링크 키(key)나

  암호화(Encryption) 등의 보안 설정 등을 결정하여 RF 및 링크를 직접 제어하는 곳은 베이스밴드이나,

  만약 위와 같은 설정을 리모트 디바이스(Remote Device)에게 명령 및 제어를 수행하고 리모트 디바

  이스의 상태에 대한 정보를 얻기 위해서는 별도의 통신 수단이 필요하다. 바로 이 역할을 하는 것이

  LMP 메시지이다. 즉 베이스밴드가 `중앙사령부'라면 여기서 결정한 내용을 주위로 전달하고 또 그 상

  황을 보고받는 `통신부' 역할을 하는 곳이 링크 매니져인 것이다.

    LMP 메시지는 두 디바이스의 링크 매니져 사이에서 송수신되며 상위 계층으로 전달되지는 않는다.

  또 페이로드를 통해 전달이 되며 L_CH라는 페이로드 헤더를 지닌다. L_CH의 코드에 따라서 베이스밴



<그림7> L_CH 코드와 논리 채널(Logical Channel)

 

  드의 논리 채널(Logical Channel)이 설정된다. 링크 매니져에서 담당하는 일은 인증(Authentication)

  을 위해 링크 키의 교환이나 페어링(Paring) 등을 수행, 암호화(Encryption), 클럭(Clock)이나 슬롯

  (Slot) 관리, 롤(Role) 스위치, 커넥션 스테이트 (Park, Sniff, Hold) 설정, 파워 컨트롤, QoS 등이다. 이



<그림8> 커넥션이 성립되기 위한 LMP PDU의 교환 과정

 

  러한 동작을 수행하기 위해 LMP PDU(Protocol Data Unit)가 두 개의 디바이스 사이에서 교환되고,

  이것은 각 동작마다 정해진 규칙(Rule)에 따라야 한다. <그림8>은 커넥션이 이루어지기 위해서 두 디

  바이스의 링크 매니져 사이에서 교환되는 LMP PDU의 순서가 보여지고 있다. 일단 두 개의 디바이스

  의 베이스밴드에서 각각 page와 page scan 상태가 되고 난 후, 클럭 오프셋, LMP 버전, 이름 등의

  정보를 LMP PDU를 통해 주고받는다. 그후 커넥션 요청 PDU와 이에 대한 응답 PDU를 주고 받으면

  그 이후 페어링, 인증, 암호화 등의 보안과 관련된 LMP PDU가 교환된다.(물론 이 보안과정은 프로파

  일에 따라 생략할 수도 있다.) 이러한 PDU 교환 과정을 거쳐서 커넥션이 성립되는 것이다.

  

    이상에서 블루투스 프로토콜 스택에 대한 전반적인 내용과 이중 베이스밴드와 링크매니져에 대해서

  알아보았다. 2부에서는 HCI 이상의 상위 계층 프로토콜을 다룬 후, SIG에서 규정한 프로파일(Profile)

  에 대해서 살펴보기로 하겠다.





 bluetooth
   블루투스 강좌
 

     블루투스(Bluetooth) 프로토콜 스택과 프로파일(Profile) (2)

 

 

이한욱 (BLUETOOTH Lab. 팀장)

 

 

    본고에서는 지난 1부에 이어 HCI 이상의 상위 계층 프로토콜에 대한 내용에 대해 살펴보겠다.

 

  일반적으로 HCI 이상의 상위 계층 프로토콜들은 PC와 같은 호스트 상에 구현된다. 이러한 프로토콜들은

 

  자체적을 수행하는 태스크(Task) 외에도 상하위 계층에 이웃하는 프로토콜과의 인터페이스가 중요하다.

 

   먼저 이러한 레이어들간의 통신 모델에 대해 간단히 살펴본 후 각 레이어들에 대해 알아보기로 한다.

 

   그리고 마지막으로 블루투스의 프로파일(Profile)에 대한 내용을 다루고자 한다.

 

 

   프로토콜 모델

 

    블루투스 프로토콜은 OSI 참조 모델(OSI Reference Model)과 같이 계층화된 구조를 지니고 있다.

 

  또 각각의 프로토콜은 Peer-to-Peer 방식으로 원격 프로토콜과 통신이 이루어진다. 또 프로토콜 스택 내의

 



 

<그림1> 계층화된 프로토콜에서의 프리미티브 (발췌:BlueStack User Manual, Mezoe, 2001)

 

 

 

  이웃하는 계층의 프로토콜 사이에서는 서비스 프리미티브(Service Primitive)라는 패킷을 이용하여 프로토콜

 

   사이에 컨트롤 정보(PCI)나 데이터를 교환한다. 이러한 프리미티브는 `Request', `Indication', `Response',

 

   `Confirm'의 4종류로 나누어진다. `Request'는 (N+1)계층에서 (N)계층으

 

  로 전달되는 프리미티브로 서비스를 요청하고 그 서비스에 필요한 데이터나 인자들을 전달할 때 사용된다.

 

   `Request' 프리미티브가 전달되면 통신 링크를 통해 통신이 이루어지고 원격 디바이스의 동등 프로토콜

 

  (Peer Protocol)인 (N)계층에서는 요청된 서비스에 대한 정보나 동작 등을 `Indication' 프리미티브를

 

   통해 (N+1)계층에게 알린다. 이후 (N+1)계층에서는 `Indication'으로 전달된 정보나 동작 등을 수행한

 

   결과를 (N)계층에게 `Response' 프리미티브를 이용하여 전달한다. 그리고 이러한 정보는 통신 링크를

 

   통해 서비스 요청이 시작된 처음의 디바이스 (N)계층 프로토콜로 전달되어 여기서 다시 (N+1) 계층으로

 

   `Confirm' 프리미티브를 이용하여 결과를 통보한다. 실제적으로 블루투스 프로토콜 스택의

 



 

<그림2> 계층화된 프로토콜의 메시지 구조 (발췌:BlueStack User Manual, Mezoe, 2001)

 

 

 

   L2CAP프로토콜의 경우 상위 계층(RFCOMM, SDP, TCS)과는 `L2CA_Request',

 

  `L2CA_Indication', `L2CA_Response', `L2CA_Confirm'의 프리미티브를 이용하며, 하위 계층(HCI,

 

   `LP_Request', `LP_Indication', `LP_Response', `LP_Confirm'의 프리미티브를 이

 

  용하여 커넥션(Connection)이나 디스커넥션(Disconnection) 등의 동작을 수행한다. 그러나 항상 이

 

  4가지의 프리미티브가 모두 사용되는 것은 아니고, 서비스에 따라 4개가 모두 사용되지 않는 경우도

 

  있다. HCI 이상의 프로토콜 계층에서는 대부분 이상과 같은 서비스 프리미티브 모델로 구현이 된다.

 

  이제 각각의 프로토콜에 대해서 알아보기로 하겠다.

 

 

   호스트 컨트롤러 인터페이스(Host Controller Interface:HCI)

 

    호스트 컨트롤러 인터페이스(이하 HCI)는 호스트 컨트롤러에 포함된 베이스밴드나 링크 매니져, 그

 

  리고 하드웨어 등을 접근하고 제어하기 위한 표준화 된 인터페이스를 의미한다. 만약 이렇게 표준화

 



 

<그림3> HCI와 하위 계층 프로토콜의 구조

 

 

 

  된 인터페이스가 없다면 베이스밴드 프로세서나 블루투스 칩셋 등의 하드웨어 벤더에 따라 컨트롤 레

 

  지스터(Register)나 하위 계층 프로토콜의 인터페이스 방법이 달라질 것이다. 따라서 하드웨어에 따

 

  라 어플리케이션을 따로 제작해야하는 번거로움이 생기게 된다. 반면 HCI는 블루투스 SIG에서 규정한

 

  표준화 된 인터페이스이므로 개발자는 호스트 컨트롤러의 하드웨어적 사양에 전혀 구애받지 않을 수

 

  있다는 장점이 있다. 이외에도 개발자는 HCI를 통해 호스트 컨트롤러에 내장된 베이스밴드나 링크 매

 

  니져 등의 하위 계층 프로토콜에 비교적 쉽게 접근할 수 있으므로 개발자가 별도로 하위 계층 프로토

 

  콜을 개발해야 하는 부담이 덜어지게 된다.

 

    HCI는 호스트와 호스트 컨트롤러 사이에 연결된 물리적 버스(Physical Bus)를 통해 통신하기 위한

 

  인터페이스이다. 일반적으로 이 물리적 버스는 UART, USB, PC 카드 등이 사용되고, 블루투스 스펙에

 

  는 USB(H2), RS232(H3), UART(H4)의 각각에 대한 자세한 내용이 실려있다. 이러한 물리적 버스를

 

  통해 교환되는 HCI 패킷은 HCI Command, HCI Event, HCI ACL Data, HCI SCO Data의 4종류이다.

 

  HCI Command는 호스트에서 호스트 컨트롤러에게 특정 작업을 수행하도록 지시하거나 특정 정보를

 

  요청하기 위한 패킷이다. 모든 HCI Command에 대해서는 HCI Event가 존재하는데, 이것은 호스트가

 

  HCI Command를 통해 지시한 작업에 대한 결과나 호스트가 요청한 정보를 호스트 컨트롤러가 호스

 

  트에게 통보하는 패킷이다. 예를 들어 호스트가 현재 연결된 호스트 컨트롤러의 주소를 얻기 위해

 



 

<그림4> HCI 패킷의 구조

 

 

 

  `Read_BD_ADDR'이라는 HCI Command 패킷을 호스트 컨트롤러로 보내면, 호스트 컨트롤러에서는

 

  디바이스의 주소값을 포함된 HCI Event 패킷을 호스트로 보낸다. 이외에 HCI ACL Data 패킷과 HCI

 

  SCO Data 패킷은 ACL 링크나 SCO 링크가 설정된 후에 데이터를 주고 받기 위한 패킷이다.

 

    HCI Command 패킷은 각 커맨드별로 고유한 OpCode를 지니고 있다. 이 OpCode는 OGF

 

  (OpCode Group Field)와 OCF(OpCode Command Field)로 구성되는데, OGF는 HCI Command를

 

  그 성격 및 역할에 따라 그룹으로 구분짓기 위한 코드이다. 즉 HCI Command가 링크 제어에 관련된

 

  것인지, 베이스밴드에 관련된 것인지, 호스트 컨트럴로의 정보를 얻어오는데 관련된 것인지에 따라

 

  HCI Command를 그룹화하여 각 그룹에 대해서 코드를 부여한 것이 OGF이다. 그리고 각 그룹에 포함

 

  된 각각의 HCI Command에 대해서는 고유한 OCF를 부여하였다. 이러한 OGF와 OCF를 조합을 하면

 

  HCI Command마다의 고유한 OpCode가 만들어진다. 각각의 HCI 커맨드와 이벤트에 대해서는 블루

 

  투스 스펙에 자세히 나와있으므로 이를 참조하기 바란다.

 

    HCI를 구현하게 되면 블루투스의 Inquiry, Paging, Connection 등의 링크 설정과 인증(Encryption)

 

  , 암호화(Authentication), 링크 키(Link Key) 등의 보안이나 Hold, Sniff, Park 등의 커넥션 상태 설정

 

  등 블루투스의 대부분의 동작을 실제로 실행시킬 수 있다. 따라서 블루투스 프로토콜 스택이나 호스트

 

  어플리케이션을 개발하려한다면 제일 먼저 구현해야할 가장 기본이 되는 프로토콜이 HCI이다. 이러한

 

  HCI 구현을 편리하게 하기 위한 소프트웨어 툴도 에릭슨(Ericsson) 등을 비롯한 관련 업체에서 판매

 

  하고 있기도 하다.

 

 

   Logical Link Control and Adaptation Protocol (L2CAP)

 

    L2CAP는 상위 계층 프로토콜과 HCI, 베이스밴드(Baseband) 등의 하위 프로토콜 사이에서 중재 및

 

  조정을 하는 역할을 한다. 논리 채널(Logical Channel)이란 L2CAP 상위의 계층 프로토콜이나 어플리

 

  케이션에서 전달된 데이터를 위해 설정된 채널을 말한다. 실제로 블루투스 프로토콜 스택을 보면

 

  L2CAP 위로 3개의 프로토콜(RFCOMM, TCS, SDP)이 존재한다. 결국 각각의 프로토콜로부터 데이터

 

  가 전달된다면 이를 중재하고, 각각의 데이터를 논리 채널별로 설정하고 관리하여 하위 계층 프로토콜

 

  로 전달할 필요가 있는데 바로 이것이 L2CAP의 역할이다. 그렇다고 L2CAP가 복잡하고 덩치가 큰 프

 



 

<그림5> 프로토콜 스택에서의 L2CAP의 형태

 

 

 

  로토콜은 아니다. L2CAP 프로토콜은 PDA, 휴대폰, 조이스틱 등의 리소스가 제한된 호스트에도 포팅

 

  될 수 있도록 간략함(Simplicity)과 낮은 오버헤드(Low Overhead)를 지녀야 한다.

 

    L2CAP 프로토콜의 대표적인 역할은 프로토콜 멀티플렉싱(Protocol Multiplexing)이다. 베이스밴드

 

  프로토콜은 SDP, RFCOMM, TCS 등의 상위 레이어에 대한 정보를 지니고 있지 않다. 그러므로

 

  L2CAP에서 각 상위 프로토콜에 대한 멀티플렉싱을 수행한다.

 

    또 프로토콜에 대한 분할(Segmentation) 및 재조합(Reassembly)도 L2CAP에서 이루어진다. 베이

 

  스밴드의 프로토콜은 MTU(Maximum Transfer Unit)와 관련되어 패킷의 길이가 제한되어 있다. 따라

 

  서 어플리케이션이나 상위 계층 프로토콜에서 전달된 패킷의 길이가 길 경우에는 베이스밴드 패킷의

 

  길이 제한에 맞게 분할(Segmentation)해야 한다. 반대로 여러개로 분할되어 수신된 베이스밴드의 패

 

  킷은 상위 계층 프로토콜이나 어플리케이션으로 전달하기 전에 재조합(Reassembly)을 해야한다. 이

 

  러한 패킷 관리가 모두 L2CAP에서 이루어진다. 이외에도 L2CAP에서는 QoS(Quality of Service)나

 

  피코넷 구성 시의 그룹화(Grouping)에 관련된 작업도 수행한다.

 

 

   Service Discovery Protocol (SDP)

 

    SDP는 연결된 블루투스 디바이스에서 어떠한 서비스가 가능하고, 그 가능한 서비스의 특징에 관한

 

  정보를 교환하기 위한 프로토콜이다. 즉 SDP를 통해 다양한 디지털 기기에 장착된 블루투스 디바이스

 



 

<그림6> Service Discovery 시나리오

 

 

 

  들이 LAN 억세스 포인트(LAN Access Point), 핸드폰, 팩스, 프린터 등의 서비스가 가능한지에 대한

 

  정보를 교환하는 것이다.

 

    SDP는 서버-클라이언트(Server-Client)의 구조를 지니고 있다. 서버 디바이스는 가능한 서비스의

 

  목록과 각 서비스에 대한 세부사항을 데이터 베이스로 지니고 있다. 클라이언트는 이 서버에 요청하여

 

  서비스에 관련된 정보를 얻을 수 있다.

 

 

   RFCOMM

 

    RFCOMM은 원래 GSM폰의 멀티플렉서(Multiplexer)를 위해 고안된 ETSI(European

 

  Telecommunications Standards Institute)의 TS 07.10을 기반으로 한 것으로 RS-232 9핀 시리얼

 

  포트를 에뮬레이션 하는 역할을 담당한다. 특히 현재 블루투스의 대표적인 어플리케이션인 무선 헤드

 

  셋이나 랜 억세스 포인트의 기반이 되는 시리얼 포트 프로파일(Profile)에 RFCOMM이 사용이 되므로

 

  블루투스 어플리케이션 개발을 위해서는 피해갈 수 없는 프로토콜이다.

 



 

<그림7> RFCOMM의 두가지 통신 모델

 

 

 

    RFCOMM은 보통 두가지 형태의 디바이스에 이용된다. 첫 번째 형태는 두 개의 디바이스가 모두 통

 

  신 상의 엔드 포인트(End Point)가 되어 두 디바이스 사이에 블루투스 링크로 직접 연결이 되는 경우

 

  로 이런 경우를 `Type1 Device'라 한다. 두 번째 형태는 하나의 디바이스는 엔드 포인트이나 나머지

 

  하나의 디바이스가 또 다른 네트워크의 일부인 경우이다. 이런 디바이스를 `Type2 Device'라고 하

 

  며 대표적인 경우가 모뎀(Modem)이다. 그렇다고 두 개의 디바이스 타입이 각각 다른 형태의 프로토

 

  콜을 사용하는 것은 아니며, RFCOMM 프로토콜 자체는 어떤 타입의 디바이스인지에 대한 정보를 지

 

  니고 있지 않다.

 

    RFCOMM은 스펙상으로 동시에 60개의 포트를 열 수 있는 다중 에뮬레이션(Multiple Emulation)을

 

  지원하며 각 포트는 DLCI(Data Link Connection Indentifier)라는 고유한 인자를 지니고 있다. 이러한

 

  다중 에뮬레이션은 두 개의 블루투스 디바이스 사이에서 다중 시리얼 포트를 에뮬레이션 할 수도 있지

 

  만, 여러개의 블루투스 디바이스와 다중 시리얼 포트 에뮬레이션을 하는 것도 가능하다.

 

 

   Telephony Control Protocol (TCS)

 

   TCS는 블루투스의 어플리케이션의 하나인 `3-in-1 Phone'을 구현하기 위해 필수적인 프로토콜로

 

  주로 전화 회선(PSTN)이나 내선(Intercom)을 인터페이스 하기 위한 콜 컨트롤(Call Control)을 담당

 



 

<그림8> TCS 프로토콜을 이용한 어플리케이션

 

 

 

  한다. 실제로 `Cordless Telephony Profile'과 `Intercom Profile'는 TCS 프로토콜을 기반으로 한 프

 

  로파일이다. 이외에도 TCS 프로토콜은 TCS가 지원되는 블루투스 디바이스들을 WUG(Wireless

 

  User Group)이라는 피코넷을 구성하여 관리한다.

 

  

 

    이외에도 L2CAP 상위에는 IrDA나 WAP과 인터페이스 할 수 있는 프로토콜이 구현될 수 있다. 이제

 

  SIG 규정한 블루투스 프로파일에 대해서 알아보기로 하겠다.

 

  에 대해서 살펴보기로 하겠다.

 

 

   블루투스 프로파일(Profile)

 

    이상과 2부에 걸쳐 살펴본 블루투스 프로토콜 스택을 살펴본 결과 결코 실제로 스택을 구현하는 것

 

  은 쉬운 일이 아니라는 생각을 갖게 한다. 그러면서 동시에 과연 이러한 스택을 구현을 했다고 할지라

 

  도 `어플리케이션에 어떻게 적용할 것인가'하는 문제도 결코 쉬운 일은 아닐 것이다.

 

    SIG에서는 코어(Core) 스펙과 더불어 프로파일(Profile) 스펙을 발표하여 현재 버전 1.1까지 나온 상

 



 

<그림9> 블루투스 프로파일(Profile)

 

 

 

  태이다. 이 `프로파일'이란 블루투스 어플리케이션을 구현할 때 특정 어플리케이션마다 사용해야할 프

 

  로토콜의 종류와 그 구조 및 사용 방법을 규정한 것이다. 결국 프로파일은 특정 블루투스 어플리케이

 

  션을 제작할 때 일종의 개발 레퍼런스 역할을 하게 되는 것이다. 또한 어플리케이션이 모두 프로파일

 

  에 따라 제작이 된다면 제작사에 상관없이 어플리케이션이 호환될 수 있다는 장점도 있다.

 

    2001년 2월에 발표된 1.1버전의 프로파일 스펙에는 모두 13개의 프로파일 규정되어 있다. <그림9>

 

  에서 보면 13개의 프로파일의 상관 관계를 쉽게 알 수 있다. 가장 기본이 되는 프로파일은 `Generic

 

  Access Profile(GAP)'로 블루투스 디바이스가 연결할 디바이스를 발견하고, 커넥션을 하여 링크를

 

  설정하는 방법과 이에 관련된 보안(Security)에 관한 내용이 규정되어 있다. 이 프로파일은 제목 그대

 

  로 모든 프로파일의 기초가 된다. 나머지 프로파일은 L2CAP 상위 계층이 어떤 프로토콜이냐에 따라

 

  크게 세가지로 나눌 수 있다. L2CAP 상위 계층으로 SDP를 사용하는 것은 `Service Discovery

 

  Application Profile'이고 TCS 바이너리를 사용하는 프로파일로는 `Cordless Telephony Profile'와

 

  `Intercom Profile'이 있다. 또 RFCOMM을 사용하는 프로파일은 `Serial Port Profile'이라 하여 1.1버

 

  전에서는 가장 큰 비중을 차지하고 있다. 현재 블루투스의 대표적인 어플리케이션인 무선 헤드셋이나

 

  랜 억세스 포인트가 모두 `Serial Port Profile'을 기초로 한다. 또한 블루투스의 대표적 어플리케이션

 

  시나리오 중에 하나인 `자동 동기화(Automatic Synchronization:이메일,주소록,스케쥴 등을 동기화

 

  된 상태에서 자동으로 교환하는 것)'를 위한 `Synchronization Profile' 역시 `Serial Port Profile'을 기

 

  반으로 두고 있다.

 

    이러한 프로파일은 블루투스의 스펙 상 중요한 요소로 블루투스 인증 시 고려 대상 중의 하나이다.

 

  만약 어느 업체에서 개발한 랜 억세스 포인트가 `LAN Access Profile'의 의무(Mandatory) 규정을 지

 

  키지 않았다면 결코 블루투스 인증을 받을 수 없다. 이렇게 하는 가장 큰 이유는 블루투스 어플리케이

 

  션을 표준화 하고 개발 업체와 무관하게 호환성을 유지하기 위함이다.

 

    현재 SIG에서는 새로운 버전의 프로파일 스펙을 발표할 예정에 있으면 현재의 13개 프로파일 외에

 

  상당수의 프로파일이 추가될 것으로 알려지고 있다. 앞으로 블루투스 관련 어플리케이션이 다양해질

 

  수록 이에 관련된 프로파일은 지속적으로 추가될 것이다. 또 현존하는 프로파일이 최상이라고 할 수는

 

  없으므로 이에 관련된 내용이 지속적으로 업데이트 될 것으로 예상된다. 만약 블루투스가 초기의 목표

 

  대로 5달러 이하의 솔루션이 되고, 수많은 가전 기기에 케이블을 대처하며 장착이 된다면 그때는 프로

 

  파일의 개수가 몇백개가 되는 날도 머지 않아 오지 않을까 하는 생각을 해본다.

  
 

< 자료 출처 : Bluetooth.lab >

  
꽤 오래된 자료이지만 블루투스 구조를 이해하는데 많은 도움이 될 듯하여 퍼옴..블루투스랩은 현재 사이트가 폐쇠된 상태이나 출처를 남김..