블루투스프로토콜의설계및구현 김명규, 한동원, 이전우한국전자통신연구원, 컴퓨터소프트웨어연구소 makim@etri.re.kr Design and Implementation of Bluetooth Protocol Myunggyu Kim, Dong-Won Han, Jeon-Woo Lee ETRI, Computer and Software Technology LAB 요 약 최근블루투스하드웨어, 프로토콜, 서비스의개발이활발히이루어지고있으며내년부터는블루투스를탑재한다양한기기들이본격적으로나타날전망이다. 블루투스는컴퓨터및주변기기, 이동단말, 정보가전등에사용될근거리무선통신방식이다. 본논문에서는블루투스프로토콜의설계및구현을기술한다. 우리는스펙 v1.0b에따라블루투스프로토콜의구성요소인 HCI 드라이버, L2CAP, RFCOMM, Bluenet을 Linux와 Windows NT에구현하였다. 이결과물은 ERICSSON과 CSR 개발보드를구동하며, 현재 Linux와 Windows NT 에서복수의디바이스간의무선데이터통신에사용할수있다. 구현된프로토콜은 ERICSSON, CSR 및 Diganswer 데모카드들중임의의두기기간의 RFCOMM 이나 Bluenet을이용한 TCP/IP 를포함한직접적인데이터통신을지원한다. 또한임의의한기기를경유하여두시스템사이의 Bluenet을이용한간접적인 TCP/IP 통신도가능하다. 1. 서론 블루투스는저전력근거리무선통신프로토콜이다. 처음에 ERICSSON 에서제안하였으며, 현재는 ERICSSON, Nokia, Intel, Motorola, Microsoft, ETRI, Samsung 등수백여개의통신하드웨어및소프트웨어개발회사들이직간접적인형태로표준화, 하드웨어의제작및프로토콜을포함한미들웨어개발, 및응용서비스개발에참여하고있다. 이와같이세계굴지의정보통신개발자들이블루투스라는조금은새로운영역에뛰어들고있는이유는블루투스가가지는잠재적영향력에주목하고있기때문이다. 초창기블루투스를고안하게된이유는컴퓨터와주변기기들사이의모든케이블을무선통신방식으로대치하려는것이었다. 하지만이제는더나아가 PDA, 휴대폰을포함한이동단말및디지털 TV, 지능형냉장고를포함한인터넷정보가전사이의데이터및음성통신의영역까지블루투스를사용하려고하고있다. -1-
블루투스시스템은 2.5GHz의 ISM(Industrial Scientific Medicine) 밴드에서작동한다. 블루 투스송수신기는고정된주파수로작동하지않고 2.4에서 2.5 사이의, 1 MHz 간격의, 79개의 주파수를호핑(hopping) 하여송수신한다. 주파수호핑알고리즘은블루투스배이스밴드규 격서에기술되어있는방식을따라야한다. 주파수호핑방식을이용하는이유는같은주파 수대를사용할지모르는다른무선통신들에의한간섭및감쇄를방지하려는목적과보안 알고리즘을구현하기위한목적때문이다. 커넥터가없는블루투스송신기는 1 mw(0 dbm) 로작동되는것을가정된다. 안테나커넥터를 부착한경우 0.25 mw(-6 dbm) 에서 100 mw(20 dbm) 까지의전력으로작동될수있으며, 1mW이 상의전력을사용할경우전력관리가요구된다. 본문에서는블루투스하드웨어의상위계층프로토콜의설계및구현을기술한다. 2장에서 는블루투스프로토콜의전체적인구조에대해설명하고, 3장에서는블루투스하드웨어를 구동하기위한 HCI(Host Controller Interface) 에대해기술하며, 4장에서는 L2CAP(Logical Link Control and Adaptation Protocol) 의 설계 및 구현에 대해 기술한다. 5장에서는 L2CAP 위의응용프로토콜의설계및구현에대해기술하는데특히 RFCOMM과 Bluenet 에대해강조한다. 6장에서는 ERICCSSON, CSR 및 Digianswer 데모카드를이용한사연 구성과시연결과에대해기술하고,7 장에서결론을맺는다. 2. 블루투스프로토콜아키텍쳐 [ 그림 1] 블루투스프로토콜계층구조 그림 1 은블루투스프로토콜의전체계층구조를보여준다. 이그림에서가운데화살표밑의부분이하드웨어및하드웨어를구동하는펌웨어부분이며, 화살표위의부분이단말에서구현하여야하는소프트웨어부분이다. 제일밑의 RF 는실제전파송수신기를컨트롤하는부분이다. Baseband는물리계층의연결관리프로토콜과조절기를포함하며, 에러복구, 논리적채널관리, 주파수호핑알고리즘, 보안의역할을담당한다. 물리계층의연결종류로는신뢰성이없는 SCO(Synchronous Connection-Oriented) 링크와신뢰성을보장하는 ACL(Asynchronous Connection-Less) 링크가있는데 SCO 는음성통신에, ACL 은데이터통신에사용된다. -2-
그림 1에서는 Baseband 가 Link Manager 를포함하나, Link Manager를독립적으로표시 하기도한다. 실제블루투스프로토콜의구현은 HCI(Host Controller Interface) 와 HC(Host Controller) 없이바로컨트롤패킷과데이터패킷을 Baseband 에전송할수도있다. 하지만이논문에 서는그림 1과같이 HCI와 HC가상위계층과하위계층을매개하는방식만을다루며화살 표위의상위계층에만초점을맞춘다. 그림 1에서화살표로나타낸물리적인인터페이슨 RS232, USB, PCMCIA 인터페이스등이있다. 3. HCI(HOST CONTROLLER INTERFACE) HCI 는 baseband 컨트롤러, link manager와하드웨어상태및리지스터에대한명령인터 페이스이다. 이인터페이스는물리적인인터페이스가 RS232, USB, PCMCIA등어는것이 건통일된방식을제공한다. HCI는 command를 전송하고 event 를 수신하는 방식으로 작동하고, 그림 1의 CE(Command and Event) 에해당한다. 1개의 command에대해복수의 event 가발생할 수 있으며, command 없이도 event 를 수신할 수 있다. 후자의 경우로는 Connection Complete event, NOCP(Number of Complete Packets)event 등이있다. HCI command 중중요한것으로는다음과같은것들이있다. 1. Read_BD_ADDR : 블루투스디바이스의 48 비트 IEEE 802 주소를읽는다. 2. Read_Buffer_Size : Host Controller 의버퍼사이즈를알아낸다. 이명령을보낸후얻 어진 Command Complete Event를통해 HC가수용할수있는 ACL과 SCO의최대데이 터패킷사이즈및최대패킷수를얻을수있다. 이값들과연결이맺어지고데이터를송 신한후얻어지는 NOCP event를이용하여 HCI에서 HC 로의흐름제어를수행하여야한다. 3. Reset : 초기화한다. 4. Set_Event_Filter : 이명령을이용하면, 어떤디바이스들만 Inquiry를통해발견한다든 지, 어떤종류나주소의디바이스로부터의 connection 요청만수락한다는등의필터작업을 수행할수있다. 5. Write_Page_Timeout : 원격의디바이스로연결요청을한후기다리는시간을설정한 다. 6. Write_Scan_Enable : 임의의원격디바이스가내디바이스를 Inquiry 명령을통해발견 할수있게허락한다. 7. Inquiry : 내디바이스주위에어떤디바이스가있는지를발견하는명령이다. 8. Create_Connection : 원격의디바이스로 1개의 ACL 연결을맺는다. 9. Add_SCO_Connection : 1개의 ACL 연결이맺어진후에만사용할수있으며, 1개의 SCO 연결을맺는다. 8이나 9의명령이성공하면양디바이스에는 Connection Complete event 가발생하며, 연결을관리하기위한 1개의 handle 을얻을수있다. 10. Disconnect : 8이나 9에서 얻어진 handle 을 변수로 포함하며, 양 디바이스에는 Disconnection Complete event 가발생한다. -3-
이번개발에사용된 ERICSSON과 CSR의물리적 HCISMS RS232 이며, Digianswer 는 PCMCIA 이다. 개발시스템에명령2를보낸후얻어지는흐름제어에필요한값들은다음표 와같다. [ 표 1] ERICCSON, CSR과 Digianswer에서버퍼변수값들 프로토콜을구동한후의공통된명령들은 1,2,4,5,6 이며, 1개의 ACL 연결을맺기위해 7,8 의명령을전송한다. 9개의명령을통해맺어진 SCO 링크는신뢰성을보장하지않으며, 일반적으로음성통신에 사용되고, 따로상위계층의프로토콜을필요로하지않는다. 8의명령을통해맺어진 ACL 링크는신뢰성을보장한다. ACL 링크를구성한후 2디바이스는다음그림과같은규격의 ACL 데이터패킷을송수신할수있다. * 숫자는 bit 수 * PB : Packet Boundary flag * BC : Booadcast flag [ 그림 2] ACL 패킷규격 이그림에서 PB 가 10은다음장에서설명할 L2CAP 패킷이시작된다는것을, 01은연속 되는 L2CAP fragmentation 패킷이라는것을의미한다. -4-
4. L2CAP (LOGICAL LINK CONTROL AND ADAPTATION PROTOCOL) 2블루투스디바이스사이에 1개의 CAL을맺은후이 2디바이스는하위계층의 baseband 프로토콜에의해순서적으로손실없이데이터를주고받을수있다. 실제로 CSR개발시스 템과함께제공되는 bluechat 이란데모프로그램은상위계층이전혀없이파일전송과 채팅을수행한다. 그러면왜최상위계층의응용프로토콜과 HCI 사이에 L2CAP이란프로 토콜이필요한것인가. 그이유는다음과같이설명할수있다. 1. 1개의 ACL 링크를복수의다른서비스, 즉상위계층응용프로토콜이공유할필요가 있다. 2. 상위계층응용프로토콜은앞장의 HCI 버퍼사이즈와무관한독립된 MTU(Maximum Transfer Unit) 등의통신매개변수값을가지며, 따라서상위계층프로토콜이생성한패 킷을 ACL 패킷 사이즈로 fragmentation 하거나 HCI로 수신한 ACL 패킷들을 re-assembly 할필요가생긴다. 3. 블루투스는충분한컴퓨팅파워와메모리를갖고있는데스크탑뿐만아니라 PDP, 핸 드폰, 헤드셀등그컴퓨팅파워와메모리사이즈에서큰차이를갖고있는기기들사이에 서의통신도가능해야하며, 따라서이기기들사이의 MTU, Flush Timeout, QoS(Quality of Service) 등에관한협상이필요하다. 4. 복수의디바이스들간의그룹통신이필요하다. 따라서 L2CAP 은다음과같은역할을수행한다. 1. 상위계층프로토콜멀티플렉싱 2. 패킷 segmentation/re-assembly. 3. QoS 정보의전달및협상 4. 그룹 통신의 지원 : 상위 계층의 프로토콜은 그룹이라는 개념을 가질 수 있으며, baseband는복수의디바이스들의 piconet 을형성할수있다. L2CAP은상위계층프로토 콜의그룹을 baseband piconet으로 mapping 한다. 1개의 ACL 링크를사용하며, 두 L2CAP은 connection oriented data channel을맺기위 해 CID(channel id) 가 0x0001인 signalling 패킷들을주고받으며협상을한다. 협상이성공 하면, 두 L2CAP은새로얻어진각각의 CID( 한쪽의입장에서보면 1개의 local CID 와 1개 의 remote CID) 를이용하여 1개의 connection-oriented data channel 이형성되어데이 터패킷들을주고받을수있다. 이외에도 1개의 L2CAP은 CID 0x0002인 connectionless data channel을이용하며복수 의원격 L2CAP 에게데이터를전송할수있다. -5-
Connection-oriented (signalling or data)channel과킷규격은다음그림과같다. Connectionless data channel 의패 [ 그림 3] L2CAP 패킷규격 connection-oriented channel 을 맺고 데이터를 주고 받으며, 채널을 제거하기 위해 L2CAP이 가질 수 있는 상태는 CLOSED, W4_L2CAP_CONNECT_RSP, W4_L2CA_CONNECT_RSP, CONFIG, OPEN, W4_L2CAP_DISCONNECT_RSP, W4_L2CA_DISCONNECT_RSP 이다. L2CAP 이이벤트에의해액션을취하고, 상태전이를 하는과정은다음그림과같다. [ 그림4] L2CAP 기본동작의 Message Swquence Chart -6-
실제구현의관점에서다음장에서설명할상위계층의프로토콜이쉽게인터페이스될수있도록 L2CAP 과상위계층프로토콜에대해자료구조를정의하였다. 5. 상위계층프로토콜(RFCOMM 과 BLUENET 을중심으로) 상위계층의프로토콜의 L2CAP 위에위치하며실제서비스를제공하는서비스및응용프로토콜을총칭한다. 이의종류로는 SDP(Service Discovery Protocol), TCS(Telephony Control Protocol), RFCOMM, Bluenet 등이있다. L2CAP 은이런상위계층프로토콜을 PSM(Protocol/Service Multiplexer) 라는 16bit 값을이용하여식별한다. 이중 SDP는이용가능한서비스를발견하는일을도와주고, PSM은 0x0001 을가지며, 기본적으로구현하여야할기능이다. TCS는블루투스디바이스들사이의단수또는복수의음성이나데이터콜을성립하기위해필요한조절기능을담당하고, PSM은 0x0005 를가진다. 이논문에서우리는현재구현이완료된 RFCOMM과 Bluenet 에대해서만기술한다. 5.1 RFCOMM(Serial Port Emulation)-PSM 0x0003 RFCOMM은기존의시리얼포토를사용하는응용프로그램이포트명을제외한아무런프 로그램의 변경 없이 사용될 수 있도록 해 주는 기능을 제공한다. RFCOMM 은 PSM 0x0003 을가지며, 실제데이터통신응용프로그램을직접적용할수있는기본적인서비 스이다. TCP/IP 통신을위하여이 RFCOMM 위에서 PPP 데몬이실행되는것이가능하여 야한다. Linux 에서는이와같은기능을갖고있는디바이스가 /dev/tty?? 의형태로다수존재한다. 블루투스프로토콜코어가어떤 /dev/pty?? 매스터디바이스를, 응용프로그램이상용하는 /dev/tty?? 슬레이브디바이스를오픈하면, 블루투스프로토콜코어와응용프로그램사이 의 IPC(Inter-Process Communication) 이가능하다. 또한응용프로그램은 /dev/tty?? 위 에 PPP 데몬을작동시켜, 다른 TCP/IP 응용프로그램을사용가능하게만들수도있다. Windows NT 에서는블루투스프로토콜코어가 CreateNamedPipe() 로양방향파이프를 만들고 ConnectNamedPipe() 로 양방향 파이프의 한 쪽 끝을 열며, 응용 프로그램은 CreateFile() 이란 COM 포토를사용할때와똑같은함수로이양방향파이프의다른쪽끝 을열면, Linux 에서처럼데이터송수신이가능하다. 단아직 Windows NT에서도 PPP 데 몬을양방향파이프위에구동할수있는지는불확실하다. 우리는 RFCOMM의디플트 MTU 값으로 256 octets 을사용하였다. 5.2 Bluenet(Point-to-Point Ethernet Emulation)-PSM 0x0007 Bluenet 은블루투스스펙에표준으로채택된서비스프로토콜은아니며, Digianswer에서고안한네트워킹방식이다. Bluenet이란이름도 Digianswer 가명명하지는않았고우리가설명의편의성을위해붙인이름이다. Bluenet의기본적인아이디어는모든헤더를포함한 ethernet 패킷전체를블루투스를통해송수신하는것이다. 우리는앞절에서 RECOMM 위에 PPP 데몬을구동하여 TCP/IP 통신이가능하다는사실을살펴보았다. 그러면 Bluenet을이용한 TCP/IP 통신이표준도아닌데꼭필요한가에대한의문이생길수도있다. 대답은필요하다는것이다. 그이유는다음과같다. -7-
1. IP/PPP/RFCOMM 에서는다른네트워크사이의라우팅(routing) 은라우터블루투스디바이스이 IP 계층에서가능하나, IP/Bluent 에서는 ethernet 계층에서의라우팅이가능하여매우더효율적이다. 2. Bluenet의 MTU인 1600 octets은 PPP/RFCOMM의 MTU 256 octets 보다매우더커, 실제 TCP/IP 통신이더욱빠르다. 실제로실험을통해 TCP/IP/Bluent이 TCP/IP/PPP/RFCOMM 보다 3배이상빠른것을관측할수있었다. Bluenet을구현하기위해서는 a. 블루투스프로토콜의 bluenet 담당부분, b. 커널레벨소프트웨어이더넷드라이버부분과 c. 커널부분과블루투스프로토콜사이의 I/O 부분이렇게 3 부분이필요하다. 부분 a는 Windows NT 이건 Linux 이건 OS 독립적으로구현하였으며, 이더넷패킷의라우팅및라우팅테이블관리기능을포함하고있다. 부분 b와 c는현재 Linux 에서만구현이되어있다. 부분 b는 Linux 커널모듈형태로구현하여런타임에삽입및제거가가능하도록구현하였으며이드라이버가제공하는이더넷인터페이스는 btn0 라는이름을갖는다. 부분 a에의해이이더넷디바이스의맥주소 (IEEE 802 주소) 는 3장에서기술한 Read_BD_ADDR HCI 커맨드로부터얻어진블루투스주소로설정할수있다. 또한부분 a에의해임의의 IP 주소로설정가능하며, 로컬네트워크로 IP 라우팅테이블설정이가능하다. 부분 c는기존의 Linux 커널의 Kernel/User network link driver 를이용하여 /dev/btnet 의형태로구현하였다. 6. 시연구성및결과 [ 그림 5] 복수의 RFCOMM/L2CAP 채널설정 -8-
그림 5에서직사각형의블루투스개발보드는 ERICCSON 보드이고, 반달모양의보드는 CSR 에서만들어진것이다. 이그림은 1개의 ACL 링크를설정한후복수의 RFCOMM/L2CAP 채널을설정하는과정을보여주고있다. 데스크탑이 450MHz Pentium Ⅱ이고노트북이 200MHz Pentium MMX 일때 1개의 RFCOMM 연결의 throughput 이 43kbps 정도측정되었다. 이경우 RFCOMM 위에 PPP 데몬을구동하고 ping을이용하여측정한 RTT(Round Trip Time) 는 120msec 정도이다. [ 그림 6] Bluenet 라우터를경유한 TCP/IP/Bluenet 통신 그림 6은 bluenet 라우터를경유하여 TCP/IP/Bluenet 을시연하는구성도이다. 이그림에서중간의 Digianswer PC Card를구동하는프로토콜스택이 ethernet 패킷을라우팅하는데도 60msec 의 RTT 값이얻어져, PPP/RFCOMM 보다 Bluenet이 3배이상빠르다는것을확인할수있었다. -9-
7. 결론 블루투스는최근근거리무선통신방식으로각광을받고있는분야로, 우리는표준화된스펙에따라프로토콜을설계및구현하였다. 또한스펙에정의된것이외에도이기종간의 TCP/IP 통신을지원하기위해 Digianswer에서정의한 Bluenet을상위계층프로토콜로구현하였다. 우리의결과물은수십시간의작동에도안전적으로작동됨을확인할수있었다. 앞으로이결과물은더욱확장되어기본적인 SDP(Service Discovery Protocol) 을포함하고, 다른응용서비스들도개발할계획이다. 블루투스는데스크탑이나노트북이외에도많은임베디드시스템에도채택될전망이다. 따라서이논문에서살펴본블루투스프로토콜은 PDA 를비롯한임베디드시스템및무선홈네트워킹구성에도이용되어, 여러응용서비스연구개발에활용될수있기를기대한다. 감사의글 이프로토콜구현에많은조언을주신한국전자통신연구원, 컴퓨터소프트웨어연구소, 휴 대클라이언트연구팀여러분께감사드립니다. 참고문헌 [1] Specification of the Bluetooth System, Core, vl.0 B, Dec 1999. [2] Specification of the Bluetooth System, Profile, vl.0 B, Dec 1999. [3] ERICSSON Bluetooth Solutions, ERICSSON, Sep 1999. [4] BlueCoreTM Evaluation System, CSR (Cambridge Silicon Radio), May 2000. [5] Digianswer Bluetooth Neighborhood v.4.02, Digianswer, 2000. [6] W. Stevens, TCP/IP Illustrated Vol. 1, The Protocols, Addison-Wesley Publishing Company, Jan 1995. [7] G Wright and W. Stevens, TCP/IP Illustrated Vol. 2, The Implementation, Addison-Wesley Publishing Company, Jan 1995. [8] W. Simpson, The Point-to-Point Protocol (PPP), RFC 1661, Jul 1994. [9] A. Rubini, Linux Device Drivers, O'Reilly & Associates, 1998. [10] M. Beck et al, Linux Kernel Internals, 2 nd edition, Addison Wesley Longman, 1998. [11] MSDN Library Visual Studio 6.0, Microsoft Corporation, 1998. [12] Linux Document Project (LDP). Refer to http://sunsite.unc.edu/mdw/linux.html. -10-