当传输大于15字节的上层传输层PDU时,底层传输层就需要对上层传输层PDU进行分包并重新组包为了减少底层传输层包的数量,这里使用块应答机制。

问题:怎么通过块应答机制减少底层传输层包的数量?

上层传输层需要分成两个底层传输层PDU的例子.jpg

示例中上层传输层访问PDU包含1字节的OPCode字段,3字节的NetKeyIndex和APPKeyIndex字段,还有16字节的APPkey字段。这以为着当使用应用秘钥加密和验证时,上层传输层PDU为24字节。这被底层传输层分为两个包,即分包0和分包1。每个分包具有一个标识分包数的包头,然后被传递到网络层,在那里计算完整的网络层PDU。网络层再使用该网络层PDU的序列号加密网络层PDU,然后对这些消息进行模糊处理,最终只有NID(和IV索引)字节以明文形式可见。因此可以使用两个网络层PDU安全地传递单个访问消息。

分包

底层传输层将上层传输层PDU分为一个或多个底层传输层PDU。同一时间底层传输层将同一上层传输层PDU的分包访问消息和分包控制消息发送到同一目的地。只有当上一个传输层PDU的所有分包都已被应答或消息被取消时,底层传输层才可以发送另外一个上层传输层PDU。

上层传输层访问消息一个分包最大为12字节,上层传输层控制消息一个分包最大为8字节。因为上层传输层PDU中TransMIC的值是变动的,访问消息是4字节,控制消息是8字节。

分包消息会在底层传输层会确认消息,但是不分包消息则不会。为了更加有效可靠的传输上层PDU,应该使用单包分段消息代替未分包消息。因为单包分段消息会被重传,而未分包消息就不会。

上层PDU使用SegO字段识别每个分包。用于加密和验证的SeqAuth值将不同分包链接在一起。同一个上层PDU分包后的每个下层传输层PDU应具有相同的IV Index。

SeqAuth是一个56bit的值,它由IV Index和第1个分包的序列号组成,其中IV Index在高字节,序列号在低字节。只有低位的13bit(称为SeqZero)才包含在分包消息和分包应答消息中。在对完整的分包消息进行组包时,可以从任何段中的IV Index、SeqZero和SEQ得到SeqAuth值。例如,如果接收到的消息的SEQ是0x647262, IV索引是0x58437AF2,接收到的SeqZero值是0x1849,那么SeqAuth值就是0x58437AF2645849。如果收到的SEQ值为0x647262, SeqZero值为0x1263,则SeqAuth值为0x58437AF2645263。

由于SeqZero的大小有限,一旦SEQ比SeqAuth高8192,就不可能发送分段消息。如果一个分段消息在SEQ比SeqAuth高8192时还没有被确认,则取消上行传输PDU的发送。

消息的每个段都包括它的段偏移号和最后的段号。段号(SegO)和最后段号(SegN)都包含在消息中,以允许接收方在接收到消息的任何段后总是确定上层传输PDU的大小(到最近的8字节)。

组包

当使用了低功耗节点功能时,消息应答由朋友节点执行,而低功耗节点不会发送应答消息。在收到分包消息时,首先应检查SeqAuth以确认此消息是否正在接收或先前是否已接收。如果尚未接收,则接收设备应根据SeqN字段分配足够的内存,以便存储上层传输层PDU的分包并跟踪它的分包是否被收到。

如果未使用低功耗功能,则该消息的目的地是单播地址,并且此时节点无法接收此上层传输层PDU,例如因为节点繁忙或资源不足以重新组装此消息,然后节点通过将BlockAck值设置为0x00000000来向源节点发信号,通知它无法接收此上层传输层PDU。

底层传输层针对每条收到的某个SeqAuth取值的所有分包消息都设置了序列认证值(Sequence Authentication Value)和块应答值(Block Acknowledgement)。

如果底层传输层收到SeqAuth值小于序列认证值的消息分包,则忽略该段。如果底层传输层收到新消息的分包,则它应将该段中的SeqAuth值保存为新的序列认证值。

如果底层传输层收到多个分包消息的其中一个分包,但此时因为它当前正忙或没有资源接收更多的分包消息,并且如果该消息的目的地是单播地址,底层传输层应回复一个BlockAck字段为0x00000000的应答消息。

当接收SeqAuth值大于序列认证值的一个分包消息时,底层传输层将启动不完成定时器,定义底层传输层接收不同分包的等待最大时间,此定时器应被设置为最少10秒。

当接收SeqAuth值大于目的地为单播地址的序列认证值的分包消息时,底层传输层应启动一个应答定时器,该定时器定义底层传输层发送分包应答消息的时间,最少设置为150+50xTTLms.

底层传输层应将接收的每个分包在块应答值中进行标记,该块应答值可以稍后传输回源节点。收到分包消息的所有分包之后,底层传输层将发送分包确认消息,其中BlockAck字段被设置为用于序列认证值的块应答值。它应取消未完成定时器和应答定时器,并将重新组装的消息发送到上层传输层。

当应答定时器到期时,底层传输层将为当前序列认证值包发送分包应答消息,其中BlockAck字段被设置为块应答值。

当未完成定时器到期时,底层传输层应认为正在接收的消息已经失败并取消应答定时器,之前接收的部分消息都应被忽略。

如果只看这一篇,会感觉写的太捞了,根本不知道在讲什么玩意,连个例子都没有。没办法,如果没有整个mesh知识体系,举出例子了也没法理解。如果直接上例子,不讲规则,也没法搞。

分包组包 北斗通信_蓝牙mesh底层传输层(分包和组包)相关推荐

  1. 分包组包 北斗通信_一种基于北斗的低功耗双向非实时通信方法

    一种基于北斗的低功耗双向非实时通信方法 [技术领域] [0001]本发明涉及一种基于北斗的低功耗双向非实时通信方法,属于北斗系统通信技术领域. [背景技术] [0002]北斗卫星系统具备的短报文通信功 ...

  2. 分包组包 北斗通信_一种利用北斗短报文实现第三方数据双向传输的方法与流程...

    本发明涉及通信技术领域,特别涉及一种利用北斗短报文实现第三方数据双向传输的方法. 背景技术: 中国北斗卫星导航系统是中国自行研制的全球卫星导航系统,北斗RDSS是北斗系统区别于其他导航系统的特点之一, ...

  3. Android硬件通信之 蓝牙Mesh通信

    一,简介 蓝牙4.0以下称为传统蓝牙,4.0以上是低功耗蓝牙,5.0开始主打物联网 5.0协议蓝牙最重要的技术就是Mesh组网,实现1对多,多对多的无线通信.即从点对点传输发展为网络拓扑结构,主要领域 ...

  4. 数据丢包怎么修复_一种网络传输中实时音频数据丢包恢复的方法与流程

    本发明涉及通信技术领域,具体涉及一种网络传输中实时音频数据丢包恢复的方法. 背景技术: 随着通信技术的发展,音频传输系统对实时性和准确性的要求越来越高.在网络的音频传输过程中,影响音频音质的主要因素是 ...

  5. 我的世界java材质包推荐下载_我的世界高清修复32x材质包下载大全【1.6.x-1.8.x】...

    我的世界1.6.4 1.6.8 1.7.2 1.7.10 1.8 1.8.8高清修复32x材质包下载大全.那下面给大家分享的是一款渣机必备的高清材质包哦~有喜欢的玩家不妨进来下载该材质包哦~ 游戏园我 ...

  6. 无连接可靠传输_计算机网络-网络层和传输层

    计算机网络-网络层和传输层 网络层概述 面向连接的服务,即虚电路(virtual circuit) TCP/IP采用数据报服务,无连接的服务,因为网络层是整个互联网的核心,因此应当让网络层尽可能简单. ...

  7. process启动jar包判断成功_恒一广告助力2020年壹基金温暖包安康发放启动仪式成功举办...

    有爱的冬天不会冷 11月28日上午,由共青团安康市委.安康市教育体育局.安康市民政局.安康市关心下一代组委会.安康广播电视台.安康义工联合会主办的"壹家人温暖安康共青团助力脱贫攻坚暖冬行动& ...

  8. 熊猫人表情包python 代码_用Python爬取斗图网表情包

    一.介绍 用python处理二进制文件的事情做的比较少,虽然之前有写过分析Ajax抓取今日头条街拍美图,但那个爬虫重在分析Ajax,并没有提到文件路径和文件命名,所以就有了这个爬虫 二.流程 流程一般 ...

  9. jsp页面导入java包能干嘛_在JSP中如果要导入java.util.*包要使用什么指令

    [判断题]扶梯满载上行时,所需总功率等于驱动梯级所需的功率乘以传动总效率. [判断题]电梯制动器闸瓦应均匀,其四角处间隙平均值两侧各不大于0.7mm. [多选题]以下()触点断开会使MC线圈断电. [ ...

最新文章

  1. 利用SIMULINK搭建一个16QAM调制解调收发系统
  2. JMeter打开jmx文件出错CannotResolveClassException: org.apache.jmeter.protocol.ssh.sampler.SSHCommandSampler
  3. Python库安装相关问题
  4. 最小生成树Kruskal算法+并查集检查连通
  5. raspberry pi_我如何使用Raspberry Pi与孙辈联系
  6. QNX多线程同步之Barrier(屏障)
  7. 【hortonworks/registry】AVRO 规范-Schema的定义和声明
  8. OpenShift 4 - 部署一个基于 Serverless 的 Banking 应用
  9. mysql锁表与不锁表设置主从复制的方法
  10. Selenium 高阶应用之WebDriverWait 和 expected_conditions
  11. android无法创建AVD了?
  12. 盘点一下 在Python中安装包的三种方法
  13. XMind--思维导图
  14. 转 我的英文原版书籍阅读记录
  15. win7蓝屏0x0000003b解决教程
  16. 哲学的终极解释:48张图了解48种主义
  17. hbuilderx制作简单网页_普通网站如何制作一个网站?
  18. linux怎么查看终端号,怎么查看linux 图形终端设备号
  19. MATLAB----光学之分量振幅反射率和分量振幅透射率
  20. CSS hack:针对IE6,IE7,firefox显示不同效果

热门文章

  1. OpenTelemetry-可观察性的新时代
  2. 长脸了!阿里云这位英雄拿下了世界第一
  3. AliOS Things 组件系统(uCube)
  4. 《游戏行业DDoS攻击解决方案》重磅发布
  5. 源码级别的广播与监听实现
  6. 亚马逊云服务(AWS)中国与毕马威中国建立战略合作伙伴关系
  7. 十年架构师:我是这样手写Spring的,用300行代码体现优雅之道
  8. Kubernetes 是如何调度的?
  9. 一文看懂Microsoft Azure的十年变迁
  10. Spark精华问答 | Spark 会替代Hadoop 吗?