IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> LoRaWAN协议-MAC帧格式详解 -> 正文阅读

[网络协议]LoRaWAN协议-MAC帧格式详解

目录

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 帧格式整体框图

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字节,依据上行帧和下行帧其组成字段不一样

  • 下行消息

  • 上行消息

PS:各字段具体作用和使用场景后续单独出一篇文章详细描述

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进行加密

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:40:09  更:2021-12-15 18:42:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:45:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码