蓝牙相关学习:4.3.BLE协议链路层

article/2025/10/13 15:07:05

BLE协议链路层

  • 一、链路层
  • 二、信道分类
    • 跳频(Hopping)
  • 三、状态机
    • 状态机的五种状态
    • 主还是从
    • 一对多
  • 四、空口协议(Air Interface Protocol)
    • 空口包(Air Interface Packet)
    • 以白名单(White List)的形式定义Link Layer的数据过滤机制
    • 执行广播通道上实际的packet收发操作
    • 定义连接建立的方式及过之后的应答、流控等机制
    • Link Layer Control
  • 参考地址

一、链路层

Link Layer 又称 LL(链路层)

链路层定义了协议栈中最为基础的状态机、数据包格式、广播和连接流程等问题。

40个Physical Channel的协调;两个实体专享的传输通道(Logical Link);校验、重传等机制,确保数据传输的可靠性。

二、信道分类

advertising channel
从40个Physical Channel中选取3个,作为广播通道(advertising channel);

data channel
剩余的37个Physical Channel中,选取一个,为这种场景里面的通信双方建立单独的通道(data channel)。(这就是连接的过程)

跳频(Hopping)

因为BLE使用的是免费的2.4G ISM(Industrial Scientific Medical)频段。wifi也使用这个频段,可想这个频段非常拥挤,假如wifi信号浓密,BLE信号就会受到干扰。
BLE跳频技术(Hopping),会记录每个信道是否拥挤,假如拥挤则标记为坏道,跳频时候避开该信道,等空闲下来,再移除坏道标记。这样BLE通信就总是能够在相对良好的频段内进行。

转:BLE协议栈 – 物理层(Physical Layer):https://blog.csdn.net/comprends/article/details/99287096

如下,在CONNECT_REQ中:

在这里插入图片描述
可以看到可用频段。

三、状态机

状态机的五种状态

就绪态(待机态)(Stanby)、扫描态(Scanning)、广播态(Advertsing)、发起态(Initiating)、连接态(Connection)。

扫描态有2种子状态:被动扫描(Passive Scanning)、主动扫描(Active Scanning)

在这里插入图片描述
转:https://www.cnblogs.com/-glb/p/11617678.html

设备在同一时刻只能处于这些状态的一种

  1. Standby
    Standby状态是初始状态,即不发送数据,也不接收数据,系统不做任何广播和扫描动作,可以维持低功耗。
    可以进入除Conection外的任意状态.。

  2. Advertising
    系统对外发出广播数据和扫描响应数据。扫描响应数据也是一种广播数据,由扫描设备发出扫描请求,广播包设备返回扫描响应数据。
    谁接收它广播的数据:由处于Scanning或者Initiating状态的实体接收。
    Advertising可以切回Standby状态;连接成功后,也可切换为Connection状态。

  3. Scanning
    监听外部的广播数据。扫描状态并不能直接进入连接状态。
    Scanning可以和Standby互切换。

  4. Initiating
    监听外部的广播数据。它可以发起连接请求,然后进入状态。
    只能接收Advertiser广播的connectable的数据,并在接收到数据后,发送连接请求,以便和Advertiser建立连接。当连接成功后,Initiater和对应的Advertiser都会切换到Connection状态。

  5. Connection
    Connection状态是和某个实体建立了单独通道的状态,
    在通道建立之后,由Initiating或者Advertising自动切换而来;
    通道断开后,会重新回到Standby状态。

主还是从

通道建立后(通常说“已连接”),处于Connection状态的双方,分别有两种角色Master和Slave:
Initiater方称作Mater(主机);
Advertiser方称作Slave(从机)。

一对多

BLE协议栈 – 链路层(Link Layer):https://blog.csdn.net/comprends/article/details/99287578

一个状态机在同一时刻有且只能处于一个状态。
但是,一个BLE设备在同一时刻可以拥有多个独立的状态机!多个状态机并存的情况有限制条件。以下为几种有效的组合状态:

Connection + Advertising
Connection + Initiating
Connection(Master) + Connection(Master)

这也就意味着,BLE协议栈是支持一主多从这种连接模式的。不过要注意,不支持一从多主模式,即一个从机同时与多个主机相连。并且,一个BLE设备在同一时刻不能同时为主机和从机角色。

四、空口协议(Air Interface Protocol)

状态和角色定义完成后,剩下的事情就简单了,主要包括两类:提供某一状态下,和其它实体对应状态之间的数据交换机制;根据上层实体的指令,以及当前的实际情况,负责状态之间的切换。BLE协议中,这些事情是由一个叫做空中接口协议(Air Interface Protocol)的家伙负责

空口包(Air Interface Packet)

虽然BLE空口包(packet,又称air interface packet)涉及BLE协议栈link layer,L2CAP,SMP和ATT等各层次,但link layer跟空口包格式关系最紧密,掌握了BLE packet的格式,就很容易理解BLE link layer协议的工作原理

蓝牙相关学习:4.2 BLE空口包结构 - PDU:https://blog.csdn.net/weixin_35691921/article/details/122696809?spm=1001.2014.3001.5501

以白名单(White List)的形式定义Link Layer的数据过滤机制

主要针对广播通道,因为随着通信设备的增多,空中的广播数据将会呈几何级的增长,为了避免资源的浪费(特别是BLE Host),有必要在Link Layer过滤掉一些数据包,例如根据蓝牙地址,过滤掉不是给自己的packet。

执行广播通道上实际的packet收发操作

上层软件只需要定义一些参数,例如:

Advertising State下的Advertising Channel的选择、Advertising的间隔、Advertising PDU的类型等;

Scanning State/Initialing State下的scanWindow、scanInterval等。

Link Layer将会自动发送或者接收数据包。

定义连接建立的方式及过之后的应答、流控等机制

蓝牙相关学习:4.2 BLE空口包结构 - PDU:https://blog.csdn.net/weixin_35691921/article/details/122696809?spm=1001.2014.3001.5501

Link Layer Control

经过Air Interface Protocol的抽象,BLE实体已经具备广播通信、点对点连接的建立和释放、点对点通信等基本的能力。除此之外,Link Layer又抽象出来一个链路控制协议(Link Layer Control),用于管理、控制两个Link Layer实体之间所建立的这个Connection,主要功能包括:

更新Connection相关的参数,如transmitWindowSize、transmitWindowOffset、connInterval等等(具体意义这里不再详述);

更新该连接所使用的跳频图谱(使用哪些Physical Channels);

执行链路加密(Encryption)有关的过程。

参考地址

抄的大佬,做的学习笔记。

蜗窝科技:http://www.wowotech.net/sort/bluetooth

BLE:https://blog.csdn.net/zhoutaopower/category_9083143.html

转:蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍:http://www.wowotech.net/bluetooth/ble_stack_overview.html


http://chatgpt.dhexx.cn/article/G7mhotDy.shtml

相关文章

数据链路层简介

文章目录 一、基本概念二、主要功能1.封装成帧2.透明传输3. 差错控制4. 流量控制5. 链路管理认识MTU 三、相关协议1. PPP协议2. ARP协议 一、基本概念 链路(Link):一个节点到另一个相邻节点的一段物理线路,中间没有任何其他节点。链路由传输介质和物理设…

计算机网络 —— 链路层详解

文章目录 一,数据链路层基本概念1. 为什么要设置数据链路层2. 数据链路的主要功能1)链路管理2)帧同步3)流量控制4)差错控制5)透明传输6)寻址 3. 链路层的三个基本问题1)封装成帧2&am…

计算机网络---数据链路层

(一)基本概念 数据链路层是OSI参考模型中的第二层,介乎于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自物理层来的数据可靠地传输到相邻节点的目标机网络层。 换言之&#x…

计算机网络之链路层

两台主机之间,数据报跨越一系列通信链路传输,一些是有线链路一些是无线链路,从源主机起,通过一些了分组交换机在目的主机结束。在链路层中有两种不同的链路层信道, 第一种是广播信道,这种信道用于有线局域…

tcp粘包 java_详说tcp粘包和半包

tcp服务端和客户端建立连接后会长时间维持这个连接,用于互相传递数据,tcp是以流的方式传输数据的,就像一个水管里的水一样,从一头不断的流向另一头。 理想情况下,发送的数据包都是独立的, 现实要复杂一些&a…

php处理粘包,Swoole怎么处理粘包

什么是 TCP 粘包? TCP 粘包是指发送方发送的若干包数据 到 接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。 TCP 出现粘包的原因? 发送方:发送方需要等缓冲区满才发送出去,造成…

什么是粘包和拆包,Netty如何解决粘包拆包?

Netty粘包拆包 TCP 粘包拆包是指发送方发送的若干包数据到接收方接收时粘成一包或某个数据包被拆开接收。 如下图所示,client 发送了两个数据包 D1 和 D2,但是 server 端可能会收到如下几种情况的数据。 上图中演示了粘包和拆包的三种情况:…

tcp的拆包和粘包

tcp的拆包和粘包 简介 拆包和粘包是在socket编程中经常出现的情况,在socket通讯过程中,如果通讯的一端一次性连续发送多条数据包,tcp协议会将多个数据包打包成一个tcp报文发送出去,这就是所谓的粘包。而如果通讯的一端发送的数据…

TCP粘包现象

TCP粘包现象 在socket网络编程中,都是端到端通信,由客户端端口服务端端口客户端IP服务端IP传输协议组成的五元组可以明确的标识一条连接。在TCP的socket编程中,发送端和接收端都有成对的socket。发送端为了将多个发往接收端的包,更…

粘包问题及解决方法

如何解决粘包问题 粘包就是连续向对端发送两个或者两个以上的数据包,对端在一次收取中受到的数据包数量可能大于1个,当大于1个时,可能时几个包加上某个包的部分,这这干脆几个完整的包在一起。当然,也可能收到的数据只…

粘包问题

TCP是一个面向连接的,可靠的,安全的流式协议 什么是粘包 粘包是指的是数据和数据之间没有没有明确的分界线,导致不能够正确的传输数据(只有TCP会粘包 UDP 永远不会粘包),粘包问题只针对于一切字节流的协议…

粘包现象与解决粘包问题

粘包现象与解决粘包问题 一、引入 粘包问题主要出现在用TCP协议传输中才会出现的问题,UDP不会出现,因为TCP传输中他会服务端会一次性把所有东西一并丢入缓存区,而读取的内容大小有时候没法准确的做到一一读取,所有会存在粘包。 而UDP他传输的时候是吧一个个内容丢过去,不管客…

粘包

粘包 一、什么是粘包二、为什么会粘包三、粘包解决思路 一、什么是粘包 粘包是指发送方发送的若干数据到接收方,而接收方在接收数据时这些数据粘在一起,后一包数据头紧接着前一包数据尾部。 二、为什么会粘包 首先了解一下socket收发消息原理&#xff1…

网络通讯中粘包的处理

参考:网络通讯中粘包的处理 - 走看看 在网络通讯中,不仅仅是TCP通讯,也包括串口通讯中,我们经常会遇到数据包粘连的问题,本文详细介绍粘包问题产生的原因和解决办法。 一、粘包定义 TCP 传输中,客户端发送…

什么是粘包?

TCP/IP 协议簇建立了互联网中通信协议的概念模型,该协议簇中的两个主要协议就是 TCP 和 IP 协议。TCP/ IP 协议簇中的 TCP 协议能够保证数据段(Segment)的可靠性和顺序,有了可靠的传输层协议之后,应用层协议就可以直接…

【HUST】信息系统安全:Ret2libc多函数调用,ASLR两种情况(2)

注:感谢这位大佬的帮忙,没有他我估计还在github里面或者其他博客里面瞎找小雨aaa Ret2libc:Return to libc,顾名思义,就是通过劫持控制流使控制流指向libc中的系统函数,从而实现打开shell等其他工作。 在本次作业中,…

Linux ALSA音频工具

参考: ALSA 音频工具 amixer、aplay、arecord Linux Alsa ALSA的配置文件 音频录制——arecord 音频播放——aplay 音频配置——amixer alsamixer与amixer的区别 alsamixer是Linux音频框架ALSA工具之一,用于配置音频各个参数; alsamixer是基于文本图形…

[pwn]ROP:绕过ASLRNX

[详细] ROP:绕过ASLR&NX 这次使用的程序是Defcon - 2015初赛题目,r0pbaby,也是一道经典的pwn题目了。 程序链接:https://pan.baidu.com/s/1kr6z_crZfW7qNjtASmRMGw 提取码:eajs NX策略是指在栈中的代码不会被执行…

ORA-445报错与ASLR

数据库多次出现ORA-00445: background process "J002" did not start after 30 seconds报错及ORA-3136错误 查看相关文档(文档 ID 1600807.1),两个报错都可能与内存压力过大有关 另外关于ORA-00445还有另一篇文档提到,在Oracle启用ASLR会无法…

[二进制学习笔记]Ubuntu20.04关闭开启ASLR

文章目录 Ubuntu20.04关闭开启ASLR Ubuntu20.04关闭开启ASLR ​ ASLR(Address space layout randomization)是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者…