IEEE 802.15.4协议完整中文版(6)

2023-10-16 21:20

本文主要是介绍IEEE 802.15.4协议完整中文版(6),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

出处:http://blog.csdn.net/tidyjiang/article/details/51534510

7 MAC子层规范

  本条款指定了本标准的MAC子层规范。MAC子层处理所有对物理无线信道的访问控制,并负责下面的任务: 
   
  —— 如果设备是协调器,产生网络信标 
  —— 与网络信标同步 
  —— 支持与PAN网络关联和解关联 
  —— 设备安全支持 
  —— 采用CSMA/CA机制访问信道 
  —— 处理和维护 GTS机制 
  —— 在两个对等MAC实体间提供可靠链路 
   
  在本条款中,MAC子层指定和维护的常量和属性以斜体文本存在。常量通常带有前缀“a”,比如aBaseSlotDuration,且被列举在表85中(7.4.1节)。属性通常带有前缀“mac”,比如macAckWaitDuration, 且被列举在表86中(7.4.2节)。安全相关属性被列举在表88中(7.6.1节)。

7.1 MAC子层服务规范

  MAC子层在SSCS和物理层之间提供了一个接口。从概念上讲,MAC子层包含了一个叫做MLME的管理实体。该实体提供了服务接口,通过服务接口,可以调用层管理函数。MLME也为MAC子层附属的被管理目标维护一个数据库。这个数据库被叫做MAC子层PIB。 
   
  图29描述了MAC子层的组件和接口。 
  

这里写图片描述

  MAC子层通过访问SAP提供两种服务: 
  —— MAC数据服务,通过 MAC 公共部分子层服务访问点(MAC common part sublayer SAP, MCPS-SAP)提供,主要完成数据的通信。 
  —— MAC 管理服务,通过MLME-SAP访问。 
  这两个服务通过 PD-SAP 和 PLME-SAP 的接口提供了位于 SSCS 和物理层之间的接口(图 6.2)。除了这些外部接口,在 MLME 和 MCPS 之间还存在隐藏的接口,以使 MLME 能够使用 MAC 数据服务。

7.1.1 MAC 数据服务

  MCPS-SAP 支持在对等 SSCS 实体之间传输 SSCS 协议数据单元(SPDU)。表 40 列举了 MCPS-SAP 所支持的原语。用菱形♦标记的原语属于 RFD 的可选项。 
  

这里写图片描述

7.1.1.1 MCPS-DATA.request

  MCPS-DATA.request 原语请求从本地 SSCS 实体向对等 SSCS 实体传输一个 SSCS 协议数据单元(也就是)MAC服务数据单元。

7.1.1.1.1 服务原语的语义

  MCPS-DATA.request 原语的语义如下: 
  

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">MCPS-DATA<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.request</span> (SrcAddrMode,DstAddrMode,DstPANId,DstAddr,msduLength,msdu,msduHandle,TxOptions,SecurityLevel,KeyIdMode,KeySource,KeyIndex)</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li></ul>

  表 41 指定了 MCPS-DATA.request 原语的参数。 
  

名称 类型 变化范围 描述
SrcAddrMode 整型 0x00–0x03 该原语和随后的MPDU的源地址模式:
0x00 = 无地址(地址字段被省略,详见7.2.1.1.8)
0x01 = 保留
0x02 = 16bit短地址 
0x03 = 64bit扩展地址
DstAddrMode 整型 0x00–0x03 该原语和随后的MPDU的目标地址模式:
0x00 = 无地址(地址字段被省略,详见7.2.1.1.6)
0x01 = 保留
0x02 = 16bit短地址 
0x03 = 64bit扩展地址
DstPANId 整型 0x0000-0xffff MAC服务数据单元将要发送到的实体的16bit PAN标识符
DstAddr 设备地址 参数DstAddrMode所指定的 MAC服务数据单元将要送到的设备的地址
msduLength 整型 ≤ aMaxMACPayloadSize MAC字层实体将要传输的服务数据单元中包含的字节数
msdu Set of octets —— MAC字层实体将要传输的服务数据单元的set of octets
msduHandle 整型 0x00-0xff MAC子层实体将要传输的服务数据单元
TxOptions Bitmap 3bit的范围 MAC服务数据单元的传输选项
对于b0,1 = 被确认的传输;
     0 = 未被确认的传输
对于b1, 1 = GTS传输;
     0 = 信标模式的PAN中的CAP传输
对于b2, 1 = 间接传输;
     0 = 直接传输
对于非信标模式的PAN,比特b1总被设为0
SecurityLevel 整型 0x00-0x07 使用的安全等级(看7.6.2.2.1中的表95)
KeyIdMode 整型 0x00-0x03 由于表示密钥的模式(看7.6.2.2.2中的表96)。如果参数SecurityLevel被设为0,改参数将被忽略
KeySource Set of 0,4, or 8 octets 由参数KeyIdMOde指定 密钥的源。如果参数SecurityLevel被设为0,改参数将被忽略
KeyIndex 整型 0x01-0xff 密钥的索引。如果参数SecurityLevel被设为0,改参数将被忽略
7.1.1.1.2 使用时机

  当本地SSCS实体一个MAC服务数据单元传输到对等SSCS实体时,将产生一个MCPS-DATA.request原语。

7.1.1.1.3 接收后的处理

  接收到MCPS-DAT.request原语后,MAC字层实体将传输MAC服务数据单元。 
   
  MAC子层根据提供的参数构造服务数据单元。参数SrcAddrMode和DstAddrMode中的标志与帧控制字段中的地址一致,用于构建MAC头部的帧控制字段和地址字段。如果参数SrcAddrMode和DstAddrMode都被设为0x00(也就是说地址字段被忽略),MAC字层将使用 INVALID_ADDRESS状态发出确认原语MCPS-DATA.confirm。 
   
  如果参数msduLength比aMaxMACSafePayloadSize大,MAC字层将把帧控制字段中的帧版本设为1。 
   
  参数TxOptions表示MAC子层服务数据是如何传输服务数据单元的。如果TxOptions指定传输需要确认,帧控制字段的确认请求将被设为1(看7.5.6.4)。 
   
  如果TxOptions指定需要GTS传输,MAC子层将查看自己是否有有效的GTS(GTS的使用规则,情况7.5.7.3)。如果不能找到有效的GTS,MAC子层将使用状态 INVALID_GTS发送确认原语MCPS-DATA.confirm。如果找到了有效GTS,MAC子层将根据需要延迟(知道GTS)。如果TxOptions指定不需要GTS传输,MAC子层将在信标模式的PAN网络中的竞争接入阶段使用实现CSMA/CA传输服务数据单元,或者在非信标模式的PAN网络中使用非时隙的CSMA/CA传输服务数据单元。在TxOptions中指定GTS传输将覆盖一条间接传输请求。 
   
  如果参数 TxOptions 指定需要间接传输,并且该原语被协调器的 MAC 字层所接收,那么被发送的数据帧将采用间接传输方式。也就是说,数据被添加到协调器所存储的挂起处理列表中,设备使用 7.5.6.3 中的方法自由处理报文。如果目的地址是一个胳膊地址,将使用 7.2.1.1.3 中的机制处理。如果目的地址是一个单播地址,将使用 7.5.6.3 中的方法自由处理。如果协调器没有能力存储报文,MAC 子层将丢弃该服务数据单元,并使用状态 TRANSACTION_OVERFLOW 发出一条确认原语。如果协调器有能力存储数据,它就会将信息添加大列表中去。如果在macTransactionPersistenceTime时间段 内都没有处理该报文,MAC 子层将丢弃该报文,并使用状态 TRANSACTION_EXPIRED 发出一条确认原语。7.5.5 描述了报文处理流程。 如果参数 TxOptions 指定指定为间接传输,但是原语的接收设备不是协调器,或者目的地址不存在,或者参数中同时还指定了 GTS 传输,该间接传输选项将会被忽略。 
   
  如果参数 TxOptions 指定不需要间接传输,MAC子层将在信标模式的PAN网络中的竞争介入阶段使用CSMA/CA机制传输服务数据单元,或者在非信标模式的PAN网络中直接能够CSMA/CA机制传输服务数据单元。如果参数 TxOptions 指定需要直接传输,且 MAC 子层在 macMaxFrameRetries 时间段内一直没接收到确认消息(7.5.6.4),将丢弃服务数据单元,并使用状态 NO_ACK 发送一条确认语句。 
   
  如果参数 SecurityLevel 被设置为 0x00 以外的有效值, 表示该帧需要安全机制, MAC 子层将会设置帧控制字段的安全使能位为1。MAC 子层将基于参数 DstAddr、SecurityLevel、KeyIdMode、KeySource 和 KeyIndex 封装发送帧(7.5.8.2.1)。如果在封装发出帧的时候产生了如何错误,MAC 子层将会丢弃该帧,并使用帧封装过程中返回的错误状态发出一条确认原语。 
   
  如果请求的报文太长,大于 CAP 或者 GTS,MAC 子层将丢弃该帧并使用状态 FRAME_TOO_LONG 发出一条确认原语。 
   
  如果使用 CSMA/CA 算法发出的消息失败(由于信道状态不好),并且参数 TxOptions 指定需要直接传输,MAC 子层将丢弃服务数据单元,并使用状态 CHANNEL_ACCESS_FAILURE 发送一条确认语句。 
   
  如果 MAC 协议数据单元被成功传输,且(如果需要)接收到确认消息,MAC 子层将使用状态 SUCCESS 发出一起确认原语。 
   
  如果原语 MCPS-DATA.request 的任何传输不被支持,或者超出范围,MAC 子层将使用状态 INVALID_PARAMETER 发出一条确认原语。


这篇关于IEEE 802.15.4协议完整中文版(6)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/220857

相关文章

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb