文章目录

  • 1.BLE 广播基本知识
    • 1.1 BLE广播信道
    • 1.2 BLE广播数据结构
    • 1.3 广播间隔
    • 1.4 广播类型
      • 1.41 非定向可连接 广播 事件(ADV_IND)
      • 1.4.2 定向可连接 广播 事件(ADV_IND)
      • 1.4.3 非定向不可连接事件(ADV_NONCONN_IND)
      • 1.4.4 可 发现不可连 事件(ADV_DISCOVER_IND/ADV_SCAN_IND)
  • 2 回应包

1.BLE 广播基本知识

1.1 BLE广播信道

BLE要用无线电波传递信息,就是将数据编码,调制到射频信号中发射。通俗地讲BLE使用的电波频率是2.4G,也就是和Wi-Fi、无线键盘鼠标, 还有Zigbee、Thread等协议使用的2.4GHz一个概念。那么问题来了,这些信号会不会互相干扰?
  
首先要明确2.4GHz这个说法指的是一个频段而不是单一频率(全称2.4GHz Industry Science Medicine band),覆盖从2400MHz到2483.5MHz, 是一个用于短距离,无须执照使用的开放频段。还必须明确:任何带有信息的信号传递都要占用一定的带宽,不可能是一个单一频率。单一的频率只能是一个永久恒定的正弦信号——它无法携带信息。例如,无线电广播所指的频率是其信号的中心频率。

BLE在这个2.4GHz频段安排了40个信道(channel),中心频率从2402MHz开始,以2MHz为间隔。如下图上半部分


一个BLE设备,在任一时刻,只能选择40个信道之中的一个进行发射或者监听。发射或者试图监听的载波频率,就是对应信道的中心频率。

BLE使用的调制方式叫做GFSK,这是FSK调制的一个改进形式。FSK (Frequency Shift Keying) 是一种简单的调制的:就是将输出信号频率从2N个频率中根据调制编码进行选择切换,最简单是1-bit调制,称为2-FSK(本文不讨论其它的)如下图所示:

1.2 BLE广播数据结构

接收状态的BLE设备需要在同一信道上监听,才有可能收到这个数据包。接收方还需要知道数据包长度才能进行CRC校验,包长度是包含在PDU段内的。包的类型不同,PDU的具体格式也不同
在广播事件中,每一个广播事件都会在 3 个广播信道中进行数据传输,而且每一个事件都是以最小的信道编号开始传输。也就是说当而且每一个事件都是以最小的信道编号开始传输。也就是说当广播事件来了,这个 PDU 是依次从广播通道 37、38、39 中进行传输.

在BLE 4.0和4.2时,信道37、38和39用于advertising, 这是BLE从设备用来表示自己存在的三个信道,也是主设备用来扫描和发起连接用的。在这三个信道中,数据包格式如下图

具体的广播类型的有什么区别,可以参考之前已写的博客:广播类型区别详解

广播数据结构组成:

(1)前导(1Byte)
  报文最开始的8比特是“01010101”或者“10101010”序列。这是很简单的交替序列。接收机可以用它来配置自动增益控制,以及确定“0”、“1”比特所使用的频率。

该序列之所以非常重要,是因为芯片必须能够应对输入信号强度的可能范围。接收机需要应付“-10dBm ~ -90dBm”的信号强度,也就是80dB的动态范围。从接收机的角度讲,也就是“1pW ~ 0.1mW”的能量。自动增益控制器必须检测出输入信号的能量等级,并调整增益,使得信号刚好处于接收机能够轻松工作的范围之中
(2)接入地址(4Bytes)

接入地址的第一个比特决定了前导是“01010101”还是“10101010”。如果接入地址的第一个比特位是“0”,则使用“01010101”序列;如果是“1”,则使用“10101010”序列。这保证了任一报文的前9个比特都是交替的,即要么是“101010101”,要么是“010101010”。
报文接下来的32比特是接入地址。有两种类型
 1.广播接入地址
  广播通道固定为0x8E89BED6
2.数据接入地址
对于数据信道,接入地址是一个随机值,不同的连接有不同的值。这一随机值也需要符合一些规定,主要是为了保证接入地址有足够好的白化特性。
  数据信道的接入地址与广播信道接入地址至少要有1个比特的不同。数据信道接入地址也不能有任何重复的模式,各个八位组必须互不相同。数据信道接入地址也不能有超过24次的比特翻转,防止使用逐比特交替的序列。最后一点,最后6个比特需要有至少两次比特翻转,这样可以确保报头开始前有一些比特翻转,以防报头有较长的连“0”或者连“1”而带来不好的影响。
  符合以上规则的有效随机接入地址大概有231个。换句话说,20亿个低功耗蓝牙设备可以在互相可通信的范围内同时工作。这个设计看起来可能有点大材小用,但请记住低功耗蓝牙已经是成功的设计,每个部分的设计都有它的合理性考虑。数据信道的随机接入地址还有一个有用的特性,就是攻击者无法根据接入地址来确定某个连接中是哪两个设备
(3)报头+长度(2Bytes)


(4)净荷(0-296Bytes)

净荷是所传输的“真实”数据,可以是关于设备的广播数据,或者是发给一定区域内所有设备的服务数据;可以是主动扫描响应的附加数据,如设备名称,实现的服务;可以是建立或保持连接所需要的信息;可以是从一个设备到另一个设备的应用层数据。

(5)CRC(3个字节用于CRC数据校验)

CRC校验,计算公式 x24 + x10 + x9 + x6 + x4 + x3 + x + 1

1.3 广播间隔

设备每次广播时,会在3个广播信道上发送相同的报文。这些报文被称为一个广播事件。除了定向报文以外,其他广播事件均可以选择“20ms ~ 10.28s”不等的间隔。通常,一个广播中的设备会每一秒广播一次。两个相邻广播事件之间的时间称为广播间隔
但是,设备周期性的发送广播会有一个问题:由于设备间的时钟会不同程度的漂移,两个设备可能在很长一段时间同时广播而造成干扰。为防止这一情况的发生,除定向广播之外的其他广播类型,发送时间均会被扰动。实现该扰动的方式为,在上一次广播事件后加入“0 ~ 10ms”的随机延时。这意味着,即使两个设备广播间隔相同,并在相同信道及时间点上发送造成了冲突,但它们发送下一个广播事件时也会有很大可能不再冲突。

所以,两个相邻的广播事件的之间的时间间隔(T_advEvent)为:

T_AdvEvent = advInterval + advDelay

其中,advInterval 必须是“0.625ms”的整数倍,范围是“20ms ~ 10.24s”之间。对于可扫描非定向广播和不可连接非定向广播这两种广播类型,该值最好不小于100ms,即(160个0.625ms)。advDelay是Link Layer(链接层)分配的一个伪随机数,它的范围为**“0 ~ 10ms**”。
广播包的截图如下:

当然,实际设置过程中没有广播间隔参数,而是设置Advertising_Interval_Min(最小广播间隔)和Advertising_Interval_Max(最大广播间隔)这两个参数来调整广播间隔,它们都是以“0.625ms”为单位,如果要固定广播间隔为某一个值,只需要将这两个参数设置为同一个有效数值即可

1.4 广播类型

广播的类型一般分为四种,分别是:

1.41 非定向可连接 广播 事件(ADV_IND)

这其实就是链路层通过广播信道发送**(ADV_IND PDU)通用广播报文。这个报文发送之后可以接收由扫描者发送的(SCAN_REQ PDU)扫描请求,或者由发起者发送的(CONNECT_REQ PDU)**连接请求。而接收后链路层需要早同一个信道上进行扫描者或者发起者的应答。当接收的数据报文没能通过广播滤波政策,要么就用下一个广播信道进行广播
要么就关闭广播事件。如果接收到的 SCAN_REQ PDU 通过了滤波政策,那么广播者需要在同一信道并且在接收到数据到发送 SCAN_RSP PDU 扫描应答报文的时间一定是 150±2 µs 完成。如果接收到 CONNECT_REQ PDU,那么就进入连接状态,这个过程比较复杂,这个时候并不需要进行应答.
鉴于此种广播类型用的最多,下面我们来讨论一下此类型下广播事件中广播包的发送情况,另外要注意在一个广播事件中,前一个“ADV_IND PDUs”的开始到相邻的下一个“ADV_IND PDUs”的开始处的时间要小于等于 10ms :
(1)第一种情况:仅仅有广播 PDUs 。如下图:

(2)第二种情况:在广播事件的中间有“SCAN_REQ”和“SCAN_RSP PDUs”。如下图:
注意: 当有扫描请求包在广播事件中的中间信道上收到时,注意图中的 T_IFS,这是帧间隔,它的时间是 150us

(3)第三种情况:在广播事件的结尾有“SCAN_REQ”和“SCAN_RSP PDUs”。截图显示如下
当有扫描请求包在广播事件中的最后信道上收到时,

(4)第四种情况:在广播事件的中间接收到连接请求包–“CONNECT_REQ PDU”的情况。截图显示如下:
当有连接请求包在广播事件中的信道上收到时,没有应答

1.4.2 定向可连接 广播 事件(ADV_IND)

这个广播是为了快速建立连接。这种报文包含两个地址:广播者地址和发起者的地址。发起设备收到发给自己的定向广播报文后,可以立刻发送连接请求事件作为回应,并进入连接状态
定向广播事件有特殊的时序要求。完整的广播事件必须每 3.75ms之内重复一次。这一要求似的扫描设备只需扫描 3.75ms 便可以收到定向广播设备的消息。如

这么快的发送速度让周围充斥着广播信道,这使得该区域的其他广播事件无法进行广播。所以,协议规定:

也就是定向广播不能持续 1.28s 以上的时间。如果主机没有主动要求停止,或者连接没有建立,控制器都会自动停止广播。一旦超过1.28s,主机只能使用通用广播让其他设备连接。

1.4.3 非定向不可连接事件(ADV_NONCONN_IND)

这是一个很奇葩的事件,它像是一个车模,大张旗鼓的告诉别人,但是不允许别人摸她,而这个事件比模特更加的奇葩,模特至少可以合个影,但是这个事件大声的告诉别人我在这里,之后就不搭理别人了,不接受任何信息,只管自己在每个广播事件中发送数据。时间要求和通用广播事件一样。它只能根据主机的要求在广播态和就绪态间切换,也是唯一可用于只有发射机而没有接收机设备的广播类型。

1.4.4 可 发现不可连 事件(ADV_DISCOVER_IND/ADV_SCAN_IND)

这个广播其实是一个非定向可发现的广播,它和通用广播的时间控制是一样的,应答也是 SCAN_REQ PDU 和 SCAN_RSP PDU,这个广播和通用广播的区别是,它不能建立连接,只能处于广播态或者就绪态.这是一种适用于广播数据的广播形式,动态数据可以包含于广播数据中,而静态数据可以包含于扫描响应数据之中。

注意:所谓的定向和非定向针对的是广播的对象,如果是针对特定的对象进行广播(在广播包PDU中会包含目标对象的MAC)就是定向广播,反之就是非定向。可连接和不可连接是指是否接受连接请求,如果是不可连接的广播类型,它将不回应连接请求。可扫描广播类型是指回应扫描请求。

不同的广播类型对扫描请求和连接请求的不同结果如下图:

2 回应包

回应包的信道


说明回应包的信道是根据主机的请求信道来的

ble理论(13) BT4.2 ble 广播详解相关推荐

  1. 13.5.虚拟化工具--jhat详解、13.6.虚拟化工具--jstack详解

    13.5.虚拟化工具–jhat详解 一般不通过这个命令执行,而是通过图形化工具类查看jvm信息. 在页面下有: 查看什么是OQL语句 在页面上有OQL help,可以查看OQL的语法. 13.6.虚拟 ...

  2. 13.4.虚拟化工具--jmap详解

    13.4.虚拟化工具–jmap详解 13.4.1.jmap命令基本概述 13.4.2.命令格式 13.4.3.参数说明 13.4.虚拟化工具–jmap详解 13.4.1.jmap命令基本概述 jmap ...

  3. 13.3.虚拟化工具--jinfo详解

    13.3.虚拟化工具–jinfo详解 实时查看和调整虚拟机的各项参数. jinfo命令可以用来查看java进程运行的JVM参数,命令如下: [root@admin ~]# jinfo --help U ...

  4. 动态路由协议的分类、动静态路由优缺点、RIP简介、组播单播广播详解(附图)

    目录 一.动态路由协议的分类 (1)按照工作区域范围: (2)按照路由算法: RIP相关知识简介: 二.静态路由优缺点: 三. 动态路由优缺点: 四.单播.组播.广播详解: 一.动态路由协议的分类 ( ...

  5. zip安装mysql没有软件,windows10系统安装mysql-8.0.13(zip安装) 的教程详解

    安装环境说明 解压安装包 •解压路径:D:\develop\software •解压后mysql根目录:D:\develop\software\mysql-8.0.13-winx64 原则: 安装目录 ...

  6. Java基础13:反射与注解详解

    Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...

  7. 力扣13 罗马数字转整数逻辑详解

    力扣 13 .罗马数字转整数逻辑详解 题目详情 逻辑分析 代码实现 题目详情 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 1 ...

  8. 尚学堂(java)1到13章所有练习题答案详解

    尚学堂1到13章所有练习题答案详解 未完待续- 文章目录 尚学堂1到13章所有练习题答案详解 B站网课链接 第一章 一.选择题 二.简答题 三.上机操作 第二章 第三章 第四章 一.选择题 二.简答题 ...

  9. 基于 UDP 的 组播、广播详解

    背景 有些时候我们在网络通信中也需要用到 组播(多播).广播.现在我们来介绍如何实现. 建议:在此之前,关闭防火墙. ubuntu: service ufw stop windows: 控制面板关闭 ...

  10. 6月13日王者体验服服务器未响应,王者荣耀6月13号体验服更新情况详解及段位继承新规则...

    原标题:王者荣耀6月13号体验服更新情况详解及段位继承新规则 一.王者峡谷调整 (一)兵线调整 近战小兵基础金币回调:40->42 中程小兵基础金币回调:33->42 远程小兵基础金币回调 ...

最新文章

  1. oracle上浮下浮分析函数_Oracle SQL高级编程——分析函数(窗口函数)全面讲解...
  2. 在代码段中安排自己定义的数据
  3. linux信号量简介
  4. 【微波】【1】色散关系式与 TEM导波、TE导波、TM导波、混合波区别和特性
  5. 电脑桌面双击计算机图标打不开,电脑双击图标打不开怎么办
  6. springboot 集成J2Cache
  7. 云服务器初始化失败怎么办,提示交互式登录进程初始化失败是什么原因?解决方法步骤教程...
  8. Noip 2016 蛋碎一地晚节不保
  9. 2022年的零日漏洞影响了哪些平台?
  10. matlab 出现 numeric,About Numeric Matlab
  11. 如何判断一个数的二进制中1的个数(num = (num - 1))
  12. Watts S. Humphrey:软件质量之父
  13. 4k超清壁纸APP抓包获取所有壁纸下载地址
  14. Java开发:哪些技能测试来评估Java开发人员的技能?
  15. centos上安装cdh2.6的方法
  16. PyTorch 入门与实践(七)循环神经网络(RNN)
  17. paypal轮询系统如何降低风控提高收款率
  18. 苹果研发柔性玻璃,iOS升级证件识别
  19. 计算机简单的装机维修,超详细!用装机员pe自己动手给电脑装win7系统
  20. CMC-T型软起动器

热门文章

  1. 康耐视visionpro控件中文说明
  2. 瓜果皮其实是防治疾病的良药
  3. 2018-12-12
  4. 如何备考高级软考的系统架构设计师?
  5. 判别两棵树是否相等 设计算法_BAIR最新RL算法超越谷歌Dreamer,性能提升2.8倍
  6. omv 网站服务器,折腾篇 篇一:小白也爱折腾 篇一:N1全小白装NAS(omv)
  7. 室外无线覆盖解决方案
  8. Mybatis学习笔记5——多对一处理、一对多处理
  9. Docker常用命令-全流程
  10. nsn 网站研究分析