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

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

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

e4eab041d0dd

上层传输层需要分成两个底层传输层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知识体系,举出例子了也没法理解。如果直接上例子,不讲规则,也没法搞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525689.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

别人在忙挖矿,京东架构师却悄悄用区块链搞了件大事

作者介绍: 赵铭,京东商城区块链研发工程师, 主要从事区块链底层研究设计工作,主攻方向为分布式账本结构; 孙海波,目前担任京东Y事业部供应链研发负责人,负责的业务包括订单履约、库存优化、采购…

用sklearn mysql_Sklearn之Linear Regression

import matplotlib.pyplot as pltimport numpy as npfrom sklearn import datasets, linear_modelfrom sklearn.metrics import mean_squared_error, r2_score# 加载糖尿病数据集diabetes datasets.load_diabetes()# 只使用一个特征diabetes_X diabetes.data[:, np.newaxis, …

2017年30个惊艳的Python开源项目

【摘要】本文来自Mybridge,介绍了过去一年里30个惊艳的Python开源项目。点击阅读原文每一个都可以在GitHub上看到更为详细的内容。以下是译文。在过去的一年里,Mybridge AI 比较了近15000个开源Python项目,选择了前30名(概率只有0…

mycloud php5 mysql_mycloud 刷debian乐趣之-owncloud 私有云+芒果云的安装

既然刷了debian了,那么就可以安装很多软件了。这篇文章,我打算讲讲大众化的最初始的配置方案。具体后续优化,例如memcached,https等,可以参考官方文档。第一步、安装apache,#当然,你如果喜欢nginx,也可以的…

关于区块链,程序员需要了解什么

作者 | 曹严明如果说比特币是对传统货币的一种颠覆,那么比特币的基础技术——区块链则是对传统编程范式的一种颠覆。区块链技术被看作是一次Paradigm Shift。也许很多人对 “颠覆”这种说法不以为然,因为现在这个词已经被用滥了(如今哪个好一…

java两个矩阵相乘_java计算两个n阶矩阵相乘

自己是个新手,研究java数据结构,看到两个n阶矩阵相乘的题目,自己就试着写了一个简单的demo,哪里有不好的地方,也希望大家多提提意见,直接上代码了:package com.shujujiegou01;public class JuZh…

混合云异军突起 英特尔的全“芯”体验为企业保驾护航

近几年,混合云在IT界异军突起,各大厂商纷纷布局混合云市场,企业更愿意将数据存放在私有云中,但是同时又希望可以获得公有云的计算资源,在这种情况下混合云被越来越多的采用,它将公有云和私有云进行混合和匹…

搭建java_搭建JAVA环境

1 jdk的获取jdk的获取路径有很多这种,我把我网盘上存的分享个大家,大家直接下载就可以了。http://pan.baidu.com/s/1pLsJLtp(这是一个公开链接,直接打开下载就可以了)。2 jdk的安装(1)单击刚刚下载的安装文件将会弹出欢迎对话框。(2)点击“下…

java数组下标越界_BUG-并行流与数组下标越界-思考与总结

BUG-并行流与数组下标越界-思考与总结今天线上环境报异常,发现了一个之前没注意过的问题,记录一下。1. 异常信息异常信息如下:Caused by: java.lang.ArrayIndexOutOfBoundsExceptionat java.lang.String.getChars(String.java:826)at java.la…

IDC敲黑板啦:未来企业IT以混合云为主

数字化是企业转型的必由之路数字化技术正在融入企业的血液里。IDC 认为,基于第三平台的 46 技术是企业在数字化转型过程中的关键要素:• 4 是指以云计算、大数据、社交商业与移动技术为代表的第三平台技术。• 6 则是基于第三平台智商的 6 大创新加速器。…

Service Mesh 在华为公有云的实践

我们在构建微服务而构建微服务是困难的微服务是一个很大的概念,从团队组织到最佳实践似乎都有实施微服务的一些指导。我们这里只提构建微服务的架构模式,也就是关乎到你用什么样的方式来构建你以微服务架构来组织的应用系统。近些年随着微服务的火热&…

分布式NewSQL数据库实践——民生银行经典案例

前言此前,金融信息化建设主要依托原有集中型 IT 架构进行维护扩展,系统规模及复杂程度呈指数级增长,各类瓶颈逐渐暴露,日益增长的数字金融需求同旧式的系统架构缺陷之间的矛盾愈加凸显。中国人民银行、中国银行保险监督管理委员会…

「拨云见日」英特尔揭秘短视频背后的二三事

“像一棵海草海草,随风飘摇,海草海草,浪花里舞蹈……”看到这样魔性的歌词,你是不是有立刻跟着唱的冲动,甚至还很想起来跳一段呢?去火锅店点餐,你会掏出手机告诉服务员按照视频内容操作吗&#…

英特尔助力金山云带你畅游云端的游戏世界

科技的发展让人们可以在任意时间、任意地点与不同的玩家一同畅游游戏世界。不论是拥挤的通勤路上,还是热闹的餐厅,都少不了痴迷于手游的玩家。来自《2017年中国游戏产业报告(摘要版)》的数据表明,去年中国游戏市场全年…

数据洪流时代,企业转型需要修建自己的“都江堰”

科技的进步推动着人类文明的进化,从农业采集社会到如今的网络智能社会,文明的进化也同样带动了企业的“进化”。今天,人工智能、云计算、大数据等技术的不断突破,让网络产生的数据量呈爆发式增长,数据洪流汹涌奔来&…

时代变了

阅读文本大概需要 2.6 分钟。最近一段时间,经常有人问我这么一个问题,说,张哥,现在市面上有各种付费网课和付费专栏,但我总觉得只有看书学习才是正途,不知道张哥怎么看?到底哪种学习方式最好呢&…

终于有人把什么是云计算、大数据和人工智能讲明白了!云计算是什么?

今天跟大家讲讲云计算、大数据和人工智能。为什么讲这三个东西呢?因为这三个东西现在非常火,并且它们之间好像互相有关系,可是很多人却不知道什么是云计算或者云计算应用在哪:一般谈云计算的时候会提到大数据、谈人工智能的时候会…

数据洪流来袭,企业转型势不可挡,如何四两拨千斤?

在漫长的历史里,文明的进步都是伴随着科技的发展,企业也在不断进化,无论是商业战略还是商业模式,在科技的推动下与时俱进,不断更迭创新。历史的长河流入数据洪流的时代,人工智能、大数据、云计算等新技术掀…

福利 | 2018 OpenInfra Days China限量版免费票任性放出

号外号外!福利来袭,手速up up up~春困夏乏秋盹冬眠暑气炎炎,OpenInfra帮你提神醒脑——特别好礼限量放送Ready?Go!2018 年 6 月 21-22 日,OpenInfra Days China将于国家会议中心北京升级回归,汇…

开源不止,前进不息:2018 OpenInfra Days China来了!

OpenStack Days China是由一群热衷并专注于开源的中国志愿者为中国开源社区组织和举办的年度社区活动。近两年来,志愿者团队成功激起广泛关注,获得了中国各行各业和来自全球开源开发者社区的巨大支持。会议注册人数共计超过 1 万人,参与人数逾…