蓝牙(Bluetooth):是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4—2.485Ghz的ISM波段的UHF无线电波)。蓝牙技术最初由电信巨头爱立信公司于1994年创制,当时是作为RS232数据线的替代方案。蓝牙可连接多个设备,克服了数据同步的难题。
如今蓝牙由蓝牙技术联盟(Bluetooth Special Interest Group,简称SIG)管理。IEEE(电气电子工程师学会)讲蓝牙技术列为IEEE 802.15.1,但如今已不再维持该标准。蓝牙技术联盟负责监督蓝牙规范的开发,管理认证项目,并维护商标权益。制造商的设备必须符合蓝牙技术联盟的标准才能以“蓝牙设备”的名义进入市场。蓝牙技术拥有一套专利网络,可发放给符合标准的设备。
蓝牙使用调频技术,将传输的数据分割成数据包,通过79个指定的蓝牙频道分别传输数据包。每个频道的频宽为1 Mhz。蓝牙4.0使用2 Mhz间距,可容纳40个频道。第一个频道始于2402 Mhz,每1 Mhz一个频道,至2480 Mhz。有了适配调频(Adaptive Frequency-Hopping,简称AFH)功能,通常每秒跳1600次。
运行高斯频移键控(Gaussian Frequency-Shift Keying,简称GFSK)调制的设备据说可以以基础速率(Basic Rate,简称BR)运行,瞬时速率可达1 Mbit/s。增强数据率(Enhanced Data Rate,简称EDR)一词用于描述 π/4-DPSK 和 8DPSK方案,分别可达2 Mbit/s 和 3 Mbit/s。在蓝牙无线电技术中,两种模式(BR和EDR)的结合统称为“BR/EDR射频”。
蓝牙是基于数据包、有着主从架构的协议。一个主设备至多可和同一微微网(Piconet)中的七个从设备通讯。所有设备共享主设备的时钟。分组交换基于主设备定义的、以 312.5 s 为间隔运行的基础时钟。两个时钟周期构成一个 625 s 的槽,两个时间隙就构成了一个 1250 s 的缝隙对。在单槽封包的简单情况下,主设备在双数槽发送信息、单数槽接受信息。而从设备则正好相反。封包容量可长达1、3、或 5 个时间隙,但无论是哪种情况,主设备都会从双数槽开始传输,从设备从单数槽开始传输。
蓝牙主设备最多可与一个微微网(Piconet)(一个采用蓝牙技术的临时计算机网络)中的七个设备通讯,当然并不是所有设备都能够达到这一最大量。设备之间可通过协议转换角色,从设备也可转换为主设备(比如,一个头戴式耳机如果向手机发起连接请求,它作为连接的发起者,自然就是主设备,但是随后也许会作为从设备运行)。
蓝牙核心规格提供两个或以上的微微网连接以形成分布式网络,让特定的设备在这些微微网中自动同时地分别扮演主和从的角色。
数据传输可随时在主设备和其他设备之间进行(应用极少的广播模式除外)。主设备可选择要访问的从设备,典型的情况是,它可以在设备之间以轮替的形式快速转换。因为是主设备来选择要访问的从设备,理论上从设备就要在接收槽内待命,主设备的负担要比从设备少一些。主设备可以与七个从设备相连接,但是从设备却很难与一个以上的主设备相连。核心规格对于散射网(Scatternet)中的行为要求是模糊的。
4.0版本
蓝牙技术联盟于2010年6月30日正式推出蓝牙核心规格4.0(称为Bluetooth Smart)。它包括经典蓝牙(BR/EDR)、高速蓝牙和蓝牙低功耗协议(BLE)。高速蓝牙基于Wi-Fi,经典蓝牙则包括旧有蓝牙协议。
蓝牙低功耗,也就是早前的Wibree,是蓝牙4.0版本的一个子集,它有着全新的协议栈,可快速建立简单的链接。作为蓝牙1.0-3.0版本中蓝牙标准协议的替代方案,它主要面向功耗需求极低、用纽扣电池供电的应用。
4.0版本的一般性改进包括推进蓝牙低功耗模式所必需的改进、以及通用属性配置文件(GATT)和AES加密的安全管理器(SM)服务。
4.2版本
Bluetooth Smart设备可通过网络协议支持配置文件(Internet Protocol Support Profile,简称IPSP)实现IP连接。IPSP为Bluetooth Smart添加了一个IPv6连接选项,是互联家庭和物联网应用的理想选择。
实现物联网:支持灵活的互联网连接选项(IPv6/6LoWPAN 或 Bluetooth Smart网关)。
蓝牙协议栈
蓝牙被定义为协议层结构,包括核心协议、电缆替代协议、电话传送控制协议、选用协议。所有蓝牙堆栈的强制性协议包括:LMP、L2CAP和SDP(服务发现协议)。此外,与蓝牙通信的设备基本普遍都能使用HCI和RFCOMM这些协议。
1、LMP
链路管理协议(LMP)用于两个设备之间无线链路的建立和控制。应用于控制器上。
2、L2CAP
逻辑链路控制与适配协议(L2CAP)常用来建立两个使用不同高级协议的设备之间的多路连接传输。提供无线数据包的分割和重新组装。
在基本模式下,L2CAP能最大提供64kb的有效数据包,并且有672字节作为默认MTU(最大传输单元)以及最小48字节的指令传输单元。
在重复传输和流控制模式下,L2CAP可以通过执行重复传输和CRC校验(循环冗余校验)来校验每个通道数据是否正确或者是否同步。
蓝牙核心规格附录1 在核心规格中添加了两个附加的L2CAP模式。这些模式有效的否决了原始的重传和流控模式。
增强型重传模式(Enhanced Retransmission Mode,简称ERTM):该模式是原始重传模式的改进版,提供可靠的L2CAP 通道。
流模式(Streaming Mode,简称SM):这是一个非常简单的模式,没有重传或流控。该模式提供不可靠的L2CAP 通道。
其中任何一种模式的可靠性都是可选择的,并/或由底层蓝牙BDR/EDR空中接口通过配置重传数量和刷新超时而额外保障的。顺序排序是是由底层保障的。只有ERTM 和 SM中配置的 L2CAP通道才有可能在AMP逻辑链路上运作。
3、SDP
服务发现协议(SDP)允许一个设备发现其他设备支持的服务,和与这些服务相关的参数。比如当用手机去连接蓝牙耳机(其中包含耳机的配置信息、设备状态信息,以及高级音频分类信息(A2DP)等等)。并且这些众多协议的切换需要被每个连接他们的设备设置。每个服务都会被全局独立性识别号(UUID)所识别。根据官方蓝牙配置文档给出了一个UUID的简短格式(16位)。
4、RFCOMM
射频通信(RFCOMM)常用于建立虚拟的串行数据流。RFCOMM提供了基于蓝牙带宽层的二进制数据转换和模拟EIA-232(即早前的的RS-232)串行控制信号,也就是说,它是串口仿真。
RFCOMM向用户提供了简单而且可靠的串行数据流。类似TCP。它可作为AT指令的载体直接用于许多电话相关的协议,以及通过蓝牙作为OBEX的传输层。
许多蓝牙应用都使用RFCOMM由于串行数据的广泛应用和大多数操作系统都提供了可用的API。所以使用串行接口通讯的程序可以很快的移植到RFCOMM上面。
5、BNEP
网络封装协议(BNEP)用于通过L2CAP传输另一协议栈的数据。主要目的是传输个人区域网络配置文件中的IP 封包。BNEP在无线局域网中的功能与SNAP类似。
6、AVCTP
音频/视频控制传输协议(AVCTP)被远程控制协议用来通过L2CAP传输AV/C指令。立体声耳机上的音乐控制按钮可通过这一协议控制音乐播放器。
7、AVDTP
音视频分发传输协议(AVDTP)被高级音频分发协议用来通过L2CAP向立体声耳机传输音乐文件。适用于蓝牙传输中的视频分发协议。
8、TCS
电话控制协议–二进制(TCS BIN)是面向字节协议,为蓝牙设备之间的语音和数据通话的建立定义了呼叫控制信令。此外,TCS BIN 还为蓝牙TCS设备的的群组管理定义了移动管理规程。
TCS-BIN仅用于无绳电话协议,因此并未引起广泛关注。
9、采用的协议
采用的协议是由其他标准制定组织定义并包含在蓝牙协议栈中,仅在必要时才允许蓝牙对协议进行编码。采用的协议包括:
点对点协议(PPP):通过点对点链接传输IP数据报的互联网标准协议
TCP/IP/UDP:TCP/IP 协议组的基础协议
对象交换协议(OBEX):用于对象交换的会话层协议,为对象与操作表达提供模型
无线应用环境/无线应用协议(WAE/WAP):WAE明确了无线设备的应用框架,WAP是向移动用户提供电话和信息服务接入的开放标准。
10、A2DP
A2DP:全名是(Advanced Audio Distribution Profile) 蓝牙音频传输模型协定。
A2DP是能够采用耳机内的芯片来堆栈数据,达到声音的高清晰度。然而并非支持A2DP的耳机就是蓝牙立体声耳机,立体声实现的基本要求是双声道,所以单声道的蓝牙耳机是不能实现立体声的。声音能达到44.1kHz,一般的耳机只能达到8kHz。如果手机支持蓝牙,只要装载 A2DP 协议,就能使用 A2DP 耳机了。还有消费者看到技术参数提到蓝牙V1.0、V1.1、V1.2、V2.0——这些是指蓝牙的技术版本,是指通过蓝牙传输的速度,他们是否支持,A2DP 具体要看蓝牙产品制造商是否使用这个技术。
外文名 | Advanced Audio Distribution Profile |
缩写 | A2DP |
释义 | 蓝牙音频传输模型协定 |
特点 | 采用耳机内的芯片来堆栈数据 |
A2DP 定义了ACL(Asynchronous Connectionless 异步无连接)信道上传送单声道或立体声等高质量音频信息的协议和过程。A2DP 取决于 GAP(Generic Access Profile 通用接入协议)和 GAVDP(Generic Audio /Video Distribution Profile 通用音视频分布协议)。后者定义音频、视频流等建立所需要的过程。A2DP 则定义建立音视频流所需要的参数和流程。
11、HFP
HFP 全称 Hands-free Profile,是一款让蓝牙设备控制电话的软件,多用于汽车上。
外文名 | HFP |
目的 | 让蓝牙设备可以控制电话 |
全称 | Hands-free Profile |
应用 | 汽车、汽车套件、GPS系统、耳机 |
HFP(Hands-free Profile),让蓝牙设备可以控制电话,如接听、挂断、拒接、语音拨号等,拒接、语音拨号要视蓝牙耳机及电话是否支持,是让蓝牙耳机进入高保真通话的一种可设置模式。汽车内的汽车套件是常见的使用情景。汽车套件将连接至手机并用于拨打和接听电话。将无线耳机连接至手机后使用耳机拨打和接听电话则更为常见。
一、HFP 定义了音频网关(AG)和免提组件(HF)两个角色:
音频网关(AG) – 该设备为音频(特别是手机)的输入/输出网关。
免提组件(HF) – 该设备作为音频网关的远程音频输入/输出机制,并可提供若干遥控功能。
二、结构组成:
基带、LMP和L2CAP均为OSI层级1和2蓝牙协议。RFCOMM是蓝牙串口模拟设备。SDP是蓝牙服务发现协议。
免提控制是负责免提组件个别控制信令的设备,该信令乃基于AT指令。尽管上述模型并无显示,该配置文件已假设免提控制能够接入部分更低层级的程序(例如,同步连接建立)。左图所示,音频接口模拟层级是模拟音频网关上音频接口的设备,而音频驱动是免提组件的驱动软件。对于左图阴影部分所示的协议/设备,串口配置文件则用作基础标准。对于这些协议而言,所有强制要求均载于所应用的串口配置文件,如果该规格明确列明其他情况则除外。
12、AVRCP
AVRCP(Audio/Video Remote Control Profile),即音频/视频远程控制规范。
AVRCP 设计用于提供控制TV、Hi-Fi设备等的标准接口。此配置文件用于许可单个远程控制设备(或其它设备)控制所有用户可以接入的A/V设备。它可以与 A2DP 或 VDP 配合使用。
AVRCP 定义了如何控制流媒体的特征。包括暂停、停止、启动重放、音量控制及其它类型的远程控制操作。AVRCP 定义了两个角色,即控制器和目标设备。控制器通常为远程控制设备,而目标设备为特征可以更改的设备。在 AVRCP 中,控制器将检测到的用户操作翻译为 A/V 控制信号,然后再将其传输至远程 Bluetooth 设备。对于“随身听”类型的媒体播放器,控制设备可以是允许跳过音轨的耳机,而目标设备则是实际的播放器。常规红外遥控器的可用功能可以在此协议中实现。
AVRCP 协议规定了AV/C 数字接口命令集(AV/C 命令集,由1394 行业协会定义)的应用范围,实现了简化实施和易操作性。此协议为控制消息采用了AV/C 设备模式和命令格式,这些消息可以通过音频/视频控制传输协议 (AVCTP) 传输。
基带纠错
根据不同的封包类型,每个封包可能受到纠错功能的保护,或许是1/3速率的前向纠错(FEC) ,或者是2/3速率。此外,出现CRC错误的封包将会被重发,直至被自动重传请求(ARQ)承认。
设置连接
任何可发现模式下的蓝牙设备都可按需传输以下信息:
设备名称
设备类别
服务列表
技术信息(例如设备特性、制造商、所使用的蓝牙版本、时钟偏移等)
任何设备都可以对其他设备发出连接请求,任何设备也都可能添加可回应请求的配置。但如果试图发出连接请求的设备知道对方设备的地址,它就总会回应直接连接请求,且如果有必要会发送上述列表中的信息。设备服务的使用也许会要求配对或设备持有者的接受,但连接本身可由任何设备发起,持续至设备走出连接范围。有些设备在与一台设备建立连接之后,就无法再与其他设备同时建立连接,直至最初的连接断开,才能再被查询到。
每个设备都有一个唯一的48-位的地址。然而这些地址并不会显示于连接请求中。但是用户可自行为他的蓝牙设备命名(蓝牙设备名称),这一名称即可显示在其他设备的扫描结果和配对设备列表中。多数手机都有蓝牙设备名称(Bluetooth name),通常默认为制造商名称和手机型号。多数手机和手提电脑都会只显示蓝牙设备名称,想要获得远程设备的更多信息则需要有特定的程序。
配对和连接
1、动机
蓝牙所能提供多很多服务都可能显示个人数据或受控于相连的设备。出于安全上的考量,有必要识别特定的设备,以确保能够控制哪些设备能与蓝牙设备相连的。同时,蓝牙设备也有必要让蓝牙设备能够无需用户干预即可建立连接(比如在进入连接范围的同时)。
未解决该矛盾,蓝牙可使用一种叫bonding(连接) 的过程。Bond是通过配对(paring)过程生成的。配对过程通过或被自用户的特定请求引发而生成bond(比如用户明确要求“添加蓝牙设备”),或是当连接到一个出于安全考量要求需要提供设备ID的服务时自动引发。这两种情况分别称为 dedicated bonding 和 general bonding 。
配对通常包括一定程度上的用户互动,已确认设备ID。成功完成配对后,两个设备之间会形成Bond,日后再再相连时则无需为了确认设备ID而重复配对过程。用户也可以按需移除连接关系。
2、实施
配对过程中,两个设备可通过一种创建一种称为链路字的共享密钥建立关系。如果两个设备都存有相同的链路字,他们就可以实现paring或bonding。一个只想与已经bonding的设备通信的设备可以使用密码验证对方设备的身份,以确保这是之前配对的设备。一旦链路字生成,两个设备间也许会加密一个认证的异步无连接(Asynchronous Connection-Less,简称ACL) 链路,以防止交换的数据被窃取。用户可删除任何一方设备上的链路字,即可移除两设备之间的bond,也就是说一个设备可能存有一个已经不在与其配对的设备的链路字。
蓝牙服务通常要求加密或认证,因此要求在允许设备远程连接之前先配对。一些服务,比如对象推送模式,选择不明确要求认证或加密,因此配对不会影响服务用例相关的用户体验。
3、配对机制
在蓝牙2.1版本推出安全简易配对(Secure Simple Pairing) 之后,配对机制有了很大的改变。以下是关于配对机制的简要总结:
旧有配对:这是蓝牙2.0版及其早前版本配对的唯一方法。每个设备必须输入PIN码;只有当两个设备都输入相同的PIN码方能配对成功。任何16-比特的 UTF-8字符串都能用作PIN码。然而并非所有的设备都能够输入所有可能的PIN码。
--------- 有限的输入设备: 显而易见的例子是蓝牙免提耳机,它几乎没有输入界面。这些设备通常有固定的PIN,如"0000"或"1234",是设备硬编码的。
--------- 数字输入设备: 比如移动电话就是经典的这类设备。用户可输入长达16位的数值。
--------- 字母数字输入设备: 比如个人电脑和智能电话。用户可输入完整的UTF-8 字符作为PIN码。如果是与一个输入能力有限的设备配对,就必须考虑到对方设备的输入限制,并没有可行的机制能够让一个具有足够输入能力的设备去决定应该如何限制用户可能使用的输入。
安全简易配对(SSP):这是蓝牙2.1版本要求的,尽管蓝牙2.1版本的也许设备只能使用旧有配对方式和早前版本的设备互操作。 安全简易配对使用一种公钥密码学(public key cryptography),某些类型还能防御中间人(man in the middle,简称MITM)攻击。SSP 有以下特点:
------------ 即刻运行(Just works):正如其字面含义,这一方法可直接运行,无需用户互动。但是设备也许会提示用户确认配对过程。此方法的典型应用见于输入输出功能受限的耳机,且较固定PIN机制更为安全。此方法不提供中间人(MITM) 保护。
------------ 数值比较(Numeric comparison):如果两个设备都有显示屏,且至少一个能接受二进制的“是/否”用户输入,他们就能使用数值比较。此方法可在双方设备上显示6位数的数字代码,用户需比较并确认数字的一致性。如果比较成功,用户应在可接受输入的设备上确认配对。此方法可提供中间人(MITM) 保护,但需要用户在两个设备上都确认,并正确的完成比较。
------------- 万能钥匙进入(Passkey Entry):此方法可用于一个有显示屏的设备和一个有数字键盘输入的设备(如计算机键盘),或两个有数字键盘输入的设备。第一种情况下,显示屏上显示6位数字代码,用户可在另一设备的键盘上输入该代码。第二种情况下,两个设备需同时在键盘上输入相同的6位数字代码。两种方式都能提供中间人(MITM) 保护。
------------- 非蓝牙传输方式(OOB):此方法使用外部通信方式,如近场通信(NFC),交换在配对过程中使用的一些信息。配对通过蓝牙射频完成,但是还要求非蓝牙传输机制提供信息。这种方式仅提供OOB机制中所体现的MITM保护水平。
SSP被认为简单的原因如下:
---------- 多数情况下无需用户生成万能钥匙。
----------- 用于无需MITM保护和用户互动的用例。
------------ 用于数值比较,MITM 保护可通过用户简单的等式比较来获得。
------------ 使用NFC等OOB,当设备靠近时进行配对,而非需要一个漫长的发现过程。
USB3.0设备引起的干扰
USB3.0设备、端口和线缆证实会与蓝牙设备发生干扰,主要由于他们发出的电子噪声落在了与蓝牙相同的操作频段上。由于蓝牙设备和USB 3.0设备距离很近,就会导致吞吐量的下降或导致蓝牙设备与电脑的连接完全断开。
解决这一问题的策略有很多,包括加大USB3.0设备与其他蓝牙设备之间的距离,或购买屏蔽性能更好的USB线缆等简单的解决方案。其他的解决方案还包括对计算机中的蓝牙原件进行附加屏蔽等。