前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Networks 08 - KCP

Networks 08 - KCP

作者头像
Reck Zhang
发布2021-08-11 11:59:11
5160
发布2021-08-11 11:59:11
举报
文章被收录于专栏:Reck Zhang

KCP

定义

KCP是一个快速可靠协议, 能以比TCP浪费10%-20%的带宽的代价, 换取平均延迟降低30%-40%, 且最大延迟降低三倍的效果. 纯算法实现, 不负责底层协议的手法, 需要使用者自己定义下层数据包的发送方式, 用callback的方式提供给KCP.

技术特性

TCP是面相流量设计的, 即每秒可以传输多少数据, 是为了充分利用带宽. KCP是面相流速设计的, 即从一端到另一端的时间. 可以通过以下策略达到提高流速的效果:

  1. RTO不翻倍 TCP超时计算是RTO*2, 如果连续丢包就会增长过快. KCP启动快速模式后只增长1.5.
  2. 选择性重传 TCP丢包后会重传从丢的包开始往后的所有数据, KCP是选择性重传, 只传丢失的包.
  3. 快速重传 发送端发送1, 2, 3, 4, 5, 然后收到ACK: 1, 3, 4, 5, 那么当收到ACK4的时候就知道2被跳过了两次, 不必等待超时, 直接重传2.
  4. 延迟ACK TCP为了充分利用带宽, 延迟发送ACK, 这样会计算出较大的RTT, 延长了丢包的判断过程. KCP可以选择是否采用延迟ACK.
  5. UNA ARQ模型有两种, UNA(此编号前所有包都收到, 如TCP)和ACK(此编号包收到), 光用UNA会导致全部重传, 光用ACK会导致成本过高. KCP中, 除去单独的ACK包, 所有包都采用UNA.
  6. 非退让流量控制 KCP正常模式和TCP一样用公平退让法则, 即发送窗口的大小由: 发送缓存大小, 接收端剩余接收缓存大小, 丢包退让以及慢启动的要素决定. 但传送及时性要求很高的小数据时, 可以只通过前两项来控制发送窗口大小. 牺牲了公平性和带宽利用率, 来换取及时性.
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • KCP
    • 定义
      • 技术特性
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档