本发明涉及一种针对仿真训练的高速数据采集传输改进型kcp协议,主要针对仿真训练的高速数据采集场景,属于计算机数据传输。
背景技术:
1、传统kcp是一个快速可靠的网络传输协议,通过牺牲带宽,以空间换时间,进而降低平均延迟,并利用udp作为下层传输协议,定义下层数据包的发送方式,再通过回调提供给kcp。传统kcp协议头部采用24字节包头格式,其中字段conv表示会话编号,标识一个会话。传统kcp协议对比tcp协议配置,具有以下优势:kcp协议通过选择性重传只重传真正丢失的数据包;kcp协议快速重传时,无需超时重传机制,通过记录丢失数据包被跳过的次数,跳过一定次数直接重传;kcp协议可以调节是否延迟发送ack;kcp协议的确认机制是将ack与una相结合,并优先考虑una;kcp协议采取非退让流控方式,可以仅通过发送端缓存大小和接收端剩余缓存大小来控制发送速率。
2、但上述传统kcp协议的通信应用于高速数据采集传输时,存在如下问题:(1)未及时发送数据,当数据量突然增大,由于存入缓存中的数据量过大,通过定时刷新发送,突发发送数据量大,容易造成拥塞。(2)在高速数据采集传输的情况下,重组数据包时频繁地申请和释放内存,服务器端易产生内存碎片。同时,为提高传输效率,数据采集一般按包格式传输,包的不同字段表示不同的含义,kcp协议不丢包按流传输时,需要重新解析包边界,会降低数据处理效率。
技术实现思路
1、本发明的目的在于:提供一种针对仿真训练的高速数据采集传输改进型kcp协议,可以进一步缩减包头,减少带宽的浪费,并且采用新算法,结合包头中部分冗余字段用于防止序列号劫持攻击。
2、为实现以上目的,本发明采用的技术方案为:
3、一种针对仿真训练的高速数据采集传输改进型kcp协议,所述改进型kcp协议包括包头及数据(data),所述包头包括以下字段:
4、 conv字段:在传统kcp 协议中,conv 主要用于标识不同的会话,确保数据包被正确路由到相应的 kcp 连接,conv 的设计初衷是为了实现协议的多会话支持,因此其主要用途与协议的连接管理相关,本发明中,conv字段为会话号字段,可以在多用户系统中用于标识不同的用户以及用户组;
5、 b.cmd字段:表示4种控制指令类型,包括数据推送命令,确认命令,接收窗口大小询问命令,窗口大小告知命令;
6、 c.wnd字段:表示接收方目前可以接收窗口的大小;
7、 d.ts字段:为时间戳字段,以往返时间作为字段值,往返时间的单位为毫秒;
8、 e.sn字段:数据包的序列号字段,用于记录数据包的顺序,用于重传和确认;
9、 f.una字段:una字段与字段sn对应,表示下一个要接收数据包的序号;
10、 g.len字段:len字段表示数据包长度;
11、 进一步的,所述conv字段长度为1字节,所述ts字段长度为2字节,所述sn字段长度为2字节,所述una字段长度为2字节。所述len字段长度为 2字节;
12、进一步的,发送数据流程包括以下步骤:
13、 a.内存管理算法申请缓存:在发送数据前,使用内存管理算法申请一个缓存空间,用于存储待发送的数据包;
14、 b.预留头部空间:在申请的缓存空间中,提前预留一部分空间用于填充数据包的头部信息;
15、 c.填充数据部分:在缓存空间中,填充待发送的数据部分;
16、 d.填充kcp头部:在填充数据后,将kcp协议的相关参数填充到数据包的头部中;
17、 e.直接发送数据包:根据kcp协议的要求和相关参数,将填充好的数据包直接发送出去,无需进行额外的处理;
18、接收数据流程包括以下步骤:
19、 a.异步接收数据包:使用异步通信机制实现数据包的异步接收,通过操作系统或网络库来实现;
20、 b.放入接收队列:在kcp协议处理层,将异步接收到的数据包按序放入接收队列中;
21、 c.读取接收队列:从接收队列中按序读取数据包,并交付给上层应用进行处理;
22、 d.回收缓存:完成数据包的接收后,将使用的缓存进行回收,以便重复使用;
23、进一步的,所述内存管理算法具体步骤为:
24、 a.内存管理初始化:
25、初始化一个大内存池,分配一块连续的内存作为高速缓存池;
26、维护两个队列:空闲队列(用于存放可用的缓存块)和回收队列(用于存放待回收的缓存块);
27、 每缓存块包含:数据区域(用于存放实际数据)、kcp头部(用于预留kcp协议的头部信息)和 回收编号(用于标记回收位置);
28、 b.高速缓存申请过程:
29、当上层应用需要发送数据时,从空闲队列中取出一个缓存块,将数据填入数据区域,填入kcp头部信息(预留kcp头部),并将该缓存块发送出去;
30、 c.高速缓存回收过程:
31、当接收到数据包时,从数据包中读取回收编号,将相应的缓存块放入回收队列中。
32、本发明中,不采用传统kcp将字段conv表示会话编号的原因为:
33、 1. 在网络协议中,源地址、源端口号,目的地址、目的端口号、协议(udp/tcp)可以唯一标识一个会话,因此对接收端来说,由于自己的ip地址、端口号、传输层协议是固定的,因此通过判断对方的地址和端口号可以断定是不是同一个会话;
34、 2. nat技术是解决局域网多个主机共享一个公网地址的技术,通过网关路由器分用端口的方式,也就是局域网主机中每一个程序访问外网通过网关路由器时,源地址转换成公网地址以及不同的端口号,因此,局域网内所有程序远端口可能相同,但在网关路由器上的端口号都是不一样的,对于接收端来说不同会话还是看到的是同一个地址不同的端口号,因此,本发明中,字段conv修改为1字节作为他用,例如多用户系统中用于标识不同的用户以及用户组,这一点视具体的应用场景可灵活应用。
35、本发明的积极有益技术效果在于:1.本发明提供的改进kcp协议,不同于传统kcp协议的24字节包头,采用了12字节的包头;
36、 2. 本发明通过内存管理预留头部、异步传输技术、结合本发明提供的改进kcp协议结合起来可以提高传输的效率。
37、由图1、图2可见,改进后的12字节协议头部在一定程度上减少带宽浪费,且提高了传输效率。在高速数据采集的环境下,通过缩短头部字段所占用的字节,可以有效降低协议头部封装数据进而传输的开销。
1.一种针对仿真训练的高速数据采集传输改进型kcp协议,其特征在于:所述改进型kcp协议包括包头及数据(data),所述包头包括以下字段:
2.根据权利要求1所述的一种针对仿真训练的高速数据采集传输改进型kcp协议,其特征在于:所述conv字段长度为1字节,所述ts字段长度为2字节,所述sn字段长度为2字节,所述una字段长度为2字节。所述len字段长度为 2字节。
3.根据权利要求1所述的一种针对仿真训练的高速数据采集传输改进型kcp协议,其特征在于:发送数据流程包括以下步骤:
4.根据权利要求3所述的一种针对仿真训练的高速数据采集传输改进型kcp协议,其特征在于:所述内存管理算法具体步骤为:
