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都能流畅传输的效果。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |