我是靠谱客的博主 任性方盒,最近开发中收集的这篇文章主要介绍LoRaWAN协议-MAC帧格式详解1 前言2 帧格式整体框图3 MAC帧格式组成4 MHDR(MAC Header)5 MIC消息校验码6 MACPayload,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
目录
1 前言
2 帧格式整体框图
3 MAC帧格式组成
3.1 分类
3.2 组成
4 MHDR(MAC Header)
4.1 帧类型FType
4.2 协议号Major
5 MIC消息校验码
5.1 校验算法
6 MACPayload
6.1 FHDR(Frame Header)
1)DevAddr
2)FCtrl
3)FCnt
4)FOpts
6.2 FPort(Frame Port)
6.3 FRMPayload
1)加密
1 前言
LoRaWAN协议做为MAC层,分析其帧格式能更好的理解其功能是怎么通过命令实现的。本文梳理了MAC帧格式相关信息,为进一步了解LoRaWAN协议打下基础。
2 帧格式整体框图
- LoRaWAN的PHY层已在《LoRaWAN协议-物理层(PHY)详解》一文中分析了,这里的框图以LoRa调制做为PHY层来刨析MAC帧格式的组成
- MAC数据帧封装在PHY层的PHY Payload字段中
3 MAC帧格式组成
3.1 分类
- 总共分为3类,其中Join-Request和Join-Accept比较特殊,仅用于空中入网过程
3.2 组成
- MAC帧格式由帧头MHDR,帧载荷MACPayload,消息校验码MIC组成
4 MHDR(MAC Header)
- 作为MAC头,共占1个字节
- 由帧类型FType和协议号Major组成,RFU是保留字段
4.1 帧类型FType
- 按该字段,MAC帧共分为6种类型:入网请求帧,入网确认帧,未确认上行数据帧,未确认下行数据帧,确认上行数据帧,确认下行数据帧
- 入网请求帧和入网确认帧用于空中入网流程
- 确认数据帧需要接收方回复应答,未确认帧无需回复应答
4.2 协议号Major
- 协议版本号,现阶段固定为0x00
5 MIC消息校验码
共计4字节,用于MAC帧数据校验,不包括MIC自己。
5.1 校验算法
msg = MHDR | FHDR | FPort | FRMPayload CMAC = aes128_cmac(NwkSKey, B0 | msg) MIC = CMAC[0..3]
- msg:整个MAC字段除了MIC自身
- 额外加入数据B0[16],其中有DevAddr,Dir(0-Up;1-Down),Fcnt,len(msg)
- 使用AES128加密算法,秘钥为NwkSKey,生成密文
- MIC取密文的前4字节作为验证码
PS:这里补充一点,入网后才会有NwkSKey密钥,Join-Request和Join-Accept的MIC计算是通过APPKey(节点端和服务器端提前写好)加密的,后面单独说明
6 MACPayload
- MAC数据段由帧头FHDR,帧端口FPort,帧载荷FRMPayload3个子段组成
- 其中只有FRMPayload字段是加密的
- 其长度是可变的,其FRMPayload最大长度N,后续单独一篇文章分析
6.1 FHDR(Frame Header)
- FHDR是由4字节终端地址(DevAddr)、1字节帧控制字节(FCtrl)、2字节帧计数器(FCnt)和用来传输MAC命令的帧选项(FOpts,最多15个字节)组成。
1)DevAddr
- 占用4字节,用于标识当前网络的终端设备
- 该地址由网络服务器分配
2)FCtrl
占用1字节,依据上行帧和下行帧其组成字段不一样
- 下行消息
- 上行消息
- ADR - 当自身支持ADR时,该位会被置1。
- ACK - 当收到确认消息时,按协议需回复应答给对方。此时该位会被置1
- FPending - 仅用于下行链路帧中,当该位被置1时,表示服务端还有很多数据等着要发,告知Class A设备尽快发起新的一轮通信窗口
- FOptsLen - 表示FOpts字段的长度,0~15字节
- ADRACKReq - 用于节点测主动进行ADR降速,具体见《LoRaWAN协议-自适应速率(ADR)技术》
- ClassB - 仅用于上行链路帧,该位置1表示节点通知服务端,自己已经使能Class B设备了,可以开始接收下行ping,具体见后续Class B设备分析
3)FCnt
协议背景:
- 每个节点设备,程序内部会维持两个计数器FCntUp和FCntDown
- FCntUp计数器在每次节点上行数据给网络服务器时,递增+1
- FCntDown计数器在每次节点接收到网络服务器下行数据时,递增+1
- OTAA入网成功后,即节点收到Join-Accept命令,此时程序会复位FCntUp和FCntDown
字段作用:
- 接收方可通过该字段,和内部的计数器进行比较同步
- MIC(消息验证码)需要使用到该字段的值进行运算校验
4)FOpts
- 属于可选项,当FOptsLen非零时,使用该字段
- 其长度由FCtrl中的FOptsLen决定,最大15字节
- 可用于存放MAC命令,MAC命令还可以放到FRMPayload字段,但两者不能同时存放MAC命令。
- 存放MAC命令的区别是:FOpts字段是不加密的,而FRMPayload字段是加密的
6.2 FPort(Frame Port)
- 当FRMPayload字段不为空时,该字段必须存在
- 和网络协议的端口号类似,其值范围为0~255
- FPort = 0时,表示FRMPayload字段只存放MAC命令
- 1~223,用于应用层特殊使用
- 224 用于LoRaWAN测试协议
6.3 FRMPayload
该字段作为MAC帧的有效载荷,可以存放MAC命令,也可以存放用户数据。
1)加密
- 如果该字段不为空,需要在MIC生成之前完成加密
- 加密密钥依据FPort的值而定,NwkSKey和AppSKey会在入网过程中生成
- 使用AES128进行加密
最后
以上就是任性方盒为你收集整理的LoRaWAN协议-MAC帧格式详解1 前言2 帧格式整体框图3 MAC帧格式组成4 MHDR(MAC Header)5 MIC消息校验码6 MACPayload的全部内容,希望文章能够帮你解决LoRaWAN协议-MAC帧格式详解1 前言2 帧格式整体框图3 MAC帧格式组成4 MHDR(MAC Header)5 MIC消息校验码6 MACPayload所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复