0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

介绍一种基于UDP快速可靠的KCP协议

jf_uPRfTJDa 来源:移动Labs 2023-04-01 14:45 次阅读

Labs 导读

KCP是一种基于UDP的快速可靠协议,能以比TCP浪费10%-20%的带宽的代价,换取平均延迟降低30%-40%,且最大延迟可以降低70%的传输效果,是一种纯算法的二进制协议。

Part 01什么是KCP协议

KCP是一个开源的快速可靠ARQ协议,能以比TCP浪费10%-20%的带宽的代价,换取平均延迟降低30%-40%,且最大延迟降低三倍的传输效果。KCP是一层纯算法实现,并不负责底层协议(如UDP)的收发,用户自己定义下层数据包的发送方式,以callback的方式提供给KCP。内部不会有任何一次系统调用,包括时钟也需要外部传递进来。

KCP整个协议只有ikcp.h、ikcp.c两个源文件,可以方便用户根据自己的需要集成到用户自己的协议栈中。

所以可以把KCP协议看做应用层协议,底层采用UDP协议。但是在严格意义上讲KCP并不是一种网络传输协议,它是为UDP写的可靠传输算法,它是把TCP的主要可靠传输机制移植到了UDP身上,让UDP变的可靠了起来。

Part 02KCP的协议特性

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

1、RTO不翻倍

RTO(Retransmission TimeOut)重传超时时间,TCP超时计算是RTOx2,这样连续丢三次包就变成RTO×8了,而KCP启动快速模式后不x2,只是x1.5,提高了传输速度。

2、选择重传

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

3、快速重传

TCP重传模式超时重传:超过规定的时间RTO则重传。

快速重传:收到3个冗余ACK,不去等待RTO,直接重传。比如发送端发送了1、2、3、4、5...几个包后,然后收到远端的ACK:1、3、4,当收到ACK3时,KCP知道2被跳过1次,收到ACK4时,知道2被跳过2次,收到Ack5时,此时可以认为2已丢失,不用等待RTO,直接进行重传2,大大改善了丢包时的传输速度。

4、延迟ACK vs 非延迟ACK

TCP在连续ARQ协议中,不会将一连串的每个数据都响应一次,而是延迟发送ACK,目的是为充分利用带宽,这样延迟发送ACK导致RTT时间较大,延长了丢包时的判断过程;而KCP的ACK是否延迟发送可以调节。

5、UNA vs ACK+UNA

ARQ模型响应有两种,UNA(此编号前所有包已收到,如TCP)和ACK(该编号包已收到),光用UNA将导致全部重传,光用ACK则丢失成本太高,以往协议都是二选其一,TCP使用UNA模式,有丢包全部重传问题;KCP有单独ACK,且数据包和ACK包都带UNA信息,有效降低ACK丢失成本。

6、非退让流控

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

Part 03KCP应用案例

KCP协议的商业案例:

明日帝国:Game K17的《明日帝国》(Google Play),使用KCP加速游戏消息,让全球玩家流畅联网。

仙灵大作战:4399的MOBA游戏,使用KCP优化游戏同步。

CC:网易CC使用kcp加速视频推流,有效提高流畅性。

BOBO:网易BOBO使用kcp加速主播推流。

云帆加速:使用KCP加速文件传输和视频推流,优化了台湾主播推流的流畅度。

SpatialOS:大型多人分布式游戏服务端引擎,BigWorld的后继者,使用KCP加速数据传输。

KCP的优势在丢包率高的网络环境下才会显示出来。如果无丢包,TCP和KCP的效率差别打不,可能只是少了建立/关闭连接。一般来讲,在公网上传输的应用均可使用,特别是对实时性要求较高的程序,如客户端与服务端交互很频繁的游戏。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1271

    浏览量

    78291
  • UDP协议
    +关注

    关注

    0

    文章

    67

    浏览量

    12576
  • RTO
    RTO
    +关注

    关注

    0

    文章

    15

    浏览量

    11112

原文标题:技术 | 浅谈KCP协议

文章出处:【微信号:5G通信,微信公众号:5G通信】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    通信必备知识!TCP与UDP协议介绍及使用

    TCP与UDP是两个最常用的通讯协议。TCP是面向连接的协议,需要在收发数据前与对方建立可靠的连接,建立连接的过程为3次握手,断开连接的过程为4次挥手,确保数据传输的
    的头像 发表于 03-15 08:19 1017次阅读
    通信必备知识!TCP与<b class='flag-5'>UDP</b><b class='flag-5'>协议</b><b class='flag-5'>介绍</b>及使用

    介绍一种快速简单创建TCP、UDP服务平台的方法

    有时候我们需要做项目的时候,需要硬件通过TCP、UDP协议和服务器交互。我介绍一种基于“nodejs”的方法,用几行代码就可以创建TCP服务和UDP
    发表于 05-24 00:32

    TCP协议UDP协议的区别有哪些

    无法实现;(3)TCP 协议有效载荷小于 UDP 协议(基于 MSS 计算),UDP 性能高于 TCP ;(4)TCP 般用于
    发表于 08-06 08:43

    基于UDP协议的网络通信应用程序

    )嵌入式Linux应用程序开发-(8)TCP-IP网络通信应用程序(TCP-Server) 相比起TCP/IP协议可靠,面向连接,基于字节流通信这些特性,UDP协议
    发表于 11-05 08:29

    TCP和UDP协议简析

    。二、TCP编程模型传输控制协议TCP (Transmission Control Protocol)是一种面向连接、可靠协议。建立个T
    发表于 12-15 08:13

    TCP与UDP协议区别

    TCP协议介绍TCP提供了一种面向连接的、可靠的字节流服务。面向连接比较好理解,就是连接双方在通信前需要预先建立条连接,这犹如实际生活中的
    发表于 03-23 10:12

    Linux下的UDP协议编程

    Linux下的UDP协议编程 介绍UDP协议,并提供一个适用于客户端和服务器端的实例子程序。  关键词:Linux;
    发表于 10-16 22:22 3872次阅读
    Linux下的<b class='flag-5'>UDP</b><b class='flag-5'>协议</b>编程

    UDP协议,UDP协议是什么意思

    UDP协议,UDP协议是什么意思 UDP 是User Datagram Protocol的简称, 中文名是用户数据包
    发表于 03-29 17:35 1405次阅读

    udp协议及包格式是什么

    也许有的读者会问,既然UDP一种可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP
    发表于 12-08 14:38 9493次阅读
    <b class='flag-5'>udp</b><b class='flag-5'>协议</b>及包格式是什么

    tcp ip 协议讲座:介绍IP协议UDP协议

    介绍了IP协议(包头和IP分包),UDP协议(包头)
    的头像 发表于 07-03 08:05 2861次阅读

    tcp和udp协议的异同

    UDP 协议 UDP 协议是无连接、不可靠的一个传输层协议。下图是
    的头像 发表于 11-12 14:45 3639次阅读
    tcp和<b class='flag-5'>udp</b><b class='flag-5'>协议</b>的异同

    UDP能否像TCP一样实现可靠传输?

    UDP(UserDatagramProtocol)是一种无连接的协议,基于数据报的传输方式。在网络通信中,它通常用于快速传输数据包,但却无法保证数据包的
    的头像 发表于 06-08 14:50 627次阅读
    <b class='flag-5'>UDP</b>能否像TCP一样实现<b class='flag-5'>可靠</b>传输?

    udp是什么协议 TCP与UDP的区别

    TCP协议提供可靠的数据传输,UDP协议提供尽量高效的数据传输。TCP协议通过使用序列号、确认应答等机制,保证数据传输的
    的头像 发表于 06-26 17:47 7081次阅读

    IP和UDP协议介绍

    电子发烧友网站提供《IP和UDP协议介绍.pdf》资料免费下载
    发表于 07-31 16:51 0次下载
    IP和<b class='flag-5'>UDP</b><b class='flag-5'>协议</b><b class='flag-5'>介绍</b>

    udp是什么协议udp协议介绍

    UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议,不保证数据传输的可靠性,只负责把数据包发送给
    的头像 发表于 04-19 15:57 110次阅读