1.概述

    前面一篇博文已经介绍到远端设备对本地的Connection request进行了response,目前L2CAP的连接处于pending状态。这篇将继续抓取下面的一些packets,来看L2CAP Connection的建立过程。
 
2.一些Frame
Frame50:HCI收到ACL Data,传到L2CAP层,是远端的information request
00001001 00100000 00001010 00000000 00000110 00000000 00000001 00000000 00001010 00000011 00000010 00000000 00000011 00000000
Connection Handle: 9
Broadcast Flag: No broadcast, point-to-point
Packet Boundary Flag: First automatically-flushable L2CAP packet
Total Length: 10
PDU Length: 6
Channel ID: 0x0001
Code: 00001010 = 0xa Information request
Identifier: 3
Command Length: 2
InfoType: 00000011 00000000 = 0x0003 Fixed Channels supported
注:这里远端设备显然查询本地设备支持的fixed Channel类型
 
Frame51:返回information response,HCI收到L2CAP层的ACL Data
00001001 00100000 00010100 00000000 00010000 00000000 00000001 00000000 00001011 00000011 00001100 00000000 00000011 00000000 00000000 00000000 00001010 00000000 00000000 00000000 00000000 00000000 00000000 00000000
这里只看重点部分:
Channel ID: 0x0001
Code: 00001011 = 0x0b Information response
InfoType: 00000011 00000000 = 0x03 Fixed Channels Supported
Result: Success
        Data:8个字节表示支持的fixed channel,p1427和p1430
   这里表示支持L2CAP Signaling channel和AMP Manager Protocol Channel这两个fixed Channel
注:这里本地设备返回response,表明自己支持两个fixed channel,分别是L2CAP Signaling channel和AMP Manager Protocol Channel这两个fixed Channel。
 
Frame54:远端设备再次返回information response
  这次返回的是上面中介绍的Frame42:本地发送的ID为32的information request
00001001 00100000 00010100 00000000 00010000 00000000 00000001 00000000 00001100 00000000 00000011 00000000 00000000 00000000 00000010 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Code: 0x0b Information response
Identifier: 0x20 = 32 //对应上次的information request
        InfoType: 0x03  Fixed Channels Supported //也是询问的支持的fixed channel
        Result: Success
        Data:8个字节表示支持的fixed channel,p1427和p1430
  这里表示支持只支持L2CAP Signaling channel
注:远端返回的information response表明其只支持L2CAP Signaling channel
 
Frame55-Frame61:HCI进行了一些command,Read_Clock_offset,Get_Link_Quality等。
 
Frame62:L2CAP收到远端的Connection response
   在Frame48中本地已经收到远端的connection response,只是状态为pending,这里再次接受到connection response,也许表示成功了。如下:
00001001 00100000 00010000 00000000 00001100 00000000 00000001 00000000 00000011 00000100 00001000 00000000 01000100 00000000 01000000 00000000 00000000 00000000 00000000 00000000
Code: 0x03 Connection response
Destination Channel ID: 0x0044
Source Channel ID: 0x0040   //本地的CID,这个CID在本地发送connection request中确定
      Result: Connection successful
Status: Connection successful

注:到这里,本地发送的connection request已经被远端response,并且状态为成功。

 
//从这里开始,进入Configure 的过程
Frame63:本地发送Configure request

00001001 00000000 00010000 00000000 00001100 00000000 00001000 00000000 01000100 00000000 00000000 00000000 00000001 00000010 00000000 00000100

Channel ID: 0x0001
Code: 0x04 Configure request
        Identifier: 0x05 = 5
  Destination Channel ID: 0x0044  //发送的目标设备的CID
C Flag: Last Configuration Request

我们看看configure 部分的结构:

Type:0x01 MAXIMUM TRANSMISSION UNIT

length:0x02 = 2
config data:0x0400 = 1024
注:本地发送的configure request是关于设置MTU的,这里配置的是1024。
 
Frame66:收到slave发送的configure request
00001001 00100000 00010000 00000000 00001100 00000000 00000001 00000000 00000100 0000010000001000 00000000 01000000 00000000 00000000 00000000 00000001 00000010 00000000 00000001
Code: 0x03 Configure request 
ID:0x04 =4
configure Type:0x01 关于MTU
length:0x02
Data:0x0100 = 256
注:也就是slave建议的MTU为256个字节。
 
Frame67:本地发送configure response
00001001 00000000 00001110 00000000 00001010 00000000 00000001 00000000 00000101 0000010000000110 00000000 01000100 00000000 00000000 00000000 00000000 00000000
Code:0x05 Configure response
Identifier: 4 //对应Frame66slave的configure request
Results: Success 
//这里奇怪的是应该还有两个字节的Config部分,这里怎么木有了。。。result后就结束了
注:这是本地设备对远端设备的configure request的resposne,结果是成功,应该是接受了远端设备256MTU的配置。
 
Frame73:远端返回configure resposne
00001001 00100000 00001110 00000000 00001010 00000000 00000001 00000000 00000110 00000000 01000000 00000000 00000000 00000000 00000000 00000000
Code: 0x05 Configure response
Identifier: 5
Source Channel ID: 0x0040
Results: Success
注:这里也没有config部分,到result域就结束了。。。不过成功表示接受了1024的MTU配置吧。
 
3.总结
  在这部分,本地部分主要是发送information requset和远端设备交换设备信息,发送connection requset建立L2CAP的连接,以及发送configure request进行参数配置。在这个过程里,远端的slave也会发送information requset和configure requset,双方进行信息交换和参数配置。至此,本地的configure部分结束,下面进行验证部分。

FTS抓包看L2CAP Connection的建立(二)的更多相关文章

  1. FTS抓包看L2CAP Connection的建立(一)

    一.概述     在前面的文章中介绍了inquiry和ACL connection的建立过程.这个连接建立后,L2CAP signaling channel(CID = 0x0001)就已经存在,可以 ...

  2. FTS抓包看AVDTP

    1.概述   测试过程为打开Audio连接,没有听音乐,人后断开Audio连接,主要目的是为了测试AVDTP的工作流程.   2.Frame分析    首先贴出抓取的关于AVDTP的包: 在L2CAP ...

  3. FTS抓包看蓝牙的SDP整个过程

    1.概述   SDP是蓝牙的Service Discovery Protocol,用来发现远程设备能够提供的Service.它只负责发现对方支持的Service,不负责Service的具体实现.   ...

  4. 【转】FTS抓包看蓝牙的SDP整个过程

    原文网址:http://blog.sina.com.cn/s/blog_69b5d2a50101f23c.html 1.概述   SDP是蓝牙的Service Discovery Protocol,用 ...

  5. FTS抓包看蓝牙验证的过程

    1.概述    在进行蓝牙设备的连接时,为了保护个人隐私和数据保密的需要,需要进行验证.   2.一些Frame Frame74:本地发送Authentication requset command ...

  6. charles抓包看性能数据

    1.优化某个接口或加载速度(H5加载速度慢) 抓包看Overview ①看Duration,就是接口的加载时间 ②看Latency,就是延时一端传播到另一端所花费的时间:一般和网络有关:可以综合Dur ...

  7. wireshark抓包看ECN

    由于实验需要,要统计ECN信息.为了验证拓扑中是否真的有ECN信息,用了wireshark进行抓包查看. 网上找到的相关有用资料有:http://blog.csdn.net/u011414200/ar ...

  8. 抓包整理————ip 协议一[十二]

    前言 简单介绍一下ip协议. 正文 先来看下ip协议在网络层的哪一层: 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 ip 层就在网络层: 其实很好想象哈,就是因为每台机器起码有一个ip ...

  9. Fiddler手机端抓包环境设置与过滤(二)

    经过了上一篇,我们已经配好了PC与手机端的抓包环境可以实现抓包.传送机:https://www.cnblogs.com/jc-home/p/11668712.html 但是如果不经过筛选的话抓到的内容 ...

随机推荐

  1. python的包和模块

    python 的包即文件夹,但是必须包含_init_.py 模块就是xx.py

  2. Spring的国际化资源messageSource

    Spring中可以使用两个类加载资源文件:ReloadableResourceBundleMessageSource和ResourceBundleMessageSource. 可配置如下message ...

  3. Redis 连接池的问题

      目录 Redis 连接池的问题    1 1.    前言    1 2.解决方法    1     前言 问题描述:Redis跑了一段时间之后,出现了以下异常. Redis Timeout ex ...

  4. ural 1218. Episode N-th: The Jedi Tournament

    1218. Episode N-th: The Jedi Tournament Time limit: 1.0 secondMemory limit: 64 MB Decided several Je ...

  5. BZOJ4182 : Shopping

    最后选择的一定是树上的一个连通块,考虑树分治,每次只需考虑重心必选的情况,这就变成了以重心为根的树形依赖多重背包问题. 设f[x][j]表示从根节点到x这条路径及其左边的所有节点,以及以x为根的子树的 ...

  6. HDU1667 : The Rotation Game

    考虑枚举最后中间的数字,然后可以用一个24位的整数来表示一个状态,一共有C(24,8)=735471种状态,然后BFS即可. 比赛的时候由于手速问题没写完TAT 写完后在坑爹评测机上还是TLE. 所以 ...

  7. topcoder SRM 592 DIV2 LittleElephantAndPermutationDiv2

    #include <iostream> #include <vector> #include <algorithm> #include <iterator&g ...

  8. cocos2d ARCH_OPTIMAL_PARTICLE_SYSTEM这个未定义的问题

    在新版本的cocos2d中ARCH_OPTIMAL_PARTICLE_SYSTEM已经被移除由 CCParticleSystemQuad取代 CCParticleSystem *test = [ARC ...

  9. 【BZOJ】3319: 黑白树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...

  10. Thrift入门及Java实例演示

    目录: 概述 下载配置 基本概念 数据类型 服务端编码基本步骤 客户端编码基本步骤 数据传输协议 实例演示(java) thrift生成代码 实现接口Iface TSimpleServer服务模型 T ...