1.概述
L2CAP能向上層提供面向連接的或者無連接的數據服務,擁有multiplexing capability and segmentation and reassembly operation。能夠接受上層協議或者應用的數據,最大為64K byte,每一個通道都可以進行Flow Control和retransmission。結構如下圖:
幾個主要特點:
(1)Protocol/channel multiplexing
(2)Segmentation and reassembly
(3)Error control and retransmissions
(4)Support for Streaming
(5)Fragmentation and Recombination
(6)Quality of Service
2.常用術語與概念
L2CAP channel:The logical connection between two endpoints in peer devices, characterized
by their Channel Identifiers (CID).(兩個設備之間的邏輯連接,以兩端的CID標識該Channel)
SDU,or L2CAP SDU:L2CAP和上層交換的數據單元,不包含任何L2CAP的協議信息。
Segment,or SDU segment:Segmentation procedure產生,SDU的一部分。注意,在Basic L2CAp模式中不會使用,只會用在Enhanced Retransmission mode,Streaming mode,Retransmission Mode and Flow Control Mode。【這是顯然的,Basic L2CAP沒有Control Field嘛】
PDU, or L2CAP PDU:Protocol Data Unit,包含L2CAP協議信息。控制信息和上層的數據信息等。通常是由a Basic L2CAP header開始的,由以下幾種PDU:
B-frames, I-frames, S-frames, C-frames and G-frames。
B-Frame用在Basic L2CAP Mode中;I-Frame和S-Frame用在Enhanced Retransmission Mode,Streaming mode, Retransmission mode, and Flow Control Mode中;C-Frame專用在L2CAP signaling channel;G-Frame用在Connectionless L2CAP channel,也可用於廣播。
3.CID
CID(CHANNEL IDENTIFIERS),某一條L2CAP連接的兩個端點的標識。有
Fixed Channel 和
Dynamically allocated Channel兩種。如下圖所示:

需要注意的是,ALC-U或者LE-U Logical Link建立起來后,Fixed channel就已經處於有效狀態了。如果幾個遠端設備具有相同的CID,本地設備依然可以識別。下圖是建立CID的例子:
4.Data Packet Format
首先,L2CAP有5種operation mode:
此外,L2CAP有以下幾種連接類型:
A:CONNECTION-ORIENTED CHANNELS in basic L2CAP mode(面向連接,采用基本L2CAP模式)
B: CONNECTIONLESS DATA CHANNEL in basic L2CAP mode(無連接的,采用基本L2CAP模式)
C:CONNECTION-ORIENTED CHANNELS的連接類型分為:BASIC L2CAP MODE和RETRANSMISSION/FLOWCONTROL/STREAMING MODES這兩種(面向連接,重傳/流量控制/流模式)
情況A采用Basic information frame (B-frame),格式如下:
Length參數指的是Information Field的字節數,Information payload 為0到65535字節。
情況B采用Group frame (G-frame),如下:
參數Length為PSM的字節數加上information的字節數,因為是CONNECTIONLESS DATA CHANNEL,所以CID為0x0002。
PSM為Protocol/Service Multiplexer,PSM至少是16bit,此外有限制條件,必須為以下這種格式:
|xxxxxxxx0||xxxxxxxx1|。PSM的定義如下:
可以看出分為連個range,第一個range是SIG分配的協議代表值,第二個range是動態分配的,用來與SDP通信,還可以用來支持特殊協議。
Information部分從0 to 65533字節。
情況C采用Information frame (I-frame)和Supervisory frame (S-frame)配合使用,如下:
Length參數為除了basic L2CAP header的總共字節數。
Control部分對應三種Control mode:
(1)Standard Control Field
(2)the Enhanced Control Field, and the
(3)Extended Control Field
Standard Control Field:用於Retransmission mode and Flow Control mode;
Enhanced Control Field:用於Enhanced Retransmission mode and Streaming mode;
Extended Control Field:用於Enhanced Retransmission mode and Streaming mode。
三種Control Mode的格式如下圖:
Control部分的相關參數解釋如下:
SAR:Segmentation and Reassembly,指明該L2CAP是否是分段過的,格式如下:
ReqSeq:Receive Sequence Number,接受序號,用於重傳等
R:Retransmission Disable Bit,用來實現Flow Control.
S:Supervisory function,表示S-Frame的type,定義如下:
respond immediately with a frame with the F-bit set to 1.
F:Final(1 bit),The F-bit is set to 1 in response to an S-frame with the P bit set to 1.
L2CAP SDU Length(2byte)
如果L2CAP的SDU比較大,跨越了好幾個I-Frame,則SDU Length表示總的SDU的長度。如果SDU沒有分段的話,這個Field不用。需要注意的是,SDU Length只出現在Start I-Frame中,此時I-Frame的SAR=0x01。也就是說,在所有分段的I-Frame中,只有最開始的那個需要指明SDU Length,其余的I-Frame都不需要。
Information Payload Field
根據配置的MPS(MAX PUS)大小,可以填充這個Field。
FCS(2byte)
用來check這個Frame,計算比較復雜,不詳述。
5.SIGNALING PACKET FORMATS
前面講了好幾種類型的PDU,還有一種C-Frame。C-Frame專用在signaling channel(0x0001或者0x0005)上,signaling commands在上面傳輸。需要注意的是:0x0001通道的一個C-frame可以同時傳輸多個command,0x0005只能傳輸一個。payload Length不能超過MTUsig。下圖為定義的Minimum Signaling MTU:
結構和B-Frame是一樣的。
signaling commands的根式如下:
Code (1 octet):指定Command的type,一般有以下幾種:
參數Identifier (1 octet):標識一個req和res,相匹配。
參數Length (2 octets):指明data field字節數。
參數Data (0 or more octets):Command數據。
6.Command
這段描述在Signaling Channel上的Command,共有19種Type.
COMMAND REJECT (CODE 0x01):
CONNECTION REQUEST (CODE 0x02):用來建立連個Device之間的L2CAP連接。
CONNECTION RESPONSE (CODE 0x03):對應CONNECTION REQUEST

注意:參數Destination CID為發出這個res的Device的CID,而Source CID為接受這個Res的Device的CID。【可能是為了和CONNECTION REQUEST的定義相匹配吧】
Result (2 octets):
Status (2 octets):result為pending情況下有效。
CONFIGURATION REQUEST (CODE 0x04):建立L2CAP連接時需要的配置。
Flags不解釋
Configuration Options提供所有的配置信息,如果是個empty Configuration,Length配置成0x0004.
Configuration Option的格式定義如下:
配置成0:接收方無法識別option,則拒絕這個req
配置成1:接收方無法是被option,則skip這個req
Length (1 octet):定義option data中的字節數
CONFIGURATION RESPONSE (CODE 0X05):回應CONFIGURATION REQUST
Flags (2 octets)不解釋
其余的Command的結構和以上的類似,不一一敘述,參考Spec1425-1438.
7.一些Configuration Options
(1)MAXIMUM TRANSMISSION UNIT (MTU):
所有的L2CAP implementations需要支持最下48byte(ACL-U上)和23Byte(LE-U上)。
(2)FLUSH TIMEOUT OPTION;
Extended Flow Specification使用時不用該使用該option。
其余還有QUALITY OF SERVICE (QOS) OPTION,RETRANSMISSION AND FLOW CONTROL OPTION,FRAME CHECK SEQUENCE (FCS) OPTION,EXTENDED FLOW SPECIFICATION OPTION等,可參考4.0的Spec。
8.FRAGMENTATION AND RECOMBINATION