结合实例从HCI层分析经典蓝牙连接和配对过程

我们知道,经典蓝牙BREDR的link key协商是在LMP层做的,那么蓝牙Host在鉴权的过程中,会跟BT SOC有哪些交互:

首次配对

  1. 在HCI Inuqiry找到想要配对的设备后,Host会调用HCI Create Connection命令去连接对方设备,创建ACL连接,如下图,ACL Connection handle = 0x0004:
    在这里插入图片描述
  2. ACL连接创建成功后: 蓝牙HOST会去读取时钟偏移,设置Link Policy(支持role swithc, Hold Mode和Sniff Mode),以及读取对方设备的feature和extended feature:需要注意的是extended feature里的SC Host就是说支持Secure connection,也就是蓝牙4.2采用的基于ECDH鉴权加密机制,如下图:
    在这里插入图片描述
  3. 接下来蓝牙Host还会读取对方设备的名字,会设置APCF的过滤规则(通过0xFD57命令),然后就开始进入鉴权过程,如下图红色框:
    在这里插入图片描述
步骤HCI详解
1HCI Authentication Requested蓝牙host发起鉴权
2HCI Command Status (Success, Command=Authentication Requested)BTSOC响应OK
3HCI Link Key RequestBTSOC请求HOST是否有现成的link key
4HCI Link Key Request Negative ReplyHOST找了一通没有发现对方设备的link key
5HCI Command Complete (Command=Link Key Request Negative Reply, Success)BTSOC响应HOST:好的,我知道了,你没有现成的Link key,我会告诉对方设备的
6HCI IO Capability Request对方设备要来查询HOST的IO capability
7HCI IO Capability Request Reply (IoCapability=Yes/No, HostOobDataPresent=None, Auth=MITM+Dedicated)HOST告诉对方设备IO Capability是支持显示,并且要求认证需要MIMT,以及Dedicated Bond
8HCI Command Complete (Command=IO Capability Request Reply, Success)BTSOC回应HOST,同时会问对方设备的IO Capbility
9HCI IO Capability Response (IoCapability=None, RemoteOobDataPresent=None, Auth=!MITM+General)对方设备的IO Capability是不支持显示,也不支持OOB,不要求MIMT,需要General Bonding
10HCI User Confirmation Request (Pass=039802)经过上面双方交互了IO Capability,双方确定了Numeric comparison配对方式,对方要求显示4个字节字符:039802 ,这里手机上会有一个弹窗显示这几个数字,让用户点击确认
11HCI User Confirmation Request Reply用户点击确认,没错,就是这个数字
12HCI Command Complete (Command=User Confirmation Request Reply, Success)BTSOC把这个用户的确认信息告诉了对方设备
13HCI Simple Pairing Complete (Success)BTSOC和对方设备经过一番LMP交流计算出最终的link key之后,告诉HOST鉴权成功完成。
14HCI Link Key Notification ( Key=F6E7A1F5:80C01AEF:27F16B1B:75C0B7E5, Type=Unauthenticated-256)BTSOC告诉HOST Link key,HOST会帮BTSOC保存在本地。
15HCI Authentication Complete (Success, Connection=0x0004)鉴权成功结束,皆大欢喜。

配对后的连接

如果首次配对结束,蓝牙HOST会保存Link key 在本地,那么下次连接的时候就不需要重新计算Link Key,过程就简单了很多,如下图:
在这里插入图片描述

步骤HCI详解
1HCI Authentication Requested蓝牙host发起鉴权
2HCI Command Status (Success, Command=Authentication Requested)BTSOC响应OK
3HCI Link Key RequestBTSOC请求HOST是否有现成的link key
4HCI Link Key Request Reply (14:6C:27:DF:91:B1, Key=26AF7922:13E89779:8D76C776:C35BA8F2)HOST在本地找到了之前配对过的Link key,然后发给了BTSOC
5HCI Command Complete (Command=Link Key Request Reply, Success, 14:6C:27:DF:91:B1)BTSOC回应了BTHOST给的link key说明没问题
6HCI Authentication Complete (Success, Connection=0x000E)鉴权成功结束。

配对后,但对方设备的Link Key丢失

  1. 对方设备如果擦除了Link Key,那么整个流程就要分为两次了: 由于手机端不知道对方设备的Link Key已经丢失,然后会把之前的配对过的Link Key发给对方,但鉴权肯定是不成功的,对方会返回HCI Authentication Complete (PIN Or Key Missing, Connection=0x000C),如下图:在这里插入图片描述
  2. 由于手机端收到了PIN Or Key Missing,说明对方Link Key已经不存在了,那么需要重新鉴权协商Link Key,这个过程就跟首次配对的流程是一样的,如下图: 在这里插入图片描述

曾经遇到过的问题

之前碰到过一个对方Link key丢失后,手机重新配对,但不会发起A2DP音乐播放的问题,最后通过比较鉴权过程发现有细小差别:
在这里插入图片描述
差别就在于对方设备回复的HCI IO Capability Response ,里面有个Authentication Requirement,正常情况下是0x04,异常情况下是0x00,然后查看Core Spec:
在这里插入图片描述
应该是手机看到这个设备不需要Bonding,所以不会发起A2DP等服务的SDP查询,近而不会进行A2DP播放。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/941955.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java全栈day20--Web后端实战(Mybatis基础2)

一、Mybatis基础 1.1辅助配置 配置 SQL 提示。 默认在 mybatis 中编写 SQL 语句是不识别的。可以做如下配置: 现在就有sql提示了 新的问题 产生原因: Idea 和数据库没有建立连接,不识别表信息 解决方式:在 Idea 中配置 MySQL 数…

RK356x-11:在win11的WSL中开发SDK

我拿到的SDK建议开发的系统是Ubuntu22.04(在SDK-docs中的文档有说明),因此,WSL中要先安装好它。由于PC机上WSL本身不支持aarch64架构,所以,进行ARM64的RK356X开发,需要手动加入支持。用到的支持…

【unity c#】深入理解string,以及不同方式构造类与反射的性能测试(基于BenchmarkDotNet)

出这篇文章的主要一个原因就是ai回答的性能差异和实际测试完全不同,比如说是先获取构造函数再构造比Activator.CreateInstance(type)快,实际却相反 对测试结果的评价基于5.0,因为找不到unity6确切使用的net版本,根据c#9推测是net5…

qemu 共享内存设备——ivshmem

文章目录 背景简单使用参考 背景 vshmem是QEMU提供的一种宿主机与虚拟机之间或多个虚拟机之间共享内存的特殊设备。它有两种形式: ivshmem-plain: 简单的共享内存区域ivshmem-doorbel: 除了共享内存,还能提供基于中断的通信机制 这种设备在虚拟机内部表现为PCI设…

dolphinscheduler服务注册中心源码解析(三)RPC提供者服务整合注册中心注册服务实现源码

RPC提供者服务整合注册中心注册服务实现源码 1.概述2.源码解读思路3.实现2.1.应用服务的RPC服务接口定义2.1.1.MasterServer应用中提供的RPC接口服务2.1.2.WorkerServer应用中提供的RPC接口服务2.2.应用服务的RPC服务接口实现2.2.1.MasterServer应用中提供的RPC接口服务实现类2…

若依的RBAC权限控制框架

若依权限管理框架 Spring Security介绍 Spring Security是spring的权限控制框架,主分为 认证 和 授权认证:是否能进入(登录)授权:是否有权限访问对应的资源(controller能否访问) Spring Securit…

Scala_【1】概述

第一章 语言特点环境搭建(Windows)idea编写scalaHelloWorld注意事项 Scala是一门以Java虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言 语言特点 Scala是一门多范式的编程语言,Scala支持面向对象和函…

sqoop抽数报错Every derived table must have its own alias

sqoop抽数报错Every derived table must have its own alias 报错如下: ERROR manager.SqlManager: Error executing statement: java.sql.SQLSyntaxErrorException: Every derived table must have its own alias 修改前脚本: –query "select * …

大小鼠智能热板仪 智能冷板仪~根据实验需求和方向选择“冷”or“热”

冷板仪的工作原理 SS-I5IO56IO48O 冷板仪主要通过提供一个可调节温度的冷板(通常为金属地板),其温度设定在低温范围内(如5℃),用于模拟冷刺激引起的疼痛反应。实验时,动物被放置在冷板上&…

VMware vCenter保姆级安装部署(VMware VCenter Nanny Level Installation and Deployment)

VMware vCenter保姆级安装部署教程 VMware vCenter‌是由VMware开发的一款虚拟化管理平台,主要用于管理和监控虚拟化环境中的虚拟机、主机和存储资源。它提供了一个集中控制的平台,简化了虚拟化基础设施的管理工作,提高了资源利用率和灵活性…

WebGIS实战开源项目:智慧机场三维可视化(学习笔记)

From:新中地 1.简介 智慧机场解决方案,基于数字化大平台,融合AI、大数据、IoT、视频云、云计算等技术,围绕机场“运控、安防、服务”三大业务领域,构建“出行一张脸”及“运行一张图”两大场景化解决方案。 https://…

玩转OCR | 探索腾讯云智能结构化识别新境界

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ 玩转OCR 腾讯云智能结构化识别产品介绍服务应用产品特征行业案例总结 腾讯云智能结构化识别 腾讯云智能结构化OCR产品分为基础版与高级版&am…

【论文阅读笔记】Scalable, Detailed and Mask-Free Universal Photometric Stereo

【论文阅读笔记】Scalable, Detailed and Mask-Free Universal Photometric Stereo 前言摘要引言Task 相关工作方法SDM-UniPS预处理尺度不变的空间光特征编码器像素采样变压器的非局部交互 PS-Mix数据集 实验结果训练细节评估和时间: 消融实验定向照明下的评估没有对…

自动控制系统综合与LabVIEW实现

自动控制系统综合是为了优化系统性能,确保其可靠性、稳定性和灵活性。常用方法包括动态性能优化、稳态误差分析、鲁棒性设计等。结合LabVIEW,可以通过图形化编程、高效数据采集与处理来实现系统综合。本文将阐述具体方法,并结合硬件选型提供实…

VUE 3.0 如何新建项目 详细教程 附环境搭建 推荐

本人新入手一台电脑,需要安装各种环境配置,顺便把过程记录一下,方便自己以后查看,也欢迎大家参考交流。 目录 一、环境搭建: 1.Node.js安装 2.国内淘宝镜像设置 3.安装vue 环境 二、新建vue项目 1.vue脚手架新建…

牛客网刷题 ——C语言初阶——BC114 小乐乐排电梯

1.牛客网 :BC114 小乐乐排电梯 题目描述: 小乐乐学校教学楼的电梯前排了很多人,他的前面有n个人在等电梯。电梯每次可以乘坐12人,每次上下需要的时间为4分钟(上需要2分钟,下需要2分钟)。请帮助…

UE5 渲染管线 学习笔记

兰伯特 SSS为散射的意思 带Bias的可以根据距离自动切换mip的卷积值 而带Level的值mipmaps的定值 #define A8_SAMPLE_MASK .a 这样应该就很好理解了 这个只采样a通道 带Level的参考上面的 朝左上和右下进行模糊 带Bias参考上面 随机数 4D 3D 2D 1D

‘vite‘ 不是内部或外部命令,也不是可运行的程序

报错:执行 npm run dev时,提示’vite’ 不是内部或外部命令,也不是可运行的程序 解决:执行 npm install -g vite 报错:导入vite后再次执行npm run dev,报错failed to load config from E:\eclipseWP\test1…

gitlab克隆仓库报错fatal: unable to access ‘仓库地址xxxxxxxx‘

首次克隆仓库,失效了,上网查方法,都说是网络代理的问题,各种清理网络代理后都无效,去问同事: 先前都是直接复制的网页url当做远端url,或者点击按钮‘使用http克隆’ 这次对于我来说有效的远端u…

apisix docker 安装

git clone https://github.com/apache/apisix-docker.git cd apisix-docker/example nano docker-compose 主要修改这里ETCD_ADVERTISE_CLIENT_URLS: "http://192.168.31.160:2379" docker compose -p docker-apisix up -d#安装apisix-dashboard docker pull apache/…