KCP 传输协议

作者:韦易笑
链接:https://www.zhihu.com/question/36258781/answer/98944369
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

KCP 传输协议:GitHub - skywind3000/kcp: KCP

libenet的协议设计是非常落后的,基本上就是90年代教科书上那种标准ARQ协议实现,很难在复杂的网络条件下提供可靠的低延迟传输效果。而KCP具备更多现代传输协议的特点,诸如:
流量换延迟,快速重传,流控优化,una/ack优化等。

在内网这种几乎理想的环境里直接比较,大家都差不多,但是放到公网上,放到3G/4G网络情况下,或者使用内网丢包模拟,差距就很明显了。公网在高峰期有平均接近10%的丢包,wifi/3g/4g下更糟糕,这些都会让传输变卡。

asio-kcp 的作者对 KCP 与 enet, udt 做过的一次横向评测,结论是KCP比 libenet,udt更适合实时PVP游戏,特别是使用手机的3G,4G网络的情况下:

  • ASIO-KCP has good performace in wifi and phone network(3G, 4G).
  • The kcp is the first choice for realtime pvp game.
  • The lag is less than 1 second when network lag happen. 3 times better than enet when lag happen.
  • The enet is a good choice if your game allow 2 second lag.
  • UDT is a bad idea. It always sink into badly situation of more than serval seconds lag. And the recovery is not expected.
  • enet has the problem of lack of doc. And it has lots of functions that you may intrest.
  • kcp‘s doc is chinese. Good thing is the function detail which is writen in code is english. And you can use asio_kcp which is a good wrap.
  • The kcp is a simple thing. You will write more code if you want more feature.
  • UDT has a perfect doc. UDT may has more bug than others as I feeling.

基于kcp的开源项目也不少,比如:

  • kcptun: 基于 kcp-go做的高速远程端口转发(隧道) ,配合ssh -D,可以比 shadowsocks 更流畅的看 youtube视频。
  • kcp-go: 高安全性的kcp的 GO语言实现,包含 UDP会话管理的简单实现,可以作为后续开发的基础库。
  • asio-kcp: 使用 KCP的完整 UDP网络库,完整实现了基于 UDP的链接状态管理,会话控制,KCP协议调度等
  • v2ray: Shadowsocks 代替者,1.17后集成了 kcp协议,使用UDP传输,无数据包特征。
  • dog-tunnel: GO开发的网络隧道,使用 KCP极大的改进了传输速度

不管是何种同步算法,都需要更先进的网络传输技术,而使用libenet这种20年前的老技术,没法很好的解决这一问题,我们需要更加先进现代的传输协议,来达到这个目标。

----
本专业学通信的,闲着没事喜欢折腾各种传输协议。

更多阅读:
reliable_udp_bench_mark: Test reliable udp for situation of realtime pvp game by wireless.
通过KCP协议加速科学上网
--

另,具体同步算法我回答过无数遍了,不再复述:

手机格斗网游该如何避免延迟? - 韦易笑的回答

FPS游戏中,在玩家的延时都不一样的情况下是如何做到游戏的同步性的? - 韦易笑的回答

Skywind Inside - 网游同步法则

时间: 2024-10-03 03:34:42

KCP 传输协议的相关文章

TCP传输协议

1.TCP中一些名词解释 (1)MSS(maximum segment size) TCP的最大报文段大小,在TCP报文段中有一个16位的部分用于放置该值,因此最大为65535,可以利用setsockopt() 和getsockopt设置和获取TCP_MAXSEG来影响MSS: (2)MSL(maximum segment lifetime) IP报文段能在网络中存在的最长时间,这个是系统级的参数,没有接口修改,windows上可以通过注册表修改,通常为2分钟,最低为30秒,linux上面没法修

网络传输协议

网络传输协议 1.常见协议 1.HTTP.HTTPS 超文本传输协议 2.FTP 文件传输协议 3.SMTP 简单邮件传输协议 2.http协议 超文本传输协议(HTTP,HyperText Transfer Protocol) 网站是基于HTTP协议的, 例如网站的图片.CSS.JS等都是基于HTTP协议进行传输的. HTML Hypertext Markup Language HTTP协议是由从客户机到服务器的请求(Request)和从服务器到客户机的响应(Response)进行了约束和规范

QQ传输协议分析

一. 实验目的: 在虚拟机下NAT模式下通过Wireshark抓包,分析QQ的传输模式.了解QQ在传输信息过程中用到的协议.分析在Nat模式下,信息传输的穿透性. 二. 实验环境: Win7 专业版32位(在虚拟机里面). Win7 旗舰版64位(物理机) QQ版本:TM2013 Wireshark 三. 实验内容: 1. QQ登录 1).UDP登录 在虚拟机的win7打开QQ面板,设置登录服务器的类型为UDP 启动wireshark,然后开始登录QQ,登录成功等待一会儿停止wireshark的

FTP文件传输协议之vsftpd服务

一.FTP服务概述 FTP(File Transfer Protocol,文件传输协议)是典型的C/S结构的应用层协议,需要由服务端软件.客户端软件共同实现文件传输功能 FTP服务器默认使用TCP协议的20.21端口与客户端实现通信.20端口用于建立数据连接,并传输数据文件:21端口用于建立控制连接,并传输FTP控制命令.FTP数据连接分为主动模式和被动模式 主动模式:服务器主动发起数据连接 被动模式:服务器被动等待数据连接 vsftpd软件 vsftpd是目前在Linux/Unix领域应用十分

TCP传输协议使用

TCP传输协议,也称之为套接字连接,比较安全,三次握手!,必须确保对方计算机存在,才能连接,而且是长时间连接. 缺点是传输速度有点慢. 你用 socket 去连接 ServiceSocaket 服务器端,ServiceSocaket 会创建一个,Sockets 然后你的Socket ,连接服务器端创建的Socket 最后你的Socket 和 服务器端的 Socket 都会创建一个 OutputStrea 和InputStream 流用来传输数据. 如下图: ServerSocket : 服务端,

流媒体传输协议系列之--RTSP协议详解

流媒体传输协议介绍 一.RTSP协议介绍 什么是rtsp? RTSP协议以客户服务器方式工作,,如:暂停/继续.后退.前进等.它是一个多媒体播放控制协议,用来使用户在播放从因特网下载的实时数据时能够进行控制, 因此 RTSP 又称为"因特网录像机遥控协议". RTSP(Real-Time Stream Protocol)是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似. 是TCP/IP协议体系中的一个应用层协议, 由哥伦比亚大学, 网景和RealN

流媒体传输协议系列之----RTP/RTCP协议解析

RTP协议 实时传输协议RTP(Real-time Transport Protocol)是一个网络传输协议,它是由IETF的多媒体传输工作小组1996年在RFC 1889中公布的,后在RFC3550中进行更新. 国际电信联盟ITU-T也发布了自己的RTP文档,作为H.225.0,但是后来当IETF发布了关于它的稳定的标准RFC后就被取消了.它作为因特网标准在[ RFC 3550 ]有详细说明. RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式.它一开始被设计为一个多播协议,但后来被

IC卡的传输协议(2)-块传输协议T=1续【转】

转自:http://bbs.ednchina.com/BLOG_ARTICLE_172025.HTM (3)容错操作 先来看一下容错的规则定义. * 复位应答后,第一个数据块是由终端发往IC卡的,而且只能是一个I块或S块.      * 若终端不希望使用长度为32Byte的IFSD初始值,则应向IC卡发送一个S块(IFS请求),S块(IFS请求)的PCB应具有值CI以表明是一个改变IFSD的请求.INF域包含一个字节,其值表示在所要求的IFSD的字节数,取值为0x20-0xFE.IC卡应向终端回

FastSocket学习笔记~制定自已的传输协议~续~制定基于FastSocket的协议

FastSocket这个东西上次我已经说过,它使用简单,功能强大,扩展灵活,目前在新浪的生产环境中已经被广泛使用,所以它的性能,安全等各方面我们绝对可以信赖,今天我们来说一个话题,和上一讲有关,这次我们制作一个基于FastSocket的传输协议,它的意义重大,当fastSocket提供的协议不能满足项目要求时,我们就必须硬着头皮去自己写了,还好,fastsocket为我们铺好了路,我们只要按着这条路走下去,就可以了. 自定义的协议格式如下 说干就干 首先,如果要想扩展一个自己的协议,要对 cli