设为首页 收藏本站
查看: 988|回复: 0

[经验分享] LoRaWAN协议(三)

[复制链接]

尚未签到

发表于 2017-7-15 07:50:15 | 显示全部楼层 |阅读模式
LoRaWAN Server 端架构
  LoRaWAN 的server包括 NS(Network server)、AS(application server)、CS(Custom server)....
  其中NS和AS是比不可少的,是完成LoRaWAN协议的重要组成部分

NS 职责
  NS是直接与GW通信的服务器,也是AS和GW之间的桥梁
  我所知道的工作有如下几点:


  • 验证数据的合法性(校验MIC)
  • 从GW的信息中提取数据,整理成NS 的JSON数据包
  • 将校验合法的数据打包成新的JSON包上传至AS
  • OTAA入网时向AS发送请求入网消息,然后再将入网信息告诉AS,当获取AS传来的入网的信息,告诉GW
  • GW 和 AS之间的数据通道
  有几点需要注意的是NS端的数据不进行AES解密工作。

AS 职责
  AS是server端的数据处理中心
  它的工作有如下几点:


  • 上行数据的解密
  • 下行数据的加密
  • OTAA入网请求的处理(同意入网/生成APPSKEY/NWKSKEY)
CS 职责
  CS负责将AS给的数据处理成用户自定义的数据协议格式,也就是说,CS端必须是用户来完成的,因为上面运行的是用户的协议。这里也就不再多说了。

抓包分析
  以下是我在本地服务器端通过抓到得来的数据,我们通过分析数据包来理解数据的走向已及现有的server端处理流程。抓包使用的是tcpdump。
  1.NS->AS数据
  
这是一帧从NS->AS的数据,使用的是TCP方式,AS的数据端口为4000。从data部分我们可以看出来,这是一个未解密的数据。
  

15:30:53.662471 IP localhost.60795 > localhost.4000: Flags [P.], seq 13:328, ack 14,  
win 442, options [nop,nop,TS val 414153 ecr 414145], length 315
  

  0x0000:  4500 016f aee3 4000 4006 8ca3 7f00 0001
  0x0010:  7f00 0001 ed7b 0fa0 5505 b988 2261 4f1b
  0x0020:  8018 01ba ff63 0000 0101 080a 0006 51c9
  0x0030:  0006 51c1 7b22 6170 7022 3a7b 226d 6f74
  0x0040:  6565 7569 223a 2234 6137 3730 3032 3031
  0x0050:  3631 3031 3622 2c22 6469 7222 3a22 7570
  0x0060:  222c 2273 6571 6e6f 223a 3532 332c 2275
  0x0070:  7365 7264 6174 6122 3a7b 2270 6f72 7422
  0x0080:  3a32 2c22 7061 796c 6f61 6422 3a22 5645
  0x0090:  7666 6f56 2b72 6631 5838 4177 316e 6c52
  0x00a0:  7077 227d 2c22 6d6f 7465 7478 223a 7b22
  0x00b0:  6672 6571 223a 3437 312e 352c 2264 6174
  0x00c0:  7222 3a22 5346 3132 4257 3132 3522 2c22
  0x00d0:  636f 6472 223a 2234 2f35 222c 2261 6472
  0x00e0:  223a 6661 6c73 657d 2c22 6777 7278 223a
  0x00f0:  5b7b 2265 7569 223a 2266 6666 6562 3832
  0x0100:  3765 6266 3231 6130 3722 2c22 7469 6d65
  0x0110:  223a 2232 3031 362d 3131 2d32 3454 3135
  0x0120:  3a33 303a 3533 5a22 2c22 7469 6d65 6672
  0x0130:  6f6d 6761 7465 7761 7922 3a66 616c 7365
  0x0140:  2c22 6368 616e 223a 342c 2272 6663 6822
  0x0150:  3a30 2c22 7273 7369 223a 2d37 392c 226c
  0x0160:  736e 7222 3a2d 3136 2e35 7d5d 7d7d 00  
  

  提取其中的数据部分为:
  

{  "app": {
  "moteeui": "4a770020161016",
  "dir": "up",
  "seqno": 523,
  "userdata": {
  "port": 2,
  "payload": "VEvfoV+rf1X8Aw1nlRpw"
  },
  "motetx": {
  "freq": 471.5,
  "datr": "SF12BW125",
  "codr": "4/5",
  "adr": false
  },
  "gwrx": [
  {
  "eui": "fffeb827ebf21a07",
  "time": "2016-11-24T15:30:53Z",
  "timefromgateway": false,
  "chan": 4,
  "rfch": 0,
  "rssi": -79,
  "lsnr": -16.5
  }
  ]
  }
  
}
  

  再把app.userdata.payload 做base64解码之后,得到的payload内容是这个:
  

app.userdata.payload base64 decoded:  
\x54 \x4b \xdf \xa1 \x5f \xab \x7f \x55
  
\xfc \x03 \x0d \x67 \x95 \x1a \x70
  

  此时看到的payload因为是加密的,所以完全看不出来数据内容是什么。
  不过在这里,我们可以看到,NS已经将GW上传的数据做了一定的解析,封装成了另外一种JSON格式,由此,我们不难得出,NS做的工作包括--base64解码/MIC校验/GW数据包的重新组包
  2.AS->CS数据
  
这是一帧从AS->CS的数据,使用的是TCP方式,CS的数据端口为5000。从data部分我们可以看出来,这是一个已经解密完成的数据了。
  

15:30:53.663219 IP localhost.36774 > localhost.5000: Flags [P.], seq 13:328, ack 13,  
win 342, options [nop,nop,TS val 414153 ecr 414140], length 315
  0x0000:  4500 016f 928b 4000 4006 a8fb 7f00 0001
  0x0010:  7f00 0001 8fa6 1388 2a2a 93a0 9d70 4aae
  0x0020:  8018 0156 ff63 0000 0101 080a 0006 51c9
  0x0030:  0006 51bc 7b22 6170 7022 3a7b 226d 6f74
  0x0040:  6565 7569 223a 2234 6137 3730 3032 3031
  0x0050:  3631 3031 3622 2c22 6469 7222 3a22 7570
  0x0060:  222c 2273 6571 6e6f 223a 3532 332c 2275
  0x0070:  7365 7264 6174 6122 3a7b 2270 6f72 7422
  0x0080:  3a32 2c22 7061 796c 6f61 6422 3a22 4151
  0x0090:  4944 4241 5547 4277 674a 4367 734d 4451
  0x00a0:  3450 227d 2c22 6d6f 7465 7478 223a 7b22
  0x00b0:  6672 6571 223a 3437 312e 352c 2264 6174
  0x00c0:  7222 3a22 5346 3132 4257 3132 3522 2c22
  0x00d0:  636f 6472 223a 2234 2f35 222c 2261 6472
  0x00e0:  223a 6661 6c73 657d 2c22 6777 7278 223a
  0x00f0:  5b7b 2265 7569 223a 2266 6666 6562 3832
  0x0100:  3765 6266 3231 6130 3722 2c22 7469 6d65
  0x0110:  223a 2232 3031 362d 3131 2d32 3454 3135
  0x0120:  3a33 303a 3533 5a22 2c22 7469 6d65 6672
  0x0130:  6f6d 6761 7465 7761 7922 3a66 616c 7365
  0x0140:  2c22 6368 616e 223a 342c 2272 6663 6822
  0x0150:  3a30 2c22 7273 7369 223a 2d37 392c 226c
  0x0160:  736e 7222 3a2d 3136 2e35 7d5d 7d7d 00
  

  提取其中的数据部分为:
  

{  "app": {
  "moteeui": "4a770020161016",
  "dir": "up",
  "seqno": 523,
  "userdata": {
  "port": 2,
  "payload": "AQIDBAUGBwgJCgsMDQ4P"
  },
  "motetx": {
  "freq": 471.5,
  "datr": "SF12BW125",
  "codr": "4/5",
  "adr": false
  },
  "gwrx": [
  {
  "eui": "fffeb827ebf21a07",
  "time": "2016-11-24T15:30:53Z",
  "timefromgateway": false,
  "chan": 4,
  "rfch": 0,
  "rssi": -79,
  "lsnr": -16.5
  }
  ]
  }
  
}
  

  再把app.userdata.payload 做base64解码之后,得到的payload内容是这个:
  

\x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08  
\x09 \x0a \x0b \x0c \x0d \x0e \x0f
  

  而此时,数据已经完全解密了,可以看到数据就是在AS解密的,解密完再发送给CS,CS再做进一步用户协议的处理。
  在这里,我们可以看到,AS已经将NS传输过来的JSON包的payload部分做了解密,然后再传给了CS。所以解密工作是在AS完成的。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-393990-1-1.html 上篇帖子: SQL编码乱码解决方法 下篇帖子: 在SQL SERVER中查询数据库中第几条至第几条之间的数据SQL语句写法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表