美文网首页蓝牙mesh技术
蓝牙mesh底层传输层(消息格式)

蓝牙mesh底层传输层(消息格式)

作者: 轰天裂天罗三炮 | 来源:发表于2021-01-27 00:56 被阅读0次

底层传输层将来自上层传输层的PDU发送给另外一个节点,如果数据不需要分包,就单个底层传输层PDU发送出去,如果长度太长,则需要对数据分包之后再发送出去。接收消息时,也会判断是否是分包数据,如果是分包数据,则再组装之后,再传给上层传输层。

底层传输层PDU

底层传输层PDU的第一个字节的最高位是SEG字段,也是最重要的一个位,该字段用来确认此PDU是经过分包的还是未分包消息。在网络层中,CTL字段确定消息是访问消息还是控制消息。根据这两个字段值的不同,可以将消息分为4种类型:1.未分包访问消息 2.分包访问消息 3未分包控制消息 4.分包控制消息

CTL SEG 底层传输层PUD类型
0 0 未分包访问消息
0 1 分包访问消息
1 0 未分包控制消息
1 1 分包控制消息

1.未分包访问消息

字段 长度(bits) 备注
SEG 1 0=未分包消息
AKF 1 应用秘钥标志位
AID 6 应用秘钥标识
Upper Transport Access PDU 40~120 上层传输层访问PDU

上层传输层根据应用秘钥(Application Key)和设备秘钥(Device Key)来设置应用秘钥标志位(AKF)和应用秘钥标识(AID)的值。

PDU格式:


未分包访问消息.jpg

2.分包访问消息

分包访问消息.jpg
字段 长度(bits) 备注
SEG 1 1=分包消息
AKF 1 应用秘钥标志位
AID 6 应用秘钥标识
SZMIC 1 TransMIC长度
SeqZero 13 SeqAuth的低有效位
SegO 5 分包号
SegN 5 最后一包分包号
Segment m 8~96 上层传输层访问PDU中的Segment m

SZMIC字段表示上层传输层访问PDU中的TransMIC的大小。若SZMIC字段为0,则TransMIC是一个32bit的值;若SZMIC字段为1,TransMIC则是一个64bit的值。

SeqZero字段由上层传输层设置;SegO字段应被设置为该上层传输层PDU的m分包的分包号(从0开始);SegN字段应该被设置为该上层传输层PDU的最后一个分包号。

Segment m字段是分包号为m的内容,除最后一个分包外的分包Segment m,它的内容是从第12×m字节到第12×m+11字节,而最后一个分包内容则是从第12×m字段到消息结尾。

对于相同的上层传输层访问PDU,每个分包访问消息的AKF、AID、SZMIC、SeqZero和SegN字段应该具有相同的值。

3.未分包控制消息

未分包控制消息用于传输一个应答消息或者传输控制消息。

未分包控制消息.jpg
字段 长度(bits) 备注
SEG 1 0=未分包消息
Opcode 7 0x00=分包应答\n 0x01到0x7F=传输控制消息的OPCode
Parameters 0到88 传输控制消息参数

分包应答消息的Opcode字段应设为0,底层传输层使用分包应答消息来确认分包消息。Parameters字段根据Opcode字段的需要来设置。

分包应答消息格式

分包应答消息.jpg
字段 长度(bits) 备注
SEG 1 0=未分包消息
Opcode 7 0x00=分包应答
OBO 1 朋友代理低功耗节点
SeqZero 13 上层传输层PDU的SeqZero
RFU 2 保留
BlockAck 32 分包的块应答

OBO为0,表示接收信息的节点直接寻址;OBO字段为1,表示接收信息的是朋友节点,朋友节点代表低功耗节点应答此消息。

SeqZero字段应被设置为被应答的上层传输层消息的SeqZero。

BlockAck字段应被设置为收到的分包。最低有效位,即位0表示分包0;最高有效位,即位31表示分包31。如果位n被设置为1,则表示应答分包n。大于SegN的分包的位应被设置为0并在接收时忽略。

如果在接收的分包信息中TTL为0,则建议在发送分包应答消息中也将TTL设置为0.

4.分包控制消息

当传输控制消息不适合使用单个网络层PDU来传输的时候,就使用分包控制消息来传输。

分包控制消息的格式

分包控制消息.png
字段 长度(bits) 备注
SEG 1 1=分包消息
Opcode 7 0x00=保留\n 0x01到0x7F=传输控制消息的OPCode
RFU 1 保留
SeqZero 13 SeqAuth的低有效位
SegO 5 分包号
SegN 5 最后一包分包号
Segment m 8~64 上层传输层访问PDU中的Segment m
  • OPCode字段由上层传输层设置,0x00为保留值,收到后不得传输,直接忽略
  • SeqZero字段应由上层传输层设置。
  • SegO字段应被设置为该消息中包含的上层传输层PDU的分包号(从0开始)。
  • SegN字段应被设置为该上层传输层PDU的最后一个分包号。
  • Segment m字段是分包号为m的内容,除最后一个分包外的分包Segment m,它的内容是从第8×m字节到第8×m+7字节,而最后一个分包内容则是从第8×m字节到消息结尾。

对于相同的上层传输层控制PDU,每个分包控制消息应具有相同的OPCode、SeqZero和SegN值。

相关文章

  • 蓝牙mesh底层传输层(消息格式)

    底层传输层将来自上层传输层的PDU发送给另外一个节点,如果数据不需要分包,就单个底层传输层PDU发送出去,如果长度...

  • 蓝牙mesh访问层(消息格式)

    访问层定义应用如何使用上层传输层。它定义应用程序数据的格式;它定义和控制在上层传输层执行的应用程序数据加密和解密;...

  • 蓝牙mesh上层传输层

    上层传输层从访问层获取消息或内部生成上层传输层控制消息,并将这些消息传输到对端的上层传输层。对于来自访问层的消息,...

  • 蓝牙mesh底层传输层(分包和组包)

    当传输大于15字节的上层传输层PDU时,底层传输层就需要对上层传输层PDU进行分包并重新组包为了减少底层传输层包的...

  • 蓝牙mesh基础模型层

    基础模型层(Foundation Models Layer)定义了配置和管理蓝牙mesh网络所需的访问层状态、消息...

  • 蓝牙mesh承载层

    蓝牙mesh规范中定义了两种承载器:广播承载器和GATT承载器。因为目前市面上所有手机,都没有包含完整的蓝牙mes...

  • 蓝牙mesh网络层及网络PDU解析

    网络层定义了网络PDU格式,允许承载层传输下层传输层的PDU。它对输入接口接收的传入消息进行解密和身份验证,并将其...

  • 计算机网络的七个层

    物理层:底层数据传输,如网线;网卡标准。 数据链路层:定义数据的基本格式,如何传输,如何标识;如网卡MAC地址。 ...

  • 蓝牙mesh的协议栈

    这里是关于第三篇蓝牙mesh相关的文章,该写什么?有三个东西可以写:1.蓝牙mesh中的节点 2.蓝牙mesh中...

  • 计算机网络 —— 传输层 ~ UDP协议

    传输层本质 传输层是向它上面的应用层提供通信服务 传输层属于面向通信部分的最高层,同时也是用户功能的最底层 传输层...

网友评论

    本文标题:蓝牙mesh底层传输层(消息格式)

    本文链接:https://www.haomeiwen.com/subject/gjkozktx.html