蓝牙mesh网络基础_第1页
蓝牙mesh网络基础_第2页
蓝牙mesh网络基础_第3页
蓝牙mesh网络基础_第4页
蓝牙mesh网络基础_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕健,iHealth中国研发中心蓝牙高级工程师,邮箱:bi_jian,译文版本:V1.0完成时间:2017.11.11备注:,1,蓝牙mesh基础,致开发者:2017夏,蓝牙低功耗技术引入了一种新的网络拓扑类型-Mesh。mesh的引入使得蓝牙在低功耗无线通信技术领域更具优势,在许多新兴领域如智能家居,工业物联网,楼宇自动化等势必会得到更好的应用。,蓝牙,BluetoothMeshNetworking/AnIntroductionforDevelopers,Contributors,MartinWoolleyAuthorSarahSchmidtGraphicDesigner,目录,2017BluetoothSIGProprietary.,2,1.0介绍.42.0执掌生活.62.1智能建筑获得真正的智能73.0蓝牙mesh基础.8,BluetoothMeshNetworking/AnIntroductionforDevelopers,3.0蓝牙mesh基础(续)中继节点低功耗节点与友节点代理节点节点配置,2017BluetoothSIGProprietary.,3,15151516,4.0Mesh系统架构.174.1概述18,5.0安全性.20,Mesh网络安全特性具有强制性Mesh网络安全性基本原则关注点分离与mesh安全密钥节点移除,密钥刷新及垃圾桶攻击隐私重放攻击,212121222223,6.0蓝牙mesh在行动.24,消息发布与传递多路径传递管理型网络泛洪协议栈中消息的传递,25252525,7.0蓝牙Mesh正待勇士开拓的疆场.277.1参考资料28,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,1.0介绍,2017BluetoothSIGProprietary.,4,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,1.0介绍,2000年,蓝牙技术面世,用以替代线缆进行无线通信。此后的十几年间,蓝牙得到了快速的发展,很快在无线音频及计算机周边产品如无线鼠标,键盘等领域占据了统治地位。2010年,蓝牙低功耗技术(BLE)面世,推动蓝牙技术向前迈进了重要一步。其影响深远,主要体现在智能手机,平板,以及医疗健康,智能家居,可穿戴产品等领域。,基于网状拓扑类型的无线通信系统可以覆盖更大的范围,使得通信距离变长,同时系统的鲁棒性得到加强。但是他们仍然是一种小众技术,主要是因为与现有的大多数计算机,智能手机等设备不兼容,因而没有得到大范围的推广和应用。,为了将mesh技术应用到蓝牙中,120个蓝牙SIG成员公司先后参与到这项工作中。与以往情况不同,此次规模之大,涉及范围之广,充分表明了业界对蓝牙mesh技术标准制定的迫切需求。,蓝牙mesh技术的添加代表了一种技术类型的变化,这种变化如此巨大,我们甚至可以认为这对蓝牙技术标准来说是一次整体模式的转变。,(译者注:蓝牙特别兴趣小组TheBluetoothSpecialInterestGroup(SIG),是一个非盈利性组织,致力于蓝牙技术标准的开发,和蓝牙技术应用及商标的授权。公司成立于1998年,总部位于美国华盛顿。),2017BluetoothSIGProprietary.,5,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,2.0执掌生活,2017BluetoothSIGProprietary.,6,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,2.0执掌生活,智能建筑将获得真正的智能想象一下,在一个天色昏暗的冬日的早晨,你驱车前往公司。公司的安全系统识别了你的车,让你进入公司,同时分配给你一个停车位。此时,你的停车位上的灯亮起,指引你快速停到那个位置。之后,这个车位分配系统将自动进行更新,显示该车位已使用。,进入公司大楼后,相应的传感器注意到有人进入,并从你身上的可穿戴设备如手表等识别到你。你乘坐电梯到达二楼,像往常一样,你是第一个到达的。当电梯门打开时,从电梯室到办公室及开水间的灯自动打开。咖啡在你们公司是非常重要的,所以开水室的灯才会自动打开,其它区域的灯关闭,从而节省能量。你走进办公室,屋顶灯和台灯已经打开了,并且是你最喜欢的亮度等级。你注意到办公室温度比其它区域温度略高,这正是你之前设置的。你靠近办公电脑,此时电脑自动登陆你的账户。现在你可以开始办公了,并且整个办公环境考虑到了个人偏好,充分满足了你的需求。很显然这种这种系统是十分高效的,那么它是如何实现的呢?,你们公司几个月前使用了蓝牙mesh技术,最开始安装在照明系统上,随后添加到Occupancysensor,环境传感器,无线暖气控制系统,停车管理系统等网络中。这样,公司可以在电力和热力系统上省上不少费用,而且工作环境更加人性化,从而使员工的工作效率更高。整个系统的维护成本也在下降,例如加入电灯开关不再需要布置昂贵且麻烦的电线了。系统采集的数据可以供大楼管理人员分析,从而了解这栋建筑,以及它所提供的服务和人们对这些服务做出的反应,进而对整个系统进行优化。,我们可以控制某栋建筑提供的服务,与其进行无线交互,使其行为更加自动化,而蓝牙mesh正使这一切更加方便且低成本。你甚至会感到惊讶之前没有这些技术是怎么生活的。,(译者注:Occupancysensor,一种室内运动检测设备,检测到人体时会自动打开灯,温度调节装置及通风系统。这种传感器多使用红外,超声,微波等技术,主要用来节省能量,提供自动控制。),图1-蓝牙mesh可以分布于办公室和停车处,2017BluetoothSIGProprietary.,7,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,3.0蓝牙mesh基础,2017BluetoothSIGProprietary,8,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,3.0蓝牙mesh基础概念及术语要认识蓝牙mesh技术,需要读者了解一些新的技术概念与术语,这些在之前蓝牙低功耗(BLE)的世界里是没有的。本章我们将带你认识一些最基本的概念及术语。meshvs点对点我们所见到的大多数BLE设备都是进行一对一的数据通信的。这是一种点对点的网络拓扑类型,在蓝牙核心规范中被称为“微微网”(piconet)。,假设一个智能手机与一个心率检测器建立了一个点对点的连接,这样它们之间就可以传输数据了。蓝牙的一个优点就是可以让设备建立多个连接,所以这台智能手机可以再与另一个运动追踪设备建立连接。此时,手机可以同另外两台设备进行通信,而这两台设备之间无法直接进行沟通。,与以上情况相反的是,mesh拥有多对多的网络拓扑类型。每一台设备都可以与网络中的其它设备进行通信(我们会在第6章进行更深入的讨论)。设备间的通信以消息的形式传递,一台设备可以将某一台设备发来的消息中继到另一台设备,这样就可以扩展端到端的通信范围,这个范围远超过一个单独设备蓝牙无线电所覆盖的范围。,设备和节点mesh网络中的单台设备称做节点(node),网络外的设备称为“未开通配置设备”(unprovisioneddevices)。将某个“未开通配置设备”转化为网络节点的过程称为“开通配置”(provisioning)。例如,你买了一个带有mesh功能的蓝牙灯,你需要把它带回家并进行简单的配置,从而将其加入到家中原有的mesh网络中,这样你就可以通过家里的电灯开关与调光器对其进行控制了。这一过程即为“开通配置”(provisioning)。,“开通配置”过程是每一台新设备都要经历的,在这个过程中,新设备会获取一系列的密钥,同时告知“启动配置设备”(provisionerdevice,通常是智能手机或者平板电脑)有新设备加入到网络中。其中有一个密钥叫做网络密钥,即NetKey。在后续章节我们会再对mesh的安全性进行深入讨论。Mesh网络中的每个节点都拥有至少一个NetKey,正是这个NetKey让其成为相应网络的一员。节点的正常工作需要满足许多条件,而NetKey则是最基本的第一步工作。随后我们会对“开通配置”的过程展开深入的讨论,在此不再赘述。,图2-一种具有消息中继功能的多对多网络拓扑类型,2017BluetoothSIGProprietary.,9,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,元素有些节点由多个独立的部分组成,每一个部分都可以进行单独的控制。在蓝牙mesh中,这些独立的部分称为元素(element)。图3即为网络中的一个灯节点,它有3个元素,每个LED灯泡有一个元素。每个节点至少拥有一个元素,称为主元素(PrimaryElement)。节点中的每个元素都有一个唯一确定的地址,称为单播地址(unicastaddress),这样每个元素都可以独立寻址。,条响应信息。这条响应信息有两个作用:1.告知消息发送方,消息已接收;2.返回消息接收方需要告知发送方的某些数据。,需要应答的消息如果没有得到响应,则可能会被发送多次,所以这种消息必需具有幂等性。幂等性意味着这种消息不论到达接收节点多少次,与其到达接收节点一次产生的效果都是相同的。否则如果因为某些意外,消息多次,到达接收节点,则有可能使接收节点的状态变得不确定。不需要应答的消息不要求接收者发送响应信息。地址消息必须从一个地址发送到另一个地址。蓝牙mesh协议中定义了3种地址(还有一种未分配地址在此不做讨论)。单播地址用于唯一确定单个元素。在“开通配置”过程中,会将单播地址赋给设备。群组地址是一种多播地址,它可以代表一个或多个元素。群组地址要么是动态分配的,要么是蓝牙技术联盟预先定义的(SIG固定群组地址)。蓝牙技术联盟已经定义了4个固定群组地址,即All-proxies,All-friends,All-relays及All-nodes。在后续章节中我们会详细解释什么是Proxy(代理),Friend(朋友)及Relay(中继)。,我们可以通过配置应用程序来建立动态群组地址,这些地址反映了一栋建筑的某种实体分配,例如为大楼里的每一个房间定义一个群组地址。,虚拟地址可以赋给一个或多个元素,横跨一个或多个节点。虚拟地址与128位UUID的形式类似,任何元素都可以与其相关联,它更像一个标签。虚拟地址可以在出厂前就进行预先配置,然后用于某些特定场景,例如使某个厂商制作的投影仪的寻址更加方便。,图3-三个元素组成一个灯节点,2017BluetoothSIGProprietary.,10,消息当某个节点需要获取其它节点的状态时,或需要以某种方式控制其它节点,它会发送消息(message)。如果某节点需要向其它节点汇报状态,它也会发送消息。,在mesh网络中,所以通信都是以消息的形式传递的。协议规范中定义了多种消息类型,每种消息类型都有自己唯一的操作码。,消息可以统分为两种类型:需要应答和不需要应答。需要应答的消息要求接收节点接收到消息后返回一,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,发布/订阅,在蓝牙mesh中,发送消息称为发布(publish)。将某个节点配置成可以接收特定消息的过程称为订阅(subscribe),即如果某个节点可以接收某条消息,那么我们就说这个节点“订阅”了这条消息。,消息都是发往组地址或者虚拟地址的,而且这些地址都具有可读性,具有现实意义,例如代表某一个房间。所以使用起来既方便有直观。,在图4中我们可以看到,开关1可以发布消息到厨房组地址(上文我们已经提到,组地址可以代表某个房间)。1号,2号和3号灯节点都订阅了厨房地址,因此可以接收和处理发往该地址的消息。也就是说,1号,2号和3号灯可以被1号开关控制。同理,开关2可以发布消息到客厅组地址,而只有3号灯订阅了该地址,所以开关2只能控制3号灯。从图中我们也可以看到,一个节点可以订阅多个组地址,如3号灯节点同时订阅了厨房和客厅两个组地址。蓝牙的mesh功能非常强大而且灵活,我们还可以看到多个开关可以向一个组地址发布消息,如开关5,6都可以向花园组地址发布消息。,使用组地址和虚拟地址来发布和订阅消息有许多好处。当我们移除,替换或者添加节点时,不需要重新配置其它节点。想象一下你要在家里装一个灯有多麻烦你就知道这种方式有多方便了。例如有新设备需要加入到客厅网络中,只需经过“开通配置”过程并订阅相应的客厅组地址就可以了,其它节点并不会受到影响。开关2依然可以向客厅组地址发布消息,不过现在它可以控制3号灯与新加入的灯了。,状态和属性元素可能处在各种条件下,在蓝牙mesh中我们称之为状态(state)。一个元素可以有多个状态,每个状态都是一组特定值(在下面的服务器模型中会再做介绍)。状态与特定的行为有关,不能在其它地方重用。,例如,蓝牙mesh定义了通用开关状态来形容某个电灯可能存在的状态,为其赋1(on)电灯打开,为其赋0(off)电灯关闭,就这么简单。属性(property)与状态类似,它们都包含与元素相关的数值,但在其它方面二者存在显著差异。,发布,2017BluetoothSIGProprietary.,11,订阅,厨房,客厅,走廊,卧室,花园,图4-发布/订阅,Switch6,Switch5,Switch4,Switch3,Switch2,Switch1,Light1,Light2,Light3,Light4,Light5,Light6,Light7,Light8,Light9,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,熟悉BLE的读者应该了解特性(characteristic),它们是一种没有与特定行为相联系的数据类型,这样它们就很容易地得到重(chong)用。利用上面提到的属性,可以将特性与具体含义相联系。有一点需要特别注意,这里提到的属性(property)与我们在BLE协议栈中定义的属性(attribute)是完全不同的,为了防止混淆,我们也可以将前者翻译成“性质”(property)。为了加深对属性的认识,我们考虑一个具体的例子。有这样一个特性,称为“温度8”,它具有多个相关属性,包括室内温度与室外温度。当接收客户端接收到温度值时,可以根据对应属性值,来判断这个温度是室内温度还是室外温度。,属性分为两类,分别是来自制造商的只读属性和来自系统管理员的可读写属性。,消息,状态及属性,蓝牙mesh网络的正常工作依赖于消息的传递。某个特定类型的消息可以对一个或多个状态值进行操作。消息可以分为3类,简称为GET,SET,STATUS,对应于蓝牙mesh网络支持的3种操作。GET消息可以用来向一个或多个节点请求状态值,之后,相应节点会返回STATUS信息,告知请求的状态值。SET消息可以改变既定状态的值。有些SET消息需要应答,要求返回一条STATUS消息,有些消息不需要应答。STATUS消息可以用来应答GET消息,也可以用来应答SET消息或者通过某元素中的定时器定时发送。我们可以通过消息操作码(opcode)识别到特定状态。另一方面,我们也可以在通用属性相关消息中使用16位属性ID来直接引用属性(具体操作细节请参考蓝牙mesh相关技术文档)。,状态转变,从一个状态转变为另一个状态的过程叫做状态转换,转变的过程可能是瞬时的,也可能需要经过一段时间,这段时间叫做转换时间。状态转变可能会对节点应用层的行为产生影响。,绑定状态状态之间也可能存在某种关系,一种状态改变会导致另一种状态也改变,这种关系称为状态绑定(statebinding)。一个状态可以与其它多个状态绑定。,例如,通过一个调光器控制一盏灯。这盏灯有两种状态,即通用开关状态和通用等级状态,他们之间相互绑定。减少灯的亮度等级,直到亮度等级为0,这将导致通用开关状态由开变为关。,通用开关服务器,通用开关客户端,图5-通用模型,2017BluetoothSIGProprietary.,12,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,2017BluetoothSIGProprietary.,13,模型模型将之前提到的概念组合在一起,定义了元素的功能。当前蓝牙mesh规范中一共定义了3类模型。,第一种是服务器模型(servermodel),它定义了一系列的状态,状态转换,状态绑定以及模型中元素可以收发的消息。同时,它也定义了与消息,状态,状态转换相对应的行为。,客户端模型(clientmodel)没有定义任何状态,它只定义了几种消息。我们可以利用这些消息来对相应服务器模型中的状态进行操作,如GET,SET及STATUS。,控制模型(Controlmodel)包含一个服务器模型和一个客户端模型。服务器模型可以用来与其它客户端模型进行通信,而客户端模型可以用来与其它服务器模型进行通信。,我们可以通过扩展某个模型来创建新的模型。不过有一种模型不能扩展,这种模型称为root模型。,模型不能被改变,也就是说我们不能向模型中加入或者移除相关行为。实现新模型的唯一方式就是扩展已经存在的模型。,通用性生活中我们不难看出,很多设备本质上都存在着相似的状态。例如灯,风扇,电源插座等等,它们都具有开和关两种状态。因此,蓝牙mesh模型规范定义了许多可重用的通用状态,例如通用开关状态(GenericOnOff),通用等级状态(GenericLevel)。同理,我们还定义了一些通用消息,来对通用状态进行处理,例如GenericOnOffGet和GenericLevelSet消息。,通用状态及通用消息可以用在通用模型中。通用模型包括通用客户端模型,通用服务器模型,如通用开关服务器,通用等级客户端等。,利用通用性,不需要创建新的模型就可以将蓝牙mesh功能添加到多个设备中。因为可以通过扩展某个模型来创建新的模型,所以我们可以利用通用模型为新设备快速创建合适的模型。,情景想象一下,某天晚上,你想要将卧室的温度调到20摄氏度,将卧室吊灯调到合适的亮度,再将桌上的台灯调成令人舒适的暖色调等等。也许你会想到这需要一个一个手动设置,那你就out啦!我们可以在应用程序上保存这些配置,在需要的时候调用它们。这些保存的配置称为“情景”(scene)。我们可以通过16位情景序号来识别特定的情景,在每个mesh网络中,情景序号都是各不相同的。,利用情景可以让许多节点同时到达某种既定状态,省去了单独配置每个节点的麻烦。,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,2017BluetoothSIGProprietary.,14,开通配置(Provisioning)开通配置是指将某台设备加入到mesh网络中,从而变成一个节点的过程。它涉及几个阶段,期间会生成许多安全密钥,这一过程对安全性要求比较高。,开通配置通常是通过手机或者平板电脑上的应用程序完成的。此时,手机或者平板电脑通常被称为启动配置设备(Provisioner)。,开通配置的过程涉及5个步骤,下面就每个步骤分别展开讨论。第1步.发送Beacon信号为了支持蓝牙mesh的不同特性,包括但不限于“开通配置”,我们引入了新的GAP广播类型(参考蓝牙核心规范补充),包括广播类型。未开通配置的设备(如需要加入mesh网络的灯)可以发出广播数据包,声明自己是未开通配置的设备,可以被启动配置。用户可能需要按照一定的方式,如键入一组按钮,或长按某个按键一段时间,从而启动新设备的广播,第2步.邀请在这一步骤中,启动配置设备(手机等)向需要加入mesh网络的设备(如灯)发送邀请,实际上发送的就是“开通配置邀请PDU”,一种特定格式的数据包。此时需要开通配置的设备(如灯)会返回一定的数据包,即“开通配置能力PDU”告知自身情况。,第4步.认证在认证的过程中,新设备会根据自身输出能力按照某种方式输出一个或多个随机数(这一点与蓝牙配对方式有点类似)。例如新设备可以闪几下LED灯(闪烁的次数代表输出的验证值),或者有屏幕的话可以直接输出数字。用户在启动配置设备上输入相应数字,整个认证的过程就全部完成了。,第5步.启动配置数据分发认证完成之后,会利用两台设备的私钥和交换的对等密钥生成一个会话密钥(SessionKey)。之后利用会话密钥来加密后续的数据分发,完成剩余的开通配置过程,包括网络密钥(NetKey)和设备唯一地址,即单播地址(UnicastAddress)的分配。,开通配置过程完成后,新设备(如灯)将会拥有网络的NetKey,这是一个称为“IV索引(IVIndex)”的mesh安全参数,且拥有一个由启动配置设备(如手机)分配的单播地址。至此,这台新设备就正式成为节点了。,特性所有的节点都可以发送和接收mesh消息,但是我们也可以单独赋予某些节点额外的特性,使其拥有某些特定功能。一共有四种特性可以选择:中继(Relay),代理(Proxy),友(Friend)以及低功耗(LowPower)特性。每个节点都可以支持以上四种特性中的0个或者多个,而且随时可以取消已经配置好的特性。,第3步.交换公共密钥启动配置设备(如手机)和需要开通配置的设备(如灯)交换公钥。公钥可以是固定的,也可以是暂时生成的。公钥的交换可以通过蓝牙传输,也可以使用带外数据(OOB)交换的方式。例如使用NFC或者二维码进行数据交换,这样数据传输的安全性更高。,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,2017BluetoothSIGProprietary.,15,中继节点支持中继特性的节点称为中继节点,它可以重发接收到的消息。通过中继技术,消息可以进行多次“跳跃”(hop),这样就可以将消息传输到整个mesh网络。mesh网络PDU中有一个字段称为TTL(TimeToLive)。TTL利用一个整数值来限制每条消息可以在网络中跳跃(被中继)的次数。例如TTL等于3时,表示消息最多被中继3次。TTL等于0则表示消息不能被中继,只能进行单次传输。节点每隔一段时间发送一次TTL,这样可以了解网络拓扑结构,充分利用mesh网络,避免不必要的消息中继,从而节省功耗。,低功耗节点与友节点有些节点可能采用电池供电,所以需要尽可能地降低功耗。这种类型的设备可能主要关心发送消息,但也需要偶尔接收消息。例如,有一个采用纽扣电池供电的温度传感器,当温度超出既定阈值上限或者下限时,传感器每隔一分钟发送一次温度值。如果温度不超出阈值,则不发送消息。如果不考虑功耗问题的话,这些行为都很容易实现。,用户可能会向传感器发送消息,设置新的阈值,这种行为比较少见,因为用户不可能有事没事地改变阈值,用户可能会在季节改变或者新加设备时设置阈值。但是传感器的阈值必须是能够改变的。接收消息的频率对接收器占空比和功耗有影响。100%占空比能够确保传感器不丢失任何一条温度阈值配置消息,但是功耗是非常大的。低占空比可以节省功耗,但是也可能丢失某条配置消息。为了解决这一难题,蓝牙mesh引入了友节点(friendnode)及友谊(friendship)的概念。在上面的例子中,温度传感器可以设计成低功耗节点(LowPowernodes)。在传感器的配置数据中,会设置特定的标志,标记这是一个低功耗节点。,低功耗节点会同另一个节点配合工作,这个节点对功耗没什么特别的要求(可能接入市电,有固定的电源),这个节点称为友节点。友节点保存发往对应低功耗节点的消息。低功耗节点会对友节点进行轮询(Poll),查看是否有新消息。低功耗节点轮询的频率非常低,这样就可以降低功耗,同时降低丢失配置消息的可能。当低功耗节点对友节点进行轮询时,保存在友节点的消息就会一个接一个地发到低功耗节点。在发出的数据包中有一个MD(moredata)标志,用来指明友节点是否还有消息需要发送。,低功耗节点与友节点的关系称为“友谊”(friend-ship)。正是这种友谊关系,才使得功耗受限的节点能够在蓝牙mesh网络中正常接收消息,在正常工作的同时保持较低功耗。,代理节点在我们的生活中有大量的BLE设备,例如智能手机或者平板电脑。到现在为止,已经上市的蓝牙设备都还没有集成蓝牙mesh网络协议栈,它们只使用了BLE协议栈以及传统蓝牙协议栈。所以它们只能通过通用属性规范(GenericAttributeProfile-GATT)与其它设备进行信息交互。代理节点能够实现GATT和蓝牙mesh节点之间的信息交互。我们定义了代理协议,用于面向连接的承载层,如GATT。GATT设备(没有集成蓝牙mesh协议栈)可以通过代理节点读写代理协议PDU。总之,代理节点可以允许没有集成蓝牙mesh协议栈的BLE设备与mesh网络中的任何节点进行通信。,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,P,图6-智能手机通过代理节点与mesh网络进行通信,P=代理节点,2017BluetoothSIGProprietary.,16,节点配置配置服务器模型(ConfigurationServerModel)定义了许多状态,我们可以使用配置客户端模型(ConfigurationClientModel)访问这些状态。配置状态与节点可以产生的行为和能力有关,与具体的应用或者设备类型无关。,例如,我们可以利用“配置服务器状态”来指明某个节点是代理节点,中继节点还是其它节点。节点订阅的地址保存在订阅列表中。网络和子网密钥以及应用密钥都保存在配置块中(configurationblock)。,配置客户端模型与配置服务器模型可以对相应的配置服务器模型的状态进行操作,这些操作包括GET,SET及STATUS,它们是通过相应的配置消息完成的。,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,4.0mesh系统架构,2017BluetoothSIGProprietary.,17,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,4.0mesh系统架构,概述本章我们将深入了解蓝牙mesh的体系结构,认识mesh网络层级分布以及各个层的功能。我们还会将蓝牙mesh结构与BLE结构进行对比说明,这将更助于我们理解。,承载层发送和接收mesh消息需要底层协议栈的支持,而承载层(bearerlayer)则定义了如何使用底层BLE协议栈传输网络PDU。目前定义了两个承载层:广播承载层和GATT承载层。广播承载层利用BLEGAP广播和扫描特性来发送和接收meshPDU。,对于不支持广播承载层的设备,可以利用GATT承载,层通过使用代理协议与mesh网络中的节点进行通信。,代理协议封装在GATT操作中,包括特殊定义的GATT特性。mesh代理节点通过实现上述GATT特性,来支持GATT承载层和广播承载层。这样就可以在两种承载层间转换和中继消息。,网络层网络层(networklayer)定义了多种消息地址类型和网络消息格式,这样传输层的PDU就可以通过承载层传输了。它可以支持多个承载层,每个承载层可以有多个网络接口,如用于同一个节点不同元素间通信的本地接口。网络层决定了用哪一种网络接口来输出消息。来自承载层的消息会先经过一个输入滤波器,判断消息是否需要传入网络层进行进一步处理。同理,输出消息会经过输出滤波器,来决定消息是否要传递到承载层。,我们还可以通过网络层实现代理和中继特性。从图7可以看到,蓝牙mesh网络结构的最下层是BLE。事实上,这不仅仅只有一层,而是整个BLE协议栈。很显然,蓝牙mesh正是利用BLE进行实际上的信息通信的。接下来我们将自底向上分别介绍各个层。,模型,基础模型,上层传输层,底层传输层,网络层,承载层,BLE,接入层,2017BluetoothSIGProprietary.,18,图7-蓝牙mesh架构,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,2017BluetoothSIGProprietary.,19,底层传输层底层传输层(lowertransportlayer)可以将来自上层传输层的PDU发到对端设备的底层传输层。它还可以进行PDU的分段和重组(这一点与BLE协议栈中的L2CAP类似)。对于那些不能放入单个PDU的长数据包,底层传输层会对其进行分段,将其放入多个PDU中传输。当其它设备的底层传输层收到数据包后再将其重新组合,放入单个上层传输层PDU中,再向上传输。上层传输层上层传输层(uppertransportlayer)可以将来自或者发往接入层的应用数据进行加密,解密和认证。在不同节点之间,上层传输层还负责“传输控制消息”的生成和发送。传输控制消息与下文将要提到的“友谊”和“心跳”有关。接入层接入层(accesslayer)定义了应用如何使用上层传输层。包括:定义应用数据格式定义和控制上层传输层中的数据加密和解密过程验证从上层传输层传来的数据是否对应于正确的网络和应用,如果正确则将其传入上层协议栈中基础模型层基础模型(foundationmodel)层负责涉及mesh网络配置和管理的基础模型的实现。模型层模型(model)层定义了模型的实现以及模型规范中定义的行为,消息,状态,状态绑定等的实现。,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,5.0安全性,2017BluetoothSIGProprietary.,20,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,5.0安全性mesh网络安全特性具有强制性在BLE中,允许profile设计者采用不同的安全机制。例如使用不同的蓝牙配对方法,或者为某一个特性提供单独的安全防护。也就是说,在BLE中,安全防护是可选择的,允许设备不进行安全防护。由产品的设计者或制造商负责分析产品的安全风险,满足具体的安全需求。相反,蓝牙mesh的安全防护是强制执行的。不管是网络,单个应用还是具体的设备都需要进行加密,并且在任何条件下都不能人为地关闭或减弱。mesh网络安全性基本原则蓝牙mesh网络会采用以下几个基本原则来确保网络的安全性:1.所有的mesh消息都要经过加密和认证。,2.网络安全性,应用安全性,设备安全性相互独立。也就是下面要提到的“关注点分离”。,3.在mesh网络中,我们可以通过密钥刷新程序来更新节点的安全密钥。,4.消息模糊化可以让外界难以追踪网络内所发送的消息,进而提供了一种隐私保护机制,难以让外界跟踪节点的活动。,5.蓝牙mesh安全性可保护网络免受中继攻击。,6.设备添加到mesh网络从而成为节点的过程本身就是是一个安全的过程。也就是前面提到的,开通配置过程。,7.节点可以从网络中安全地移除,这样可以防止垃圾桶攻击(trashcanattack)。,图8-蓝牙mesh网络的安全性是最重要的,2017BluetoothSIGProprietary.,21,关注点分离与mesh安全密钥蓝牙mesh网络安全性的核心是三种安全密钥。分别使用这些密钥对网络中的不同部分进行加密,这在网络安全性方面是一种关键能力,也就是我们要说的“关注点分离”技术。,为了更好地了解这种技术,我们举一个例子。有一个已经加入蓝牙mesh网络的灯。它可以当作一个中继节点来中继消息。它可以中继门窗安全系统的消息,但是它不能理解消息的具体含义,只需要中继消息就行了。照明系统和门窗安全系统相当于两个不同的子系统,它们使用不同的密钥进行加密,这样整个网络的安全性就得到了提升。蓝牙mesh网络里的每个节点都有一个相同的网络密钥(NetKey)。正是这个密钥才使得节点成为这个网络的一员。网络加密key与隐私key都是由这个网络密钥生成的。,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,2017BluetoothSIGProprietary.,22,节点可以利用NetKey来加密和认证网络层,这样诸如中继之类的网络功能就可以执行了。但是NetKey不能加密应用数据。蓝牙mesh网络可以分成几个子网络,每个子网络都有其单独的NetKey,这个NetKey只有当前子网络成员节点才有,其它节点没有。这种方式可以分隔开特定的物理区域,例如酒店中的每个房间都可以拥有一个单独的NetKey。只有拥有应用密钥(AppKey)的节点才能解密相应的应用数据。在一个mesh网络中,可以有许多不同的AppKey,每个AppKey对应一种特定的应用(照明应用,热力应用,门窗安全系统应用等)。例如,灯和开关拥有灯应用的AppKey,但是没有热力系统的AppKey,只有网络中的温度调节装置才拥有热力系统的AppKey。,上层传输层会在将消息传输到接入层前,利用AppKey对消息进行解密和认证。,每个AppKey只与对应的NetKey有关系,这种关系称为“密钥绑定”(keybinding)。也就意味着,一个拥有既定AppKey的应用只能工作于某个特定网络,而一个mesh网络可以拥有多个独立的应用。最后一种密钥是设备密钥(DevKey)。这是一种特殊的应用密钥。每个节点都有一个独一无二的设备密钥,这个密钥只有启动配置设备(如手机)知道。设备密钥可以用在开通配置过程,以确保启动配置设备与节点之间的安全通讯。,节点移除、密钥刷新与垃圾桶攻击如前文所述,节点包含多种mesh安全密钥。如果某个节点出现故障,需要被丢弃,或者用户想要将某个节点卖给其他人,那么我们需要特别注意,节点中包含许多网络密钥,不法分子可能利用这些密钥攻击你的网络,给用户造成损失。针对以上情况,蓝牙mesh规范中定义了一套安全的流程来移除不需要的节点。启动配置设备(如手机)上的应用程序可以将节点加入黑名单,之后发起密钥刷新程序。,密钥刷新程序(KeyRefreshProcedure)会向网络中的所有节点发送新的网络密钥,应用密钥等相关数据。换句话说,所有的安全密钥都被替换了。当然在黑名单中的节点不会收到这些信息。,因此,被移除的节点只拥有旧的密钥,所以不再是网络中的一员,也就没有威胁了。,隐私隐私key是通过NetKey产生的,它可以用来模糊化网络PDU报头,例如模糊化源地址。模糊技术可以防止不法分子通过被动窃听来追踪某台设备或者某个人的位置。它也可以令某些攻击更加困难,如基于网络流量分析的攻击。利用隐私key可以提供非常合适的安全防护。,重放攻击在网络安全方面,我们经常提到重放攻击(replayattack)技术。重放攻击是指窃听者截获一个或多个消息后,再转发这些消息,以欺骗接收者,实施未授权的攻击行为。例如我们经常提到的一个例子,汽车的无钥匙进入系统受到攻击者的破坏,攻击者拦截了车主与汽车之间的认证序列,然后重放这些信息进入汽车实施盗窃。,蓝牙mesh网络可以防止重放攻击。在蓝牙mesh网络PDU中包含两个字段,分别称为序列号(SequenceNumber)和IV索引(IVIndex)。每次发布消息时,元素会增加序列号的值。当某个节点从元素接收消息时,如果发现元素包含的序列号小于或等于上一个有效消息中的序列号,则节点会将消息丢弃,因为很可能这则消息与重放攻击有关。IV索引是一个单独的字段,需要与序列号一同考虑。来自既定元素的消息中的IV索引值必须等于或者大于该元素的上一个有效消息。,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,6.0蓝牙mesh在行动,2017BluetoothSIGProprietary.,24,backtocontents,BluetoothMeshNetworking/AnIntroductionforDevelopers,2017BluetoothSIGProprietary.,25,6.0蓝牙mesh在行动,消息发布与传递Wi-Fi网络是基于一个中央网络节点进行工作的,这个中央网络节点就是我们常见的路由器。所有的网络传输都是通过路由器进行的。一旦路由器出现故障,整个网络都会瘫痪。,与此相反,蓝牙mesh使用一种称为管理型网络泛洪的技术来进行消息的传递。当一条消息被某个节点发布后,这条消息不会只路由到某个或多个特定的节点。如果配置合适的话,在初始节点无线电覆盖范围之内的所有节点都会收到消息,然后还可以将其中继到更远的地方,这样在离初始节点更远(远远超过初始节点无线电覆盖范围)的地方也能收到中继来的广播消息。这样整个通信距离将变得更长。,多路径传递,通过使用管理型网络泛洪技术,我们可以发现,消息可以通过网络中的多种途径到达目的地。这就使得蓝牙mesh网络的消息传输更加可靠,也正是由于这个原因,在网络设计时,我们才采用了泛洪技术,没用采用路由的方法。,管理型网络泛洪蓝牙mesh网络采用网络泛洪的方式传输消息,这样可以使整个网络更加可靠和高效。我们可以通过多种方式来优化泛洪的工作,称之为“管理型网络泛洪”。这些方式如下:,心跳节点会周期性地向其它节点发送心跳消息,告知其它节点该节点处于活动状态。同时心跳消息还包含一部分数据,可以让网络了解其拓扑结构,以及传到其它设备需要的跳数。这部分信息可以用在TTL字段中。,TTL上文我们已经提到,TTL(timetolive)是蓝牙meshPDU中包含的一块区域,它控制着某条消息

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论