当前位置: 首页 > article >正文

【网络协议】基于UDP的可靠协议:KCP

TCP是为流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用带宽。而 KCP是为流速设计的(单个数据包从一端发送到一端需要多少时间),以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的传输速度。TCP信道是一条流速很慢,但每秒流量很大的大运河,而KCP是水流湍急的小激流。KCP有正常模式和快速模式两种,通过以下策略达到提高流速的结果:

RTO翻倍vs不翻倍:

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

选择性重传 vs 全部重传:

TCP丢包时会全部重传从丢的那个包开始以后的数据,KCP是选择性重传,只重传真正丢失的数据包。

SACK机制,每次ACK时还返回一组标记,告知发送方哪些Segment已经发送了

快速重传:

发送端发送了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是否延迟发送可以调节。

延迟ACK:TCP为了充分利用带宽,在一些情况下,接收方可能会收到多个数据段。在延迟发送ACK的情况下,接收方可以在一定的小时间窗口内等待或聚合多个数据段的接收,从而一次性发送一个ACK确认多个数据段。这可以减少网络中ACK报文的数量,从而降低网络拥塞。

UNA vs ACK+UNA:

ARQ模型响应有两种,UNA(此编号前所有包已收到,如TCP)和ACK(该编号包已收到),光用UNA将导致全部重传,光用ACK则丢失成本太高,以往协议都是二选其一,而 KCP协议中,除去单独的 ACK包外,所有包都有UNA信息。

非退让流控:

KCP正常模式同TCP一样使用公平退让法则,即发送窗口大小由:发送缓存大小、接收端剩余接收缓存大小、丢包退让及慢启动这四要素决定。但传送及时性要求很高的小数据时,可选择通过配置跳过后两步,仅用前两项来控制发送频率。以牺牲部分公平性及带宽利用率之代价,换取了开着BT都能流畅传输的效果。

抛弃拥塞控制,追求极致速度

TCP的拥塞控制机制(如慢启动、拥塞避免、快速重传等)是为了保证网络公平性和稳定性,但这也让TCP在丢包时表现得过于“怂”。KCP直接抛弃了这些机制,采用更激进的策略,允许用户自定义流控和拥塞控制,甚至可以不控制。这种“莽夫”式的方式让KCP在丢包时依然能快速重传,保持高吞吐量。

更小的协议头开销:

KCP的协议头比TCP更精简,减少了额外的开销。虽然这点对性能提升有限,但在高频率、小数据包场景下,积少成多也能带来一定的优势。

无连接状态,轻量级:

KCP是无连接的,不需要像TCP那样维护复杂的连接状态(如三次握手、四次挥手、滑动窗口等)。这种轻量级的设计让它更适合高频、短连接场景。


http://www.kler.cn/a/590497.html

相关文章:

  • Git 使用指南
  • 【多线程】单例模式
  • Unity学习之Shader总结(一)
  • Docker入门篇2:查看容器、运行容器、启动和停止容器、删除容器
  • Android PC 要来了?Android 16 Beta3 出现 Enable desktop experience features 选项
  • 【STM32】NVIC(嵌套向量中断控制器)
  • Android之RecyclerView列表拖动排序
  • Vue3项目白屏问题深度解析:从AI辅助诊断到性能优化实战
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(49)万鸦壶焚网络 - 网络延迟时间(Bellman-Ford)
  • Spring boot+mybatis的批量删除
  • 【AI】深度学习与人工智能应用案例详解
  • LIMS系统在纸制品制造的应用 内检实验室LIMS系统提升纸制品质控
  • Postman发送GET请求示例及注意事项
  • Vue.js 事件处理与修饰符详解
  • 2. qt写带有槽的登录界面(c++)
  • 玩转python:通俗易懂掌握高级数据结构-collections模块之UserDict
  • 人工智能之数学基础:从线性变换理解矩阵范数和矩阵行列式
  • 第一中标人!晶科能源入围大唐集团19.5GW光伏组件集采
  • 遥感新态势:Sentinel - 2多光谱指数与AI深度融合
  • 卡内基梅隆大学研究人员推出 PAPRIKA:一种微调方法,使语言模型能够发展出不局限于特定环境的通用决策能力