BLE协议栈为什么要分层?怎么理解BLE“连接”?如果BLE协议只有ATT层没有GATT层会发生什么? 1. 协议栈框架 一般而言,我们把某个协议的实现代码称为协议栈(protocol stack),BLE协议栈就是实现低功耗蓝牙协议的代码,理解和掌握BLE协议是实现BLE协议栈的前提。 在深入BLE协议栈各个组成部分之前,我们先看一下BLE协议栈整体架构。 ? 这里还有一个问题,设备B怎么知道这个数据包是发给自己的还是其他人的,为此BLE引入access address概念,用来指明接收者身份,其中,0x8E89BED6这个access address比较特殊 最终空中传输的数据包将变成: AAD6BE898E600E3B75AB2A02E102010504FF5900538EC7B2 AA – 前导帧(preamble) D6BE898E – 访问地址(access
本章介绍蓝牙协议(重点介绍:BLE)的基本特点、版本演进、协议的构成、等基础知识,本章重在了解,目的是对BLE协议有个大概的认知,即了解BLE协议栈的全貌。 我们常说的蓝牙4.0不等同于BLE,BLE只是蓝牙4.0的子集;蓝牙4.0是一个综合性协议规范。 主机(Host) :主机部分由核心协议层(L2CAP、SDP、SMP、ATT)和核心规范(GAP、GATT)构成; 控制器(Controller):此部分拆分为低功耗蓝牙(Vol 6: Low Energy 图片 03-链路层(LL) 低功耗蓝牙参考 《Core_v5.3.pdf》中 Part B: Link Layer Specification 章节部分,LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点 没有GATT,BLE协议栈也能跑,但互联互通就会出问题。
蓝牙BLE组成 BLE由三个主要构建模块组成:应用程序、主机和控制器。顾名思义,应用程序块是与蓝牙协议栈交互的用户应用程序。主机覆盖蓝牙协议栈的上层。控制器覆盖下层。 主机包含以下层: l 通用访问配置文件(GAP) l 通用属性配置文件(GATT) l 逻辑链路控制和适配协议(L2CAP) l 属性协议(ATT) l 安全经理(SM) l 主机控制器接口 现在我们可以转到BLE设备的主机部分。 逻辑链路控制和适配协议(L2CAP) L2CAP负责两项任务:1、它需要来自上层的多个协议,并将它们封装成标准的BLE数据包格式(反之亦然)。 层负责或路由两个主要协议:属性协议(ATT)和安全管理器协议(SMP)。 属性协议(ATT) 属性协议(ATT)是基于设备呈现的属性的简单客户端/服务器协议。客户端从服务器请求数据,然后服务器将数据发送给它的客户端。
环境搭建 上面介绍了数据包和各层协议,接下来我们将使用Ubertooth One来捕获通信过程中的蓝牙数据包。 ? /configure make && make plugins sudo make suidinstall sudo make plugins-install (6)安装BLE解密工具crackle crackle -p promiscuous: sniff active connections -a[address] get/set access address (example: -a8e89bed6) capture occurs. ubertooth-btle -f -ctest.pcap抓包&保存到本地 使用这条命令我们可以把设备捕获到的数据包保存到本地,完成后可导入wireshark进行数据包、协议分析 (6)crackle 如果捕获到足够的数据包尤其是btsmp,那接下来便可以用crackle来破解tk和ltk: crackle -i <file.pcap> 解密数据包,并把解密后的包另存: crackle
ICMPv6协议 [TOC] #掌握四种差错报文的格式及用途 #掌握请求/回显报文的格式 #理解IPv6的路径MTU发现过程 ICMPv6协议概述 ICMPv6的功能 IPv6的ICMP(Internet ,使网络中的节点可以知道网络中所传输的IPv6分组的情况,以及当前网络状态的重要信息 ICMPv6报文作为IPv6分组的数据载荷 lCMPv6与ICMPv4的比较 ICMPv6与ICMPv4是两个不同的协议 ICMPv6协议报文格式 ICMPv6报头由其前一个报头中的下一个报头字段值58来标识。 指针字段指出了IPv6数据包中错误发生的位置,其值为从0开始的字节偏移量 ICMPv6信息报文 信息报文提供诊断功能和附加的主机功能,比如多播侦听发现(MLD)协议和邻居发现协议。 网络层协议把ICMPv6差错报文传送到上层协议的进程时,原包中的上层协议字段被取出,用来选择合适的上一层进程来处理错误。
网络协议分析 IPv6协议部分 [TOC] 网络协议分析之IPv6协议基础 # 掌握IPv6协议栈的常用命令 # 掌握lPv6单播地址的使用方法 IPv6的特征: IPv6地址: IPv6地址空间 )和无状态自动配置协议。 同时,只有由网络管理员明确授权的节点才能通过DHCP服务器来配置 IPv6协议结构 # 掌握IPv6的报头格式 # 掌握分片报头的格式及用途 # 理解IPv6数据包的拆分、重组过程 IPv6数据包结构 IPv6数据包结构示意图 #### 基本首部 基本首部各字段含义: 版本:4位,指明了协议的版本,对IPv6该字段总是6。 区分服务:8位,以前叫做通信流类别,6表示IPv6数据包的类或优先级。 最后一个扩展报头指出上层协议数据单元的类型,上层协议可以是TCP协议、UDP协议或者ICMPv6协议等。
对 RxSwift 及 BLE 感兴趣的同学可以看看,或有所得。
广播包只能在特定的广播信道(37、38、39信道)上传输,其Access Address固定为0x8E89BED6。广播包发送给附近所有的扫描者,用于宣告设备的存在、服务信息或特征值等。 访问地址(Access Address):用于标识数据包,对于广播包,其Access Address固定为0x8E89BED6;对于连接后的数据包,则是一个由Initiator生成的32位随机值。 简化的协议栈:降低了开发成本和复杂性,提高了设备的兼容性和互操作性。 BLE技术的起源与基础版本 BLE技术起源于蓝牙4.0版本,该版本首次引入了低功耗蓝牙协议栈,旨在降低蓝牙设备的功耗,延长电池寿命。 特点:BLE以其低功耗著称,适用于不需要高数据传输速率但对功耗有严格要求的应用场景,如健康监测设备、智能家居控制等。BLE技术还具备快速连接与断开、短距离通信以及简化的协议栈等优势。 3.2.
Attribute Protocol(ATT)— GATT 在 ATT 协议基础上建立,也被称为 GATT/ATT。ATT 对在 BLE 设备上运行进行了优化,为此,它使用了尽可能少的字节。 // 使用此检查确定 BLE 是否支持在设备上,然后你可以有选择性禁用 BLE 相关的功能 if (! ---- 你的 app 能与 BLE 通信之前,你需要确认设备是否支持 BLE,如果支持,确认已经启用。 如果不支持BLE,那么你应该适当地禁用部分BLE功能。如果支持BLE但被禁用,你可以无需离开应用程序而要求用户启动蓝牙。使用BluetoothAdapter两步完成该设置。 连接到GATT服务端 ---- 与一个BLE设备交互的第一步就是连接它——更具体的,连接到BLE设备上的GATT服务端。
除此之外,还有版本号,也就是我们常说的 IPv4 和 IPv6、服务类型 TOS(表示数据包优先级)、TTL(数据包生存周期)以及标识协议(TCP 和 UDP) 当我们访问博客园时,经过的第一个网关应该就是我们配置的默认网关 不像距离矢量路由协议那样,更新时发送整个路由表。链路状态路由协议只广播更新的或改变的网络拓扑,这使得更新信息更小,节省了宽带和 CPU 利用率。 动态路由协议 基于链路状态路由算法的 OSPF OSPF(Open Shortest Path First, 开放式最短路径优先)协议,广泛应用在数据中心的协议。 因此,在各个数据中心进行交互时,需要一种协议,通过这种协议,可以知道相邻数据中心的路由配置,从而找到数据中心之间最好的路由。 BGP 协议就是这样的协议。 基于两种算法产生两种协议,BGP 协议和 OSPF 协议。 参考: 百度百科 刘超-趣谈网络协议系列课;
9. http 9.1.http概念 http协议即超文本传输协议,用于从万维网服务器传输超文本到本地浏览器的传送协议。 http是基于TCP/IP通信协议来传递数据的一个属于应用层的面向对象的协议。 4.无状态:无状态是指协议对于事物处理没有记忆能力,如果后续需要处理和前面同样的信息,就需要重新传输数据。 URL一般由协议(服务方式)、存有该资源的主机IP和主机资源的具体地址(如目录和文件名)组成。 boardID=5&ID=24618&page=1#name 是一个完整的URL,可以看出包含了以下部分: 协议部分:该URL使用的协议是http,后面分隔符是//; 域名部分:该URL域名是www.aspxfans.com
低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端 Android对外模模式(peripheral)的支持 从Android5.0开始才支持 关键术语和概念 以下是关键BLE术语和概念的摘要 属性协议(ATT) -GATT建立在属性协议(ATT)之上。 这也称为GATT / ATT。 ATT经过优化,可在BLE设备上运行。 为此,它使用尽可能少的字节。 角色和职责 以下是Android设备与BLE设备互动时适用的角色和职责: 中央与外围。 这适用于BLE连接本身。 处于中心角色的设备扫描,寻找广告,并且外围角色中的设备进行广告。 然后在运行时,您可以通过使用PackageManager.hasSystemFeature()确定BLE可用性: // Use this check to determine whether BLE Log.e(TAG, String.format("onExecuteWrite:requestId = %s", requestId)); } }; 6.
BLE 考虑功耗, 使用了3个广播信道,顺序广播。 两个蓝牙设备想要建立连接, 第一步是 从机(server) 向外广播, 主机(client) 搜索到后发起请求。 this Data 0x01 Flags 0x06 广播标记头 0x06 Length of this Data 0x09 Complete Local Name 0x50 'P' 0x68 'h' 0x6F 'o' 0x6E 'n' 0x65 'e' 0x05 Length of this Data 0x03 Complete list of 16-bit Service UUIDs, 列出所有服务uuid
characteristic的发现、读、写、通知(Notifing)、指示(Indicating) 及配置characteristic的广播 GATT可以被Application或其他Profile使用 其协议栈如下图 判读一个服务是Primary or Secondary Service可通过高层协议强制规定 2.2.2 Included Service 一个Included Service是一种引用已存在服务的方法 高层协议也可以定义协议相关的Characteristic Descriptors Characteristic Descriptors在服务端上是无序的,Client不应该理所当然 Characteristic Descriptors Declarations Permissions由高层协议定义或协议相关的 Client不应该理所当然地认为是可读的 Characteristic Descriptor Declarations Characteristic Descriptor Discovery 6. Reading a Characteristic Value 7.
最早了解 BLE 中继攻击是在 2022 年 3 月份,在网上搜了一堆关于 BLE 攻击方法的介绍,但当时并不知道无钥匙进入系统这么个东西,所以没感觉到中继攻击有什么大用途,当时接触的是些手环、灯泡这类的物联网设备 后来在 5 月份的时候 NCC 发布了 BLE 链路层中继解锁特斯拉的视频(https://youtu.be/5mdU4ksOc2w),发现原来 BLE 中继还挺有用的,就回头看了看之前搜集的资料,尝试搭建了 btlejuice 这个用来 BLE 中继攻击的工具(再吐槽一次 npm 安装东西太难了叭) 先把 btlejuice 以及 gattacker 这些中继攻击思路简单描述一下: 用两台带有蓝牙适配器的电脑 钥匙就无能为力了,与 NCC 发的视频实现的效果差距太大,便没有深入研究了 后来在网上冲浪的时候发现 NCC 在 hardware.io 分享了他们对 BLE 进行链路层中继的实现思路(https:/ 不会嵌入式开发,告辞 后来看到了小米的师傅们要在 KCon 分享他们实现的 BLE 链路层中继,斥巨资买了张门票(真就为了这个议题去的哈哈哈)然后心满意足的听了小米的师傅们对 BLE 攻击的分享(还说工具要在
索尼相机现在支持基于蓝牙低功耗 (BLE) 的控制协议。该接口允许客户端控制以及从支持 BLE 的遥控器获取状态。 遙控器 对于启用了索尼 BLE 的相机,发现过程相当简单。 相机控制服务 该服务支持对 BLE 的各种相机控制。相信这个服务比 DIRC 有更多的功能,但它的使用目前受到客户的限制。一旦客户端开始使用此接口,您就可以确定我们会窥探该接口。 相机控制服务目前正被索尼应用程序用于 BLE 到 Wifi 切换。它的许多特征似乎是为了支持FTP 服务器,但这并没有得到证实。 命令 回应 如果存在协议错误,IRC 将返回 0x0185 GATT 状态。如果拍摄照片或开始录制等过程,将发送各种通知。 原生的遥控器260元,有了协议,几十块钱就可以做一个,而且功能可以做的更多。 至于实现,我应该是写过。大家感兴趣的去翻翻。
打开手机app,扫描周围的设备(从机),支持过滤功能 (2)设备信号强度(RSSI)查看 可以很清晰的观察rssi的变化: (3)连接设备 点击“CONNECT”按钮,即可连接目标设备,这里以“BLE-UART (5)特征读写 ble是通过特征传输数据的,特征又有不同的属性,ff05这个特征只支持写。 (6)修改MTU 通过Request MTU可以修改MTU,提高数据的传输量。 2、BLE调试助手 这个是南京沁恒开发的app,调试起来也比较方便,支持从机模式,用法和nRF Connect差不多。 (1)从机模式切换,默认是主机模式 (2)扫描从机 (3)连接从机 (4)查看服务与特征 (5)特征读写 (6)修改MTU 3、LightBlue 在ios上一般使用这个调试 (3)特征读写 (4)修改MTU 上面3个ble调试app,都可以使用,个人推荐nRF Connect和BLE调试助手。
在开始介绍 Incremental Cooperative Rebalance 协议之前,我们先来明确 Eager Rebalance 协议中回收(revoke)全部 partition 的根本原因 — 说明完 rebalance 的本质之后,我们开始正式介绍 Incremental Cooperative Rebalance 协议,该协议最核心的思想就是: consumer 比较新旧两个 partition 介绍完 Incremental Cooperative Rebalance 协议的核心思想之后,我们通过示例来说明 Incremental Cooperative Rebalance 协议的工作原理。 P3、P6 分给 consumer 3。 总结 本课时重点介绍了 consumer group rebalance 协议的演进和各个版本协议的原理。 下一课时将正式开始分析 kafka consumer 的代码。
SETUP表明消息类型; URI表示请求的RTSP服务器的地址; RTSP_VER表明RTSP的版本; TRANSPORT表明媒体流的传输方式,具体包括传输协议如RTP/UDP;指出是单播,组播还是广播 往期推荐 手撕RTSP协议系列(1)——Rtsp基本流程 手撕RTSP协议系列(2)——Rtsp消息格式 手撕RTSP协议系列(3)——sdp格式详解 手撕RTSP协议系列(4)——OPTION 手撕RTSP 协议系列(5)——DESCRIBE
在讲IPv4协议与IPv6协议的区别前,我们必须了解什么叫IPv4协议和IPv6协议? IPv6是英文“Internet Protocol Version 6”(互联网协议第6版)的缩写,是互联网工程任务组(IETF)设计的用以取代IPv4的下一代IP协议,其地址数量被称作能够为全世界的每一粒沙子编上一个地址 不过随着移动互联网和物联网的迅速发展,除过电脑,手机,智能运动手环,路由器,乃至智能电视,智能冰箱,智能洗衣机,智能门锁等设施均需要占据一个IP地址,因而IPv4不够,就会变得稀缺,从而规划设计了新的升级版本IPv6协议 逐渐将会取代之前被广泛应用的IPv4协议。但因为IPv6比较复杂。不具备兼容性,操作现阶段的IPv4迁移到IPv6是比较困难的。 物联网的兴起,以及后续的5G广泛应用,IPv6协议的应用就会充分发挥最大的优势,不但能解决网络地址资源数量的问题,并且也能解决多种接入设备接入互联网的障碍。