Mesh Profile (3.6)高传输层

(翻译自《MeshProfile v1.0》3.6 Uppper Transport Layer)

综述

高传输层包含了来自访问层的访问数据或者来自高传输层内部的控制消息。并完成将消息传输给对侧高传输层的工作。

对于来自访问层的消息,会使用一个应用秘钥完成加密和认证。这允许了在高传输层的接收过程中完成对接收到的消息的认证。

传输控制消息有高传输层内部生成,并且只在网络层完成加密和认证。

高传输层访问PDU

当网络层PDU中的CTL字段为0时,高传输层PDU中包含一个访问数据。这个PDU被认为是高传输层访问PDU。

访问数据的加密使用一个应用秘钥或者设备秘钥(需要确定究竟使用的什么秘钥完成加密)。加密后的访问数据和相关的消息完整性检验值组成了高传输层访问PDU。

加密后的访问数据 | TransMIC

加密访问数据

访问数据有访问层提供。

如果TransMIC是32bit,访问数据大小可以为1~380octets。如果TransMIC是64bit,访问数据的大小可以为1~376octets。

在高传输层,该字段是不透明的,而且该字段中的信息是没有被使用的。

传输完整性检验

传输消息完整性检验(TransMIC)是一个32bit或者64bit的字段。用于认证访问层数据没有发生改变。

对于一个SEG设置为1的分片消息,TransMIC的大小由低传输层PDU的SZMIC字段确定。

对于一个非分片消息,TransMIC的大小为32bit。

注意:控制消息没有TransMIC。

高传输层控制PDU

当CTL字段设置为1时,高传输层PDU包含了一个传输控制消息。

一个传输控制消息包括7bit的命令码。该命令码决定了参数的格式。命令码字段不包括在参数字段中,但是包括在低传输层PDU的非分片控制消息中或者分片控制消息的每一个分片包中。

高传输层控制PDU并不再高传输层中完成认证而是依赖网络层的认证。所有的高传输层PDU使用一个64bit的NetMIC。

低传输层可能将消息分片为更小的PDU用于通过网络层发送。建议为8 * n octets(具体见文档表格3.16)

最大的传输层控制PDU的大小是256octests。                             

高传输层行为

发送一个访问数据

所有访问消息的发送都在一个应用秘钥和一个设备秘钥的上下文中。访问数据应该使用应用秘钥或者设备秘钥完成加密。TransMIC应该被设置为消息完整性检验值。

这个访问消息应该申请一个序列号(SEQ)。在低传输层对一个消息分片的上下文中,该序列号(SEQ)于SeqAuth中的最低24bit相符合。序列号(SEQ)用于接收方认证和解密访问数据。

低传输层PDU中的AKF和AID字段应该根据在高传输层使用应用秘钥还是设备秘钥做的加密和认证来确定。

如果使用应用秘钥,那么AKF字段应该被设置为1,AID字段应该设置为应用秘钥表示符(AID)。

如果使用设备秘钥,那么AKF字段应该被设置为0,AID字段应该设置为0b 00000000。

高传输层在上一个高传输层PDU给某个目的地址发送的消息完成或者被取消之前,不可以发送一个新的分片的额高传输层PDU给相同的目的地址。

接收一个高传输层PDU

当收到一个高传输层访问PDU时,访问数据应该被解密并且TransMIC应该根据已知的应用秘钥或者网络秘钥(根据AKF和AID字段要求确定使用哪一种秘钥)完成认证。

如果高传输层访问通过PDU认证并且通过了重复攻击的检验,那么该PDU可以传递给访问层并携带这上下文信息,例如源地址,目的地址,以及用于认证和解密过程的秘钥。

当收到一个高传输层控制PDU时,PDU中携带的目的地址应该被检查是否和该节点元素的单播地址相匹配,以确定该消息是否应该被该元素处理。

如果节点提供了已经使能的朋友特性,并且节点和一个低功耗节点建立了朋友关系,并且消息的目的地址是当前该低功耗节点朋友订阅列表中的一个地址,那么消息应该被保存在合适的朋友队列中。

传输控制消息

传输控制消息可以通过一个单独的没有分片的控制消息或者一些分片的控制消息完成发送。每条控制消息中包含一个7bit的命令码字段,该字段决定了参数字段的格式。每条传输控制消息应该以尽可能最小的低传输层PDU个数被发送。

命令码为0x00是指地传输层的终结,用于消息的分片和重组,不应该在高传输层发送。所有其他的控制消息在高传输层完成终结。

表3.39总结了传输层命令码。

朋友轮询消息

朋友轮询消息由低功耗节点发送,用于请求一个朋友节点发送一条已经被保存的发送给该低功耗节点的消息。

该控制消息的命令码为 0x01。

FSN字段表示朋友序列号,用于低功耗节点确认收到之前来自朋友节点的消息。

该消息需要将网络层PDU中TTL字段设置为0.

该消息需要使用朋友安全凭据完成发送。

朋友更新消息

朋友更新消息由朋友节点发送给低功耗节点用于通知低功耗节点网络安全参数已经发生改变或者正在发送改变或者朋友队列为空。

Flags字段包含IV更新标志和Key刷新标志。其中

  • bit0表示Key刷新标志。 0:不在阶段2 ;1:在阶段2
  • bit1表示IV更新标志。 0:正常操作 ; 1:IV更新活动

IV index字段表示当前朋友节点所致的IV index。

MD字段指示了朋友队列是否为空。0:朋友队列为空;1:朋友队列不为空。

该消息的命令码为0x02。

该消息需要将网络层PDU的TTL字段设置为0。

该消息需要通过朋友安全凭据发送。

朋友请求消息

朋友请求消息由低功耗节点向全部朋友组发送,用于寻找一个朋友节点。

Criteria字段表示朋友节点应该支持加入朋友关系协商的标准。其中,

  • bit5~bit6 表示RSSI因子。用于表示朋友节点在计算朋友提供延时时RSSI的影响。00:1;01:1.5;10:2;11:2.5
  • bit3~bit4 表示接收窗口因子。用于表示在计算朋友提供延时时支持接收串口的影响。00:1;01:1.5;10:2;11:2.5
  • bit0~bit2 表示最小队列尺寸信息。用于表示朋友节点中可以保存在朋友队列中最小消息个数。

RecieveDelay字段表示低功耗节点的接收延迟时间。0x0A~0xFF,单位1ms。

PollTimeOut字段表示低功耗节点设置的初始轮询超时时间。0x00000A~0x34BBFF,单位100ms。

PreviousAddress字段表示之前朋友的单播地址。

NumElements字段表示低功耗节点的元素个数。用于根据该消息的SRC地址计算朋友节点单播地址的范围。

LPNCounter字段表示低功耗节点已经发送的朋友请求消息的个数。

该消息需要将网络层PDU中TTL字段设置为0。

该消息需要通过主安全凭据完成发送。

朋友提供消息

朋友提供消息有朋友节点发送,用于提供一个朋友关系。

ReceieveWindow字段由朋友节点支持。0x01~0xFF,单位1ms。

QueueSize字段表示朋友节点可用队列的大小。即朋友节点可以保存的低功耗节点消息的总条数。

SubscriptionListSize字段表示朋友节点对于一个低功耗节点可以提供支持的订阅列表大小。

RSSI字段表示朋友节点测得的RSSI。用于指示该朋友节点的接收信号强度。

FriendCounter字段表示朋友节点已经发送的朋友提供消息的条数。

该消息的命令码为 0x04。

该消息需要将网络层PDU的TTL设置为0。

该消息需要通过主安全凭证发送。

朋友清除消息

朋友清除确认消息

朋友订阅列表增加

朋友订阅列表移除

朋友订阅列表确认

心跳

命令码总结

朋友关系

一个朋友节点可以为低功耗节点保存消息。

功能总览

为了优化低功耗节点的功耗,使用轮询(polling)机制使低功耗节点的接收窗口最小。低功耗节点可以在它可以接收消息的时间告知朋友节点以获得更新的消息。

在低功耗节点和朋友检点保持朋友关系的时间内,存在一些不变的时间参数。

  • 接收延迟(ReceiveDelay)
  • 接收窗口(ReceiveWindow)
  • 轮询时间(PollTimeout)

接收延迟表示低功耗节点发送一个请求和监听一个响应之间的时间。

接收窗口表示低功耗几点监听响应的时间。当低功耗节点接收到一条来自朋友节点的消息后,低功耗节点可以不再监听额外的消息。

请求消息可以是一个朋友轮询消息,一个朋友订阅列表增加消息,或者一个朋友订阅列表移除消息。

对于朋友轮询消息的响应可以是一个朋友更新消息或者一条保存的消息。

对于朋友订阅列表增加或者移除的消息是一个朋友订阅列表确认消息。

从图中可以看到,低功耗节点在发出请求消息后即可以进入休眠,而朋友节点在约定的接收延迟后并且在低功耗节点的接收窗口中对低功耗节点做出响应。

轮询时间超时定时器用于测量由低功耗节点发出的连续两个请求间的时间。如果在该定时器超时前没有一个请求被朋友节点接收到,那么朋友关系将被认为终止。

为了建立朋友关系,支持低功耗特性的节点需要向全部朋友地址(一个固定的组地址0xFFFD)发送一个朋友请求。这个消息会被射频通信范围内的全部支持朋友特性的节点接收到。

朋友请求消息中包含了该低功耗检点对于将来的作为自己朋友节点的需求。每一个支持朋友特性并且能够支持朋友请求中需求的节点将通过发送一个朋友提供消息作为响应。

在这个朋友提供消息中也包含了关于该节点能力的额外信息。这使得低功耗节点可以决定使用哪一个节点作为自己朋友节点。

低功耗节点然后发送一个朋友轮询消息给选中的朋友节点,朋友节点发送一个朋友更新消息作为响应。在此时朋友关系建立成功。

如果低功耗节点之前有一个朋友节点,那么新的朋友节点将通知老的朋友节点自己是该低功耗节点当前的朋友。

在朋友关系建立之后,朋友节点保存了该低功耗节点对应的鞥有订阅列表。该订阅列表保存了低功耗节点订阅的一系列组地址和虚拟地址。该列表是的朋友节点可以保存低功耗节点订阅的消息。

朋友节点在朋友队列中保存了发给低功耗节点的全部消息,包括最近的安全更新信息(IV index,IV更新标志,Key刷新标志等)。这些信息被称为保存的消息。

低功耗节点如果需要获取上面提到的保存的消息,需要发送朋友轮询消息。那么朋友节点将发送这些保存的消息作为响应。

保存在朋友队列中的消息发送给低功耗节点需要得到确认和保持顺序。为此,需要使用一个朋友序列号。该值保存在低功耗节点中,并在朋友轮询消息中发出。当低功耗节点接收到一个有效的朋友轮询消息的响应是,低功耗节点应该改变朋友序列号用于下次发送轮序消息时,朋友节点可以发送下一条消息。如果朋友节点没有收到朋友轮询消息的响应,那么低功耗节点不改变朋友序列号,朋友节点将得知上一次消息没有被低功耗节点正常接收并将重发上一条消息。

朋友关系的安全性

朋友特性

低功耗特性

分片和重组用例

心跳

心跳用于监测网络中的节点并且发现节点间彼此距离多远。

功能总览

发布新校消息

接收心跳消息

原文地址:https://www.cnblogs.com/minnowbin/p/9633834.html

时间: 2024-10-11 01:24:57

Mesh Profile (3.6)高传输层的相关文章

Mesh Profile (3.5)低传输层

(翻译自<MeshProfile v1.0>3.5 Lower Transport Layer) 综述 低传输层利用来自高传输层的PDU组成自身的消息,并且将这些消息发送给对侧的低传输层.这些高传输层PDU的大小可能适合一个单独的地传输层PDU,也可能被分片为多个低传输层PDU.当接收到消息时,低传输层处理低传输层PDU,可能需要将多个PDUs重组为高传输层PDU,一旦重组完成便将他们递交给高传输层. 低传输层PDU 低传输层PDU用于将高传输层PDU发送给其他节点. 低传输层PDU第一个oc

Mesh Profile (3.8)mesh安全性

(翻译自<mesh Profile v1.0>3.8 Mesh security) 安全工具箱 加密功能 CMAC功能 CCM功能 s1 SALT生成功能 k1导出功能(如何理解derivation?) k2网络秘钥导出功能 k3导出功能 k4导出功能 序列号 序列号,是一个包含在网络层PDU SEQ字段中的24bit值.主要用于避免重放攻击(replay attacks). 相同节点中的元素可以共享也可以不共享序列号. 对于mesh网络安全很重要的是,在每一条消息的源(every messa

我们检测到您的浏览器不兼容传输层安全协议 (TLS) 1.1 或更高版本,此协议在 Internet 上用于确保您通信的安全性。

早上使用.Net WebClient类采集亚马逊数据,返回http 400 Bad Request错误,内容里面有“我们检测到您的浏览器不兼容传输层安全协议 (TLS) 1.1 或更高版本,此协议在 Internet 上用于确保您通信的安全性.” 所以就想着可能是WebClient使用TLS版本过低,查了下资料,全局加上这段代码. ServicePointManager.ServerCertificateValidationCallback += ValidateRemoteCertificat

从HTTP 2.0想到的关于传输层协议的一些事

0.HTTP协议的历史 我也不知道... 1.关于HTTP 2.0 收到了订阅的邮件,头版是说HTTP 2.0的内容,我本人不是很关注HTTP这一块儿,但是闲得无聊时也会瞟两眼的.HTTP 2.0的最大改进我觉得有两点:第一:新增了帧层帧层的好处在于重新分发流信息,服务器处理顺序可以不再依赖用户提交请求的顺序了.另外就是不必一定用TCP传输HTTP了,实际上规范一开始就是这么说的.第二:HTTP头的内容可以增量交互了很 多的HTTP头里面的信息都是参数的协商,每次都要携带,如key/value的

网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结

引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. UDP全称为用户数据报协议,它可以提供非连接的不可靠的点到多点的通信. 使用TCP还是UDP,那要看你的程序注重哪一个方面,可靠(tcp)还是快速(udp). TCP/IP 建立连接的过程 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.   

传输层的安全

1.tcp与udp协议的安全问题 tcp作为互联网中非常重要的一个协议,攻击者对它的攻击自然也是相当关注.突然想起经常听到tcp数据流服务这个词,为什么称数据流呢?这里数据流指的是应用层将数据下发给tcp层时是以字节流的形式的发送的.tcp维护着一个tcp发送缓冲区和一个接收缓冲区,所有应用层发来的字节流会存放在发送缓冲区中,网络层上传的tcp数据会存放在接收缓冲区中.对于tcp协议的安全将从四个方面来进行分析,分别是头部.协议.流量和验证. 基于头部的攻击可分为2类:一是攻击者可以发送无效的头

传输层的几个部分的ALCAP、SSCOP、MTP3-B、SCCP、SAAL、SCCF、STC、IP、UDP、GTPU

物理层:物理层主要提供ATM信元的传输通道,它将上层ATM层传来的信元加上其传输开销后,形成连续的比特流.同时,接收到物理媒介上传来的连续比特流后,取出有效信元并传递给ATM层. ATM层:ATM(Asynchronous Transfer Mode,异步传输模式)层处于物理层之上,利用物理层提供的服务,与对等层进行以信元为单位的通信.ATM层与物理媒介的类型.物理层的具体实现及其具体传送的业务类型也无关,它只识别和处理信头.也就是说,ATM层负责将上层传来48字节信元净荷加上5个字节的信头,或

7.HCNA_HNTD——传输层协议

传输层定义了主机程序之间端到端的连通性.传输层最为常见的两个协议分别是传输控制协议TCP(Transmission Control Protocol)和用户数据包协议UDP(User Datagram Protocol). 学习目标: 1. 掌握TCP和UDP的工作原理 2. 描述TCP和UDP的报文格式 3. 了解常见服务的应用端口号 TCP位于TCP/IP模型的传输层,它是一种面向连接的端到端协议.TCP 作为传输控制协议,可以为主机提供可靠的数据传输.TCP需要依赖网络协议为主机提供可用的

OSI七层详解之四 传输层(Transport)

一.简介 第四层的数据单元也称作数据包(packets).但是,当你谈论TCP等具体的协议时又有特殊的叫法,TCP的数据单元称为段(segments)而UDP协议的数据单元称为"数据报(datagrams)".这个层负责获取全部信息,因此,它必须跟踪数据单元碎片.乱序到达的数据包和其它在传输过程中可能发生的危险.第4层为上层提供端到端(最终用户到最终用户)的透明的.可靠的数据传输服务.所谓透明的传输是指在通信过程中传输层对上层屏蔽了通信传输系统的具体细节.  传输层协议的代表包括: T