介绍一种基于UDP快速可靠的KCP协议

labs 导读
kcp是一种基于udp的快速可靠协议,能以比tcp浪费10%-20%的带宽的代价,换取平均延迟降低30%-40%,且最大延迟可以降低70%的传输效果,是一种纯算法的二进制协议。
part 01 ●  什么是kcp协议 ● 
kcp是一个开源的快速可靠arq协议,能以比tcp浪费10%-20%的带宽的代价,换取平均延迟降低30%-40%,且最大延迟降低三倍的传输效果。kcp是一层纯算法实现,并不负责底层协议(如udp)的收发,用户自己定义下层数据包的发送方式,以callback的方式提供给kcp。内部不会有任何一次系统调用,包括时钟也需要外部传递进来。
kcp整个协议只有ikcp.h、ikcp.c两个源文件,可以方便用户根据自己的需要集成到用户自己的协议栈中。
所以可以把kcp协议看做应用层协议,底层采用udp协议。但是在严格意义上讲kcp并不是一种网络传输协议,它是为udp写的可靠传输算法,它是把tcp的主要可靠传输机制移植到了udp身上,让udp变的可靠了起来。
part 02 ●  kcp的协议特性 ● 
tcp是为流量(每秒内可以传输多少kb的数据)设计的,讲究的是充分利用带宽。而kcp是为流速(单个数据包从一端发送到一端需要多少时间)设计的,以10%-20%带宽浪费的代价换取了比tcp快30%-40%的传输速度。如果将tcp信道比喻为一条流速很慢,但每秒流量很大的大运河,那么kcp就是水流湍急的小激流。kcp有正常模式和快速模式两种,通过以下策略达到提高流速的结果。
1、rto不翻倍
rto(retransmission timeout)重传超时时间,tcp超时计算是rtox2,这样连续丢三次包就变成rto×8了,而kcp启动快速模式后不x2,只是x1.5,提高了传输速度。
2、选择重传
tcp丢包时会全部重传从丢包开始以后的数据,而kcp是选择性重传,只重传真正丢失的数据包。
3、快速重传
tcp重传模式超时重传:超过规定的时间rto则重传。
快速重传:收到3个冗余ack,不去等待rto,直接重传。比如发送端发送了1、2、3、4、5...几个包后,然后收到远端的ack:1、3、4,当收到ack3时,kcp知道2被跳过1次,收到ack4时,知道2被跳过2次,收到ack5时,此时可以认为2已丢失,不用等待rto,直接进行重传2,大大改善了丢包时的传输速度。
4、延迟ack vs 非延迟ack
tcp在连续arq协议中,不会将一连串的每个数据都响应一次,而是延迟发送ack,目的是为充分利用带宽,这样延迟发送ack导致rtt时间较大,延长了丢包时的判断过程;而kcp的ack是否延迟发送可以调节。
5、una vs ack+una
arq模型响应有两种,una(此编号前所有包已收到,如tcp)和ack(该编号包已收到),光用una将导致全部重传,光用ack则丢失成本太高,以往协议都是二选其一,tcp使用una模式,有丢包全部重传问题;kcp有单独ack,且数据包和ack包都带una信息,有效降低ack丢失成本。
6、非退让流控
kcp正常模式同tcp一样使用公平退让法则,即发送窗口大小由发送缓存大小、接收端剩余接收缓存大小、丢包退让及慢启动这四要素决定。但传送及时性要求很高的小数据时,可选择通过配置跳过后两步,仅用前两项来控制发送频率。以牺牲部分公平性及带宽利用率为代价,换取流畅传输的效果。
part 03 ●  kcp应用案例 ● 
kcp协议的商业案例:
明日帝国:game k17的《明日帝国》(google play),使用kcp加速游戏消息,让全球玩家流畅联网。
仙灵大作战:4399的moba游戏,使用kcp优化游戏同步。
cc:网易cc使用kcp加速视频推流,有效提高流畅性。
bobo:网易bobo使用kcp加速主播推流。
云帆加速:使用kcp加速文件传输和视频推流,优化了台湾主播推流的流畅度。
spatialos:大型多人分布式游戏服务端引擎,bigworld的后继者,使用kcp加速数据传输。
kcp的优势在丢包率高的网络环境下才会显示出来。如果无丢包,tcp和kcp的效率差别打不,可能只是少了建立/关闭连接。一般来讲,在公网上传输的应用均可使用,特别是对实时性要求较高的程序,如客户端与服务端交互很频繁的游戏。


真空管OTL功放
没有仿真器的条件下如何开发AVR
网络数据安全行业将迎来千亿市场规模
配网调度模拟操作系统
特斯拉可以自动上下高速啦
介绍一种基于UDP快速可靠的KCP协议
时序图,活动图,状态图和协作图区别对比
多路复用器的知识点汇总
PLC控制系统控制伺服电机的原理
使用Raspberry Pi进行低成本高清音频开发的新型应用
蜂窝物联网:英飞凌推出全面的一站式eSIM解决方案
卫星的 Wi-Fi 密码是“火星人(martians)”?
大学里好不容易听懂的统计学,会变成一件没“意义”的事情吗?
PCIe®结构和RAID如何在GPUDirect存储中释放全部潜能
典型压控振荡器电路中的驱动变容二极管应用
杭州公共图书馆服务全面升级,将引入RFID和二维码技术
奇瑞混改闹腾了几个月,掀开谜底的时刻终于来了
Kaggle的座头鲸识别挑战比赛在最近落下帷幕
电磁流量计的选用
贸易战背后,中国半导体的真实困境!