一.概述
在前面的文章中介绍了inquiry和ACL connection的建立过程。这个连接建立后,L2CAP signaling channel(CID = 0x0001)就已经存在,可以进行L2CAP连接
二.基本概念
HCI ACL Data Format:
L2CAP Basic information frame (B-frame):
L2CAP的C-Frame,在signaling channel上使用,结构如下:
L2CAP是request-response的通信形式,signaling channel上发送一些控制信息,它的information payload是comamnd的形式,格式如下:
总结下来,就是一些控制信息在signaling channel上发送,采用的C-Frame,information域是上图request packet的形式。定义的commnand code可以查询Spec:page1415-1416。
三.一些步骤的分析
Frame29:L2CAP发出Information request,HCI收到ACL Data
HCI层看到的Data如下:
00001001 00100000 00001010 00000000 00000110 00000000 00000001 00000000 00001010 00011111 00000010 00000000 00000010 00000000
Connection Handle: 00001001 = 0x09 = 9 //占据12个bit
PB:0x10(First automatically flushable packet)
BC:0x00(No broadcast, point-to-point)
Total Length: 00001010 00000000 = 0x000A = 10
绿色部分是L2CAP的Data,前面是HCI层所做的包装.
PDU Length: 00000110 00000000 = 0x0006 = 6
Channel ID:00000001 00000000 = 0x0001(signaling channel)
Information payload:00001010 00011111 00000010 00000000 00000010 00000000
其中command code:00001010 = 0x0a = 10 (Information request)
Identifier:00011111 = 0x1f = 31(response与request保持相同,ps:貌似与opcode类似的样子!!)
Length:00000010 00000000 = 0x02 = 2
Data:00000010 00000000 = 0x02 (Extended features supported)
Frame30:相应的,HCI层发出HCI_Read_Remote_Extended_Features
该command的参数为
Connection_Handle
Page Number
00011100 00000100 00000011 00001001 00000000 00000001
opCode:00011100 = 0x041C
TotalLength = 00000011 =3
Connection handle:00001001 = 9
page Number = 00000000 00000001 = 0x0100(0x0000代表normal LMP features,其余根据page Number确定对应的feature)
Frame31:HCI收到ACL Data,是对方发来的发来的Information request。
这其实是一个互相交换information的过程。
Frame32:收到Max Slots Change event
该Event有两个参数:
Connection_Handle,
LMP_Max_Slots
00011011 00000011 00001001 00000000 00000101
EventCode:0x1b
Total Length: 3
Connection Handle: 9
LMP Max Slots: 5
////这个应该是返回的extended feature吧
Frame33: Read_Remote_Extended_Supported_Features----Command Status
00001111 00000100 00000000 00000010 00011100 00000100
OpCode:0x0f
Total Length: 4
Status: Success 0x00
Number HCI Command Packets: 2
Opcode: 0x041c
Frame34:Read_Remote_Extended_Features_Complete event
该Event参数如下:
Status, Connection_Handle,
Page_Number,
Maximum page number,
Extended_LMP_Features
00100011 00001101 00000000 00001001 00000000 00000001 00000001 00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000
EventCode:0x23
Total Length: 00001101 = 13
Status: Request for remote extended features succeeded
Connection Handle: 0x00001001 = 9
Page Number = 00000000 00000001 = 0x01
Maximum Page Number: 0x01
Extended_LMP_Features: 0x0000000000000001 //根据FEATURE MASK来表示,支持就置为1,这里表示支持3 slot packets
以上完成了一个L2CAp的information request的过程,这个request要求的是Extended features supported,相应的HCI发送HCI_Read_Remote_Extended_Features,page Number为0x00000001,左后返回的
Read_Remote_Extended_Features_Complete event返回了需要读取的Feature,和相同的Page Number0x0000001。
Frame35-37发出Read_RSSI的Command,返回Number Of Completed Packets和command complete event。这个是在L2CAP发出Connection request之前必须的吗??
Frame38:L2CAP发出Connection request,HCI收到相应的ACL Data
00001001 00000000 00001100 00000000 00001000 00000000 00000001 00000000 00000010 00000100 00000100 00000000 00000001 00000000 01000000 00000000
Connection Handle: 00001001 000000 = 9
Broadcast Flag: No broadcast, point-to-point
Packet Boundary Flag: First non-automatically-flushable L2CAP packet
Total Length: 00001100 00000000 = 0x0c = 12
L2CAP部分:
PDU Length: 00001000 00000000 = 8
CID:00000001 000000000 = 0x0001(signaling Channel)
Command Code: 00000010 = 0x02(Connection request)
ID:00000100 = 4
length = 00000000 000000100 = 4
PSM: 00000001 00000000 = 0x0001 (SDP)
Source CID:01000000 00000000 = 0x0040 //定义了request发出和接收的CID
这个request发出,开始建立L2CAP的连接
Frame39:发出Write_Link_Policy_Settings command
Frame40:L2CAP对对方的information request进行response,ID是2
Frame41:对本地发送的information request的response,ID是31。
Frame42:本地L2CAP再次发送information request,ID为32,
Frame43:收到Write_Link_Policy_Settings command的command complete event
Frame44-47是Role discovery command和对应的event
Frame48:HCI收到ACL Data,远端L2CAP发出的对本地的connection request的response
00001001 00100000 00010000 00000000 00001100 00000000 00000001 00000000 00000011 00000100 00001000 00000000 01000100 00000000 01000000 00000000 00000001 00000000 00000000 00000000
Connection Handle: 9
Broadcast Flag: No broadcast, point-to-point
Packet Boundary Flag: First automatically-flushable L2CAP packet
Total Length: 16
L2CAP部分:
PDU Length: 12
Channel ID: 0x0001
Command Code: 00000000 00000011 =0x03 Connection response
Identifier: 4
Command Length: 8
Destination Channel ID: 01000100 00000000 = 0x0044 //发送这个response的CID
Source Channel ID:01000000 00000000 0x0040 //这个CID在request中确定下来
Result: 00000001 00000000 (Connection pending)
Status: No further information available
四.总结
至此,本地L2CAP发送的Connection request已经被远端response,下面将会进行configure的过程,在下一篇中继续介绍。L2CAP connection的建立过程繁琐,涉及的HCI交互的command、event以及ACL Data很多,一些细节容易遗忘。这里还是需要把L2CAP连接的建立过程弄清楚,在整体的框架上进一步深化了解细节,这样对于蓝牙的相关协议会深刻些吧,以上。
- FTS抓包看L2CAP Connection的建立(二)
1.概述 前面一篇博文已经介绍到远端设备对本地的Connection request进行了response,目前L2CAP的连接处于pending状态.这篇将继续抓取下面的一些packets, ...
- FTS抓包看AVDTP
1.概述 测试过程为打开Audio连接,没有听音乐,人后断开Audio连接,主要目的是为了测试AVDTP的工作流程. 2.Frame分析 首先贴出抓取的关于AVDTP的包: 在L2CAP ...
- FTS抓包看蓝牙的SDP整个过程
1.概述 SDP是蓝牙的Service Discovery Protocol,用来发现远程设备能够提供的Service.它只负责发现对方支持的Service,不负责Service的具体实现. ...
- 【转】FTS抓包看蓝牙的SDP整个过程
原文网址:http://blog.sina.com.cn/s/blog_69b5d2a50101f23c.html 1.概述 SDP是蓝牙的Service Discovery Protocol,用 ...
- FTS抓包看蓝牙验证的过程
1.概述 在进行蓝牙设备的连接时,为了保护个人隐私和数据保密的需要,需要进行验证. 2.一些Frame Frame74:本地发送Authentication requset command ...
- charles抓包看性能数据
1.优化某个接口或加载速度(H5加载速度慢) 抓包看Overview ①看Duration,就是接口的加载时间 ②看Latency,就是延时一端传播到另一端所花费的时间:一般和网络有关:可以综合Dur ...
- wireshark抓包看ECN
由于实验需要,要统计ECN信息.为了验证拓扑中是否真的有ECN信息,用了wireshark进行抓包查看. 网上找到的相关有用资料有:http://blog.csdn.net/u011414200/ar ...
- ip头、tcp头、udp头详解及定义,结合Wireshark抓包看实际情况
公司的同事们在分析网页加载慢的问题,忽然使用到了Wireshark工具,我就像发现新大陆一样好奇,赶紧看了看,顺便复习了一下相关协议.上学时学的忘的差不多了,汗颜啊! 报文封装整体结构 mac帧头定义 ...
- WinpCap 使用线程发数,明明发了,返回值0是OK的啊,怎么抓包看不到,难道不支持多线程。。。
if (!m_adapterHandle){ return false;}int rst = pcap_sendpacket((pcap_t*)m_adapterHandle,data ,dat ...
随机推荐
- C#实现UTC时间与Datetime转换
为了便于传输,通信过程中传输的都是:当前时间跟标准时间相隔的秒数,并且是以16进制字节的形式传输的. public double ConvertDateTimeInt(System.DateTime ...
- web应用配置
tomcat 的 server.html 配置文件 加在</Host>之上 <Context path=”/itcast” docBase=”c:\news” /> path虚 ...
- Web安全性测试总结
一.工具扫描 目前web安全扫描器针对 XSS.SQL injection .OPEN redirect .PHP File Include漏洞的检测技术已经比较成熟. 商业软件web安全扫描器:有I ...
- 关于C语言中for循环的执行顺序
for(初始值赋值操作A:终止条件B:递增操作C) { 循环体D: } 其执行次序为:A->B->D->C->B->D->C->B--.. 直到B条 ...
- JVM的基本结构
首先,当一个程序启动之前,它的class会被类装载器装入方法区,执行引擎读取方法区的字节码自适应解析,边解析就边运行(其中一种方式),然后pc寄存器指向了main函数所在位置,虚拟机开始为main函数 ...
- DP ZOJ 3872 Beauty of Array
题目传送门 /* DP:dp 表示当前输入的x前的包含x的子序列的和, 求和方法是找到之前出现x的位置(a[x])的区间内的子序列: sum 表示当前输入x前的所有和: a[x] 表示id: 详细解释 ...
- DFS ZOJ 1002/HDOJ 1045 Fire Net
题目传送门 /* 题意:在一个矩阵里放炮台,满足行列最多只有一个炮台,除非有墙(X)相隔,问最多能放多少个炮台 搜索(DFS):数据小,4 * 4可以用DFS,从(0,0)开始出发,往(n-1,n-1 ...
- BZOJ3679 : 数字之积
设f[i][p2][p3][p5][p7][j][k]表示前i位,2,3,5,7的次数,前i位是否等于x,是否有数字的方案数 然后数位DP即可,ans=cal(r)-cal(l) #include&l ...
- hiho 毁灭者问题
描述 在 Warcraft III 之冰封王座中,毁灭者是不死族打三本后期时的一个魔法飞行单位. 毁灭者的核心技能之一,叫做魔法吸收(Absorb Mana): 现在让我们来考虑下面的问题: 假设你拥 ...
- CentOS 下安装翻译软件星际译 StarDict
wget http://downloads.naulinux.ru/pub/NauLinux/6x/x86_64/sites/School/RPMS/stardict-3.0.2-1.el6.x86_ ...