年轻人还记得KCP吗?什么是KCP,怎么使用呢!!!

一、什么是KCP

KCP是一种网络传输协议(A Fast and Reliable ARQ Protocol),可以视它为TCP的代替品,但是它运行于用户空间,它不管底层的发送与接收,只是个纯算法实现可靠传输,它的特点是牺牲带宽来降低延迟。因为TCP协议的大公无私,经常牺牲自己速度来减少网络拥塞,它是从大局上考虑的。而KCP是自私的,它只顾自己的传输效率,从不管整个网络的拥塞情况。举个例子,TCP检测到丢包的时候,首先想到的是网络拥塞了,要放慢自己的速度别让网络更糟,而KCP想到的赶紧重传别耽误事。

TCP的特点是可靠传输(累积确认、超时重传、选择确认)、流量控制(滑动窗口)、拥塞控制(慢开始、拥塞避免、快重传、快恢复)、面向连接。KCP对这些参数基本都可配,也没用建立/关闭连接的过程。

其实KCP并不神秘,因为TCP的高度自治(很多东西都不可配),满足不了如今各种速度需求。而KCP就是基于UDP协议,再将一些TCP经典的机制移植过来,变成参数可配。

二、技术特性

  • RTO翻倍vs不翻倍:TCP超时计算是RTOx2,这样连续丢三次包就变成RTOx8了,十分恐怖,而KCP启动快速模式后不x2,只是x1.5(实验证明1.5这个值相对比较好),提高了传输速度。
  • 选择性重传 vs 全部重传:TCP丢包时会全部重传从丢的那个包开始以后的数据,KCP是选择性重传,只重传真正丢失的数据包。
  • 快速重传:发送端发送了1,2,3,4,5几个包,然后收到远端的ACK: 1, 3, 4, 5,当收到ACK3时,KCP知道2被跳过1次,收到ACK4时,知道2被跳过了2次,此时可以认为2号丢失,不用等超时,直接重传2号包,大大改善了丢包时的传输速度。
  • 延迟ACK vs 非延迟ACK :TCP为了充分利用带宽,延迟发送ACK(NODELAY都没用),这样超时计算会算出较大RTT时间,延长了丢包时的判断过程。KCP的ACK是否延迟发送可以调节。
  • UNA vs ACK+UNA :ARQ模型响应有两种,UNA(此编号前所有包已收到,如TCP)和ACK(该编号包已收到),KCP有单独ACK,且数据包和ACK包都带UNA信息,有效降低ACK丢失成本。
  • 非退让流控:KCP正常模式同TCP一样使用公平退让法则,即发送窗口大小由:发送缓存大小、接收端剩余接收缓存大小、丢包退让及慢启动这四要素决定。但传送及时性要求很高的小数据时,可选择通过配置跳过后两步,仅用前两项来控制发送频率。以牺牲部分公平性及带宽利用率之代价,换取了开着BT都能流畅传输的效果。

还等什么小编推荐自己的linuxC/C++语言交流群:【1106675687】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!前100名进群领取,额外赠送一份价值199的C/C++、linux资料包含(视频教程、电子书、实战项目及代码)

三、怎么使用

KCP只有两个文件,分别是ikcp.c和ikcp.h,代码行数1300左右。使用KCP和使用TCP有些不同,所以上手之前需要先了解下KCP如何使用,需要时间成本。

第一步,就是创建一个kcp实例,相当于一个句柄。

ikcpcb* ikcp_create(IUINT32 conv, void *user)

<< · Back Index ·>>

发表回复

相关推荐

会计必看| 7套财务管理模板,开箱即用!含合同、代理记账、报销、预算申请、财务分析报表、台账管理…

财务管理对于不了解的人来说就是管钱,但财务管理其实关乎著企业的兴衰。

· 12分钟前

射电望远镜的原理

一、射电望远镜概述 射电望远镜是指观测和研究来自天体的射电波的基本设备,可以测量天体射电的强度、 频谱及偏振等量 。包 ...

· 13分钟前

手机换屏,不知道这些知识你就亏大了!

现在的手机屏幕越做越大,当然屏幕坏了维修成本也就越来越高。而屏幕损坏常见的两种情况,一种是外屏碎裂,液晶屏和触摸功能 ...

· 13分钟前

丧尸横行的大学——该怎么拯救你

各位如果看过《生化危机》那么对生化危机里面的丧尸一定并不陌生,那些张牙舞爪、见人就咬的丧尸简直是我们同年的噩梦,但是 ...

· 16分钟前

包装印前软件中的重要功能:拼版(盒形拼版、CAD拼版、交互式拼版、无缝拼版)与智能标记(拼版软件)

包装盒在经过陷印、油墨处理等初期工作后,需要经过拼版处理来将各个盒型拼在合适的大版上,以便于后续印刷工作的顺利进行。 ...

· 17分钟前