맨위로가기

OBEX

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

OBEX는 클라이언트와 서버 간의 객체 교환을 위한 통신 프로토콜로, HTTP와 유사한 기능을 제공하지만, IrDA, 블루투스, USB 등 다양한 전송 계층에서 구현될 수 있다는 차이점이 있다. OBEX는 바이너리 형식의 헤더를 사용하여 자원 제한적인 장치에서 효율적으로 파싱할 수 있으며, 단일 연결에서 여러 작업을 처리할 수 있는 특징을 가진다. OBEX는 객체, 필드 및 헤더를 사용하여 데이터를 교환하며, CONNECT, GET, PUT 등의 명령을 통해 세션을 구성한다. OBEX는 OBEX 푸시, 파일 전송 프로토콜, 전화번호부 접근, IrMC, SyncML 등의 프로토콜을 기반으로 하며, Java, C, Python 등 다양한 언어로 구현되어 있다. 또한, 범용 객체 교환 프로필(GOEP), 객체 푸시 프로필(OPP), 파일 전송 프로필(FTP) 등 여러 프로파일의 기반이 되며, 팜, 샤프, 모토로라, 삼성, 소니 에릭슨, HTC, 노키아 등 다양한 장치에서 지원된다.

더 읽어볼만한 페이지

  • 블루투스 - 블루재킹
    블루재킹은 블루투스 연결을 이용해 원치 않는 메시지 등을 전송하는 행위로, 혼란을 유발하거나 게릴라 마케팅에 활용되기도 하며, 블루스너핑과 혼동되기도 하는 2000년대 초반에 등장한 기술이다.
  • 블루투스 - 개인 통신망
    개인 통신망(PAN)은 개인을 중심으로 10m 이내의 범위에서 유·무선으로 장치들을 연결하는 네트워크이며, 무선 개인 통신망(WPAN)은 IEEE 802.15 표준을 따르고 블루투스 메시 네트워킹 기술로 확장되고 있다.
OBEX
일반 정보
프로토콜 유형세션 계층 프로토콜
설계 시기1994년
표준IrDA, SyncML, Bluetooth
포트TCP 15, UDP 15 (공식적으로 할당되지 않음)
기술 세부 사항
특징간단한 이진 프로토콜
클라이언트-서버 모델 기반
다양한 장치 간 데이터 교환에 사용
사용 분야개인 정보 관리 (PIM) 데이터 동기화
파일 전송
객체 교환
관련 기술
관련 프로토콜IrDA
SyncML
블루투스
대체 프로토콜HTTP

2. HTTP와의 비교

OBEX는 클라이언트가 서버에 접속하여 신뢰성 있는 전송을 수행하고, 객체를 요청하거나 제공하는 기능이 HTTP와 유사하다. 그러나 다음과 같은 중요한 차이점이 있다.


  • 전송 방식: HTTP는 일반적으로 TCP/IP 프로토콜 위에서 작동한다. 반면 OBEX는 IrDA 장치에서는 IrLAP/IrLMP/Tiny TP 스택을 사용하고, 블루투스에서는 Baseband/ACL/L2CAP(또는 레거시 사용을 위해 RFCOMM) 스택을 기반으로 구현된다. USB와 같이 다른 방식으로 OBEX를 연결(바인딩)하는 것도 가능하다.
  • 데이터 형식: HTTP는 사람이 읽을 수 있는 텍스트를 사용하는 반면, OBEX는 요청이나 객체에 대한 정보를 "헤더"라는 바이너리 형식의 타입-길이-값 3중 항을 사용하여 교환한다. 이는 자원이 제한된 장치에서 데이터를 더 쉽게 분석할 수 있게 한다.
  • 세션 처리: HTTP 트랜잭션은 기본적으로 상태가 없다. 즉, HTTP 클라이언트는 연결을 열고, 단일 요청을 한 후 응답을 받으면 연결을 닫거나, 관련 없는 다른 요청을 수행한다. 그러나 OBEX에서는 단일 전송 연결로 여러 관련 작업을 처리할 수 있다. 실제로 OBEX 사양에 최근 추가된 기능 덕분에 갑자기 닫힌 트랜잭션을 모든 상태 정보를 유지한 채 재개할 수도 있다.

3. 객체 (Objects)

OBEX는 연결 매개변수 설정, 데이터 전송 및 요청, 현재 경로 또는 파일 속성 변경 등 다양한 목적을 위해 ''객체''를 교환하여 작동한다.

객체는 ''필드''와 ''헤더''로 구성된다. 예를 들어, 모바일에서 전화번호부를 요청하는 데 사용될 수 있는 객체는 다음과 같다.

객체필드명령GET, Final
길이객체의 총 길이
헤더연결 ID1
이름"telecom/pb.vcf"



이 객체에는 두 개의 필드(명령 및 길이)와 두 개의 헤더(연결 ID, 이름)가 포함되어 있다. 첫 번째 필드(명령)는 데이터 요청(GET)임을 지정한다. 두 번째 필드는 두 개의 필드를 포함한 객체의 총 크기이다. 각 헤더의 첫 번째 바이트는 헤더의 이름과 콘텐츠 유형이다.

요청된 데이터를 포함하는 가능한 응답은 다음과 같다.

응답필드응답 코드OK, Final
길이객체의 총 길이
헤더End-of-Body



이 예제에서는 전화번호부가 단일 응답 객체에 포함될 만큼 짧다고 가정한다. 유일한 헤더는 "End of Body", 즉 정보의 마지막 청크(이 경우 유일한 하나)임을 의미하는 식별자를 가진다.

이 예제는 단일 GET 명령과 해당 응답을 보여주며, 관련 헤더는 연결 ID, 이름 및 본문 종료뿐이다. 이 명령을 실행하기 전에 연결 ID를 포함한 연결의 몇 가지 매개변수를 설정하기 위해 CONNECT 명령이 전송되었어야 한다. 다른 명령으로는 put, setpath, action, abort, disconnect가 있다. 다른 주목할 만한 헤더로는 type, time, description, target이 있다.

4. 세션 (Session)

클라이언트(예: 컴퓨터)가 서버(예: 휴대폰)에 연결된 후, 일반적인 세션은 클라이언트가 여러 개의 객체를 전송하고 서버로부터 응답을 받는 것으로 구성된다. 예를 들면 다음과 같다.


  • CONNECT: 필드 중 하나는 클라이언트가 수신할 수 있는 최대 패킷 크기를 지정한다. TARGET 헤더는 클라이언트가 기대하는 서비스 종류(파일 탐색, SyncML, 전화번호부 접근)를 지정한다. 서버는 최대 패킷 길이, 연결 ID 및 기타 데이터로 응답한다.
  • GET: 클라이언트는 파일 이름 및/또는 유형을 지정하여 파일을 요청한다. 서버는 파일 내용 또는 그 일부를 응답한다. 후자의 경우, 클라이언트는 파일의 나머지 부분을 얻기 위해 다른 GET 객체를 전송해야 한다.
  • SETPATH: 클라이언트는 연결 ID와 폴더 이름을 두 개의 헤더에 지정하여 다른 파일 폴더로 전환하도록 서버에 지시한다.
  • GET: 클라이언트는 연결 ID와 적절한 TYPE 헤더(예: 파일 전송의 경우 "x-obex/folder-listing", 전화번호부 접근의 경우 "x-bt/vcard-listing")를 전송하여 폴더 내용 목록을 요청한다.
  • PUT: 클라이언트는 서버에 파일을 전송한다. 단일 패킷에 맞추기에는 너무 크면 서버는 CONTINUE 응답으로 다음 부분을 요청한다.
  • DISCONNECT: 클라이언트는 세션을 닫고 있음을 서버에 알린다.


교환은 서비스에 따라 크게 다를 수 있다. 예를 들어, SyncML은 SETPATH를 사용하지 않으며, OBEX 푸시는 CONNECT (TARGET 헤더 없이), PUT 및 선택적 DISCONNECT로 구성된다. OBEX는 HTTP와 유사하게 클라이언트가 서버에 접속할 때 신뢰성 있는 전송을 수행하고, 접속 후에 객체를 요청·제공한다. 그러나 몇 가지 중요한 차이점이 있다.

  • '''세션 지원''': HTTP의 트랜잭션은 원래 상태를 유지하지 않는다. 일반적으로 HTTP 클라이언트가 요청을 할 때는, 연결을 시작하고, 단일 요청을 하고, 응답을 받고, 연결을 종료한다. OBEX의 경우, 하나의 객체를 전송하는 연결에서 여러 관련 작업을 송수신할 수 있다. 최근 OBEX 사양 추가로 인해 어떤 상태에서도 갑자기 트랜잭션을 중단하고, 그 후 재개할 수 있게 되었다.

5. 프로토콜 (Protocols)


  • OBEX 푸시: 요청 측에서 수신 측으로 파일을 전송한다. 대상이 없는 CONNECTION 객체를 보낸 후, PUT을 사용하여 파일을 전송한다.
  • OBEX 파일 전송 프로토콜: FTP와 유사하게 파일을 저장하고 검색한다. CONNECTION 객체의 대상 헤더는 {0xF9, 0xEC, 0x7B, 0xC4, 0x95, 0x3C, 0x11, 0xD2, 0x98, 0x4E, 0x52, 0x54, 0x00, 0xDC, 0x9E, 0x09}이다. 응답에는 후속 GET, PUT, SETPATH 및 ACTION 객체에서 사용할 연결 ID가 포함된다.
  • 전화번호부 접근: 파일 전송과 유사하지만, 대상 {0x79, 0x61, 0x35, 0xF0, 0xF0, 0xC5, 0x11, 0xD8, 0x09, 0x66, 0x08, 0x00, 0x20, 0x0C, 0x9A, 0x66}을 사용한다. GET 및 SETPATH를 사용하여 telecom/ 아래의 특정 디렉토리에서 전화번호부 항목을 (다양한 정렬 및 필터링 옵션으로) 나열하고 검색할 수 있다.
  • IrMC: IrMC는 전화번호부 항목, 캘린더 항목, 디지털 명함 및 할 일 목록의 교환을 위해 설계되었다. 비 연결 방식에서는 단일 PUT을 사용하여 데이터를 전송한다. 그렇지 않으면 telecom/ 내의 다양한 파일과 폴더를 검색하거나 푸시할 수 있다. GET 요청에서 {'I', 'R', 'M', 'C', '-', 'S', 'Y', 'N', 'C'} 대상 헤더를 사용하여 사용되는 인덱싱 종류를 구분할 수 있다.
  • SyncML: SyncML은 전화번호부, 캘린더, 메모 및 기타 데이터를 동기화할 수 있다. OBEX 바인딩에서 CONNECT 객체의 대상은 {'S', 'Y', 'N', 'C', 'M', 'L', '-', 'S', 'Y', 'N', 'C'}이다. 세션은 이름 없는 XML 또는 WBXML 파일이 차례로 전송 및 수신되는 PUT-GET 쌍의 시퀀스로 구성된다.

6. 구현 (Implementations)

OpenObex는 OBEX의 C 언어 오픈 소스 구현체이다. IrDA, 블루투스, USB, TCP/IP를 통한 연결 기능을 제공하며 오브젝트를 만들고 수신 데이터를 관리한다.

블루투스용 Java API의 선택적 패키지 `javax.obex`는 자바로 OBEX 구현체를 제공한다.[4]

PyOBEX는 파이썬으로 OBEX를 부분적으로 지원한다.[5][2] nOBEX는 PyOBEX의 포크(fork)로, 더 완전한 OBEX 지원과 블루투스 핸즈프리 프로파일 지원을 제공한다.[6][3] nOBEX는 자동차 인포테인먼트 시스템에서 OBEX 테스트를 용이하게 한다.[3]

6. 1. javax.obex

블루투스용 Java API의 선택적 패키지 `javax.obex`는 자바로 OBEX 구현체를 제공한다.[4]

6. 2. OpenObex

OpenObex는 OBEX의 C 언어 오픈 소스 구현체이다. IrDA, 블루투스, USB, TCP/IP를 통한 연결 기능을 제공하며 오브젝트를 만들고 수신 데이터를 관리한다. 클라이언트 애플리케이션의 예는 다음과 같다.

```cpp

void callback_function(...) {

/* 수신된 데이터 처리 */

}

int main() {

OBEX_Init(..., callback_function);

OBEX_TransportConnect(...);

object = OBEX_ObjectNew(...);

OBEX_ObjectAddHeader(object, ...);

OBEX_ObjectAddHeader(object, ...);

OBEX_Request(..., object);

while (...)

OBEX_HandleInput(...)

object = OBEX_ObjectNew(...);

OBEX_ObjectAddHeader(object, ...);

OBEX_Request(..., object);

while (...)

OBEX_HandleInput(...)

/* ... */

OBEX_TransportDisconnect(handle);

OBEX_Cleanup(handle);

}

```

객체는 `OBEX_Request`에 의해 전송된다. `OBEX_HandleInput`을 호출한 후, 수신된 데이터는 콜백 함수(`OBEX_Init`을 호출할 때 지정됨)에서 처리된다. 콜백 함수는 응답이 완전히 수신되었는지 여부를 결정할 수 있으며, 따라서 메인 프로그램이 실행 중인 `while` 루프에서 종료할 수 있는지 여부를 결정할 수 있다.

6. 3. PyOBEX 및 nOBEX

PyOBEX는 파이썬으로 OBEX를 부분적으로 지원한다.[5][2] nOBEX는 PyOBEX의 포크(fork)로, 더 완전한 OBEX 지원과 블루투스 핸즈프리 프로파일 지원을 제공한다.[6][3] nOBEX는 자동차 인포테인먼트 시스템에서 OBEX 테스트를 용이하게 한다.[3]

7. 프로파일 (Profiles)

OBEX는 여러 상위 계층 "프로필"의 기반이 된다.

프로필
분류프로필
IrDA포인트 앤 슛 프로필
적외선 금융 메시징(IrFM) 프로필
블루투스 SIG범용 객체 교환 프로필
객체 푸시 프로필 (휴대폰 간 전송)
파일 전송 프로필 (휴대폰-PC 전송)
동기화 프로필
기본 이미징 프로필
기본 인쇄 프로필
OMASyncML 바인딩


8. 지원 장치 (Supported devices)

장치 종류제조사 및 모델
PDA팜 III 이후 모든 팜 제품 (Palm Pre, Palm Pre Plus, Palm Pixi, Palm Pixi Plus 제외), 2003년 이후 출시된 대부분의 PDA
휴대 전화샤프, 모토로라, 삼성, 소니 에릭슨, HTC, 노키아의 대부분 휴대폰 (적외선 또는 블루투스 포트 탑재), LG EnV Touch (VX11000), 적외선 또는 블루투스 포트 탑재 휴대폰, 기타 대부분의 휴대 전화
안드로이드 기기안드로이드 2.1 이상 버전
윈도우 폰 기기윈도우 폰 7.8 및 8 기기 (블루투스 공유 앱을 통해 사진, 음악, 비디오 전송으로 제한)


참조

[1] 문서 javax.obex API http://docs.oracle.c[...]
[2] 문서 PyOBEX https://pypi.python.[...]
[3] Github nOBEX https://github.com/n[...]
[4] 문서 javax.obex API http://docs.oracle.c[...]
[5] 문서 PyOBEX https://pypi.python.[...]
[6] Github nOBEX https://github.com/n[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com