
网络层定义了网络PDU格式,允许承载层传输下层传输层的PDU。它对输入接口接收的传入消息进行解密和身份验证,并将其转发到上层和/或输出接口,对传出消息进行加密和身份验证并将其转发到输出网络接口。
网络层定义了4种地址类型,地址长度为16位。
如下图:
单播地址范围从0x0001到0x7FFF,可以有32767个单播地址。
虚拟地址范围从0x8000到0xBFFF,可以有16384个虚拟地址。
组播地址范围从0xC000到0xFFFF,可以有16384个组播地址。组播地址包括256个固定组播地址和16128个可动态分配的组播地址。
蓝牙mesh对节点没有并发性限制或限制。
当与低功耗蓝牙传输一起使用时,该规范不存在拓扑限制或限制。
意味着什么?能分配多少单播个地址,就能有有多少个设备。虚拟地址、组播地址和单播地址是可以共存的,所以设备的个数,只能以单播地址计算。比如,一个设备即可以同时属于组1、组2,设备还有单播地址,一下就用掉了3个地址,但是只有一个设备。所以一个网络中可以有32767个有效地址。
未分配地址的意义在于,可以通过将模型的发布地址设置为未分配地址来禁用模型的消息发布。那这里有个问题,网络层在发现是未分配地址的消息会怎么做,未分配地址的消息是在网络层拦截还是在承载层拦截?meshNetworkManager。
单播地址即可在消息的源地址字段中使用,也可在消息的目标地址字段中使用。发送到单播地址的消息最多只能由一个元素处理。在配网阶段,配网器会在网络节点的生命周期内为节点的每个元素分配单播地址。该地址可以由配网器取消分配,以允许被重用。
虚拟地址表示一组目标地址。每个虚拟地址在逻辑上代表一个标签UUID,它是一个128位的值,无须集中管理。一个或多个元素可以配置发布或订阅同一个标签UUID。标签UUID不会被传输,应该用作上层消息层中消息完整性校验值的附加数据字段。虚拟地址涉及Hash值的计算。(这里无须对虚拟地址做过多研究,后面自然就清楚了)
组播地址从0xFF00到0xFFFF的组播地址保留给固定的用途,从0xC000到0xFEFF的组播地址可以用作其他用途。组播地址只能在消息的目标地址中使用。发送给组播地址的消息会被订阅这个组播地址的所有模型实体接收到。
这句话对不对,那么任何一个BLE设备都可以加入mesh网络?该如何解读?
网络层支持通过多个承载器发送和接收消息。一个承载器可能存在多个实例。承载器的每个实例都可以通过网络接口连接到网络层。例如,一个节点可能有三个承载器:一个广播承载器和两个GATT承载器的接口。
一个网络中,如果有两个配网器会怎么样?一键配网和多配网器是两个概念。
接口输入过滤器决定传入的网络消息是交付给网络层进一步处理,还是将其删除。
接口输出过滤器决定是将消息传给承载层还是删除。接口输出过滤器删除所有TTL值为1的消息。
本地网络接口允许在同一个节点内的元素之间发送消息。每个节点都应该实现一个本地网络接口。通过本地网络接口接收消息后,应该将所有消息发送给节点的所有元素处理。
广播承载器的网络接口,允许使用广播承载器发送消息。APP端不做研究。
中继功能用于中继节点或转发节点通过广播承载器接收的网络PDU。此功能是可选的,如果支持此功能,则可以单独启用和禁用此功能。如果支持代理特性,则必须同时支持GATT承载器和广播承载器。
代理功能指节点在GATT承载网络和广播承载网络之间中继或转发网络层PDU来实现GATT承载网络和广播承载网络间的消息互通。此功能是可选的,如果支持此功能,可以单独启用和禁用此功能。如果支持代理特性,则同时支持GATT和广播承载。
节点收到来自承载层的消息后,检查NID字段值是否匹配一个或多个已知的NID。如果NID字段的值与已知的NID不匹配,则该消息将被忽略。如果NID字段的值与已知的NID匹配,节点将根据每个已知的匹配的网络密钥验证消息。如果消息没有对任何已知的网络密钥进行验证,则该消息将被忽略。如果消息确实根据网络密钥认证,SRC和DST字段被认为是有效的,并且消息不在网络消息缓存中,那么该消息将由较低的传输层处理。
当一条消息被重传时,定义如下,重传时使用的IV索引应与接收时的IV索引相同。
如果节点的网络层收到了广播承载器分发过来的消息,通过了验证,要上报给底层传输层处理时,如果节点启用了中继功能,TTL字段的值为2或更大,且元素的目标地址不是这个节点的任何一个单播地址,那么TTL字段值应该减1,网络层PDU应标记为中继PDU,并转发给连接到广播承载层的所有网络接口。建议在接收网络PDU和中继网络PDU之间设置一个较小的随机延迟,以避免同时接收同一个网络PDU的多个中继消息而发生冲突。
如果节点的网络层收到了来自GATT承载器(如果是广播承载器)的消息,并通过了验证,要上报给底层传输层处理时,如果节点支持代理功能且代理功能是开启的,同时TTL字段的值为2或更大,且目标地址不是本节点的任何一个元素的单播地址,那么设置该消息TTL值减一,并转发这个消息到所有网络层接口(转发到与GATT承载器连接的所有网络层接口)。
参照网络层PDU格式生成数据包,然后调用承载层进行传输即可。
网络消息缓存
为了减少不必要的安全检查和过度的中继,一个节点应该包括所有最近看到的网络pdu的网络消息缓存。如果收到的网络PDU已经在网络消息缓存中,则不处理网络PDU(即立即丢弃)。如果接收到一个网络PDU,而该网络PDU不在网络消息缓存中,则可以对网络PDU进行处理(例如,根据网络安全性进行检查),如果它是一个有效的网络PDU,则应该存储在网络消息缓存中。
节点不需要缓存整个网络PDU,可以只缓存一部分用于跟踪,例如NetMIC、SRC/SEQ或其他的值。只要能在设备能力的限制范围内实现不多次处理同一网络PDU,筛选条件是可以自定义的。
当网络消息缓存已满,需要缓存一个新的网络PDU时,一个新的网络PDU将取代网络消息缓存中已经存在的最久的网络PDU。
网络消息缓存应该能够存储至少两个网络pdu,尽管强烈建议拥有一个适合预期网络密度的网络消息缓存大小。传入消息处理过程的细节还是留给开发者自己实现。
收到<- 0x003EBB5242C5F1E3FDFB18251C5942BFE8EC25CC767D1E1AE1FDD9C73CC0
networkKey: F9B024F55B95EFA75F6B2B8D8D3A3F5C
NetworkPdupdu = 0x3EBB5242C5F1E3FDFB18251C5942BFE8EC25CC767D1E1AE1FDD9C73CC0
ivi==== 0
nid==== 0x3E(10进制62)
解混淆时的keysprivacyKey:A212C7601572F72C15EBA9179775D9D0
解混淆时的ivIndex:0
解混淆的结果:050000030003
===ctl:0,
===ttl:5,
===sequence:3,
===source:3,
===netMicSize:4
===micOffset:25,
===destAndTransportPdu:FDFB18251C5942BFE8EC25CC767D1E1AE1FD,
===mic:D9C73CC0
====nonce:00050000030003000000000000,
keysencryptionKey:DA33D708B9D25EDE5FDE26BBC1EC848A
decryptedData:0001800008034458CCC398FD700CF04E7C05,
destination:1,
transportPdu:800008034458CCC398FD700CF04E7C05
收到<- 0x003EDC3EEFD43C51766AE52CE58BD0969F312C144A14753C9B28EAA5BB8B
networkKey: F9B024F55B95EFA75F6B2B8D8D3A3F5C
NetworkPdupdu = 3EDC3EEFD43C51766AE52CE58BD0969F312C144A14753C9B28EAA5BB8B
ivi==== 0
nid==== 0x3E(10进制62)
解混淆时的keysprivacyKey:A212C7601572F72C15EBA9179775D9D0
解混淆时的ivIndex:0
解混淆的结果:050000040003
===ctl:0,
===ttl:5,
===sequence:4,
===source:3,
===netMicSize:4
===micOffset:25,
===destAndTransportPdu:766AE52CE58BD0969F312C144A14753C9B28,
===mic:EAA5BB8B
====nonce:00050000040003000000000000,
keysencryptionKey:DA33D708B9D25EDE5FDE26BBC1EC848A
decryptedData:0001800008231CDC2FCB23CD2EB4C47D8BE8,
destination:1,
transportPdu:800008231CDC2FCB23CD2EB4C47D8BE8
在蓝牙mesh网络中,有一个特殊的设备称为Provisioner(配置器),它负责管理网络的配置和维护。Provisioner是一个主设备,它可以与其他设备建立连接,向它们发送配置信息,并控制网络中的设备。
其他设备可以是从设备,它们可以接收来自Provisioner和其他设备的消息,并将其转发到其他设备。从设备可以是灯、传感器、开关等设备,它们可以执行各种任务,例如控制灯光、检测环境等。
因此,在蓝牙mesh组网中,所有设备都可以充当主设备或从设备,它们的角色取决于它们在网络中执行的任务。前两者的关系是这样的:蓝牙40是第四代蓝牙标准。Navior是一个很牛的企业,最先成熟运用了蓝牙40。。。物联网是指一个系统将各个物品通过蓝牙,wifi,zigbee等通讯手段相互连接,控制感应,与前两者没有直接关系。
台湾老字号的电子大厂、成立已经42年的光宝对一般消费者最有印象的应该是照明相关应用,然而光宝的业务不仅只在照明领域,也长年耕耘于无线连接模组技术,包括车载连接、智慧路灯等都有长年的开发经验,既然有了丰富的技术、经验与资源,光宝在三年前决定成立SLA智能生活与应用事业群,将旗下与物联网相关的资源整合,提供一站式由软体到硬体的完整解决方案,不过光宝并非主动投入物联网终端品牌,仍是以为客户提供解决方案为主。
光宝科技表示,物联网是一项多而广而杂的科技应用,从应用方式、连接方式到解决方案,都需要广泛的涉猎;光宝也在物联网提出3-3-1的策略,也就是专注于智慧建筑、智慧建筑与工业40三大领域,锁定能源管理、安全监控与自动化控制三范畴,并提供一站式的解决方案,光宝SCA部门以光宝多年在各领域提供自无线模组、ODM的软硬体经验,并将其整合,为产业提供合适的解决方案组合。
光宝亦自豪的表示,相较其它物联网OEM厂商,光宝所能提供的可靠性更胜其它业者,以MotionSensor为例,业界一般的方案约莫在200-300小时内就会发生ForceTrigger,光宝的方案则可达到500小时才发生一次以内的ForceTrigger情况。高稳定性、低错误率尤其对于结合安全监控的自动化解决方案尤其重要。
光宝在今天的说明会上,以展示其智慧控制闸道器、人体移动侦测器、门窗感应、智慧插座、灯光控制器与智慧警报器等解决方案,同时光宝也提供广泛的物联网技术方案给客户多元的选择,包括通用的ZigBee与BLE,或是有特殊需求的客制化方案等,皆诉求具备严谨的稳定性。同时光宝也提及,在蓝牙50加入MESH网路支援后,客户对于家用的蓝牙BLE50智慧灯泡的需求亦大幅增加。
同时光宝也自豪其壁插型闸道控制器解决方案,在会场上所展示的第一世代产品以仅2Gate的大小提供600W灯泡控制与完整的家居中控机能,目前仅有光宝与另一家北美方案厂商能提供这样的方案,光宝也预计在2018CES展示第二代产品,在1Gate壁插大小提供相同的功能,更符合主流市场家中壁插的形式。
光宝认为,由于他们能提供高可靠且高整合的解决方案,且欧美许多一线大厂也早已是他们的客户,加上技术产业逐渐成熟,有助于降低智慧家居解决方案的价格,在价格能被消费者接受、使用者体验也提升许多的状况下,光宝也看好明、后年智慧家庭装置在市场的需求成长。
其次光宝也提及,在日本先前核电厂爆炸后,日本对于能源管理有更大的需求,光宝也与日本 合作进行能源管理的合作计画,希望借由导入智慧自动化的方式,达到更有效率的能源管理,虽然台湾相较国际电价偏低,不过台湾近期也因为火力发电造成的空气污染所困,在环境污染的影响下,接下来电价也势必受到影响,光宝认为接下来台湾也将会更重视能源的有效应用,未来也希望能将与日本的合作经验带回台湾,使台湾也有良好的能源管理。
BleMesh依赖于低功耗蓝牙 - 低功耗蓝牙技术是蓝牙mesh使用的无线通信协议栈。蓝牙具有一对一、多对一及多对多三种通信方式。
BleMesh采用的是多对多的通信方式,Mesh网络中的所有设备都可以互相进行通信。
未加入mesh网络的设备称为"unprovisioned devices(未配网设备)";
已加入mesh网络的设备称为"node(节点)";
未配网设备转换为节点的过程称为"provisioning(配置)";
一个节点具有多个组成部分,每个可以独立进行控制,每个组成部分称为"element(元素)";
一个元素有多种情况,这种情况称为"state(状态)",例如Generic OnOff状态;
Properties(属性)代表具体含义的数据
Message(消息)用来 *** 作状态值,分为三种:GET、SET、STATUS,SET消息又分为有响应式/无响应式。
设备加入mesh网络的过程称为provisioning,用于驱动provisioning过程的设备称为provisioner,provisioning成功后成为node,还需要经过一系列的配置。
配网过程应该遵循配网协议
配网有5个阶段:
NetKey:网络消息加密加密,成为网络的一员。
AppKey(ApplicationKey):处理应用层数据,有AppKey才能实现上层传输层以上的所有功能。
DevKey(DeviceKey):每个节点的devKey唯一,用于配网阶段和配网器进行安全传输用,只有配网器与入网的节点知道DevKey。
垃圾桶攻击(Trashcan Attacks):
重放攻击(Replay Attacks):
通过SEQ Number与Iv Index来保证消息是最新的
每条指令都会携带Seq,当下一个seq小于上一条时则该指令不会执行,provisioner端记录seq变化,同时node也存在记录,当node重置或者Iv Index更新时,seq都会重置。
代理:实现Gatt和蓝牙Mesh节点之间的mesh消息发送与接收。
中继:转发从其他设备接收到的消息,数据包包含TTL字段,用于限制中继的跳数。
低功耗/友好:两个节点互帮互助,由友好节点存储消息,在低功耗节点需要消息时,友好节点才会传送消息,他们关系称为"friendShip",一般低功耗节点受限于功耗,而友好节点相反,功率不受限的节点很适配作为友好节点。
一个network最多支持32767(0x7FFF)个地址
动态分配的地址(Dynamically Assigned) -> 0xC000-0xFEFF
固定地址(Fixed Address) – 由蓝牙技术联盟分配,分为五段:
保留供将来使用 (RFU) –> 0xFF00-0xFFFB
节点的基本功能都由模型来定义和实施,模型位于元素内,模型能定义并实施节点的功能和行为,而状态能定义元素的状态/条件。
蓝牙Mesh网络通过客户端-服务器架构进行通信
服务器模型(Server Model):暴露元素的状态,定义模型能够发送/接收消息,并根据这些消息定义元素的行为。
客户端模型(Client Model):对状态进行访问,请求、更改或使用服务器的状态
控制模型(Control Model):具有多种功能,可能同时含有一个或多个客户端模型、服务器模型
表示mesh网设备的配置,该model只有主元素支持,该model定义了多种状态
该模型表示该元素可以控制节点的配置
主要的作用是设备上述Configuration Server Model所拥有的状态。
Config Model App Bind 该消息作用将appKey bind to Model,将appKey绑定至model如何理解
当一个元素收到一个模型与AppKey绑定的消息并成功执行后,它应该将AppKey索引对应的AppKey绑定到特定的模型上,并给模型返回AppKey状态消息。
每个server Model都有一组绑定到它的appKey,这些key值就负责加密、认证有这些model处理的消息。Mesh网络即”无线网格网络”,是“多跳(multi-hop)”网络,是由ad hoc网络发展而来,是解决“最后一公里”问题的关键技术之一。在向下一代网络演进的过程中,无线是一个不可缺的技术。无线mesh可以与其它网络协同通信,是一个动态的可以不断扩展的网络架构,任意的两个设备均可以保持无线互联。 芝士认回答,版提带权必究要,未经加许可,不得转载 蓝牙网络 他分发能家义线心问式论区规权达声究须调。 蓝牙(Bluetooth):是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用24—2485GHz的ISM波段的UHF无线电波)。蓝牙技术最初由电信巨头爱立信公司于1994年创制,当时是作为RS232数据线的替代方案。蓝牙可连接多个设备,克服了数据同步的难题。 不个线反设少手节织习片红铁
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)