蓝牙的L2CAP协议
2014-05-05 19:13
393 查看
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的例子:
建立不同类型的L2CAP连接的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)配合使用,如下:
这种情况较为复杂,先说S-Frame,S-Frame用来响应I-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是否是分段过的,格式如下:
TxSeq:Send Sequence Number,对发送的I-Frame计数,用于分段和重组。
ReqSeq:Receive Sequence Number,接受序号,用于重传等
R:Retransmission Disable Bit,用来实现Flow Control.
S:Supervisory function,表示S-Frame的type,定义如下:
P:Poll,The P-bit is set to 1 to solicit a response from the receiver. The receiver shall
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:
在signaling channel上定义的L2CAP PDU的格式如下:
结构和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连接。
source CID为发起这个Req的Device的CID。
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连接时需要的配置。
在这里,DCID就为接受这个req的Device的CID,
Flags不解释
Configuration Options提供所有的配置信息,如果是个empty Configuration,Length配置成0x0004.
Configuration Option的格式定义如下:
Type (1 octet):
配置成0:接收方无法识别option,则拒绝这个req
配置成1:接收方无法是被option,则skip这个req
Length (1 octet):定义option data中的字节数
CONFIGURATION RESPONSE (CODE 0X05):回应CONFIGURATION REQUST
SCID为接受者这个res的Device的CID
Flags (2 octets)不解释
其余的Command的结构和以上的类似,不一一叙述,参考Spec1425-1438.
7.一些Configuration Options
(1)MAXIMUM TRANSMISSION UNIT (MTU):
所有的L2CAP implementations需要支持最下48byte(ACL-U上)和23Byte(LE-U上)。
MTU:the maximum SDU size(字节数)
(2)FLUSH TIMEOUT OPTION;
Extended Flow Specification使用时不用该使用该option。
Flush Timeout以毫秒计算。
其余还有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
未完待续。。。
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的例子:
建立不同类型的L2CAP连接的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)配合使用,如下:
这种情况较为复杂,先说S-Frame,S-Frame用来响应I-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是否是分段过的,格式如下:
TxSeq:Send Sequence Number,对发送的I-Frame计数,用于分段和重组。
ReqSeq:Receive Sequence Number,接受序号,用于重传等
R:Retransmission Disable Bit,用来实现Flow Control.
S:Supervisory function,表示S-Frame的type,定义如下:
P:Poll,The P-bit is set to 1 to solicit a response from the receiver. The receiver shall
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:
在signaling channel上定义的L2CAP PDU的格式如下:
结构和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连接。
source CID为发起这个Req的Device的CID。
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连接时需要的配置。
在这里,DCID就为接受这个req的Device的CID,
Flags不解释
Configuration Options提供所有的配置信息,如果是个empty Configuration,Length配置成0x0004.
Configuration Option的格式定义如下:
Type (1 octet):
配置成0:接收方无法识别option,则拒绝这个req
配置成1:接收方无法是被option,则skip这个req
Length (1 octet):定义option data中的字节数
CONFIGURATION RESPONSE (CODE 0X05):回应CONFIGURATION REQUST
SCID为接受者这个res的Device的CID
Flags (2 octets)不解释
其余的Command的结构和以上的类似,不一一叙述,参考Spec1425-1438.
7.一些Configuration Options
(1)MAXIMUM TRANSMISSION UNIT (MTU):
所有的L2CAP implementations需要支持最下48byte(ACL-U上)和23Byte(LE-U上)。
MTU:the maximum SDU size(字节数)
(2)FLUSH TIMEOUT OPTION;
Extended Flow Specification使用时不用该使用该option。
Flush Timeout以毫秒计算。
其余还有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
未完待续。。。
相关文章推荐
- fzu 2171 线段树 lazy标记
- 开始
- uva 10154 Weights and Measures(dp)
- 蓝牙Host Controller Interface笔记
- JAVA的代码书写规范
- 引导页指示器
- SQL Server获取指定行的数据
- (vc6.0)C++"void __cdecl operator delete(void *)"原因
- Eclipse调试常用技巧
- VIM命令模式与输入模式切换
- python执行系统命令
- java.lang.ClassCastException: android.support.v4.view.ViewPager$LayoutParams
- 蓝牙的OBEX协议
- Eclipse高级调试技巧[转]
- 黑马程序员-简单的登录练习
- IIS 7.5 配置伪静态
- A2DP协议笔记
- wprintf以及std::wcout输出中文的问题
- UVA 12424 Answering Queries on a Tree (树链剖分)
- dell R710 服务器安装windows server 2003和LoadRunner11