一种LoRa核心网系统及实现方法与流程

文档序号:12491494阅读:692来源:国知局
一种LoRa核心网系统及实现方法与流程

本发明涉及一种LoRa核心网系统及实现方法,属于物联网、低功耗广域无线网技术领域。



背景技术:

物联网概念从提出至今差不多15年的历史,涌现了大量的产品,总结其中主要的需求可以发现物联网产品的主要的特点:数据采集、少量控制,单次数据量小、采集频度不高、实时性要求不强、某些应用有可靠性要求;采集节点数量大、可能很密集、可能很分散;节点计算存储能力低、长期部署、无市电条件。这些需求主要集中在低速率,大容量、广覆盖,低功耗、低成本这几个方面。

为了支持物联网的发展,通信技术涌现了各种类型,从传输距离来划分,可以把物联网中的通信技术分为两类:戴国华,余骏华.NB-IoT的产生背景、标准发展以及特性和业务研究.移动通信,2016(07):p.31-36.一种是短距离通信,代表技术有Bluetooth、Zigbee和Wi-Fi等,典型的应用场景如智能家居。一种是广域网通信,也被称为低功耗广域网LPWAN,典型的应用场景如智能抄表。LPWAN按照使用的频段可分为两种:工作在非授权频段,如Sigfox、Lora等;工作在授权频段的技术,主要为现网的蜂窝通信技术,如EC-GSM、LTE Cat-m、NB-IoT(Narrow Band Internet of Things,NB-IoT)。

基于非授权频段的LoRa发展迅速,2016年1月28日(http://www.zte.com.cn/china/about/press-center/news/201601/2016-01-29semtech),中兴通讯与Semtech公司在深圳总部签署了战略合作协议,双方在LoRa技术及应用方面进行深入合作,促进LPWAN产业链的发展。

市场上关于LoRa的产品主要是LoRa的模组(LoRaWAN Specification),主要的应用是使用LoRa技术进行通信,没有看到与运营相关的LoRa核心网的设计实现方案。当LoRa设备广泛推广,大量的设备接入网络,设计实现为大量的应用提供统一的管理运营平台,显得很有意义。

在现有的LoRa核心网的设计方案中,仅提出有哪些网元存在,没有具体的给出每个网元的具体的功能设计已经实现细节,无法实际应用。



技术实现要素:

本发明技术解决问题:克服现有技术的不足,提供一种LoRa核心网系统及实现方法,基于LoRa和LoRaWAN本身特点,给出了一个运营管理LoRa网络的具体实现方案,包括每个网元的功能,以及每个网元工作流程,使之能够有效快速地完成运营管理LoRa网络的任务。

本发明技术解决方案:一种LoRa核心网系统,包括:网关、数据分发服务器、网络管理服务器、应用管理服务器和数据库服务器;

网关,对传感器的报文进行转发;网关一方面与数据分发服务器进行交互,另一方面与网关射频模块进行交互;网关包括上行管理线程即与数据分发服务器进行交互和下行管理线程即通过无线接口与传感器进行交互;上行管理线程功能是:定时读取网关射频模块从无线接口中接收到的报文,将读取到的报文进行封装并发送至数据分发服务器,与数据分发服务器进行时间同步;下行管理线程功能是:网关通过UDP协议主动从数据分发服务器拉取数据分发服务器需要下发的报文,并解析报文,然后借助网关射频模块发给传感器;

数据分发服务器,作为连接网关和应用服务器、网络管理服务器的中转站,并负责过滤从网关上报的未注册的设备试图接入网络的请求报文;在网关至数据分发服务器,再由数据分发服务器分别到网络管理服务器和应用管理服务器的上行方向上,数据分发服务器在与网关的交互中,接收、验证、解析再封装来自网关的报文,将报文分成MAC命令下发成功的确认报文、入网请求报文,普通数据报文三类,而后数据分发服务器将分类后的报文分别转发至应用管理服务器和网络管理服务器;在应用管理服务器和网络管理服务器至数据分发服务器;在由数据分发服务器至网关的下行方向上,数据分发服务器接收、校验、解析、封装并分类存储来自应用管理服务器和网络管理服务器的报文;数据分发服务器使用链表管理所有的消息,并设置了两个缓存链表,一个保存需要立即下发给网关的报文的立即发送缓存链表,一个保存需要延迟一段时间发送给网关的报文的延迟发送缓存链表;当数据分发服务器接收到网关上传的传感器的报文后,会检查延迟发送缓存链表,找到需要发送给传感器的报文,将找到的报文转移至立即发送缓存链表,当数据分发服务器接收到网关的请求下发消息时,会将立即发送缓存链表的报文发送给网关;

网络管理服务器,由两部分构成,一部分是接收来自管理终端的需要下发的MAC命令线程,另一部分是通过数据分发服务器接收来自网关的MAC命令下发成功的确认报文线程;网络管理服务器接收来自管理终端的消息,所述消息包括需要下发给终端和MAC命令以及具体的参数,网络管理服务器校验该消息的合法性,并连接数据库服务器查询该消息是否可以下发,如果该消息合法,则组建报文并将报文保存到网络管理服务器报文缓存区内,而后将所述报文转发至数据分发服务器,由数据分发服务器转发至网关,最后由网关通过无线接口转发至传感器;网络管理服务器同时负责处理来自数据分发服务器的MAC命令下发成功的确认报文,网络管理服务器负责校验、解析该确认报文,并根据确认报文删除保存在网络管理服务器报文缓存区内的待确认的报文;

应用管理服务器,一方面面向LoRa核心网,另一方面面向普通应用侧,也即用户侧;面对不同的任务,采用不同的处理策略;在面向LoRa核心网,使用一个进程处理来自网络管理服务器的请求;面向普通应用侧,为基于Nginx的用户侧服务,采取的策略是使用Nginx作为处理接口,解决潜在的大量请求问题;在面向LoRa核心网进程中,应用管理服务器接收来自数据分发服务器的报文,如果接收的报文类型为入网请求报文,则提取报文中的设备地址信息,然后应用管理服务器请求数据库服务器,检查该报文中的设备是否在数据库服务器的黑名单中,如果在则抛弃该报文,如果不在,则生成网络会话秘钥和应用会话秘钥,并将网络会话秘钥和应用会话秘钥保存至数据库服务器,而后组建许可入网的响应报文并下发给数据分发服务器,由数据分发服务器下发给网关,最后在由网关通过空中接口发送给传感器;当接收的消息类型为普通的数据报文,则解析其中的数据,从数据库服务器获得应用会话秘钥,通过应用会话秘钥解密其中的数据,并将数据存储至数据库服务器。在面向普通应用侧,应用管理服务器对外提供统一的接口,供普通类应用中的WEB服务器等设备调用,应用管理服务器与普通类应用中的WEB服务器的交互使用HTTP协议进行承载,并使用XML文件封装交互报文,将封装后的交互报文放在HTTP报文的body中,实现普通类应用与应用管理服务器的交互;应用管理服务器的基于Nginx的用户侧服务使用Nginx来接管连接管理的任务,当Nginx接收到请求后,会调用请求处理的接口函数,所述接口函数对从Nginx接收到的请求进行解析,连接数据库服务器获得最后的结果,并将结果转交给Nginx,通过Nginx返回给普通应用侧;

数据库服务器,存储系统运行相关的必要信息。

所述网关与数据分发服务器的交互使用的UDP协议,使得大量的入网请求快速的得到数据分发服务器的筛选。

所述网关实现流程如下:

(1)网关启动,读取配置文件,开启上行线程和下行线程,然后主线程等待退出;

(2)在下行线程上,读取网关射频模块缓存区数据,然后发送网关的时间至数据分发服务器,同步时间,而后将读取到的网关射频模块缓存区数据发送至数据分发服务器。如果发送成功则登记发送的内容和时间至数据库服务器。

(3)在下行线程中,会定时的向数据分发服务器发起消息请求,如果拿到了需要下发的消息,则将消息通过网关的射频模块发送至无线接口。

所述数据分发服务器接收来自网关的报文分为三种类型,MAC命令下发成功的确认报文、入网请求报文和普通数据报文;

对于入网请求报文的处理:在数据报的MAC层的头部,即MHDR字段,为MAC的类型字段;

对于MAC命令的报文,在LoRa网络中,MAC命令对应用是屏蔽的,在MAC报文中传输MAC命令有两种方式,第一种方式是将MAC命令放在Fopts字段,Foptslen字段指示了Fopts字段的长度,该位置不存在即代表报文未使用该方式传输MAC命令;第二种方式是在帧负载中传输MAC命令,即在Framepayload中,当字段Fport字段为0,代表的是帧负载(FramePayload)中为MAC命令,这样就实现了在数据报文中传递MAC命令。

所述数据分发服务器中,对于上行报文的处理如下:

在数据分发服务器接收到来自网关的报文后进行区分,如果是MAC命令下发成功的确认报文,将报文进行分解,打包,组装成json格式,发送至网络管理服务器;当收到的请求是入网请求报文,则提取入网请求报文中的设备地址,从数据库服务器中查询设备的地址是否是许可的,不许可的会直接被抛弃,验证通过的数据包被解析、组装成json报文,发送至应用管理服务器,由应用管理服务器请求数据库服务器进行黑名单验证,并组装回应的报文;当数据分发服务器接收到的报文内容为普通数据报文时,数据包将会被解析,组装成json报文,发送至应用管理服务器;

对于下行报文的处理:数据分发服务器处理来自应用管理服务器和网络管理服务器的数据请求,工作流程是:数据分发服务器开启监听线程,分别是应用管理服务器监听线程和网关管理服务器监听线程,应用管理服务器监听线程接收到一个任务后会主动开启一个工作线程,处理接收到的响应,来自应用管理服务器的数据包只有请求入网报文的响应报文,处理的主要流程:验证请求的报文的类型,是否是入网响应报文。如果是,则截取里面的网络会话秘钥保存到数据库服务器的网络管理服务器的运行时设备表中。并组装成帧结构,保存至报文缓存链表,处理完毕后,工作线程结束;当网关管理线程接收到一个数据报文后,线程创建一个工作线程处理报文,首先从网关运行时表查询该设备是否存在,其次是查询该设备的设备工作模式,不同工作模式的响应时间是不同的,设置了两个报文缓存链表,分别是需要立即下发给网关的报文的立即发送缓存链表,和需要延迟一段时间发送给网关的报文的延迟发送缓存链表。当设备类型为LoRaWAN规范中规定的模式A,则将需要下发给网关的报文存储在延迟发送缓存链表内,当设备类型为为LoRaWAN规范中规定的模式C,则将需要下发给网关的报文存储在立即发送缓存链表内,当有上行报文从网关上传给数据分发服务器时,会找到存储在延迟发送缓存链表的报文,将找到的第一个报文转移到立即发送缓存链表内;网关会定时的向数据分发服务器请求需要发送的报文,每当收到请求时,数据分发服务器会从立即发送缓存链表内拿到报文,完成发送。

所述网络管理服务器基于Epoll设计与实现,在网络管理服务器中,下发的MAC命令线程实现如下:

通过网络下发MAC命令,考虑到可能有多个用户向网络下发MAC命令,使用Epoll模型来对连接请求进行管理,线程运行后,通过Epoll阻塞式的等待TCP连接,当有连接时,该线程将接收连接,并创建一个工作线程处理请求,该工作线程的任务是解析发来的请求的报文中的MAC命令的类型,以及附加的参数,并将命令打包成json格式下发至网络管理服务器,并将该报文存储在网络管理服务器报文缓存区中等待确认报文,至此工作线程结束任务;

所述接收MAC命令响应线程如下:通过数据分发服务器上传MAC命令下发成功的确认报文给网络管理服务器,采用一个TCP连接,使用一个单独的线程,等待来自数据分发服务器的MAC命令下发成功的确认报文,解析该报文并将该报文对应的存储在网络管理服务器报文缓存区中的待确认的MAC命令删除。

所述应用管理服务器中,所述基于Nginx的用户侧服务,提供的服务包括:用户合法性校验,数据源注册服务,时间段数据查询,最新数据查询服务,数据源删除功能,数据源查询功能;

应用管理服务器对外提供统一的接口,供普通类应用中的WEB服务器等设备调用,应用管理服务器与普通类应用中的WEB服务器的交互使用HTTP协议进行承载,并使用XML文件封装交互报文,将封装后的交互报文放在HTTP报文的body中,实现普通类应用与应用管理服务器的交互;应用管理服务器的基于Nginx的用户侧服务使用Nginx来接管连接管理的任务,当Nginx接收到请求后,会将请求转交给数据处理模块;数据处理模块对从Nginx接收到的请求进行解析,连接数据库服务器获得最后的结果,并将结果转交给Nginx,通过Nginx返回给普通应用侧;

在使用Nginx时,选择NGX_HTTP_CONTENT_PHASE阶段进行接入,处理请求的函数句柄加到location相关的ngx_http_core_loc_conf_t结构体的函数指针中的策略,在自定义HTTP模块中首先接收HTTP头,然后设置异步接收HTTP body的回调函数,根据用户请求的url和body中的参数,连接数据库服务器,获得所需消息后,组装报文,并返回给请求一侧,断开连接。

所述应用管理服务器中,面向LoRa核心网中的使用一个进程处理来自网络管理服务器的请求如下:

所述进程包括入网请求报文的组建,数据源数据解码与缓存,该进程面对的是数据分发服务器,来自数据分发服务器的数据分为两类,一类是传感器入网请求报文,经过数据分发服务器筛选过后,请求均为合法请求,应该予以响应;第二类是普通数据报文,数据应该上传到数据库服务器中缓存,对于上行和下行数据,各开了一个线程处理,即上行线程和下行线程。

所述数据库服务器采用Mysql数据库,包括应用服务器设备表(Appsdevinfo表)、数据分发服务器设备信息表(nsdevinfo)、用户表(userpasswd表)、数据源表(userdatasource表),数据源数据表(datasource_data表)、管理员用户表(rootname表)和允许入网设备列表(permissiondatasource表),其中:

应用服务器设备表(Appsdevinfo表):该表主要提供给应用管理服务器使用,当设备请求入网信息接入时,对设备进一步鉴权。提供给应用管理服务器设备的Appkey,完成对入网请求响应报文的加密,提供AppSkey给应用服务器,用以对数据报文的解密;

数据分发服务器设备信息表(nsdevinfo):该表提供数据给数据分发服务器;

用户表(userpasswd表):用户表保存注册用户的用户名,密码,当用户通过应用管理服务器请求服务时,需要通过该表进行验证;

数据源表(userdatasource表):数据源表内保存用户名和终端设备的绑定关系;

数据源数据表(datasource_data表):允许入网的终端设备的数据将存入该表;

管理员用户表(rootname表):管理员的用户名和密码存入该表;

允许入网设备列表(permissiondatasource表):该表保存的是许可入网设备,该表设置有触发器,通过该表插入数据,设备信息将更新到其他运行时需要的表格,删除该表的记录也会通过触发器删除其他表该终端的信息。

一种LoRa核心网系统实现方法,实现如下:

(1)网关定时读取网关射频模块从无线接口中接收到的报文,将读取到的报文进行封装并发送至数据分发服务器,与数据分发服务器进行时间同步;网关通过UDP协议主动从数据分发服务器拉取数据分发服务器需要下发的报文,并解析报文,然后借助网关射频模块发给传感器;

(2)数据分发服务器在收到来自网关的报文后,接收、验证、解析再封装来自网关的报文,将报文分成MAC命令下发成功的确认报文、入网请求报文,普通数据报文三类,而后数据分发服务器将分类后的报文分别转发至应用管理服务器和网络管理服务器,且如果报文类型为入网请求报文,数据分发服务器会查询数据库服务器,提前将这些报文中的非法的请求过滤掉;数据分发服务器在收到如上三类报文会检查数据分发服务器的延迟发送缓存链表,找到需要发送给该传感器的报文,将其转移至立即发送缓存链表;

(3)当数据分发服务器接收应用管理服务器和网络管理服务器的报文后,数据分发服务器接收、校验、解析、封装并分类存储来自应用管理服务器和网络管理服务器的报文。数据分发服务器使用链表管理所有的消息,并设置了两个缓存链表,一个保存需要立即下发给网关的报文的立即发送缓存链表,一个保存需要延迟一段时间发送给网关的报文的延迟发送缓存链表;当数据分发服务器接收到网关上传的传感器的报文后,会检查延迟发送缓存链表,找到需要发送给该传感器的报文,将其转移至立即发送缓存链表。当数据分发服务器接收到网关的请求下发消息时,会将立即发送缓存链表的报文发送给网关;

(4)应用管理服务器接收来自数据分发服务器的报文,如果接收的报文类型为入网请求报文,则提取报文中的设备地址信息,而后应用管理服务器请求数据库服务器,检查该设备是否在数据库服务器的黑名单中,如果在则抛弃报文,如果不在则根据生成网络会话秘钥和应用会话秘钥,并将网络会话秘钥和应用会话秘钥保存至数据库服务器,而后组建许可入网的响应报文并下发给数据分发服务器,由数据分发服务器下发给网关,最后在由网关通过空中接口发送给传感器。当接收的消息类型为普通的数据报文,则解析其中的数据,从数据库服务器获得应用会话秘钥,通过应用会话秘钥解密其中的数据,并将数据存储至数据库服务器;应用管理服务器与普通类应用中的WEB服务器的交互使用HTTP协议进行承载,并使用XML文件封装交互报文,将封装后的交互报文放在HTTP报文的body中,应用管理服务器的基于Nginx的用户侧服务使用Nginx来接管连接管理的任务,当Nginx接收到请求后,会将请求转交给数据处理模块,该数据处理模块对从Nginx接收到的请求进行解析,连接数据库服务器获得最后的结果,并将结果转交给Nginx,通过Nginx返回给普通应用侧;

(5)网络管理服务器接收来自管理终端的消息,该消息包括需要下发给终端和MAC命令以及具体的参数,网络管理服务器校验该消息的合法性,并连接数据库服务器查询该消息是否可以下发,如果消息合法且可以下发则组建报文并将报文保存到网络管理服务器报文缓存区内,而后将该报文转发至数据分发服务器,由数据分发服务器转发至网关,最后由网关通过无线接口转发至传感器。网络管理服务器同时负责处理来自数据分发服务器的MAC命令下发成功的确认报文,网络管理服务器负责校验、解析该确认报文,并根据确认报文删除保存在网络管理服务器报文缓存区内的待确认的报文。

本发明与现有技术相比的优点在于:

(1)本发明设计的网关,网络管理服务器,应用管理服务器,数据分发服务器和数据库服务器的功能,使之能够完成运营管理LoRa网络的任务;

(2)本发明设计的基于Nginx的应用管理服务器,使用Nginx接管TCP连接,使用HTTP报文中的body承载请求服务的参数。服务请求模块与Nginx模块对接,避免了使用Epoll模型管理TCP连接带来的实现的复杂性,并且提高了系统的扩展性,有较高的可维护性;

(3)本发明设计的基于UDP的快速处理与黑名单过滤的LoRa网络中接入请求预处理方式,使用UDP加速请求快速传输至数据分发服务器,使用黑名单过滤,避免非法请求通过数据分发服务器进入应用管理服务器,保证了系统的安全性和可靠性。

附图说明

图1为本发明LoRa核心网系统组成框架示意图;

图2为本发明中网关工作流程图;

图3为本发明中数据分发服务器实现流程图;

图4为本发明中网络管理服务器实现流程图;

图5为本发明网络管理服务器中Nginx处理HTTP请求的11个阶段;

图6为本发明中网络管理服务器业务流程;

图7本发明网络管理服务器中应用管理服务器;

图8本发明网络管理服务器中应用管理服务器面向用户侧。

具体实施方式

下面结合附图及实施例对本发明进行详细说明。

如图1所示,本发明一种LoRa核心网系统包括:网关、数据分发服务器、网络管理服务器、应用管理服务器和数据库服务器。

(1)网关定时读取网关射频模块从无线接口中接收到的报文,将读取到的报文进行封装并发送至数据分发服务器,与数据分发服务器进行时间同步;网关通过UDP协议主动从数据分发服务器拉取数据分发服务器需要下发的报文,并解析报文,然后借助网关射频模块发给传感器。

(2)数据分发服务器在收到来自网关的报文后,接收、验证、解析再封装来自网关的报文,并将报文分成MAC命令下发成功的确认报文、入网请求报文、普通数据报文三类,而后数据分发服务器将分类后的报文分别转发至应用管理服务器和网络管理服务器。且如果报文类型为入网请求报文,数据分发服务器会查询数据库服务器,提前将这些报文中的非法的请求过滤掉。数据分发服务器在收到如上三类报文会检查数据分发服务器的延迟发送缓存链表,找到需要发送给该传感器的报文,将其转移至立即发送缓存链表。

(3)当数据分发服务器接收应用管理服务器和网络管理服务器的报文后,数据分发服务器接收、校验、解析、封装并分类存储来自应用管理服务器和网络管理服务器的报文。数据分发服务器使用链表管理所有的消息,并设置了两个缓存链表,一个保存需要立即下发给网关的报文的立即发送缓存链表,一个保存需要延迟一段时间发送给网关的报文的延迟发送缓存链表。当数据分发服务器接收到网关上传的传感器的报文后,会检查延迟发送缓存链表,找到需要发送给该传感器的报文,将其转移至立即发送缓存链表。当数据分发服务器接收到网关的请求下发消息时,会将立即发送缓存链表的报文发送给网关。

(4)应用管理服务器接收来自数据分发服务器的报文,如果接收的报文类型为入网请求报文,则提取报文中的设备地址信息,而后应用管理服务器请求数据库服务器,检查该设备是否在数据库服务器的黑名单中,如果在则抛弃报文,如果不在则根据生成网络会话秘钥和应用会话秘钥,并将网络会话秘钥和应用会话秘钥保存至数据库服务器,而后组建许可入网的响应报文并下发给数据分发服务器,由数据分发服务器下发给网关,最后在由网关通过空中接口发送给传感器。当接收的消息类型为普通的数据报文,则解析其中的数据,从数据库服务器获得应用会话秘钥,通过应用会话秘钥解密其中的数据,并将数据存储至数据库服务器。应用管理服务器与普通类应用中的WEB服务器的交互使用HTTP协议进行承载,并使用XML文件封装交互报文,将封装后的交互报文放在HTTP报文的body中。应用管理服务器的基于Nginx的用户侧服务使用Nginx来接管连接管理的任务,当Nginx接收到请求后,会将请求转交给我们自定义的数据处理模块。该数据处理模块对从Nginx接收到的请求进行解析,连接数据库服务器获得最后的结果,并将结果转交给Nginx,通过Nginx返回给普通应用侧。

(5)网络管理服务器接收来自管理终端的消息,该消息包括需要下发给终端和MAC命令以及具体的参数。网络管理服务器校验该消息的合法性,并连接数据库服务器查询该消息是否可以下发,如果消息合法且可以下发则组建报文并将报文保存到网络管理服务器报文缓存区内,而后将该报文转发至数据分发服务器,由数据分发服务器转发至网关,最后由网关通过无线接口转发至传感器。网络管理服务器同时负责处理来自数据分发服务器的MAC命令下发成功的确认报文,网络管理服务器负责校验、解析该确认报文,并根据确认报文删除保存在网络管理服务器报文缓存区内的待确认的报文。

下面再详细给出每个部分的具体过程。

网关,对LoRa核心网和无线终端的数据进行转发;其中,网关要配置的主要参数为网关的IP地址,上下行的端口号,网关射频模块的射频收发器、射频链路、调制解调模块等。在涉及对硬件模块的操作上,本发明采用的是开源的硬件操作API函数。

网关包括两部分,一部分是硬件部分即网关射频模块,一部分是部署在Linux主机上的软件部分。硬件部分使用的是WiMOD Demo Board开发板,该开发板主要的芯片有三个,分别是用于USB转串口的FT232H,射频芯片为SX1257,数字基带芯片为SX1301。为了在Linux上对该开发板进行通信,需要安装两个驱动程序:一个是USB驱动程序,用来和FT232H进行交互,另一个是为了和SX1301进行通信所需要的一系列API。其中FT232T使用的驱动为libmpsse驱动。SX1301数字基带使用的为Smetech公司提供的驱动程序。

从1图上可见,一方面网关要与数据分发服务器进行交互,另一方面要与自身的硬件设备进行交互。因此本发明设计了上行管理线程和下行管理线程。

上行管理线程的主要功能:

定时读取网关射频模块中的基带芯片SX1301缓存区中的数据。定时获取本地时间,与数据分发服务器进行同步。同步时间的主要目的:对于模式A,当数据分发服务器需要下发给网关射频模块时,需要进行时间的精准的时间。

下行管理线程的主要功能:

发送上行数据给数据分发服务器,记录发送时间,并等待回复信息。检查时间同步信标发送标志。根据最新时间拼装信标内容,并在报文尾部附加循环冗余校验。

考虑到在LoRa网络中,终端的数据量比较小,但数量较大,在某些区域可能有大量的终端设备请求接入,且这些设备可能并不是属于当前运营商的设备,仅此需要将这些设备的请求抛弃。考虑到快速的处理这些入网请求,本发明采用UDP协议。对比TCP和UDP协议,TCP协议面向连接,在传输上有可靠性保证,主要用在对可靠传输有要求的场合。而UDP则面向非连接,传输没有可靠性保障,主要应在对实时性要求较高的场合。正式由于TCP对于可靠性的保障,TCP有一系列机制保证传输的可靠性。但是在LoRa网络中,因为网络的不稳定,导致TCP需要重新进行三步握手,影响了实时性。因此在网关与数据分发服务器的交互本发明使用的UDP协议。使得大量的入网请求快速的得到数据分发服务器的筛选。

如图2所示,网关工作流程如下:

(1)网关启动,读取配置文件,开启上行线程和下行线程,然后主线程等待退出。

(2)在下行线程上,读取网关射频模块中的报文,然后发送网关的时间至数据分发服务器,同步时间,而后将读取到的网关射频模块中的报文发送至数据分发服务器。如果发送成功则登记发送的内容和时间至数据库服务器。

(3)在下行线程中,会定时的向数据分发服务器发起消息请求,如果拿到了需要下发的报文,则将该报文通过网关的射频模块发送至无线接口。

数据分发服务器,作为连接网关和应用服务器、网络控制器的中转站,并负责过滤未注册的设备试图接入网络的请求。在上行方向,它的主要功能是验证消息内容,并根据消息类型对消息进行分流。在下行方向,它的主要功能是对下行数据附加验证校验码和网关控制信息。

数据分发服务器接收来自网关的报文分为三种类型,分别是含有MAC命令的报文,入网请求报文,数据报文。

区分的方法:

对于入网请求报文的处理:在数据报的MAC层的头部,即MHDR字段,为MAC的类型字段,根据前面的介绍可知,当Mtype的值为“000”时,代表的是该报文为请求入网报文。

对于MAC命令,在LoRa网络中,MAC命令对应用是屏蔽的,在MAC报文中传输MAC命令有两种方式。第一种方式是将MAC命令放在Fopts字段,Foptslen字段指示了Fopts字段的长度,该位置不存在即代表报文未使用该方式传输MAC命令。另一种方式是在帧负载中传输MAC命令,即在Framepayload中,当字段Fport字段为0,代表的是帧负载(FramePayload)中为Mac命令,这样就实现了在数据报文中传递Mac命令。以上介绍的MAC传输的方案不可同时使用。由于在Framepayload中的数据必须进行加密,所有第二种方式需要加密,但第一种方式是不需要进行加密的。

在数据分发服务器接收到来自网关的数据后,进行区分,如果是含有MAC命令的数据包,将数据包进行分解,打包,组装成json格式,发送至网络管理服务器。当收到的请求时请求入网报文,则提取其中设备地址,从数据库中查询设备的地址是否是许可的,不许可的会直接被抛弃。验证通过的数据包,被解析、组装成json报文,发送至应用管理服务器。由应用管理服务器进行二次鉴权,并组装回应的报文。当数据分发服务器接收到的报文内容为含所有数据包的报文时,数据包将会被解析,组装成json报文,发送至应用管理服务器。

对于下行报文的处理:数据分发服务器需要处理来自应用管理服务器和网络管理服务器的数据请求。主要的工作流程是:数据分发服务器开启监听线程,分别是应用管理服务器监听线程和网关管理服务器监听线程。应用管理服务器监听线程接收到一个任务后会主动开启一个work线程,处理接收到的响应。来自应用管理服务器的数据包只有请求入网报文的响应报文。处理的主要流程:验证请求的报文的类型,是否是入网响应报文。如果是,则截取里面的网络会话秘钥保存到数据库服务器的网关管理服务器的运行时设备表中。并组装成帧结构,发往网关。处理完毕后,work线程结束。当网关管理线程接收到一个数据报文后,线程创建一个work线程处理报文,首先从网关运行时表查询该设备是否存在,其次是查询该设备的设备工作模式。由于不同模式的响应时间是不同的,因此设置了两个消息缓存区,分别是立即下发消息缓存区,等待消息缓存区。当设备类型是LoRaWAN标准中给出的模式A,则将需要下发给网关的消息存储在等待下发消息缓存区内,当设备类型为LoRaWAN标准中给出的模式C,则将需要下发给网关的消息存储在立即下发消息缓存区内。当有上行数据从网关上传给数据分发服务器时,会找到存储在等待下发缓存区内的设备,将其转移到立即下发缓存区内。网关会定时的向数据分发服务器请求需要发送的数据,每当收到请求时,数据分发服务器会从立即发送缓存区内拿到数据,完成发送。

如图3所示,本发明中数据分发服务器实现流程如下:

(1)数据分发服务器开启运行后读取配置文件,并启动与网关交互上行线程,与网关交互下行线程,与网络管理服务器交互上行线程,与网络管理服务器交互下行线程,与应用管理服务器交互上行线程,与应用管理服务器交互下行线程。而后主线程进入等待退出消息状态。

(2)与网关交互上行线程运行起来后会去接收来自网关的报文,解析报文,并根据报文的类型将报文存储在不同的报文缓存区内。然后判断报文是否是入网请求报文,如果是入网请求报文,则连接数据库服务器,进行校验,抛弃不数据本网络的入网请求的报文。

(3)与网关交互的下行线程运行起来后,会等待网关的请求下发报文,而后检查立即发送缓存链表,读取一条报文下发至网关。

(4)与网络管理服务器交互的上行线程运行起来后,会检查网络管理服务器报文缓存区,并读取一条报文下发至网络管理服务器。

(5)与网络管理服务器交互的下行线程运行起来后,会等待来自网络管理服务器的报文,根据设备的类型将该报文加到数据分发服务器的立即发送缓存链表或者延迟发送缓存链表。

(6)与应用管理服务器交互的上行线程运行起来后,会检查网络管理服务器的报文缓存区,并读取一条报文下发至网络管理服务器。

(7)与应用管理服务器交互的下行线程运行起来后,会等待来自应用管理服务器的报文,根据设备的类型将该报文加到数据分发服务器的立即发送缓存链表或者延迟发送缓存链表。

网络管理服务器,基于Epoll设计与实现,LoRa在接入面需要面对大量的传感器接入,数据发送,为了有效的管理无线接入网,需要对网关的无线参数进行动态配置。

考虑到本发明主要设计的主要是系统运营管理平台,因此对于设计动态的算法实现有效的管理网络接入本发明不做介绍。设计的网络管理接口主要是使用人工的决策。

网络管理服务器由两部分构成,一部分是接收需要下发的MAC命令线程,一部分是接收来自网关的MAC命令响应线程。

MAC命令下发线程:

该线程提供通过网络下发MAC命令的功能,考虑到可能有多个用户向网络下发MAC命令,因此本发明使用的是Epoll模型来对连接请求进行管理。Epoll是在Linux系统中对TCP连接进行管理的模型,与它类似的还有Select模型,相比较Select模型,Epoll可以处理更多的TCP连接,有更好的处理速度。该线程运行起来后,通过Epoll阻塞式的等待TCP连接,当有连接时,该线程将接收连接,并创建一个工作线程处理请求,该工作线程的主要任务是解析发来的请求的报文中的MAC命令的类型,以及附加的参数。并将命令打包成json格式下发至网络管理服务器。至此work线程结束任务。

接收响应线程:

考虑到通过数据分发服务器上传数据包给网络管理服务器的只是用了一个TCP连接,因此这里无需使用Epoll进行TCP管理。本发明使用了一个单独的线程,等待来自数据分发服务器的MAC命令下发成功的确认报文,并根据该确认报文删除保存在网络管理服务器报文缓存区内的待确认的报文。

现在支持的MAC命令主要基于Semtech公司提供的SX1301的API中实现的。支持的MAC命令主要包括:连通性核验确认命令,ADR请求命令,工作周期设置命令,接收窗口参数设置命令,终端状态请求命令,信道设置命令,接收窗口时延设置命令,专用命令。

如图4所示,本发明中网络管理服务器实现流程如下:

(1)网络管理服务器启动后分别启动接收线程和发送线程,主线程则进入等待退出命令状态。

(2)接收线程启动后会读取配置参数,进入阻塞式的Epoll,当有连接进入后,启动work线程,连接数据库服务器接收到的报文进行校验,校验未通过的则抛弃报文,校验通过的则处理报文,组装报文,并下发至数据分发服务器。

(3)网络管理服务器的接收线程启动后,阻塞的等待来自数据分发服务器的连接请求,当有连接进入后,读取报文,该报文的内容为数据分发服务器的MAC命令下发成功的确认报文,网络管理服务器负责校验、解析该确认报文,并根据确认报文删除保存在网络管理服务器报文缓存区内的待确认的报文。

应用管理服务器设计与实现,在LoRa核心网中,一方面需要管理来自终端的大量传感器终端,另一方面在向外部提供服务时,即使每个用户对自己名下的每个传感器的数据被请求的频率有限,但是在LoRa网络中,传感器的数量巨大,叠加上庞大的注册用户数,请求的数据将不可避免的快速增加。因此有必要提高应用服务器对外提供服务的能力。

在为应用服务器设计接口时,考虑到信息的承载,未来功能的扩展,兼容性等方面的问题,本发明没有选择TCP作为协议承载,选择使用HTTP作为承载。所有的交互信息打包放在HTTP的Body中。

本发明选择最为常用的两种服务器作对比,即Apache服务器和Nginx服务器。

Apache服务器的优点:重写功能强,处理动态内容网页能力强,稳定性较好,组件较多,且对php有较好的支持,处理动态请求能力较好。

Nginx服务器的优点:Nginx占用的系统的内存和CPU较小,整个处理的核心使用的是异步非阻塞IO,有非常强大的并发能力。主要做的是静态网页内容的处理,也经常被使用做反向代理服务器。但是他本身不能处理php脚本,需要配合fastcgi实现对php的支持。

对比两种服务器,考虑到业务要求有较高的并发性,所以本发明选择使用Nginx服务器,主要的思路是,依赖Nginx服务器来接受海量请求,在Nginx工作流中接管对报文的处理,并自定义解析,自定义返回报文,完成高并发和自定义内容。

Nginx在处理一个HTTP请求时分为11个阶段,每一个阶段可以有数个HTTP模块做流水化处理。当有多个模块同时介入同一个阶段时,这些模块会按照模块内的字段ctx_index字段顺序处理。如图5所示,Nginx处理HTTP请求的11个阶段。Nginx处理HTTP请求分为11个阶段NGX_HTTP_POST_READ_PHASE、NGX_HTTP_SERVER_REWRITE_PHASE、NGX_HTTP_FIND_CONFIG_PHASE、NGX_HTTP_REWRITE_PHASE、NGX_HTTP_POST_REWRITE_PHASE、NGX_HTTP_PREACCESS_PHASE、NGX_HTTP_ACCESS_PHASE、NGX_HTTP_POST_ACCESS_PHASE、NGX_HTTP_TRY_FILES_PHASE、NGX_HTTP_CONTENT_PHASE、NGX_HTTP_LOG_PHASE,且这些处理阶段对应的处理方法为ngx_http_core_generic_phase、ngx_http_core_rewrite_phase、ngx_http_core_find_config_phase、ngx_http_core_rewrite_phase、ngx_http_core_post_rewrite_phase、ngx_http_core_generic_phase、ngx_http_core_access_phase、ngx_http_core_post_access_phase、ngx_http_core_try_files_phase、ngx_http_core_content_phase、ngx_http_core_generic_phase。

本发明选择接入的模块是NGX_HTTP_CONTENT_PHASE阶段。该阶段的主要特点是:该阶段处在第十个阶段,前面的9个阶段提供了很多基础的功能,比如访问权限的判断,配置选项的匹配等,这些功能也是本发明需要的。其次,比较重要的是,从该阶段接入HTTP处理流有两种方法,一是和其他阶段介入相同,通过向全局的ngx_http_core_main_conf_t结构体的phases数组中加上ngx_http_handler_pt方法。另外的方法是:把本发明处理请求的函数句柄加到location相关的ngx_http_core_loc_conf_t结构体的函数指针中。

本发明选用的是第二种策略,主要是因为,通过这种方法,只有通过conf文件中设置的URL过滤规则的请求才会被到达该处理函数。这样避免处理函数对请求的URL自己在过滤一遍,提高处理效率。

其次是关于Nginx的配置文件,Nginx提供配置文件,通过修改配置文件实现对Nginx的个性化配置。在应用管理服务器中需要提前配置的参数有以下几个部分:

为了指定本发明需要处理的的http报文能够进入处理函数。需要在配置文件中补充如下内容:

在server配置块中添加

location^~/lora/

{

lorahandle;

}

如上所示的内容为需要在Nginx配置文件中添加的内容。

这里的功能是,所有请求该服务器的请求中,其中^~为通配符,^~/lora/表示url的内容以”/lora/”开头的请求都会被本发明自定义的数据处理模块lorahandle模块进行处理。

本发明设计的模式是无状态模式,如果打开了Nginx的长连接(默认打开),将会导致一次请求成功,一次请求失败。Nginx关闭长连接的方法是在config文件中添加配置项:keepalive_timeout,该配置项的含义是关闭Nginx的长连接。

在本发明设计的应用场景下,仿照现网中的业务逻辑,管理员需要提前在数据库服务器中注册客户的信息,包括用户名和密码。其次管理员需要注入设备配置信息到终端表,这其中包括设备地址,设备的应用的编号,设备的AppKey,终端表内的数据会通过触发器,将数据同步到核心网的各个表中。不在终端表中的设备在发起入网时,会被拒绝入网。该动作完成终端的鉴权工作。

合法的用户通过用户名和密码可以访问应用服务器提供的接口,注册自己的终端设备(注册使用传感器的地址)。注册成功后,用户可以访问到指定时间内的传感器数据和相应传感器的最新数据。也可以解绑自己的传感器。工作流程如图8所示:

下面介绍具体的实现:

应用服务器一方面面向核心网,一方面面向应用,对外提供服务。面对不同的任务,本发明采用不同的处理策略。面对用户侧。本发明采取的策略主要是使用Nginx作为处理接口,解决潜在的大量请求问题。在面向核心网一侧,本发明使用一个进程处理来自网络管理服务器的请求。

基于Nginx的用户侧服务:

提供的服务包括:用户合法性校验,数据源注册服务,时间段数据查询,最新数据查询服务,数据源删除功能,数据源查询功能。

本发明在使用Nginx时,选择的是NGX_HTTP_CONTENT_PHASE阶段进行接入,如上文介绍,本发明选择的是处理请求的函数句柄加到location相关的ngx_http_core_loc_conf_t结构体的函数指针中的策略。在自定义HTTP模块中首先接收HTTP头,然后设置异步接收HTTP body的回调函数。下一步将解析Body,根据用户请求的url和body中的参数,连接数据库服务器,获得所需消息后,组装报文,并返回给请求一侧,断开连接。

核心网管理进程:

该进程包括入网请求报文的组建,数据源数据解码与缓存。该进程主要面对的是数据分发服务器。来自数据分发服务器的数据分为两类,一类是终端请求接入消息,经过数据分发服务器筛选过后,这里的请求均为合法请求。应该予以响应。第二类是数据上传报文,这里的数据应该上传到数据库服务器中缓存。在具体的实现中,本发明对于上行和下行数据,各开了一个线程处理。

上行线程的主要工作流程:

收到数据报文,先进行分类,一共有两类数据报文。当请求类型为请求入网数据报文。则查询数据库服务器,进一步鉴权该设备是否有入网权限。当有入网权限,则要完成计算设备的网络会话秘钥nwkSKey和应用会话秘钥appSKey,计算的方法是LoRaWAN规范中给出的式(1)和式子(2)。

nwkSkey=aes128_encrypt(appkey,0x01|AppNonce|NetID|DevNonce|pad16) (1)

appSKey=aes128_encrypt(appkey,0x02|AppNonce|NetID|DevNonce|pad16) (2)

其中,aes128_encrypt表示aes128加密算法,appkey为应用秘钥,AppNonce为随机生成的变量,NetID为网络的ID号,DevNonce为随机数(2bytes长),pad16表示填充位,保证pad16所在的整个字符串长度为16的倍数。

计算得出两个秘钥将被存到数据库中。然后组装要下发给终端的消息,并使用appkey进行加密。下发给终端的消息包括AppNonce,NetID,DevAddr等。其中AppNonce为随机生成的变量,NetID为网络的ID号,DevAddr为终端的地址,因此终端拿到之后,使用appkey对这些加密的信息进行解密,拿到相应的字段,按照式(1)和式(2)的算法进行加密即可获得appSKey和nwkSKey。这个相应报文会被存储在应用管理服务器的下发数据缓存区内。应用管理服务器会将入网的记录插入到数据库服务器中,以便后期对入网请求的频率进行分析。

当上行报文为数据报文时,应用服务器解析设备的地址信息,并从数据库服务器中提取设备的appSkey,用来解密报文。解密后提取终端上传的数据信息存储到数据源数据表中,完成对数据报文的处理。

下行线程的主要工作流程:

下行线程会定期从下发数据缓存区内获取数据,下发给数据分发服务器。

如图6所示,图6给出了普通类应用与应用管理服务器交互的流程。当前端的浏览器向WEB服务器发起请求登陆后,WEB服务器会向应用管理服务器请求验证用户是否有登陆权限。假若用户有登陆权限,则应用管理服务器则给WEB服务器返回用户权限验证通过。WEB服务器返回给浏览器登陆成功。而后,浏览器即可请求各种自己名下的内容,比如图中所示的用户名下的所有终端。

如图7所示,WEB服务器向应用管理服务器发起请求后,由Nginx接收请求,经过过滤条件,会调用handl函数,在handl处理函数中,通过ngx_http_read_client_request_body函数注册异步接受body后的回调函数ngx_http_mytest_body_handler函数。等待接收完body后,会触发回调函数ngx_http_mytest_body_handler函数,由回调函数去调用报文处理接口函数解析并完成请求的处理工作,并组建返回的报文,通过nginx返回给请求段,完成处理。

如图8所示,该图为应用管理服务器提供LoRa核心网侧的服务的逻辑,应用管理服务器启动后会启动数据接收线程和数据下发线程,然后主线程等待退出消息状态中。数据接收线程接收来自数据分发服务器的报文,如果该报文为入网请求报文,则先解析该报文获得发送该报文的传感器,连接数据库服务器进行黑名单验证,如果发送该报文的传感器在黑名单内则抛弃报文,如果发送该报文的传感器不在则根据生成网络会话秘钥和应用会话秘钥,并将网络会话秘钥和应用会话秘钥保存至数据库服务器,而后组建许可入网的响应报文并存储在应用管理服务器报文缓存区内,。当接收的消息类型为普通的数据报文,则解析其中的数据,从数据库服务器获得应用会话秘钥,通过应用会话秘钥解密其中的数据,并将数据存储至数据库服务器。数据分发服务器的数据下发线程启动后会检查应用管理服务器报文缓存区,如果里面有待发送的报文,则下发给数据分发服务器。

数据库服务器,存储系统运行相关的必要信息。本发明是使用的是主流的Mysql数据库。主要的表已经表结构如下。

应用服务器设备表(Appsdevinfo表):该表主要提供给应用管理服务器使用,当设备请求入网信息接入时,对设备进一步鉴权。提供给应用管理服务器设备的Appkey,完成对入网请求响应报文的加密。提供AppSkey给应用服务器,用以对数据报文的解密。

数据分发服务器设备信息表(nsdevinfo):该表提供数据给数据分发服务器

用户表(userpasswd表):用户表保存注册用户的用户名,密码。当用户通过应用管理服务器请求服务时,需要通过该表进行验证。

数据源表(userdatasource表):数据源表内保存用户名和终端设备的绑定关系。

数据源数据表(datasource_data表):允许入网的终端设备的数据将存入该表

管理员用户表(rootname表):管理员的用户名和密码存入该表。

允许入网设备列表(permissiondatasource表):该表保存的是许可入网设备,该表设置有触发器,通过该表插入数据,设备信息将更新到其他运行时需要的表格,删除该表的记录也会通过触发器删除其他表该终端的信息。

总之,本发明一种LoRa核心网系统及实现方法,设计的网关,网络管理服务器,应用管理服务器,数据分发服务器和数据库服务器的功能,使之能够完成运营管理LoRa网络的任务;设计的基于Nginx的应用管理服务器,使用Nginx接管TCP连接,使用HTTP报文中的body承载请求服务的参数。服务请求模块与Nginx模块对接,避免了使用Epoll模型管理TCP连接带来的实现的复杂性,并且提高了系统的扩展性,有较高的可维护性;基于UDP的快速处理与黑名单过滤的LoRa网络中接入请求预处理方式,使用UDP加速请求快速传输至数据分发服务器,使用黑名单过滤,避免非法请求通过数据分发服务器进入应用管理服务器,保证了系统的安全性和可靠性。

提供以上实施例仅仅是为了描述本发明的目的,而并非要限制本发明的范围。本发明的范围由所附权利要求限定。不脱离本发明的精神和原理而做出的各种等同替换和修改,均应涵盖在本发明的范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1