LoRaWAN 1.1 网络协议规范 - 4 MAC 帧格式 Part II
LoRaWAN 1.1 网络协议规范
LoRaWAN 1.1 版本封稿很久了也没有完整啃过一遍,最近边啃边翻译,趁着这个机会把它码下来。
如果觉得哪里有问题,欢迎留言斧正。
翻译不易,转载请申明出处和链接。
4 MAC 帧格式 Part II
4.3.1.6 帧选项(FOptsLen in FCtrl, FOpts)
在FCtrl字节中的帧选项长度域(FOptsLen)表示了包含在帧中的帧选项(FOpts)实际长度。
FOpts传输最大长度为15个字节的MAC指令,这是包含在数据帧中的。参照第5章节查看有效的MAC指令列表。
如果FOptsLen为0,那么FOpts是为空。换言之,如果FOptsLen不为0,那么FOpts不为空。如果MAC指令包含在FOpts字段里,那么端口0不可以使用(FOpt应该不存在或者不为0)。
MAC指令不能同时出现在负载段(payload)或帧选项字段。如果出现了,那么设备应该忽略掉该帧。
如果帧头带有FOpts,那么FOpts应该在先进行加密,再计算消息的一致性校验(MIC)。
加密机制是基于使用128字节密钥长度的AES通用算法,这种算法在IEEE802.15.4/2006 Annex B[IEEE802154]文档里有描述。
密钥K在FOpts字段中的NwkSEncKey中使用,上行和下行链路都是如此。
对于每条消息,算法定义了一个单独的块A:
Size(bytes) | 1 | 4 | 1 | 4 | 4 | 1 | 1 |
A | 0x01 | 4x0x00 | Dir | DevAddr | FCntUp or NFCntDwn | 0x00 | 0x00 |
表15 加密块格式
方向字段(Dir):上行帧为0,下行帧为1。
块A加密后获取到块S:
S=aes128_encrypt(K,A)
对FOpts的加解密都是通过截位法(舍位法)
(pld | pad16) 异或 块S 获得第一个len(pld)段
4.3.1.7 Class B
上行的Class B位设置为1表明通知服务器,设备转为Class B模式,且现在可以接收指定时间的下行pings。请参考Class B 文档中的Class B部分的章节。
4.3.2 端口字段(FPort)
如果帧负载字段不为空,那么端口字段必须存在,如果存在,那么FPort的值为0意味着FRMPayload只包含MAC指令且接收到的带有该FPort字段的任何帧都应该能被LoRaWAN设备所处理。参照第5章节查看有效的MAC指令列表。FPort的值从1到223(0x01到0xDF)j均由应用来决定,且接收到的带有该FPort字段的任何帧应该能被LoRaWAN设备的应用层所处理。FPort值224专用于LoRaWAN的MAC层测试协议。LoRaWAN设备应该丢弃所有来自从应用层的端口不是1到224的传输请求。
注意:端口224作为MAC测试的专用端口,通过无线的方式在最终版本的设备进行遵守MAC指令的测试,从而在实际场景中不用依赖于特定测试版本的设备。测试和正常操作不能同时进行,但设备的MAC层的实现应该和正常应用的实现是一致的。测试协议采用AppSKEY正常加密。这样可以保证在设备拥有者没有参与的情况下,网络服务器无法开启设备的测试模式。如果在已经连接到正常网络的设备上进行测试,网络服务器端的测试应用获取APPSKey的方法就不属于LoRaWAN协议的范围内了。如果在专门的测试平台(非正常的网络服务器)上通过OTAA进行测试,为了保证入网成功,告知测试平台AppKey 的方法也不属于协议范围。
FPort值225到255(0xE1到0xFF)保留,以便后续标准应用的扩展。
Size(bytes) | 7..22 | 0..1 | 0..N |
MACPayload | FHDR | FPort | FRMPayload |
表16 MACPayload 字段长度
N是应用负载(FRMPayload)的字节数,有效的N的长度以不同区域不同特性地被定义在[LoRaWAN区域特性参数文档]。
N应该小于等于:
N<=M-1-length(FHDR)
其中M为MAC 负载的最大长度。
4.3.3 MAC帧负载加密(FRMPayload)
如果数据帧包含负载,那么FRMPayload应该在先进行加密,再计算消息完整性校验(MIC)。
加密机制是基于使用128字节密钥长度的AES通用算法,这种算法在IEEE802.15.4/2006 Annex B[IEEE802154]文档里有描述。
密钥k取决于数据消息的端口:
FPort | Direction | K |
0 | Uplink/downlink | NwkSEncKey |
1..255 | Uplink/downlink | AppSKey |
表3 端口列表
加密字段:
pld = FRMPayload
对于每条数据信息,算法定义了一系列的块Ai,其中i=1到k
k=ceil(len(pld)/16)
Size(bytes) | 1 | 4 | 1 | 4 | 4 | 1 | 1 |
Ai | 0x01 | 4x0x00 | Dir | DevAddr | FCntUp orNFCntDwn orAFCntDwn | 0x00 | i |
表17 加密块格式
方向字段(Dir):上行帧为0,下行帧为1。
块Ai加密后获取到块序列Si:
Si = aes128_encrypt(K,Ai) 其中i=1到k
S = S1 | S2 | ..| Sk
对负载的加解密都是通过截位法(舍位法)
(pld | pad16) 异或 块S 获得第一个len(pld)段
4.4 信息完整性校验码
对消息的所有字段进行计算得到信息完整性校验码(MIC)
msg = MHDR | FHDR | FPort | FRMPayload
其中len(msg)表示消息的长度。
4.4.1 下行帧
下行帧的MIC计算遵循[RFC4493]:
cmac = aes128_cmac(SNwkSIntKey, B0 | msg)
MIC = cmac[0..3]
其中块B0定义如下:
Size(bytes) | 1 | 2 | 2 | 1 | 4 | 4 | 1 | 1 |
B0 | 0x49 | ConfFCnt | 2x0x00 | Dir=0x01 | DevAddr | AFCntDwn orNFCntDwn | 0x00 | len(msg) |
表18 下行MIC计算块格式
如果设备接入LoRaWAN1.1版本的网络服务器同时下行帧的ACK位使能,这意味着这一帧是上行确认帧的应答帧,ConfFCnt是上行确认帧的应答帧的帧计数器对2^16取模。其他情况则ConfFCnt = 0x0000。
4.4.2 上行帧
上行帧的MIC计算如下过程:
其中块B0定义如下:
Size(bytes) | 1 | 4 | 1 | 4 | 4 | 1 | 1 |
B0 | 0x49 | 0x0000 | Dir=0x00 | DevAddr | FCntUp | 0x00 | len(msg) |
表19 上行B0MIC计算块格式
其中块B1定义如下:
Size(bytes) | 1 | 2 | 1 | 1 | 1 | 4 | 4 | 1 | 1 |
B1 | 0x49 | ConfFCnt | TxDr | TxCh | Dir=0x00 | DevAddr | FCntUp | 0x00 | len(msg) |
表20 上行B1MIC计算块格式
其中:
- TxDr是上行传输的数据速率
- TxCh是传输的频道编号
- 如果上行帧的ACK位使能,这意味着这一帧是下行确认帧的应答帧,ConfFCnt是下行确认帧的应答帧的帧计数器对2^16取模。其他情况则ConfFCnt = 0x0000。
cmacS = aes128_cmac(SNwkSIntKey, B1 | msg)
cmacF = aes128_cmac(FNwkSIntKey, B0 | msg)
如果设备接入LoRaWAN1.0版本的网络服务器,那么:
MIC = cmacF[0..3]
如果设备接入LoRaWAN1.1版本的网络服务器,那么:
MIC = cmacS[0..3] | cmacF[0..1]
LoRaWAN 1.1 网络协议规范 - 4 MAC 帧格式 Part II的更多相关文章
- LoRaWAN 1.1 网络协议规范 - 4 MAC帧格式 Part I
LoRaWAN 1.1 网络协议规范 LoRaWAN 1.1 版本封稿很久了也没有完整啃过一遍,最近边啃边翻译,趁着这个机会把它码下来. 如果觉得哪里有问题,欢迎留言斧正. 翻译不易,转载请申明出处和 ...
- LoRaWAN 1.1 网络协议规范 - 3 物理层帧格式
LoRaWAN 1.1 网络协议规范 LoRaWAN 1.1 版本封稿很久了也没有完整啃过一遍,最近边啃边翻译,趁着这个机会把它码下来. 如果觉得哪里有问题,欢迎留言斧正. 翻译不易,转载请申明出处和 ...
- LoRaWAN 1.1 网络协议规范 - 5 MAC指令
LoRaWAN 1.1 网络协议规范 LoRaWAN 1.1 版本封稿很久了也没有完整啃过一遍,最近边啃边翻译,趁着这个机会把它码下来. 如果觉得哪里有问题,欢迎留言斧正. 翻译不易,转载请申明出处和 ...
- LoRaWAN 1.1 网络协议规范 - 1 引言
LoRaWAN 1.1 网络协议规范 LoRaWAN 1.1 版本封稿很久了也没有完整啃过一遍,最近边啃边翻译,趁着这个机会把它码下来. 如果觉得哪里有问题,欢迎留言斧正. 翻译不易,转载请申明出处和 ...
- LoRaWAN 1.1 网络协议规范 - 2 LoRaWAN选项介绍
LoRaWAN 1.1 网络协议规范 LoRaWAN 1.1 版本封稿很久了也没有完整啃过一遍,最近边啃边翻译,趁着这个机会把它码下来. 如果觉得哪里有问题,欢迎留言斧正. 翻译不易,转载请申明出处和 ...
- MAC帧格式、IPV4数据报格式、TCP报文格式、UDP数据报格式
1.MAC帧格式 类型:2字节,指出数据域中携带的数据应交给哪些协议实体处理 校验码:校验数据段(采用32位CRC冗余校验方式进行校验) 2.IPV4数据报 版本:IP协议版本,这里为4 首部长度:占 ...
- [网络] DHCP 之 Mac 绑定
[网络] DHCP 之 Mac 绑定 一.瞎扯 今天我们来简单聊聊Mac绑定,这在设备管理时常常被使用. 当然你可能会说我可以设置静态IP啊.先不提静态IP容易冲突.现在我在设置树莓派时就遇到一个问题 ...
- 无线网络中的MAC协议(1)
前文我们对传统的有线网络的MAC协议进行了分析,接下来我们在对无线网络的MAC也进行一个详细的介绍.那么无线网络中的MAC工作方式是如何的呢?无线局域网(WLAN)中MAC所对应的标准为IEEE 80 ...
- TCP报文格式+UDP报文格式+MAC帧格式
TCP和UDP的区别: 1)TCP是面向连接的,而UDP是无连接的 2)TCP提供可靠服务,而UDP不提供可靠服务,只是尽最大努力交付报文 3)TCP面向字节流,TCP把数据看成一串无结构的字节流,而 ...
随机推荐
- android 使用web查看SQLite数据
添加依赖: compile 'com.facebook.stetho:stetho:1.4.2'compile 'com.facebook.stetho:stetho-okhttp3:1.4.2' 初 ...
- JS执行一次任务与定期任务与清除执行
1.一次性任务的执行与清除执行 1.定期执行 <script> timer = 0; timer = setTimeout(function() { console.log("s ...
- win7下出现读不到移动硬盘的解决办法
很多电脑会出现移动硬盘读不到,或者 读到部分盘的情况,那么下面我就为大家来一一解决这些情况: 方法一: 最常见的是硬盘供电不足导致 ,要么换一个硬盘盒子,要么给硬盘一个外加电源即可方法二: ...
- 重装系统,出现:Units specified don't exist SHSUCDX can't install
重装系统,出现:Units specified don't exist SHSUCDX can't install 解决方案1: 首先是你的硬盘分区不对吧 先用PQ格成ntfs或far32 进PE把C ...
- mysql系列五、mysql中having的用法
HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 和 SELECT 的交互方式类似.WHERE 搜索条件在进行分组操作之前应用:而HAVING 搜索条件在进行分组操作之后应用. ...
- oracle 回退表空间清理
1.查看已有表空间,找到回退表空间 SELECT * FROM DBA_TABLESPACES WHERE CONTENTS='UNDO' 2.创建新的回退表空间 create undo tables ...
- Day5-----------------vi编辑器
1.操作模式 1).命令行模式 2).编辑模式 3).扩展模式 2.命令行模式 1).删除与复制 dd 删除光标所在行 ndd 删除光标向下n行 yy 复制光标所在行 nyy 复制光标乡下n行 2). ...
- python读取两个csv文件数据,进行查找匹配出现次数
现有需求 表1 表2 需要拿表1中的编码去表2中的门票编码列匹配,统计出现的次数,由于表2编码列是区域间,而且列不是固定的,代码如下 #encoding:utf-8 ##导入两个CSV进行比对 imp ...
- Python-JS事件与面向对象操作
目录一.函数高级 循环绑定: 使用循环绑定会出现的问题及解决方案: 二.面向对象 3.构造函数(ES5) 三.JS选择器 1.getElement系列(最严谨) 2.querySelector系列(最 ...
- Windows下虚拟机安装Mac OS X —– VM12安装Mac OS X 10.11
____________________________________________________________________________________________________ ...