大家好,欢迎来到IT知识分享网。
本文来自:https://blog.csdn.net/u010783226/article/details/115904448
一、Bluetooth
(一)、蓝牙分类
从左到右依次为:经典蓝牙(BR/EDR)、双模蓝牙(同时支持BR/EDR/LE)和低功耗蓝牙(BLE)。其中经典蓝牙和低功耗蓝牙互不兼容。
其实看结构也可以看出双模蓝牙是经典蓝牙和低功耗蓝牙的合集。
(二)、蓝牙原理及应用
1、工作方式
蓝牙技术 拓扑结构
基础率BR(Basic Rate)/增强数据率EDR(Enhanced Data Rate) 1:1
低耗能LE(Low Energy) 1:1 1:n n:n
2、应用
涵盖的领域有汽车、消费类电子产品、家居自动化、医疗和保健、手机、计算机与外设、可穿戴设备、运动和健身、零售和位置导向式服务等。
(三)、发展历史
(四)、蓝牙协议堆栈
蓝牙协议堆栈依照其功能可分四层:
1、核心协议层(HCI、LMP、L2CAP、SDP)
协议 全称 译名 作用
LMP Link Manager Protocol 链路管理协议 用于设备间建立连接,它负责链路的建立、认证和配置
HCI Host Controller interface 控制器接口 控制器和链路管理器提供命令接口,允许访问硬件状态和控制寄存器
SDP Service Discovery Protocol 服务发现协议 允许设备发现其他设备提供的服务及其相关参数
L2CAP Logical Link Control and Adaptation Protocol 逻辑链路控制和适配协议 两个使用不同的更高级协议的设备之间的多路传输的多个逻辑连接。提供空中数据包的分割和重组。
关于L2CAP协议的部分协议:
协议 译名 作用
ERTM Enhanced Retransmission Mode 增强型重传模式(附加的L2CAP模式) 提供可靠的L2CAP通道
SM Stream Mode 流模式(附加的L2CAP模式) 没有重传和流控制,提供不可靠的L2CAP通道
AVCTP Audio/Video Control Transport Protocol 音频/视频控制传输协议(通过L2CAP传输AV/C指令) 通过L2CAP通道由远程控制规范去发送AV/C指令
AVDTP Audio /Video Distribution Transport Protocol 音频/视频分发传输协议(通过L2CAP向立体声耳机传输音乐文件) 通过L2CAP通道由高级音频分发规范将音乐传输到立体声耳机
2、电缆替代协议层(RFCOMM)
协议 全称 译名 作用
RFCOMM Radio Frequency Communication 串行线性仿真协议 生成虚拟串行数据流(通常用于RS-232)
3、电话传送控制协议(TCS-BIN)
协议 全称 译名 作用
TCS-BIN Telephony Control Specification – Binary 电话控制协议 定义了用于在蓝牙设备之间建立语音和数据呼叫的呼叫控制信令
4、选用协议层(PPP、TCP/IP、UDP、OBEX、WAE/WAP、IrMC、BNEP)
协议 全称 译名 作用
PPP Point to Point Protocol 点对点通信协议 用于在点对点链路上传输IP数据报的因特网标准协议
TCP/IP/UDP Transmission Control Protocol / Internet Protocol / User Datagram Protocol 传输控制协议 / 互联网络协议 / 用户数据报协议 TCP/IP协议套件的基础协议
OBEX Object Exchange 对象交换协议 用于对象交换的会话层协议,为对象和操作表示提供模型
WAE/WAP Wireless Application Environment / Wireless Application Protocol 无线应用环境/无线应用协议 WAE为无线设备指定了一个应用程序框架,WAP是一个开放标准,为移动用户提供对电话和信息服务的访问
IrMC Infrared Mobile Communication 红外移动通信协议 定义可移动通讯终端器的交换对象功能
BNEP Bluetooth Network Encapsulation Protocol 蓝牙网络封装协议 在个人区域网络配置文件中传输IP数据包
or
(五)、协议规范
蓝牙规范(Bluetooth Profile)是指蓝牙通信在那一种用途下应该使用的通信协议和相关的规范。蓝牙1.1定义的profile有13个。SIG(Special Interest Group)认为蓝牙设备有4个最基本的Profile:
规范 全称 译名 作用
GAP General Access Profile 通用接入规范 保证不同的Bluetooth产品可以互相发现对方并建立连接
SDAP Service Discovery Application Profile 服务发现应用规范 描述了应用程序如何使用SDP发现远程设备上的服务
SPP Serial Port Profile 串行端口规范 定义了如何设置虚拟串行端口及如何连接两个蓝牙设备
GOEP General Object Exchange Profile 通用对象交换规范 可用于将对象从一个设备传输到另一个设备
(六)、基带纠错
根据报文类型的不同,个别报文可能受到错误校正的保护,例如1/3速率正向错误校正(FEC)或2/3速率正向错误校正(FEC)。此外,带有CRC的数据包将被重传,直到被自动重复请求确认为止。
(七)、建立连接
任何在可发现模式下的蓝牙设备都需要发送以下信息:
设备名(Device name)
设备类型(Device class)
服务列表(List of services)
技术信息(Technical information)(设备特性,制造商,蓝牙规格使用,时钟偏移)
任何设备都可以执行查询以查找要连接的其他设备,并且可以配置任何设备以响应此类查询。但是,如果试图连接的设备知道设备的地址,它总是响应直接连接的请求,并且如果请求的话会发送上面列表中显示的信息。使用设备的服务可能需要配对或由其所有者接收,但连接本身可以由任何设备启动和保持,直到它超出范围。一些设备一次只能连接到一个设备,与它们连接以防其连接其他设备并出现在查询中,直到它们从另一个设备转到另一个设备。
每个设备都有一个唯一48位地址。然而,这些地址通常没有在查询中显示。相反,使用友好的蓝牙名称,这可以由用户设置。当另一个用户扫描设备和配对设备列表时,会出现此名称。在默认情况下,大多数手机都将蓝牙名称设置为手机的制造商和型号。大多数手机和笔记本电脑只显示蓝牙名称,需要特殊程序才能获得更多关于远程设备的信息。(上文是我翻译的,不理解的话可以看原文,链接在最下方,见谅。^^)
(八)、配对和绑定
1、动机
通过蓝牙提供的许多服务可以公开私有数据或让连接方控制蓝牙设备。出于安全原因,有必要识别特定的设备,从而控制哪些设备可以连接到给定的蓝牙设备。同时,蓝牙设备能够在不需要用户干预的情况下建立连接(例如,只要在范围内)是非常有用的。
为了解决这个冲突,蓝牙使用了一个称为绑定的过程,并通过一个称为配对的过程生成一个绑定。配对过程通过触发特定的请求从用户生成一个键(例如,用户显式地请求添加一个蓝牙设备),或者它被触发时自动连接到服务,为了安全目的需要对设备进行(第一次)识别。这两种情况分别称为专用绑定和通用绑定。
配对通常涉及到某种程度的用户交互。这种用户交互确认了设备的身份。当配对成功完成时,两个设备之间就会形成一个键,使得这两个设备在未来可以相互连接,而无需重复配对过程来确认设备身份。如果有需要,用户可以删除绑定关系。
2、实现
在配对过程中,两个设备通过创建一个称为链接关键字(link key)的共享密钥(shared secret)来建立关系。如果两个设备存储相同的链接关键字,则称它们配对或者绑定。
一个只想与绑定设备通信的设备可以用密码方式验证另一个设备的身份,确保它与之前和它配对的设备相同。一旦链接关键字生成,设备之间经过身份验证的异步无连接(ACL,Asynchronous Connection-Less)链路可能会被加密,以保护交换的数据不被窃听。用户可以从任意一个设备上删除链接关键字,这将删除设备之间的连接,因此一个设备可以为一个不再与之配对的设备存储链接关键字。
蓝牙服务通常需要加密或身份验证,因此在允许远程设备连接之前需要配对。一些服务,比如对象推送配置文件,选择不显式地要求身份验证或加密,这样配对就不会干扰与服务用例相关的用户体验。
3、配对机制
蓝牙v2.1引入了安全简单的配对机制,大大改变了配对机制。以下总结了配对机制:
(1)、遗留配对(Lagacy pairing)
仅适用于蓝牙v2.0及之前版本。每个设备必须输入PIN码(Personal identification number),且只有双方输入的PIN码相同时才会配对成功。任何16字节的UTF-8字符串都可以用作PIN码。然而,并不是所有的设备都能输入所有可能的PIN码。
有限的输入设备:e.g. 蓝牙免提耳机(Bluetooth Hands-free headset),通常只有固定的PIN码“0000”or“1234”,它们被硬编码到设备中。
数字的输入设备:e.g. 手机(Mobile phones),允许用户输入长度不超过16位的数字值。
字母数字输入设备:e.g. 个人电脑和智能手机(PCs & Smartphones),它们允许用户以PIN码的形式输入完整的UTF-8文本。如果与能力较弱的设备配对,则用户必须了解其他设备上的输入限制;对于有能力的设备,没有可用的机制来确定它应该如何限制用户可能使用的可用输入。
(2)、安全简易配对(Secure Simple Pairing,SSP)
这是蓝牙v2.1所要求的,尽管蓝牙v2.1设备只能使用遗留配对与v2.0或更早的设备进行互操作。安全简单配对使用一种形式的公钥密码学(public key cryptograph),以及一些类型可以有助于对抗中间人或中间人攻击(HITM攻击,man-in-the-middle Attack)。SSP具有以下身份验证机制:
只工作(Just works):顾名思义,这种方法就是只是工作,不需要用户交互。但是,设备可能会提示用户确认配对过程。常用于IO有限的耳机,且比遗留配对的固定PIN码更安全。这种方法不提供中间人(HITM)保护。
数字比较(Numeric comparison):如果两个设备都有显示屏,并且至少有一个设备能接受二进制的yes/no用户输入,那么它们可以使用数字比较。此方法在每个设备上显示6位数字代码。用户应该比较这些数字以确保它们是相同的,如果比较成功,用户应该在能够接受输入的设备上确认配对。这个方法提供了MITM保护,假设用户在两个设备上都确认并正确地执行比较。
密钥输入(Passkey entry):此方法可用于具有显示的设备和具有数字键盘输入的设备(如键盘)之间,或用于具有数字键盘输入的两个设备之间。在第一种情况下,显示器向用户显示一个6位数字代码,然后用户在键盘上输入代码。在第二种情况下,每个设备的用户输入相同的6位数。这两种情况都提供了MITM保护。
带外数据(Out of band,OOB):该方法使用外部通信手段,如近场通信(NFC)来交换配对过程中使用的一些信息。配对是使用蓝牙无线层完成的,但是需要来自OOB机制的信息。这只提供了OOB机制中存在的MITM保护级别。
SSP被认为很简单,原因如下:在大多数情况下,它不需要用户生成密钥。对于不需要MITM保护的用例,可以消除用户交互。对于数值比较,用户可以通过简单的等式比较来实现MITM保护。使用带有NFC的OOB可以在设备接近时进行配对,而不需要很长的发现过程。
中间人攻击(Man-in-the-Middle Attack, MITM)是一种由来已久的网络入侵手段,并且当今仍然有着广泛的发展空间,如SMB会话劫持、DNS欺骗等攻击都是典型的MITM攻击。简而言之,所谓的MITM攻击就是通过拦截正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方却毫不知情。
随着计算机通信网技术的不断发展,MITM攻击也越来越多样化。最初,攻击者只要将网卡设为混杂模式,伪装成代理服务器监听特定的流量就可以实现攻击,这是因为很多通信协议都是以明文来进行传输的,如HTTP、FTP、Telnet等。后来,随着交换机代替集线器,简单的嗅探攻击已经不能成功,必须先进行ARP欺骗才行。如今,越来越多的服务商(网上银行,邮箱登陆)开始采用加密通信,SSL(Secure Sockets Layer 安全套接层)是一种广泛使用的技术,HTTPS、FTPS等都是建立在其基础上的。
(九)、关键术语和概念
1、蓝牙profile框架
每个特征属性被UUID(Universally Unique IDentifier,通用唯一标识符)唯一标识 ,UUID是标准128-bit格式的ID用来唯一标识信息。属性被 ATT(attribute profile) 格式化为特征和服务形式进行传送。(服务和特征都是用UUID来唯一标识的)
配置文件(Profile):可以理解为一种规范,一个标准的通信协议,它存在于从机中,规范了设备如何工作在一个特定的应用场景。每个配置文件中会包含多个服务(service),每个服务代表从机的一种能力。
特征(Characteristic): 一个特征包含一个单独的值(value)和0~n个用来描述特征值(characteristics value)的描述符(descriptors)。一个特征可以被认为是一种类型(type),类似于一个类(class)。
描述符(descriptor):描述符是被定义的特征,用来描述一个特征的值。例如,一个描述符可以指定一个人类可读的描述中,在可接受的范围里特征值,或者是测量单位,用来明确特征的值。
服务(service):服务是特征的集合。例如,你可以有一个所谓的心率监测器(Heart RateMonitor)服务,其中包括特征,如心率监测器。你可以在bluetooth.org找到关于一系列基于GATT的协议和服务。
如图所示:蓝牙设备包含多个profile,一个profile有多个service,一个service有多个characteristic,一个characteristic包含一个value和多个的descriptor。
下面这副图就比较形象地描述协议栈:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/32076.html