1.概述
测试过程为打开Audio连接,没有听音乐,人后断开Audio连接,主要目的是为了测试AVDTP的工作流程。
2.Frame分析
首先贴出抓取的关于AVDTP的包:
在L2CAP层,分别由Maste和Slave建立了两条关于AVDTP的L2CAP连接,并完成了configure的过程,如下:
我们可以看到AVDTP的主要Signaling的过程:
1.DISCOVER 2.GET_CAPABILITIES 3.SET_CONFIGURATION 4.OPEN 5.START
下面分析一下具体的内容:
Frame62:Master->AVDTP_DISCOVER
00000001 00000000 00000001
前面的是HCI和L2CAP的封装,这里也顺带看一下吧。
首先是HCI的:
Connection Handle:00000001 00000000 = 0x01 = 1
Broadcast Flag: No broadcast, point-to-point
Packet Boundary Flag: First non-automatically-flushable L2CAP packet
Total Length: 0x06 = 6
L2CAP部分:
PDU Length: 0x02 = 2
Channel ID: 0x0042 //注意:这个ID是远端Slave的CID
AVDTP部分:
Transaction Label: 0
Packet Type: Single Packet
Message Type: Command
Signaling Identifier: AVDTP_DISCOVER
注:这就是一个Master发出的Discover command
Frame65:Slave->AVDTP_DISCOVER RESPONSE
00000001 00100000 00001000 00000000 00000100 00000000 01000000 00000000 00000010 0000000100000100 00000000
HCI和L2CAP简单看下,主要看AVDTP分部分:
Packet Boundary Flag: First automatically-flushable L2CAP packet
Channel ID: 0x0040 //注意:这个ID是本地Master的CID
Message Type: Response Accept
Signaling Identifier: AVDTP_DISCOVER
ACP Stream Endpoint ID: 1
In-use: No
TSEP: SRC
Media Type: Audio //由bluetooth分配的bumber
注:具体的resposne结构可以参考AVDTP的Spec。这个主要是远端的Slave响应本地的AVDTP_DISCOVER command,本地接收的CID为0x40,发现了远端Slave的一个值为1的SEID,而且没有使用。需要指出的是,packet baoundary flag为 automatically-flushable L2CAP packet,而AVDTP_DISCOVER command中为non-automatically-flushable L2CAP packet。这是为什么呢???查Spec,说这个automatically-flushable会根据automatic flush timeout参数来自动刷新,还是不明白,先放着。
Frame66 Master->GET_CAPABILITIES
00000001 00000000 00000111 00000000 00000011 00000000 01000010 00000000 00
看AVDTP的部分:
Transaction Label: 1
Signaling Identifier: AVDTP_GET_CAPABILITIES
ACP Stream Endpoint ID: 1
注:利用DISCOVER中找到的远端SEID=1的端口发送GET_CAPABILITIES来获取对方信息。
这里先讲一下AVDTP的Service是如何描述的。首先分为几个Service category:
其次,Service是以以下结构来进行描述的:
即第一个字节是所属的Service category,然后是capability的length,最后是Service capability的information element。
Frame68:Slave->GET_CAPABILITIES RESPONSE
00000001 00100000 00010000 00000000 00001100 00000000 01000000 00000000 00010010 00000010 0000000100000000 00000111 00000110 00000000 00000000 00100001 00010101 00000010 00110101
看AVDTP的部分:
Service Category: Media Transport
Length Of Service Capability (LOSC): 0
Service Category: Media Codec
Length Of Service Capability (LOSC): 6
information element部分:参考IETF RFC3550 / RFC1889标准。这里大概的信息是SBC编码,44100采样率等。
注:这里获取的是远端SEID的Media Transport和media codec信息。
Frame69:Master->SET_CONFIGURATION
00000001 00000000 00010010 00000000 00001110 00000000 01000010 00000000 00100000 00000011 00000000 00000000 00100001 00010101 00000010 00110101
ACP Stream Endpoint ID: 1
INT Stream Endpoint ID: 2
Service Category: Media Transport
Length Of Service Capability (LOSC): 0
Service Category: Media Codec
Length Of Service Capability (LOSC): 6
注:主要是对远端的Slave进行configure,貌似没怎么配置,不和get-capability的一样嘛。。。
Frame71:Slave->SET_CONFIGURATION RESPONSE
注:远端Slave接受了configure
Frame72:Master->OPEN
00000001 00000000 00000111 00000000 00000011 00000000 01000010 00000000 00110000 00000110 00000100
ACP Stream Endpoint ID: 1
注:打开远端的SEID=1的端口。
Frame73:Slave->DISCOVER
注:远端的Slave向本地的master发送discover command。Spec上貌似没有写是否需要双向的discover,不过这样貌似也没有什么坏处不是吗
Frame74:Master DISCOVER RESPONSE
00000001 00000000 00001010 00000000 00000110 00000000 01000010 00000000 00000010 00000001 00000000 00001010 00001000
ACP Stream Endpoint ID: 1
In-use: No
TSEP: SRC
ACP Stream Endpoint ID: 2
In-use: Yes
TSEP: SNK
注:本地的Master有两个SEID,其中SEID1未使用,可作为SRC,SEID2正在使用,可作为SNK。
Frame76 Slave->OPEN RESPONSE
注:对Frame72的回应,接受了本地Master的打开端口的command。
Frame79是远端Slave的GET_CAPABLIYY command,本地Master在Frame89回应。
Frame88:Master-〉START
注:本地Master开始Stream。
Frame92:Slave->START RESPONSE
注:远端Slave接受了START的command,做出resposne。
Frame93:Slave->SUSPEND
注:远端Slave挂起本地SEID=2的端口。
Frame94:Master SUSPEND RESPONSE
注:本地接受SEID=2的端口挂起。
Frame134:Master->CLOSE
注:本地UI上手动断开AVDTP连接,出发本地MASTER的CLOSE command,关闭了本地SEID=1的端口。远端Slave在Frame138接受了这个命令。
3.总结
AVDTP连接的建立首先依赖于L2CAP连接的建立,它会在同一条ACL Link上建立两条L2CAP Channel,一条是用来Signaling,另一条用来进行Stream,report和recovery的传输。Signaling的主要过程为:1.DISCOVER 2.GET_CAPABILITIES 3.SET_CONFIGURATION 4.OPEN 5.START。SEID在DISCOVER的过程中发现,并且具有相应的service capability,这些capability在过程GET_CAPABILITY中发现,Service capability的描述为第一个字节是所属的Service category,然后是capability的length,最后是Service capability的information element。然后对远端的SEID进行configure,配置的结构依然为service capability结构。最后Open相应的端口并START stream,就可以进行Audio Stream的传输了。上面的例子中,Slave也对本地进行了DISCOVER和GET_CAPBILITY
的过程,但是没有configure和open,这个操作的目的还不清楚,但是至少没有社呢么坏的影响。
- 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抓包看L2CAP Connection的建立(二)
1.概述 前面一篇博文已经介绍到远端设备对本地的Connection request进行了response,目前L2CAP的连接处于pending状态.这篇将继续抓取下面的一些packets, ...
- FTS抓包看蓝牙验证的过程
1.概述 在进行蓝牙设备的连接时,为了保护个人隐私和数据保密的需要,需要进行验证. 2.一些Frame Frame74:本地发送Authentication requset command ...
- FTS抓包看L2CAP Connection的建立(一)
一.概述 在前面的文章中介绍了inquiry和ACL connection的建立过程.这个连接建立后,L2CAP signaling channel(CID = 0x0001)就已经存在,可以 ...
- 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 ...
随机推荐
- Linux常用命令_(磁盘管理)
磁盘信息:df.du df命令–功能:检查文件系统的磁盘空间占用情况–语法:df [选项]–选项:-a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统.-k 以 ...
- ember.js:使用笔记4 数组数据的分组显示
除了之前介绍的将数组数据在一个页面中输出的方法,还可以将数组数据分组,按照点击,在不同页面中分别显示,方法为: Model: 例如:Table Router: 设置一个父对象和子对象设置: this. ...
- 模拟 POJ 2632 Crashing Robots
题目地址:http://poj.org/problem?id=2632 /* 题意:几个机器人按照指示,逐个朝某个(指定)方向的直走,如果走过的路上有机器人则输出谁撞到:如果走出界了,输出谁出界 如果 ...
- White Rectangles[HDU1510]
White Rectangles Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- chrome inspect 远程调测:Chrome on Android之一 普通调试
本文PC环境: Chrome: 版本 33.0.1750.22 dev MAC OS:OS X 10.9.1 特别注意:Chrome DevToolsl使用时会联接到appspot.com,而此网址被 ...
- html5调用手机摄像头,实现拍照上传功能
今天做手机网站,想实现手机扫描二维码功能.首先实现在浏览器中调用手机摄像头,实现拍照功能并且把拍下的照片显示在页面并上传到服务器上,然后再在服务器端进行分析. 首先实现在浏览器中调用摄像头,当然用现在 ...
- hdu Can you find it
这道题也是道二分的题,主要有几个注意点: 1.两个数组的合并的问题,可以将a数组和b数组合并,这样可以降低时间复杂度. 2.二分查找的left和right的变化问题.之前这里一直wa...一定要是le ...
- hdu Can you solve this equation?
本题是一道二分的题,核心就是mi的大小,即精度的取值.因为原函数是一个单调递增的函数,所以可以确定y的取值范围,并且在范围内的每一个y的值,一定至少存在一个x与其对应.刚开始我将取二分这个环节用一个函 ...
- 递归,回溯,DFS,BFS的理解和模板【摘】
递归:就是出现这种情况的代码: (或者说是用到了栈) 解答树角度:在dfs遍历一棵解答树 优点:结构简洁缺点:效率低,可能栈溢出 递归的一般结构: void f() { if(符合边界条件) { // ...
- 【液晶模块系列基础视频】3.1.fatfs文件系统的移植及接口函数的使用
============================== 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:h ...