KCP协议(一)

kcp官网:skywind3000/kcp: ⚡️ KCP - A Fast and Reliable ARQ Protocol (github.com)

1 什么是KCP协议

KCP是一个快速可靠协议,能以比 TCP 浪费 10%-20% 的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。

这里可以理解为KCP是一个水流更快,但流量略有降低的小溪。

KCP协议是一种基于UDP的可靠传输协议,因此无需建立连接,可以即时发送,而不需要等待确认,同时,它可以根据网络状况自行调整发送速率,更适用于实时通信、在线游戏、流媒体传输等场景。

2 技术特性

2.1 RTO翻倍vs不翻倍

RTO(Retransmission TimeOut) 超时重传

TCP超时计算是RTOx2,这样连续丢三次包就变成RTOx8了,而KCP启动快速模式后不x2,只是x1.5(实验证明1.5这个值相对比较好)。

TCP超时重传的间隔会相差越来越大,而KCP的间隔更合理一点。

由于TCP协议是在内核协议栈中确定的,因此超时翻倍的策略不可更改,而KCP协议是在用户层实现的,可以自行定制重传策略。

2.2 选择性重传 vs 全部重传

TCP默认使用的是累积确认的方式,丢包时会全部重传从丢的那个包开始以后的数据。TCP中也有一个选择确认(SACK)选项,可以只重传丢失的数据。

KCP是选择性重传,只重传真正丢失的数据包,使用快速重传机制。

2.3 延迟ACK vs 非延迟ACK

TCP会采用ACK延迟确认机制,可以对多个TCP包的ACK进行合并。

延迟确认超时计算会算出较大 RTT时间,延长了丢包时的判断过程。

KCP的ACK是否延迟发送可以调节。

2.4 UNA vs ACK+UNA

UNA:Unacknowledged

UNA(此编号前所有包已收到,如TCP)和ACK(该编号包已收到)

仅用 UNA: 如果只使用 UNA,那么当网络状况不佳时,所有数据包都可能被重传,导致效率低下
仅用 ACK: 如果只使用 ACK,则每次都需要等待确认,而确认过程可能会比较耗时,导致传输延迟

以往协议都是二选其一,而 KCP协议中,除去单独的 ACK包外,所有包都有UNA信息

2.5 非退让流控

KCP正常模式同TCP一样使用公平退让法则,即发送窗口大小由:发送缓存大小、接收端剩余接收缓存大小、丢包退让及慢启动这四要素决定。

但传送及时性要求很高的小数据时,可选择通过配置跳过后两步,仅用前两项来控制发送频率。以牺牲部分公平性及带宽利用率之代价,换取了开着BT都能流畅传输的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值