本发明属于工业互联网领域,涉及一种opc ua通信的方法,特别是在网络状况不良的情况下,该方法既可以减少通信效率的下降,也可以保证数据之间的准确传输。
背景技术:
1、作为工业4.0标准的opc ua协议解决了opc标准的平台限制问题,该通信协议位于应用层之上,其传输层之间使用tcp协议进行连接。但是传统的tcp协议存在一些问题,例如,
2、(1)tcp的实现是往往镶嵌在系统内核中,倘若需要实现新功能,则需要修改系统内核,升级非常困难,也容易造成出现其他未知错误。
3、(2)tcp采用的延迟ack响应策略可能会导致发送端等待时间超过超时重传时间。在这种情况下,接收端未收到ack,发送端必须重新发送数据包,从而增加网络流量和降低网络效率。
4、(3)tcp的拥塞控制避免了网络拥塞并保证网络的可靠性和性能,但同时也可能会引起网络传输的延迟,由于需要等待确认消息后再发送数据,从而增加了传输时间。
5、此外,tcp的拥塞控制对高速网络的适应性差,它在数据传输的开始阶段就限制了发送速率,因此会影响了整个网络的吞吐量。若在传输层使用无连接的、不可靠的udp连接则难以保证数据之间的确定性传输,这在对准确性要求极高的工业界是致命的缺点。
技术实现思路
1、本发明的目的是针对现有技术的不足,提出一种基于改进kcp的opc ua高效通信的实现方法。本发明通过替代opc ua协议中的tcp协议,以应对传统tcp或udp存在的缺陷。opc ua服务器在传输层之间的通讯采用udp通信协议的方案,并在udp的基础上增加一个kcp协议,kcp以浪费部分带宽为代价,换取比tcp快30%-40%的传输速度,并将传输延迟大幅降低。采用该实现方法可以提高数据的传输效率,减少通信延迟,从而保证整个系统的正常运行和高效工作。这种协议对于工业生产和业务运营来说具有一定价值。
2、本发明提出了一套全新的基于改进kcp的opc ua高效通信的实现方法,并根据opcua实际情况对部分kcp协议进行了重新设计,其技术问题方案包括如下步骤:
3、步骤(1)根据配置信息初始化opc ua服务器,并尝试建立opc ua客户端和kcp之间的连接。
4、opc ua客户端将ip地址、端口号通过fnv哈希算法映射为三十二位无符号整数来充当会话id。
5、kcp发送创建连接请求的消息至opc ua服务器监听端口。
6、opc ua服务器的监听端口收到连接请求后,为该opc ua客户端创建新的通信端口,并使用该通信端口返回确认消息。
7、步骤(2)opc ua客户端在接收来自opc ua客户端通信端口的确认消息后,即表明连接创建成功。opc ua客户端发送一个hello报文,该报文包含最大消息大小、数据块大小和数量的信息。
8、opc ua服务器一旦接收hello报文,就返回一个acknowledge消息给opc ua客户端。
9、该acknowledge消息包含服务器能够处理的最大消息大小、数据块大小和数量的信息,以及服务器支持的协议版本号。
10、opc ua客户端和服务器之间若能通过hello报文和acknowledge消息达成一致,则视为连接成功,否则为连接失败。
11、如果opc ua服务器或opc ua客户端多次接收到对应的数据报文,将报错并关闭kcp连接。若opc ua服务器没有收到hello报文,则opc ua服务器会在一个自定义的时间间隔后自动断开kcp连接。
12、步骤(3)opc ua客户端获得来自opc ua服务器发送的acknowledge消息后,会将opc ua客户端的安全策略、安全模式、数字证书和随机数的信息作为open secure channel消息发送。opc ua服务器验证客户端的数字证书和安全策略是否符合要求,若通过验证,则返回一个open secure channel response消息。opc ua客户端和opc ua服务器通过随机数生成一个对称密钥进行加密通信。
13、步骤(4)在打开安全通道之后,opc ua客户端将向opc ua服务器发送一个createsession request消息,该消息包含客户端的应用程序名称、uri、会话名称、会话超时时间、最大请求消息大小以及一个仅能使用一次的随机数nonce的信息。opc ua服务器接收到create session request消息后,对该随机数nonce进行签名,用于向客户端证明自己是所需的目标服务器。同时验证create session request消息是否符合规范,若通过验证,则返回附带了签名信息的create session response消息。
14、步骤(5)opc ua客户端收到服务器的返回的create session response消息响应后,使用认证令牌生成一个签名,并向服务器发送一个activate session request消息,该消息包含客户端的签名和用户身份标识的信息。opc ua服务器验证客户端的签名和用户身份标识是否有效,若通过验证,则向客户端发送一个activate session response消息,并为客户端分配一组可用的订阅id和节点id资源。之后opc ua客户端和服务器之间能够通过该会话消息进行数据读写、订阅发布的操作。
15、步骤(6)同时对传统的kcp传输通信从四个方面进行改进,分别是重新改进kcp协议数据段头部的设计、采用随机初始化的序列号保证通信安全性、记录时间戳防止序列号回绕、使用捎带确认报文减少数据的传输量。
16、进一步的步骤(6)的详细实现如下:
17、重新改进kcp协议数据段头部设计会在图3中详细进行说明。
18、改进后的kcp规定了每个连接都要随机产生一个初始序列号,为了保证序列号的随机性和不可预测性,改进后的kcp序列号采用动态变化的方案,包括时间、端口号、ip地址作为初始化的输入,如下公式1所示,
19、
20、其中,当前时间戳值time除以4表示序列号每隔四微秒增加1。h由客户端的ip地址和端口号通过fnv哈希算法计算得到。
21、kcp的序列号由四字节的无符号整数表示,意味着当超过232-1时会发生序列号回绕的问题,因此在改进kcp通信时,接收方将保存当前接收窗口起始数据包的时间戳,记作rts。接收方将比较刚接收到的数据包中的时间戳值time与rts值的大小。若time比rts小,说明该数据包已过期,接收方将舍弃该数据包。
22、改进的kcp增加了一种新的报文类型,即数据与确认报文。在kcp发送确认应答报文时,如果当前存在需要发送给对方的数据报文,则将确认应答报文中的确认信息附在数据报文中数据的起始部分,从而减少传输数据量。为避免数据与确认报文与普通数据报文发生混淆,在报文包头的cmd分片中设计一个序列,用于表示该报文是数据与确认报文,数据与确认类型报文中的数据部分应该从正常数据部分的24字节后开始。
23、本发明的有益效果如下:
24、opc ua三层通信架构中的底层,即七层网络架构中的传输层若使用tcp通信,虽然能够保证传输数据的准确性,但在网络状况不良的情况下会导致通信效率大幅下降。本发明提出了一种基于改进kcp的opc ua通信协议,在传输层中使用了kcp和udp结合的方案。相较于原本的opc ua协议,该协议在复杂网络环境下表现出更优异的性能,可以有效地提高opc ua通信的性能和稳定性,从而更好地满足实际应用的需求。