从空中截获BLE数据包看蓝牙5协议流程【第一部分:beacon广播】

    摘要

    扫描从机设备:打开微信公众号,点击 BLE调试工具箱,开启扫描… 05 0B 10 CE 27 2F,主机扫描请求SCAN_REQ,主机Mac地址为…

    关注"无线技术联盟", 提供有价值的市场信息和最新的技术分析

    今天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效验。

    上面是使用抓包工具抓出来的分析数据,真实数据我们可以通过工具下面的子菜单栏看到:

    到此,就可以看到蓝牙广播的真实空中数据格式如下所示::

    1. Preamble 前导码前导是一个8比特的交替序列。他不是01010101就是10101010,取决于接入地址的第一个比特。若接入地址的第一个比特为0:01010101,若接入地址的第一个比特为1:10101010。接收机可以根据前导的无线信号强度来配置自动增益控制。

       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字节,好啦,下一篇开始讲精彩的连接部分协议分析。

    无线技术联盟微信公众号,提供有价值的市场信息和最新的技术分析,欢迎关注交流,转载请注明出处。

    avatar
    • 本文由 发表于 2018年11月15日
    Mac 软件推荐(续)之程序猿篇 mac软件下载

    Mac 软件推荐(续)之程序猿篇

    在前面一篇文章“Mac 软件推荐(续) -- !程序猿篇” (文章取名装X失败, 悲伤)中, 我已经介绍了一些大众化的软件, 当然作为程序猿的你也应该参考参考(没看过前文的必须补上啊).本篇文章将介绍...
    匿名

    发表评论

    匿名网友 填写信息