本节书摘来自华章社区《低功耗蓝牙开发权威指南》一书中的第2章,第2.5节为成功而设计,作者 (英)Robin Heydon,更多章节内容可以访问云栖社区“华章社区”公众号查看
2.5 为成功而设计
许多无线标准出师不利,原因在于一些无线电设计一旦受到欢迎,用户数量不断增加,往往导致网络拥塞不堪甚至无法工作。如果说有一件事蓝牙做得很好,那便是它可以在非常拥挤的环境中工作。蓝牙技术联盟(SIG)每年组织三次称为UnPlugFest的测试活动,许多来自彼此竞争的公司的工程师们聚到一起,测试他们即将投放市场的产品。这些测试揭示了这样一个事实,即使酒店大厅同时出现了成百上千的无线设备,蓝牙依然能够正常工作。无疑,低功耗蓝牙继承了这一点。
为成功而设计意味着无论是在拥挤的通勤火车或公共汽车上,还是进入热闹的体育场或演唱会的现场,每个人都应该能够操作一些低功耗设备。这意味着在一台设备周围的几米内可能有成千上万的设备,但设备发现和连接仍然能够如期地运作。这也意味着,对一给定设备能够同时连接的设备的数量不应有所限制。如果一台设备想要和另一台设备对话,它就一定能够做到,无需担心类似经典蓝牙“同一时间只允许七个从设备进行连接”的限制。
除了设备的密度,另一个在设计控制器时必须考虑的度量是安全系统。任何流行的无线电系统总是会招致一些人对其进行攻击,当涉及个人账号和财产安全时,这一点就显得更为重要。因此,必须使用最先进的安全和加密引擎。
除安全之外,如果一个人想随身携带多种设备,鉴于它们的有限资源必须间歇地进行广播,那么隐私问题也必须加以解决。隐私是低功耗蓝牙的一个主要设计目标。每个连接使用不同的签名,并与连接双方的身份信息无关,这样一来,攻击者仅凭侦听传输的数据包将无法猜测谁正走在大街上。此外,广播时允许使用一类可解析的私有地址,只有那些有身份识别密钥的设备能够解析该地址,而恶意设备将无法解析或跟踪该地址。
另一个考虑的因素是,由于无线电无处不在,即使是单个比特的错误也可能导致严重的后果。打个比方,如果由你控制一个排污阀,以保护漂亮的城市公园不被污水淹没,你恐怕不会希望已经关闭的阀门由于某个误比特而被错误地打开。为防止这种情况出现,要求数据包使用强循环冗余校验(CRC)以防1、2、3、4、5位和所有奇数位产生错误。此外,如果想获得更高的鲁棒性还可以执行加密,数据将会附加一个不同的消息认证码,确保其来自正确的发送方,防止攻击者回复消息给排污阀。同时,属性协议层也拥有高度的防护方案,它提供了一种称为“准备属性写入”的能力,只允许将通过验证的返回值写入指定的属性(而不允许写入其他属性)。由此可见,仅仅是为了控制“阀门”的一个比特,用到了14字节的循环冗余校验和认证码数据,足见低功耗蓝牙的鲁棒性。