本发明涉及通讯领域,具体涉及应用到物联网通讯、移动端消息通信的领域。
背景技术:
本发明方法涉及https、tcp、对称加密与协议解析等内容。即通过https登录获取对称密钥、token与tcp服务器地址,然后连接tcp服务器,通过自定义协议进行验证,最后开始加密的消息通讯的过程。
与本发明最相近的方法有cn103747004a樊建等人提出的一种物联网平台通信协议的实现方法,包括如下步骤:设计平台通信协议枚举类型;设定平台通信协议内容;序列化平台通信协议;协议解析。它解决了物联网平台传输数据量大、自成体系、难以兼容其他系统及难以扩展等缺陷。但在安全性能方面有待提升。
技术实现要素:
目前的物联网通讯协议一般是消息序列化后与协议头打包,然后直接发送到网络中。这种方式导致了通信的不安全,传输的数据应该经过安全的编码后再送入互联网中。而本发明方法克服此缺点,通过https登录获取对称密钥、token与tcp服务器地址,然后连接tcp服务器,通过自定义协议进行验证,最后开始加密的消息通讯的过程,提供一种安全可靠的通信协议。
图1是该协议实现的流程框图。主要包括登录https服务器、获取aes密钥与token、登录tcp服务器、维持连接与发送接收数据包四个步骤。
现有的物联网协议安全性都是通过tls来保证,这使得每个心跳包、不需要加密的消息等都必须运算加解密,无法灵活地选择性加密,因此服务器具有很大的计算压力,而且心跳包加密后,就变成了几十字节,而心跳包正是占据了整个通信系统的绝大部分流量,这将导致流量翻几倍甚至几十倍,非常浪费带宽。本发明采用了极具安全性的登录验证方式来交换aes密钥与token,并采用简易的二进制协议通信,心跳包仅仅2字节,使得tcp流量大大降低,并且可以灵活地选择加密数据字段,具有tls同样高级别的安全性。此外,本发明非常适合用于分布式架构。
附图说明
图1流程框图;
图2tcp接入验证流程图;
图3集群架构图;
图4逻辑架构图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述
一、登录
首先通过帐号密码登录https服务器,具体方式为两步:第一步向https服务器发送get请求,参数为帐号,服务器记录并返回一个随机数,第二步post提交表单,有userid字段为帐号,pwd字段为(随机数+帐号+密码的哈希值的)哈希值,服务器从记录中读取随机数,从数据库读取密码,进行相同计算后验证登录。
二、获取对称密钥与tcp接入地址
登录验证后,https服务器查询tcp服务器列表,随机选取一个,并生成aes密钥、token,返回给客户端,并通过消息队列把客户端信息(帐号、token、aes密钥等)发送到选中的tcp服务器。tcp服务器列表生成方式为:通过etcd服务发现,每个tcp服务器启动后,都会向etcd注册,https服务器可实时地接收到列表更新,若有tcp服务器故障或者获取心跳包超时,则从列表中删除该地址。消息队列采用nats,每个tcp服务器启动后生成自己的随机名字并向etcd注册,然后向nats订阅自己名称的主题,https服务器通过etcd得知每个tcp服务器的名称,由此来实现发布订阅消息的传输。
三、接入tcp服务器并验证
具体验证方式为:第0字节为0x31(固定,表示接入验证),接下来为序列后的数据data={uid,cipher},其中cipher=base64&aes(token),uid为帐号。然后接一个’\n’换行符。紧接着发送一个ping心跳包:0x3f+‘\n’。服务器解析取出数据,并用第二步中从消息队列订阅到的帐号相关信息进行同样的计算,验证cipher,假如验证成功,则服务器返回pong心跳包0x3e+‘\n’,否则断开连接。具体操作过程如图2所示。
四、维持tcp连接与发送接收消息
维持连接:验证成功后需要定时发送ping心跳包以告诉对方,对方接收到后需要立即回复pong心跳包,若超过一定次数没有收到回复则断开连接。每次接收的消息包长度都会被记录,用来动态调整接收缓冲区,如均是很小的数据包,则每次缓冲区都会减半,直至最小值32字节,反之最大值4096字节。
接收到的每个数据包都会被解析,若解析错误(如命令错误等)则断开连接。发送与接收数据包如下:
服务器发送:0x32+base64&aes&序列化(消息)+‘\n’,客户端响应:0x32+base64&aes&序列化(响应收到)+‘\n’。
客户端发送:0x33+base64&aes&序列化(消息)+‘\n’,服务器响应:0x33+base64&aes&序列化(响应结果)+‘\n’。
对本发明作进一步详细的描述系统可如图3所示。
一、设计协议命令与字段,连接验证、发送接收消息、心跳包等。
二、使用protobuf序列化方式。
三、使用md5哈希算法。
四、使用go语言编写https服务器。
五、使用go语言编写tcp服务器。
六、部署与启动etcd服务发现与nats消息队列。
七、部署postgresql数据库、redis缓存。
八、编写安卓客户端app。
九、编写网关客户端,放到orangepilite上运行。
十、使用app登录,发送消息,在网关即可收到。
具体的实现技术与方法,如图4所示。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。