KCP协议(一)

server/2024/9/23 7:30:29/

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

KCP_1">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都能流畅传输的效果。


http://www.ppmy.cn/server/98981.html

相关文章

python面向对象编程-设计模式(部分)

python面向对象编程-设计模式(部分) 面向对象编程(OOP)中的设计模式是一些经过验证的、常见的解决特定问题的方案 目录 文章目录 python面向对象编程-设计模式(部分)目录简述一、单例模式 (Singleton)单例…

大数据面试刷题

de 的题目解析和讨论区也非常活跃,可以帮助求职者更好地理解题目和解题思路。牛客网(牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网): 牛客网是国内内容超级丰富的 IT 题库&#xff0c…

Github 2024-08-10 Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-08-10统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Python项目1Turbo:下一代前端开发工具链 创建周期:977 天开发语言:Rust协议类型:MIT LicenseStar数量:25308 个Fork数量:1713 …

软件架构的优雅之舞:深入探索Python中介者模式

在软件设计中,中介者模式是一种行为设计模式,它通过引入一个中介者对象来封装一系列对象之间的交互,从而降低对象之间的耦合度。这种模式使得对象之间的交互更加灵活,易于维护和扩展。以下是对中介者模式的详细解释和Python实现示…

Java Web —— 第四天(HTTP协议,Tomcat)

HTTP-概述 概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则 特点: 1. 基于TCP协议:面向连接,安全 2.基于请求-响应模型的:一次请求对应一次响应 3. HTTP协议是无状态的协议: 对于事务处理没有…

SSTI模版注入(初步)

SSTI模版注入(初步) ssti可能造成任意文件读取和RCE远程控制后台系统 漏洞成因:渲染模版时,没有严格控制对用户的输入; 使用了危险的模版,导致用户可以混合flask程序进行交互。 flask是基于python开发的…

计算机毕业设计选题推荐-网上考试系统-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

前端已经学会vue,做粒子效果

目录 1. Canvas API 2. WebGL 3. 粒子系统 4. 动画与性能优化 5. 现有库和框架 6. Vue 组件和状态管理 实践项目建议 案例1 案例2雪花 已经熟悉了 Vue、TypeScript 和 JavaScript,下面是一些你可以学习的内容,以帮助你实现粒子效果的界面&#…