分包组包 北斗通信_蓝牙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, …

mysql从服务器配置_mysql主从服务器配置基础教程

环境:A、B的MySQL数据库版本同为5.0.45-community-ntA:操作系统:Windows xpIP地址:192.168.18.110B:操作系统:Windows xp的IP地址:192.168.18.107配置过程:1、在A的数据库中建立一个…

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

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

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

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

java 错误 代码_Java错误代码及异常处理

现在有个项目,遇到错误代码和异常处理方面的问题,请教各位高手。背景:项目对外提供服务,这些服务是对很多外部系统提供服务的封装,每个外部系统有自己的错误代码,没有统一的规范。有些外部系统自己规范都不…

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

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

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

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

java annotation list_java-注解annotation

package cd.itcast.day2;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Arrays;import java.util.Date;import java.util.List;/*** 注解** 注解的使用构成: 1,注解的申明 2,在类型(代码)上面打上注解 3&…

java 关联表做修改_java-图关联列表实现

我知道我也许正在从死里复生一个老问题,但是我觉得应该发表评论.您可以创建关联列表图形结构,也可以针对图进行调整.考虑LinkedList< Vertex>.对象和LinkedList< Edge>.宾语.这将使您可以遍历所有边缘和所有顶点,但不包含有关所有对象如何连接的信息.假设我们添加了…

JavaApp自动化测试系列[v1.0.0][几种常见APP类型测试代码实例附源码]

通常APP分为&#xff1a;原生APP、WebApp、混合型APP&#xff0c;其自动化测试代码稍有不同 Java结合TestNG单元测试框架&#xff0c;实现移动端IOS_WebApp测试【源码】 /** FileName Test_iOS_WebApp:* author davieyang* create 2018-11-22 14:20*/ package testscript; imp…

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

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

python 常用模块函数_python函数和常用模块(三),Day5

递归反射os模块sys模块hashlib加密模块正则表达式反射python中的反射功能是由以下四个内置函数提供&#xff1a;hasattr、getattr、setattr、delattr&#xff0c;改四个函数分别用于对对象内部执行&#xff1a;检查是否含有某成员、获取成员、设置成员、删除成员。class Foo(ob…

搭建java_搭建JAVA环境

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

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

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

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

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

axis2接收json_AXIS2 如何返回JSON数据

按照网上两篇博文操作了http://blog.djakapm.com/2011/12/15/json-web-service-with-java-and-axis2/http://www.marcusschiesser.de/2009/01/building-a-json-web-service-with-java-and-axis2/但是结果一直是返回的XML数据&#xff0c;无法返回json数据。不知道有哪位大侠成功…

Service Mesh 在华为公有云的实践

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

centos7 安装mysql php_Centos7 安装mysql与php

https://blog.csdn.net/qq_36431213/article/details/79576025官网下载安装mysql-server依次使用下面三个命令安装wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpmrpm -ivh mysql-community-release-el7-5.noarch.rpmyum install mysql-community-ser…

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

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