Ble Mesh技术(五)之Upper transport Layer

本文深入探讨了蓝牙mesh网络的上层传输层工作原理,包括AccessPDU和ControlPDU的处理流程,以及用于消息加密和控制消息交互的机制。详细介绍了控制消息的类型及其在节点间建立特殊消息收发通道的作用。

上层传输层负责接入层消息的加密,和控制消息的交互。

1.Access PDU

由Access层下发来的消息为Access PDU,Access PDU经过Appkey或者DevKey加密后生成4/8字节的TransMIC(transport message integrity check)。
accesspdu
Encrypted Access Payload的最大size为380个字节。

2.Control PDU

用于节点之间控制消息即非应用消息的传递,用于特殊消息收发通道的建立,主要为Friend消息和Heartbeat消息。
CTL消息在这一层不需要加密,所以没有TransMIC,但NetMIC(利用NetKey二次加密的MIC)为8个字节。
Access PDU中的payload包含Opcode,而CTL PDU中Opcode单独提出来。在每个分段的CTL PDU都有Opocde,分段只是对Param域进行分段。
access seg
控制消息有以下几种类型:

Value Opcode Notes
0x00 - Reserved for lower transport layer
0x
### BLE Mesh 协议报文结构 BLE Mesh 报文结构基于蓝牙技术联盟 (Bluetooth SIG) 发布的标准,遵循特定层次化设计原则[^1]。具体来说,BLE Mesh 报文中包含了多个重要字段来确保消息的有效传输。 #### 控制层与网络层之间的交互 在网络层部分,每条消息都由以下几个主要组件构成: - **Network PDU**: 这是整个数据单元的基础框架,在此之上构建其他更具体的PDU类型。 ```plaintext | Network Header | Transport PDUs | ``` - **Transport Layer Security (TLS)**: 提供安全性和隐私保护机制,通过加密方式处理上层应用产生的有效载荷。 #### 应用程序层面的消息封装 当涉及到应用程序级别的通信时,则会进一步细分为两个子层——下述内容描述了如何在一个完整的BLE Mesh消息中表示这些信息: - **Upper transport layer PDU** - Access Message: 包含实际的应用数据以及源节点地址等元数据。 ```plaintext | Upper Transport Header | Access Payload | ``` - **Lower transport layer PDU** - Control Messages: 用于维护网络状态的信息交换;例如心跳检测、配置更新等操作。 ```plaintext | Lower Transport Header | Control Opcode | Parameters...| ``` #### 完整的BLE Mesh消息格式示例 一个典型的BLE Mesh消息可能如下所示: ```plaintext | Network Header | Upper/Lower Transport Headers | Application Data or Control Information | ``` 其中各个组成部分的具体定义取决于所使用的协议版本及其扩展特性。对于开发者而言,理解这一系列嵌套式的分层模型有助于更好地掌握BLE Mesh的工作原理并实现高效可靠的无线通讯解决方案[^2]。 为了展示BLE Mesh的实际编程实践,下面给出一段Python伪代码片段,该代码模拟了一个简单的BLE Mesh消息发送过程: ```python import bluetooth_mesh as bt_mesh def send_ble_mesh_message(source_address, destination_address, payload): network_header = create_network_header() upper_transport_header = create_upper_transport_header(source_address) lower_transport_header = create_lower_transport_header(destination_address) complete_message = ( network_header + upper_transport_header + lower_transport_header + payload ) # 使用蓝牙库发送构造好的消息 ble_device.send(complete_message) send_ble_mesh_message(0x1A2B, 0xCDEF, b'HelloWorld') ``` 上述例子展示了如何组合不同头部信息形成一条有效的BLE Mesh消息,并将其传递给目标设备。需要注意的是,这里仅提供了一种简化版的消息组装方法,实际情况可能会更加复杂,涉及更多细节上的考量[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值