L2CAP: 블루투스 데이터 전송을 연결하는 논리 계층
L2CAP의 블루투스 스택 위치와 채널 구조, 다중화·단편화·흐름 제어·재전송 기능을 BLE와 BR/EDR 관점에서 정리한다.
2026-08-14 · 최초 발행 2025-07-16
HCI 위에서 데이터 경로를 정리하는 L2CAP
L2CAP(Logical Link Control and Adaption Protocol, 논리 링크 제어 및 적합 프로토콜)은 블루투스 호스트 영역의 중심 계층이다. 상위 소프트웨어 계층이 만든 데이터를 하위 물리 계층으로 전달하고, 반대 방향의 데이터도 적절한 상위 프로토콜에 넘긴다.
RFCOMM, SDP 같은 상위 프로토콜과 베이스밴드 사이에서 공통 접점을 제공하므로, 블루투스 통신은 하나의 물리 링크 위에서도 여러 데이터 흐름을 다룰 수 있다. BLE(Bluetooth Low Energy)와 BR/EDR(Basic Rate/Enhanced Data Rate)에서는 이 계층이 서로 다른 특성으로 동작한다.
논리 채널에 담긴 전송 제어
L2CAP은 연결 지향형과 비연결 지향형 통신을 모두 다룬다. 연결 지향형 채널은 신뢰성 있는 양방향 데이터 흐름을 제공하며, BR/EDR에서 주로 사용된다. 이 방식에는 연결 설정, 데이터 전송, 연결 해제 과정이 포함된다.
비연결 지향형 채널은 단순한 데이터 교환에 적합하다. BLE는 주로 비연결성 통신만 지원하며, 상태 정보나 센서 데이터를 전달하는 경우에 활용할 수 있다.
하나의 물리 링크를 여러 상위 프로토콜이 함께 사용하는 일도 L2CAP의 역할이다. 프로토콜 서비스 다중화기(Protocol Service Multiplexer, PSM) 값은 데이터 스트림을 해당 상위 계층으로 라우팅하는 기준이 되고, 채널 식별자(Channel Identifier, CID)는 각 논리 채널을 구분한다.
전송 단위가 하위 계층이 다룰 수 있는 크기를 넘으면 L2CAP이 이를 나눈다. 수신 측은 나뉜 조각을 원래 데이터로 재조립한다. 처리 기준은 MTU(Maximum Transmission Unit) 크기이며, 예를 들어 1KB RFCOMM 데이터는 베이스밴드가 처리할 수 있는 크기인 예: 256바이트로 분할해 전송할 수 있다.
수신 버퍼가 감당할 수 있는 범위를 넘지 않도록 전송 속도를 조절하는 것도 L2CAP이 맡는다. 크레딧 기반 흐름 제어에서는 수신 장치가 처리 가능한 패킷 수를 송신 장치에 알린다. 윈도우 기반 흐름 제어는 슬라이딩 윈도우로 전송 가능한 패킷 수를 제한한다.
패킷 손실이나 오류에 대응해야 할 때는 재전송 기능을 사용한다. Enhanced Retransmission Mode(ERTM)는 타임아웃과 ACK 기반의 향상된 재전송 메커니즘이며, Streaming Mode(SM)는 실시간 데이터 스트리밍을 위한 낮은 지연시간 모드다. 어느 모드를 선택할지는 애플리케이션 요구사항에 달려 있다.
L2CAP은 상위 데이터를 표준화된 패킷 형식으로 캡슐화하고, 전송 우선순위와 QoS(Quality of Service) 요구사항을 고려해 대역폭을 할당한다.
헤더와 정보 페이로드로 구성되는 패킷
L2CAP 패킷은 정보 페이로드 길이와 목적 논리 채널을 나타내는 헤더, 실제 데이터를 담는 페이로드로 이뤄진다.
- Length는 정보 페이로드의 길이(바이트)다.
- Channel ID는 패킷이 전달될 논리 채널 식별자다.
- Information Payload에는 실제 데이터가 들어간다.
제어와 데이터 전달을 나누는 CID 범위
신호 채널은 CID = 0x0001이며, L2CAP 제어 명령을 전달한다. 연결 설정, 구성, 해제에 필요한 신호 처리가 이 채널에서 이뤄진다.
CID = 0x0040~0xFFFF 범위의 연결 지향형 채널은 양방향 데이터 통신을 위한 채널이다. 신뢰성 있는 데이터 전송을 제공한다.
CID = 0x0002~0x003F 범위의 그룹 채널은 여러 장치에 데이터를 보낼 때 사용한다. 브로드캐스트 또는 멀티캐스트 통신이 여기에 해당한다.
BLE에서 간소화된 L2CAP
BLE에서는 L2CAP 기능이 간소화된다. 주로 비연결 지향형 통신을 지원하고 고정된 채널 할당 방식을 사용한다. LE Credit Based Flow Control 모드는 BLE에 맞춘 흐름 제어 메커니즘이다.
스택 구현에서 만나는 L2CAP
안드로이드 블루투스 스택에서는 L2CAP 소켓을 생성해 연결한 뒤 스트림으로 데이터를 전송할 수 있다.
// L2CAP 소켓 생성 예시 코드
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
BluetoothDevice device = adapter.getRemoteDevice(deviceAddress);
BluetoothSocket socket = device.createL2capChannel(psm);
socket.connect();
// 데이터 전송
OutputStream out = socket.getOutputStream();
out.write(data);
임베디드 환경에서는 패킷 길이, CID, 페이로드를 구조체로 표현하고 전송 함수에서 단편화와 전송 로직을 처리할 수 있다.
// 간단한 L2CAP 패킷 구조체
typedef struct {
uint16_t length;
uint16_t cid;
uint8_t payload[MAX_PAYLOAD_SIZE];
} l2cap_packet_t;
// L2CAP 패킷 전송 함수
int send_l2cap_packet(l2cap_packet_t *packet) {
// 패킷 단편화 및 전송 로직
// ...
return SUCCESS;
}
블루투스 서비스의 기반 계층
L2CAP은 혈압계와 혈당계 같은 헬스케어 기기와 스마트폰 사이의 데이터 교환에 쓰인다. 스마트워치와 피트니스 트래커 같은 웨어러블 디바이스, 스마트홈 기기와 센서 네트워크를 포함한 IoT 기기의 데이터 전송도 같은 기반 위에 놓인다.
블루투스 헤드폰과 스피커의 고품질 오디오 전송, 차량 내 블루투스 시스템과 모바일 기기를 연결하는 자동차 인포테인먼트 역시 L2CAP을 활용하는 영역이다.
저전력 요구사항에 맞춘 프로토콜 최적화, IoT 장치 확산에 대응하는 대규모 연결 관리, 안전한 데이터 교환을 위한 보안 메커니즘 강화, 5G 네트워크 통합용 인터페이스 개발은 L2CAP이 발전하는 방향이다. 스마트 기기와 IoT 환경이 늘어나는 만큼 이 계층의 중요성도 계속 증가할 전망이다.