目录

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. 虚拟路由器冗余协议VRRP原理详解!

    虚拟路由器冗余协议VRRP原理详解! https://virtual.51cto.com/art/201905/596666.htm?pc 我们知道,为了实现不同子网之间的设备通信,需要配置路由.目前 ...

  2. HTTP协议状态码详解(HTTP Status Code)

    HTTP协议状态码详解(HTTP Status Code) 使用ASP.NET/PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为: 200 – 服务器成功返回网页 ...

  3. SSL / TLS 协议运行机制详解

    转载自  SSL / TLS 协议运行机制详解 互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想 ...

  4. HTTP协议状态码详解(HTTP Status Code)(转)

    原文链接:HTTP协议状态码详解(HTTP Status Code) 使用ASP.NET/PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为:  200 – 服务器 ...

  5. 流媒体协议之RTMP详解

    流媒体协议之RTMP详解 文章目录 流媒体协议之RTMP详解 1 RTMP概述 2 RTMP交互过程 2.1 握手协议 2.2 RTMP分块(chunk) 2.3 协议控制消息(Protocol Co ...

  6. 流媒体协议之RTSP详解

    1 流媒体协议之RTSP详解 文章目录 1 流媒体协议之RTSP详解 1.1 RTSP概述 1.2 RTSP协议交互过程 1.2.1 RTSP基于TCP交互过程 1.2.2 RTSP基于HTTP的交互 ...

  7. 传输协议之ICMP详解

    文章目录 TCP和UDP ICMP 简介 ICMP出现的原因 ICMP的用途 ICMP作为IP的上层协议在工作(报文) ICMP实现之MTU探索 ICMP实现之改变路由 ICMP实现之源点抑制 ICM ...

  8. STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解

    STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解 上一次我们讲了OneNet平台的注册,这次我们来讲一下MQTT的常用报文用法 上一篇地址https ...

  9. 网络基础知识-TCP/IP协议各层详解

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

最新文章

  1. Linux下使用dmidecode查看服务器的详细的硬件配置
  2. 问题-Delphi2007编译时提示内存错误“sxs.dll. No Debug Info.ACCESS 0xXXXXX
  3. MYSQL专题-MySQL三大日志binlog、redo log和undo log
  4. jvm在windows和linux,理解JVM如何使用Windows和Linux上的本机内存
  5. 10没有基于策略的qos_WebRTC QoS | NACK 格式与发送策略
  6. golang语言操作文件
  7. 7大最重要的管理方法
  8. vue生命周期整理学习
  9. axios 美[æk‘sioʊz]
  10. 国家普通话水平测试官方手机软件,普通话测试软件 – 免费手机普通话测试软件,用手机模拟测试普通话水平[Android]...
  11. 麒麟软件副总裁李震宁:中国开源社区是操作系统破局的土壤
  12. Android各厂商Rom包解压方式
  13. 超强AI绘画Midjourney使用教程
  14. 还在纠结选择用什么浏览器?手机端用国产浏览器也很香
  15. 扫地机器人的轮子困住_扫地机器人被“困住”的解决办法
  16. AlexNet模型思想详解及核心代码实现
  17. 有没有计算机专业的单词本,计算机专业单词完整版.doc
  18. java通过url获取图片文件
  19. Zbrush 人体手部模型雕刻太好用了,大大提高效率
  20. python从地址提取省市区实例_一个用于提取简体中文字符串中省,市和区并能够进行映射,检验和简单绘图的python模块...

热门文章

  1. 意大利联合信贷银行寻求战略合作伙伴
  2. matlab deconvreg怎么用,matlab 图像处理命令
  3. 【CV-Learning】计算机视觉简介
  4. CSDN十大名博Leo的第一次创业经历——蒋涛 PK Leo实录(2)
  5. 【精辟】为人处事的学问
  6. 老师和学生案例,加入抽烟的额外功能
  7. matlab通过摄像头获取图像进行处理
  8. 12.Spring Bean是什么
  9. 【图像识别】初探数字识别-水表(3)
  10. ci框架 数组 指针移动_为移动工程师大规模运行CI