目录
2.1、Upper Transport Access PDU
2.2、Upper Transport Control PDU
2.2.1、UnSegment Transport Control PDU
2.2.1、Segment Transport Control PDU
3.2.1、收到 Upper Transport Access PDU
3.2.2、收到 Upper Transport Contol PDU
前一节(BLE Mesh (5) —— Lower Transport Layer)描述了 Lower Transport Layer 的分包和组包行为,以及 ACK 的行为,本章看看更往上层走的 Upper Transport Layer 的主要功能;
Upper Transport Layer 这一层主要负责的是对 Access 层的消息进行加密和认证(使用 application key);
注意:由 upper transport layer 生成的 Transport Control Messages 消息,仅仅在 network 层进行加密和认证
1、字节序
Upper Transport Layer 为大端字节序
2、Upper Transport PDUs
还是首先看看这层的 PDU 消息格式,同样分为两类,Access PDU 和 Control PDU
2.1、Upper Transport Access PDU
当 Network PDU 的 CTL 字段为 0 的时候,代表当前的这个 PDU 是一个 Upper Transport Access PDU 的类型;它的组成由两部分构成:Encrypted Access Payload + TransMIC;
其中的 Encrypted Access Payload 部分,使用 application key(或者 device key)进行加密;
2.1.1 Access Payload
Access Payload 字段由 access 层提供;
如果 TransMIC 字段为 32 bits,那么 Access Payload 字段最大是 380 字节;
如果 TransMIC 字段为 64 bits,那么 Access Payload 字段最大是 376 字节;
2.1.2 TransMIC
TransMIC(Message Integrity Check)字段用于认证 access payload 的完整性,当 SEG 为 1,即,分片类型的时候,TransMIC 字段由 Lower Transport PDU 的 SZMIC 字段决定是 32 bits 还是 64 bits;对于 SEG 为 0 的情况,即,不分片的时候, TransMIC 为 32 bits;
注意:Control Message 没有 TransMIC
2.2、Upper Transport Control PDU
当 CTL 字段为 1 的时候,代表这个 PDU 是一个控制 PDU;它由 Opcode + Parameters 组成;
Upper Transport Control PDU 不会在 Upper Transport Layer 进行认证,他在 Network Layer 进行认证;所有的 Upper Transport Control PDU 都是用 64bits 的 NetMIC;
2.2.1、UnSegment Transport Control PDU
对于不分段的 Transport Control PDU 来说他的构成为:
2.2.1、Segment Transport Control PDU
对于分段的 Transport Control PDU 来说,他的构成为:
所以,对于分段和不分段的 Transport Control PDU 来说,他们所支持的消息长度是不一样的:
最大支持 256 字节;
所以整体来说:
3、Upper Transport Layer 行为
3.1、发送 access playload
当 Upper Transport Layer 发送来自 access 层的 payload 的时候,使用 application key(或者 device key)对 payload 进行加密同时设置 TransMIC 字段
接着设置 SEQ 字段;
然后设置 AKF 和 AID 字段,如果使用 application key,那么 AKF 设置为 1,同时设置 AID 字段;如果使用 device key,那么 AKF 设置成为 0, AID 字段为 0'b000000。
注意:在发送完一组 Segment message 之前,不允许发起另一组 Segment message;
3.2、接收 Upper Transport PDU
接收分为两种情况,一种是 access payload 一种是 Control 类型;
3.2.1、收到 Upper Transport Access PDU
当接 Upper Transport Layer 收到对方的 Upper Transport Access PDU 的时候,其中的 access payload 部分,会被解密,同时使用 TransMIC 和对应的 keys(AKF/AID 决定)来进行认证;
3.2.2、收到 Upper Transport Contol PDU
当收到的是 Upper Transport Contol PDU 的时候,只 check 目的地址是否是本节点的单播地址,如果是的话,则进行处理;
3.2.3、Friend feature
如果当前 node 是支持 Friend feature 的话,同时已经 enable 了 friend 功能,同时也为其他 LPN 建立好了友谊,而且目的地址是一件订阅了本 node 的 LPN 的情况下,本节点会将消息存储到本地的 Friend Queue