【beacon广播】从空中截获BLE数据包看蓝牙5协议流程
今天Xcoder就尝试理论结合实践,讲一讲蓝牙协议的广播部分和beacon协议流程。(全文无一行代码...: ))
实验用到的工具: 蓝牙主机:TI BTool + CC2540 dongle 蓝牙从机:CC2541 抓包工具:TI Sniffer + CC2540 dongle 手机工具:BLE调试工具箱 (无线技术联盟微信公众号关联的蓝牙测试工具)
广播流程(理论过程) 蓝牙有三个广播信道37,38和39,主机在这个三个信道上扫描是否存在从机广播广播数据,并可以提出扫描请求,流程图如下: ADV_IND;广播数据 SCAN_REQ: 扫描请求,由主设备(MASTER DEVICE)向从设备(SLAVE DEVICE)发出,目的是为了获得从设备的响应以得到更多的从设备广播数据信息(包括设备名字,或者服务UUID,及其它如厂家特定格式的信息(如硬件版本,软件版本号,设备系列号等等)。
SCAN_RSP: 从设备对就主设备发起的SCAN_REQ的响应,作为广播包的补充,从设备可以给主设备更多的广播数据,比如说,有些设备在广播包里面没有设备名字,这个时候就可以把设备名字放在这个包里面发给主设备。
广播流程(实际数据) 打开 Btool (TI官方主机调试工具,下一篇文章会用到))或者 BLE调试工具箱 (无线技术联盟微信小程序,适用所有安卓和IOS系统)扫描从机设备: 打开微信公众号,点击 BLE调试工具箱,开启扫描功能。 利用TI抓包工具抓取空中蓝牙蓝牙数据包:
广播设备0x6EA7C219E3C9设备处于广播模式,广播数据为02 02 1A 0A FF 4C 00 10 05 0B 10 CE 27 2F,主机扫描请求SCAN_REQ,主机Mac地址为0x13AB0B272109,从机回应SCAN_RSP,回应的数据为空。 这就是一个完整的蓝牙广播和扫描流程。 当然,抓包数据中还可以看到其他设备的广播数据。
协议分析 先从Sinffer图先来讲解蓝牙广播协议的专有名词: 1.Channel,信道,抓包工具抓到空中的哪一个信道上的数据,0x25说明是37信道(蓝牙广播信道是37,38,39)。 2.Access Address,访问地址,所有广播信道的访问地址是10001110100010011011111011010110b(0x8E89BED6),访问地址是一个非常有用一串字符串,射频TX,RX数据需要进行白化抗噪声处理,白化处理中在一段用原始数据亦或运算访问地址字符串,在另一端亦或运算还原数据。 3.Adv PUD type 广播类型,详细类型如下表所示。 4.Adv PUD Header 广播数据头,负责管理说明广播数据。 5.Adv A 从设备MAC地址。 公共地址由两部分组成,如下图。公共地址由制造商从IEEE申请,由IEEE注册机构为该制造商分配的机构唯一标识符OUI(Organizationally Unique Identifier)。这个地址是独一无二,不能修改的。 还有一种随机地址,不是蓝牙MAC地址,是蓝牙4.2协议栈规定,防止设备被追踪设计的一直AdvA地址,但使用的很少。 6.AdvData 从设备广播数据,数据类型自行定义,ibeacon和eddystone有对该广播数据的格式有特定要求。 7. CRC效验。
上面是使用抓包工具抓出来的分析数据,真实数据我们可以通过工具下面的子菜单栏看到:
到此,就可以看到蓝牙广播的真实空中数据格式如下所示:: 2, Length 数据包长度 整个蓝牙一包广播数据的长度。 3. Access Address,访问地址 0x8E89BED6。 4. BLE Header 广播数据包头,解释说明该条数据为广播数据还是扫描数据,广播数据是可连接广播还是不可连接广播,还是定向广播类型。 5. Paylod 广播数据。 6. CRC效验。
所以真实的主从数据交互流程如下:
蓝牙5广播数据 蓝牙4.x协议规定蓝牙广播数据包每包数据最大只支持31字节数据传输,广播信道限制在37,38,39三个信道。在原有的用于传输广播数据的PDU(ADV_IND、ADV_DIRECT_IND、ADV_NONCONN_IND以及ADV_SCAN_IND,称作legacy PDUs)的基础上,蓝牙5增加了扩展的PDU(ADV_EXT_IND、AUX_ADV_IND、AUX_SYNC_IND以及AUX_CHAIN_IND,称作extended advertising PDUs),同时也允许蓝牙在除开37,38,39三个通道之外的其他37个信道上发送长度介于0-255字节的数据。
蓝牙5.0把广播信道抽象为两类,一种叫主广播信道(primary advertisement channels),另一种叫次广播信道,或者第二广播信道(Secondary Advertising Packets)。 主广播信道只工作在37,38,39三个信道,最大广播字节为31字节,广播的数据类型增加了一个ADV_EXT_IND指令,ADV_EXT_IND指令即为告知监听设备,我要广播大数据包广播了。 ADV_EXT_IND指令包含要在第二类次广播信道上发送的内容,第二广播信道发送广播数据的信道,物理PHY层,1M PHY,Coded PHY,2M PHY 等。 其示意如下图所示,首先在主广播信道广播ADV_EXT_IND信息,然后利用次广播信道(0-36 channel)广播255byte 数据。 所以蓝牙5主从的广播交互流程可以用以下框图描述:
结论 无论是蓝牙4还是蓝牙5,广播的流程都是一样,广播,扫描请求,扫描相应的数据包格式也是一模一样,只是蓝牙5可以在非广播信道发送数据,蓝牙4.x只能在广播信道发送数据,蓝牙4.2广播数据只有31字节,蓝牙5广播有255字节,好啦,下一篇开始讲精彩的连接部分协议分析。
无线技术联盟微信公众号,提供有价值的市场信息和最新的技术分析,欢迎关注交流,转载请注明出处。
|