蓝牙mesh学习2

蓝牙mesh重点:各层功能
* 承载层(bearer layer):承载层定义了如何使用底层低功耗对债传输PDU。目前定义了两个承载层:广播承载层(ADV)和GATT承载层(GATT)。
* 网络层(network layer):网络层定义了各种消息地址类型和网络消息格式,中继和代理行为通过网络层实施。
* 底层传输层(lower transport layer):在需要的时候,底层传输层能够处理PDU的分段和重组。
* 上层传输层(upper transport layer):负责对接入层进出的应用数据进行加密、解密和认证。他还负责成为“传输控制消息”(transport control messages)这种特殊消息,包括对“friendship”相关的心跳和消息。
* 接入层(access layer):负责应用数据的格式、定义并控制上层传输层中执行的加密和解密过程,并在将数据转发到协议栈之前,验证收到的数据是否适用于正确的网络和应用。
* 基础模型(foundation models):基础模型层负责实现与mesh网络配置和管理相关的模型。
* 模型(models):模型层和模型等的实施、以及诸如行为、消息、状态等的实施相关。

Mesh Feature:
1. Proxy feature:代理功能
2. Relay feature中继功能
3. Friend feature朋友功能
4. Low Power feature低功耗功能

* Bearer层

分类:ADV Bearer 和 GATT BearerADV Bearer :GATT Bearer:基于GATT的规程操作,分为客户端和服务器。GATT Bearer客户端需要支持Proxy服务。具体参考GATT规程。
* 网络层 Netwok

地址(Address)有四种类型,其中的三类用于消息的传送:单播(unicast)、虚拟(virtual)和群组(group)地址、未分配(unassigned)地址。 地址长度为 16 位,并按下述定义进行编码未分配地址(Unassigned Address)未经配置的元素或未被指定地址的元素拥有的就是未分配地址。鉴于这些元素没有唯一的地址, 它们不会用于消息的传送。单播地址(Unicast Address)在“启动配置”(provisioning)期间,启动配置设备(provisioner)会在网络节点的生命周期内为节点中的每个元素分配一个单播地址。单播地址可能出现在消息的源地址字段或目的地址字段中。 发送到单播地址的消息只能由一个元素进行处理。虚拟地址(Virtual Address)虚拟地址是与特定的 UUID 标签相关联的一组元素;这些地址可能会被发布或订阅。 UUID 标签是与多个来自一个或多个节点的元素相关联的 128 位值。 对于虚拟地址, 15 和 14 位分别设置为 1 和 0(图 2); 13 – 0 位被设置为散列值(hash value)(提供 16,384个散列值)。散列(hash)来自于 Label UUID。使用订阅元素(subscribing element)来检查完整的 128 位UUID 是十分低效的,特别当 UUID 跨越多个消息段时更为低效。 散列值提供了一种更为有效的方式来确定哪些消息被发送至哪些元素。群组地址(Group Address)群组地址是蓝牙 mesh 网络中的另一种多播地址(multicast address) ,它通常代表一个或多个节点中的多个元素。(发送到启用各个功能的所有节点)
1. 控制消息(Control Message) - 与蓝牙 mesh 网络操作有关的消息,例如心跳(heartbeat)和 friend 的请求消息
2. 接入消息(Access Message) - 该类消息允许客户端模型检索或设置服务器模型中的状态值,或被服务器用于报告状态值。

Network PDU:IVI:用于PDU的认证和加密标志NID:Encryption Key and Privacy Key相关。CTL:0-> Access Message 1->control messageTTL:生命周期。表明该PDU能否被中继,为0时候不可以被中继SEQ: 和IVI配合使用SRC/DST: 源地址和目标地址。SRC必须是unicast addressPDU:CTL为0,最大长度128bit;CTL为1,最大长度96bitNetMIC:CTL为0,最大长度32bit;CTL为1,最大长度64bit接收PDU的处理过程:
* Lower传输层

PDU的分类:Unsegmengted Access Message: transport an Upper Transport Access PDU that fits into a single Network PDUSegmented Access Message: tranports a segment of an Upper Transport Access PDUUnsegmengted Control Message:transport either a Segment Acknowledgment message or a Transport Control message.Segmengted Acknowledgment Message:used by the lower transport layer to acknowledge segments received by a peer lower transport layer Segmented Control message:transport Control message when the Transport message will not fit into a sigle Network PDU.Segmentation(分段) and Reassembly(重组)
* 上层传输层 Upper transport layer

Upper transport Access PDUUpper transport Control PDUUpper transport layer behavior
1. transmitting an access payload
2. receiving an Upper Transport PDU

建立Friend三要素:ReceiveDelay:从LPN向好友节点发送请求,到其开始收听响应中间经过的时间,折让好友节点有时间做好响应的准备,并将响应发回。ReceiveWindow:LPN用于收听响应的时间PollTimeout:设定了LPN发送到其好友节点的两个连续请求之间可能经过的最长时间。如果在PollTimeout计时器到时之前,好友节点未能收到LPN的请求,则友谊关系将被终止。Hearbeat心跳是用来监控网络中的节点是否存活(present and active),和发现节点之间的距离。hops = InitTTL - RxTTL +1
* Access layer (接入层或者访问层)

Access layer 定义了高层应用如何使用上层传输层,定义了应用数据的格式,定义并控制上层传输层中执行的加密和解密过程,在推到更高层之前检查传过来的应用数据是否是从正确的网络层和应用密钥接收过来的Access layer 行为
1. 传输访问信息
2. 接收访问信息
3. 安全考量
4. 消息错误程序

对于Access layer ,可分为经确认信息acknowledged messages 和未经确认信息unacknowledged messagespublish/subscribe:设备可以将消息发送至特定地址,这些地址的名称和含义与用户能够理解的高级概念相对应,成为pushlishing;设备经配置后,可接收由其他设备发送到特定地址的消息,成为 subscribing。
* Mesh security

1. AEC-CMAC,是一种基于密码的消息认证码,能够生成固定长度的128位消息认证值,并将其用于任何变量长度输入,使用AES-CMAC算法生成消息认证码MAC的公式为

   MAC=AEC-CMACk(m)     向 AES-CMAC 输入:     k – 128 位的密钥    m – 将被认证的可变长度数据KEYS对于Mesh Profile来言application keys(APPKey):确保上层传输层的通信network keys(NetKey):确保网络层的通信device keys(DevKey):确保节点和配置客户机之间的通信Foundation models实现了配置和管理Mesh网络的访问层状态,消息和模型。
* Provisioning(配置)

Provisoning bearer layer:PB-ADV PDULink ID 用来识别两个设备之间的连接Transaction Number这个区域用一个字节值来时被每条来自device的通用配置PDU,当不适合被单个发送的PB-ADV PDU的配置PDU被分割时,所有的段都是使用同一个Transactiobn Number来发送,当一个配置PDU重新发送时,Transactiobn Number不会改变注意事项:1.当PB-ADV PDU中包含一个配置层控制PDU,TN将会置为0且忽略其他接收消息;2.当Provisioner第一次开放连接并发送配置PDU时,TN讲被置为0x00。Provisioner会在链接期间,对每条新的配置PDU增加新的域值。若值到0x7F时,会回到0x00发送新的配置PDU。3 .当 unprovisioned 设备第一次通过开放链接发送配置PDU时,它应该以TN字段值0x80开始。设备在配置链接期间发送的每个新的配置PDU,字段值都会增加1。如果字段值已经达到0xFF,那么在发送下一个供应PDU时,它会重新变为0x80。PB-GATT PB-GATT主要提供载体,用来代理PDUs

你可能感兴趣的:(蓝牙mesh)