본문 바로가기
블루투스/L2CAP

L2CAP Packet format (L2CAP PDU)

by 테크쟁이 2023. 1. 25.
반응형

참고자료: https://www.bluetooth.com/specifications/specs/core-specification-5-3/

* Bluetooth 전체 packet 내용은 "Bluetooth Packet Format" 참고

 

L2CAP PDU

- L2CAP에서 관리("블루투스 아키텍처 계층" 참고)

- Information payload를 제외한 L2CAP PDU는 little endian을 사용한다

- Information payload는 프로토콜의 specific에 따라 endian이 결정된다

- CID 값이 없거나 RFU 값이면, 수신측에서 해당 PDU를 무시한다

- PDU Length: Basic L2CAP header를 제외한 L2CAP PDU의 octet 길이이다

- L2CAP PDU 최대 길이는 65,539 octet = 2 (Basic L2CAP header 길이) + 0xFFFF (최대 PDU Length) 이다

- Information Payload 길이는, 상대 디바이스의 MPS 보다 작아야 한다


1. Connection-oriented channel에서 Basic L2CAP mode PDU

L2CAP PDU - Basic L2CAP mode - connection-oriented channel

- PDU Length: Inforation payload 길이로, 최대값은 62235 (0xFFFF) octet 이고, 수신측에서 recombination 할 때 integrity check 용도로 사용한다

- Channel ID: Destination의 endpoint

- Information payload: Upper layer의 protocol이고, 상대 디바이스의 MTU 보다 작아야 한다


2. Connectionless channel에서 L2CAP PDU

L2CAP PDU - connectionless channel

- PDU Length: Information payload 길이 + PSM octet 길이

- Channel ID: 0x0002 (connectionless channel)

- PSM (Protocol/Service Multiplexer): most significant octet의 least significant bit은 0 이어야 하고 (짝수값), 다른 octet의 least significant bit은 1 이어야 한다 (홀수값)

PSM range
Range Type Server에서 사용 Client에서 사용
0x0001 ~ 0x0EFF Fixed
SIG
에서 할당
모든 implementation에 대해 PSM fix이다 SDP에서 PSM을 얻거나, fix service를 사용한다고 가정할 수 있다
PSM
에 의해 사용하는 protocol을 알 수 있다
0x1000 초과 Dynamic PSM은 주어진 implementation에 대해 fix 되거나, SDP가 등록될 때 할당할 수 있다 Reconnection 할 때마다 SDP에서 PSM을 얻는다
각 방향에 따라 PSM은 다르다

 - Information payload: Peripheral에게 전송하는 data로, 상대 디바이스의 MTU 보다 작아야 하고, connectionless MTU (48 octet)의 길이가 변경되는 것을 지원해야 한다


3. Flow Control and Retransmission mode에서 L2CAP PDU

- Supervisory frames (S-frames): I-frame의 acknowledge와 I-frames의 retransmission에 사용된다

L2CAP PDU - Flow Control and Retransmission mode

- PDU Length: 2 or 4 octet (control) + 0 or 2 octet (L2CAP SDU Length) + Information payload 길이 + FCS 길이

- Channel ID: Destination의 endpoint

- Control: 아래 "3-1. Control" 참고

- L2CAP SDU Length: 모든 Segment 길이이며, SDU의 시작 frame에서만 존재하고, 나머지 frame에서는 존재하지 않는다

- Information payload: 길이는 상대 디바이스와 설정한 MTU 이하 이어야 한다

- FCS (Frame Check Sequence): Retransmission Control mode와 Flow Control mode에서는 있어야 하고, Enhanced Retransmission mode와 Streaming mode에서는 있어도 되고 없어도 된다

 

3-1. Control

- Retransmission mode와 Flow Control mode에서는 Standard Control Field (2 octet) 사용

- Enhanced Retransmission mode에서는 Enhanced Control Field (2 octet) 사용

- Streaming mode에서는 Extended Control Field (4 octet) 사용

 

3-1-1. Information frame format (I-frame)

- 정보를 전송할 때 사용

Standard Control Field
Enhanced Control Field
Extended Control Field

- Type: 0 (I-frame)

- TxSeq (Send Sequence Number): retransmission을 위한 I-frame의 순서

- R (Retransmission Disable Bit): 0 (Flow Control GO: 송신측 I-frame RetransmissionTimer가 enable) / 1 (Flow Control STOP: 송신측 I-frame RetransmissionTimer가 disable)

- SAR (Segmentation and Reassembly): L2CAP SDU가 Segmentation 되었는지 알려준다

SAR
SAR bit 설명
0b00 Unsegmented L2CAP SDU
0b01 Start of L2CAP SDU
0b10 End of L2CAP SDU
0b11 Continuation of L2CAP SDU

- S (Supervisory function)

S (Supervisory function)
S bit
(Supervisory function)
설명
0b00 RR(Receiver Ready)
0b01 REJ(Reject)
0b10 RNR(Receiver Not Ready)
0b11 SREJ(Select Reject)

- F (Final): 1 (P bit이 1인 frame에 대한 response)

 

3-1-2. Supervisory frame format (S-frame)

- I-frame에 대한 ACK 또는 retransmission을 요청할 때 사용

Standard Control Field
Enhanced Control Field
Extended Control Field

- Type: 1 (S-frame)

- ReqSeq (Receive Sequence Number): 해당 Sequence Number에 해당하는 I-frame에 대한 ACK, 또는 retransmission 요청 (REJ frame이나 SREJ frame에서)

- R (Retransmission Disable Bit): 0 (Flow Control GO: 송신측 I-frame RetransmissionTimer가 enable) / 1 (Flow Control STOP: 송신측 I-frame RetransmissionTimer가 disable)

- S (Supervisory function)

S (Supervisory function)
S bit
(Supervisory function)
설명
0b00 RR(Receiver Ready)
0b01 REJ(Reject)
0b10 RNR(Receiver Not Ready)
0b11 SREJ(Select Reject)

- P (Poll): 1 (수신측에게 즉각적인 response를 요청할 때 사용하고, 수신측에서는 F bit을 1로 해서 response를 바로 전송해야 한다)

- F (Final): 1 (P bit이 1인 frame에 대한 response)


4. LE에서 L2CAP PDU

L2CAP PDU - LE

- PDU Length: 2 octet (L2CAP SDU Length) + Information payload 길이

- Channel ID: Destination의 endpoint

- L2CAP SDU Length: SDU의 시작 frame에서만 존재하고, 나머지 frame에서는 존재하지 않는다 (SDU Length 보다 길면, 수신측에서 disconnect)

Information Payload 길이는, 상대 디바이스의 MPS 보다 작아야 한다 (MPS 보다 길면, 수신측에서 disconnect)


5. Signaling channel에서 L2CAP PDU

- Signaling command를 전송할 때 사용

L2CAP PDU - signaling channel

- PDU Length: Information payload 길이

- Channel ID: 0x0001 (ACL-U), 0x0005 (LE-U)

- Information payload: Signaling command

Signaling command code
Code Description CID
0x01 L2CAP_COMMAND_REJECT_RSP 0x0001 ~
0x0005
0x02 L2CAP_CONNECTION_REQ 0x0001
0x03 L2CAP_CONNECTION_RSP 0x0001
0x04 L2CAP_CONFIGURATION_REQ 0x0001
0x05 L2CAP_CONFIGURATION_RSP 0x0001
0x06 L2CAP_DISCONNECTION_REQ 0x0001 ~
0x0005
0x07 L2CAP_DISCONNECTION_RSP 0x0001 ~
0x0005
0x08 L2CAP_ECHO_REQ 0x0001
0x09 L2CAP_ECHO_RSP 0x0001
0x0A L2CAP_INFORMATION_REQ 0x0001
0x0B L2CAP_INFORMATION_RSP 0x0001
0x0C ~
0x11
Previously used None
0x12 L2CAP_CONNECTION_PARAMETER_UPDATE_REQ 0x0005
0x13 L2CAP_CONNECTION_PARAMETER_UPDATE_RSP 0x0005
0x14 L2CAP_LE_CREDIT_BASED_CONNECTION_REQ 0x0005
0x15 L2CAP_LE_CREDIT_BASED_CONNECTION_RSP 0x0005
0x16 L2CAP_FLOW_CONTROL_CREDIT_IND 0x0001 ~
0x0005
0x17 L2CAP_CREDIT_BASED_CONNECTION_REQ 0x0001 ~
0x0005
0x18 L2CAP_CREDIT_BASED_CONNECTION_RSP 0x0001 ~
0x0005
0x19 L2CAP_CREDIT_BASED_RECONFIGURE_REQ 0x0001 ~
0x0005
0x1A L2CAP_CREDIT_BASED_RECONFIGURE_RSP 0x0001 ~
0x0005
Other RFU Any
 
반응형

'블루투스 > L2CAP' 카테고리의 다른 글

L2CAP segmentation  (0) 2023.03.12
L2CAP(Logical Link Control and Adaptation Layer Protocol)  (0) 2022.12.18