浅谈UDP快速可靠协议的设计与实现对数据传输速度的优化及前景

(整期优先)网络出版时间:2021-12-14
/ 2

浅谈 UDP快速可靠协议的设计与实现对数据传输速度的优化及前景

林铭奎

黑龙江八一农垦大学 , 黑龙江大庆 163316

摘要:随着时代的快速发展,无线通信技术也在不断的更新迭代,越来越数字化,智能化的生活对无线通信的数据传输速度要求越来越高。从以前1G、2G网络到现在的4G、5G网络的实现,都是对数据传输速度的体现,但是现在无线通信用的协议都是传统的两种协议,一种TCP,另一种是UDP,他们都是最底层的协议。当需要实时快速传输数据中就需要使用UDP快速可靠协议---KCP,简单点说这种协议就是在用户层使用一种算法来实现数据的可靠性,底层还是使用UDP对数据的收发。所以它叫做基于UDP的快速可靠协议。

关键字:网络协议;传输速度;算法;应用

1、引言

TCP与UDP有各自的特点,TCP应用范围广,它主要是面向连接,基于字节流流的一种协议,而且容易被攻击,比如著名的洪水攻击,占用计算机资源多等特点,而UDP与TCP的最大区别就是UDP是无面向连接的,基于数据报的一种协议,所以在数据传输速度上TCP比UDP慢,但是UDP不可靠。它们是无线通信技术中网络发展的基础,比如现在生活中常见的QQ视频电话、语音等底层都是使用的UDP协议,像QQ文件、浏览器等都是使用的TCP协议。他们已经是生活中必不可少的一部分,但有时候又需要即快速又可靠的数据传输时它们就不可用了,必然会选择牺牲部分功能以达到速度的极致优化,比如网络游戏的发展,网络游戏服务器等都需要数据的快速传输,然而TCP与UDP任何一个单独的协议都是满足不了大量用户访问的,所以就需要一个兼顾它们两者之间特点的协议,以达到数据传输速度相对于它们两个的优化。

  1. KCP协议简介

KCP是一个基于UDP的快速可靠协议,它结合了TCP与UDP两者之间的特点,以比TCP浪费10%-20%的带宽的代价,换取平均延迟降低30%-40%,且最大延迟降低三倍的传输效果。我们是无法更改世界通用的两种协议的,只是在这个基础上加以数据的控制,也就是说,这个KCP协议是一种用户层的协议,纯算法实现,它并不负责底层协议(UDP协议)对数据的收发,需要使用者自己定义下层数据报的发送方式,然后通过callback(回调)的方式提供用户层的KCP协议。因为是纯算法实现的,所以许多东西都需要自己的定义和外部传递进去,它的内部不会有任何一次的系统调用,比如时钟,所以它的速度就有UDP的快速和TCP的可靠,因为系统调用是非常消耗系统资源的。

  1. 技术特性

TCP的存在是为了流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用网络的带宽,而KCP是为流速设计的(单个数据包从一端发送到一端需要多少时间),以10%-20%的带宽浪费的代价换取了比TCP快30%-40%的传输速度。假设把TCP比喻成一条河流,TCP信道就是一条流速很慢,但每秒流量很大的大运河,而KCP就是水流湍急的小激流。KCP有两种模式,正常模式和快速模式。整个KCP通过以下策略达到提高流速的效果:

3.1、RTO翻倍vs不翻倍

TCP超时计算是RTOx2,这样如果连续丢包三次整个超时就变成了RTOx8,对于网络来说是一个非常恐怖的时间了,而KCP启动快速模式后RTO不是两倍,而是变成了原来的1.5倍(这是经过多次实验证明的,在1.5倍这个值的传输速度相对较好),提高了数据的传输速度。

3.2、选择性重传vs全部重传

当TCP发生丢包时,TCP丢包是一定可能发生的情况,所以为了数据的完整和可靠性,一定有机制解决数据丢包的情况,那就是数据重传,对于TCP来说,发生丢包时,会全部重传从丢的那个包开始以后的数据包,而对于KCP来说,只是重传真正丢失的数据包。对TCP来讲,它重传的一个缺点就是从丢包的那个数据包开始往后的数据都要重传,而在网络中当发生某个数据包丢失后,但是该数据包后面的数据包不一定全部丢失,这就会导致许多数据包的重复发送,也就导致了传输速度的降低。这也是KCP传输速度快的一个点。

3.3、快速重传

快速重传也是数据包发生丢包的时候一种数据包重发方法,他与选择重传并列,只是当发生数据丢包时可能发生不同的情况,根据这些不同的情况去触发不同方式进行数据包的重发,而快速重传的判定方式是,假设发送端发送了1、2、3、4、5、几个包,然后收到远端的ACK;1、3、4、5,当收到的ACK3时,KCP就知道被跳过了1,收到ACK4时,就知道2被跳过了2次,当收到ACK5时,就知道2被跳过了3次,此时就可以认为2号数据包丢失,不用等到超时进行重传,直接启动快速重传,重传2号包,这样就大大改善了丢包时的传输速度。这里的假设设定的判定丢包次数是三次进行快速重传,这里可以根据用户不同的想法自己定义判定丢包多少次进行快速重传。

3.4、延迟ACK vs 非延迟ACK

TCP协议为了能够充分的利用带宽,延迟发送ACK,就算是对它进行NODELAY设定也不能解决延迟发送,这样的超时计算对导致较大的RTT时间,延长了丢包时的判断过程,但是在KCP中,ACK是是否延迟可以通过NODELAY来进行调节的,可以根据用户自定义进行调节。

3.5、UNA vs ACK+UNA

在ARQ(自动重传请求)模型响应有两种,一种UNA(在此编号之前的所有数据报都已收到,比如TCP),另一种ACK(确认应答数据包),如果只用UNA将在当发生数据丢包时,全部重传该包以后的全部数据包,但是如果只用ACK的话,丢失数据包的时间成本又太高,以往的协议都是二选其一,而在KCP协议中,除去单独的ACK包外,所有包都携带有UNA信息,也就是通过UNA信息告诉接收端接收的是哪一个数据包。

3.6、非退让流控

KCP正常模式下同TCP一样使用公平退让法则,即发送窗口大小由:发送缓存大小、接收端剩余可接收缓存大小、丢包退让及慢启动这四要素决定。的当传送及时性要求很高的小数据时。可选择通过配置跳过后两步,仅使用前两项来控制数据报的发送频率。以牺牲部分公平性及带宽的代价,来换取开着BT都能流畅传输的效果。

4、KCP应用及前景

理想状态下,如果网络永远不卡,那么KCP/TCP的表象就差不多,但是网络本身就是不可靠的,丢包和抖动是无法避免的。如果在内网几乎理想的环境里直接比较,大家都差不多,但是放在公网上,放到3G/4G网络情况下,或者使用内网模拟丢包,差距就会非常的明显。在公网高峰期的时候有平均接近10%的丢包,在WiFi/3G/4G下更糟糕,这些都会让传输变慢。所以,在使用公网上使用KCP协议是一个不错的选择。而且,在现在信息化,网络的高速发展的时代背景下,不论那个行业,拥有高速且可靠的数据传输都是提前掌握信息的关键技术,所以,KCP的前景是非常不错的,就当下而言,它应用的地方都有许多,而且也有许多的商业案例,比如大型在线网络游戏,《明日帝国》使用KCP加速游戏消息,可以让全球玩家更加流畅的联网,《仙灵大作战》4399下的MOBA游戏,使用KCP优化游戏同步,《CC》网易CC使用KCP加速视频推流,有效的提高流畅性,在网络比较差的时候视频也比较流畅,《云帆加速》使用KCP加速文件传输和视频推流,优化了主播推流的流畅度。还有最近几年特别火的手游《王者荣耀》也有使用KCP协议。由这些游戏商业案例就可以看出KCP相对与TCP的优势了。