出处: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 原语的语义如下:
表 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 发出一条确认原语。