低功耗蓝牙学习笔记二

本系列学习笔记来源于啃书《低功耗蓝牙开发权威指南》。共计15章,每章将会一个笔记。本书系统讲解了蓝牙4.0的原理、体系结构、硬件设计以及应用开发。由于本人主要进行蓝牙软件开发,所以只对其中的原理做详细笔记、其他只对重点做笔记。

在协议的设计上,只有达到”添一分则多,减一分则少”的境界才能算得上完美。

—IETF RFC 1925,第12条

纽扣电池

纽扣电池是低功耗蓝牙的主要设计目标,CR2032额定容量是230mAh,足够低功耗蓝牙设备工作几年时间。

时间即能量

是贯穿低功耗蓝牙设计的另一个基本概念。减少必要操作的执行时间变得十分重要。

昂贵的内存

计算机内每一个比特内存不仅费钱还费能量。内存通常需要动态刷新,每隔一小段是按芯片中的内容便要刷新一次。动态内存需要能量。整个低功耗蓝牙设计在每一层都考虑了减低内存的数量。

非对称设计

为了让能源更少的设备负担更少的十强,这种非对称的设计十分重要。

物理层有两类无线电:发射器和接收器。一个设备可以既有发射器又有接收器,但也可能只有发射器或者只有接收器。加入一个设备只有发射器,两一个设备只有接收器,则二者构成的网络称为非对称网络。

在链路层,设备被分为广播者、扫描者、从设备和主设备。

在属性协议层存在两类设备,称为客户端和服务器。

低功耗的安全架构也是非对称的。

为成功而设计

一些无线电设计一旦受到欢迎,用户数量不断增加,往往导致网络拥塞不堪甚至无法工作。蓝牙可以在非常拥挤的环境中工作。

除了设备的密度,另一个必须考虑的是安全系统。除安全之外,隐私问题也必须加以解决。数据包使用强循冗余校验(CRC)乙方产生错误。仅仅为了控制一个比特,用到了14字节的CRC和认证码数据,足见低功耗蓝牙的鲁棒性。

凡事皆有状态

任何事物都有状态。通过属性服务器上的属性协议对外公开,不只局限于可读,还包括可写。要快速实现 服务器到客户端的状态传输,就必须支持状态信息的通知功能。直接从服务器发至客户端。

客户端-服务器架构

在设计低功耗时考虑了将设备连接到互联网的问题。即使是最简单的IP协议,其内存和能量也无法满足简单装置的要求。

作为替代方案,只能网关实现了互联网和低功耗从设备之间的互联互通。服务器仅仅作为数据存储库,并不关心客户端是谁。客户端可以直接连接到服务器,或者可以从地球的另一侧通过互联网网关连接。

模块化架构

基于通用属性规范的模块化的服务架构,允许设备以标准的方式将原子的可封装的行为比特装进单个服务进行公开。

十亿只是个小数目

低功耗蓝牙将依附于蓝牙在手机上的高配售率快速拓展市场。

无连接模型

低功耗的基本理念就是连接是瞬态的。低功耗蓝牙可以在大约3ms内建立连接,发送数据并优雅的断开连接。

范式

低功耗蓝牙技术使用两个主要的架构范式:客户端-服务器架构和面向服务的架构。

客户端-服务器架构

客户端通过网络向服务器发送请求,服务器回复响应。

主要优点是将客户端和服务器二者划分开来。当系统的不同部分位于不同设备上时,这种划分必不可少。

面向服务的架构

将服务器中的信息组织成服务的模型。该服务可以被发现、进行交互或用作已知的语义。

正式合约

一个服务之所以被视为服务,是因为其在公开的功能以及如何工作两个方面提供了正规的描述。

正式合约的一个好处在于,一个服务的实例很容易被另一个服务的实例所代替。只要两个服务的实例具有相同的功能和行为。

松耦合

在面向对象的软件中,单独的系统组件是指被设计成无边界效应的独立对象。发生在组件之间的相互作用可以被明确的定义和测试。将依赖关系减少到最低限度,使修改服务的实现时不会带来意想不到的边界效应,从而降低风险。

抽象化

服务抽象时十分重要的设计原则。服务公开的状态应当尽可能少。此外,只应规定服务行为的外在表现。

可重用性

令服务适用于多种不同应用的一种能力。

无状态

无状态的设计目标时删除客户端和服务器之间所有的交互状态。无论任何客户端在任何时间发送任何请求,服务器都将以完全相同的方式响应相同的请求。而不管请求来自哪个客户端。

可组合性

服务应该设计的小而简单。面向服务的体系结构鼓励聚合较小的服务,以实现更高级的服务接口。

自治

为了重用和组合服务,服务本身必须是可靠的。自治的服务可以独立执行任务,而不管在其周边发生的情况

可发现性

要想使用服务就必须能够发现服务。

可发现性通常是通过一个单独的、与服务交互的协议来实现的。

使用同一个协议实现服务发现以及服务交互。该协议称为属性协议,服务型可发现性在其规范中称为通用属性规范。