我们平常玩的很多网络游戏 , 比如英雄联盟/王者荣耀/PUBG等 , 你感觉到卡顿往往不是因为你的网速问题 , 而是因为网络延时导致的 , 比如说LOL美服的游戏服务器在美国 , 而你在中国的华中地区玩着美服LOL , 那么你的延迟可能会在300ms左右 , 因为网络请求从美国到中国华中地区需要经过很多的路由 , 这里面会消耗掉很多时间 , 如果发生了丢包 , 那么重发需要的延迟更是会加倍增长 , 而延迟往往在150ms以上时往往就会影响到你的游戏体验了 。
市面上会有一些游戏加速器 , 它们会在国外安置服务器 , 搭建一条线路 , 来保证你的请求能够迅速的被处理 , 来降低游戏的延迟 。
现在很多的游戏以及直播等低延迟需求的应用 , 一般都不会再使用原生的TCP或者UDP来进行传输 , 而是在两者的基础上进行扩展修改 , 取其优异 , 比如TCP的传输可靠 , UDP的传输速度 。
仔细想想以前在计算机网络课程中学习TCP/UDP时 , 就对TCP的所谓可靠传输感觉很怪异 , 真的是可靠到太过慎重了 , 说到慎重就不得不提这个月的一部新番《这个勇者明明超强却过分慎重 》 。
昨天看了第一话 , 吹爆!
说回TCP , 当时觉得它的超时重传RTO时间每次都会翻倍 , 如果一个包多次超时 , 那下次重发这个包不是需要很久 , 延迟这不就上来了? 还有它的重传 , 丢了一个包就需要重传之后所有的包 , 过分的慎重 , 虽然说可以保证可靠性 , 但是这对于我们毫秒级即时通讯之类的应用确实不太友好 。
在此前提下 , 有了很多基于TCP或是UDP的改良 , 专门针对网络游戏以及音视频通话中的延迟 , 本篇要说的就是KCP协议 。
KCP协议是什么
KCP是一个快速可靠协议 , 能以比 TCP浪费10%-20%的带宽的代价 , 换取平均延迟降低 30%-40% , 且最大延迟降低三倍的传输效果 。
纯算法实现 , 并不负责底层协议(如UDP)的收发 , 需要使用者自己定义下层数据包的发送方式 , 以 callback的方式提供给 KCP 。
连时钟都需要外部传递进来 , 内部不会有任何一次系统调用 。
【lol美服延迟高怎么解决,一招帮你快速解决】有一种叫KCPtun的实现 , 可以把我们的TCP请求转化成KCP UDP在公网上传输 。
KCP与TCP的比较
TCP是为流量设计的(每秒内可以传输多少KB的数据) , 讲究的是充分利用带宽 。而 KCP是为流速设计的(单个数据包从一端发送到一端需要多少时间) , 以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的传输速度 。
TCP信道是一条流速很慢 , 但每秒流量很大的大运河 , 而KCP是水流湍急的小激流 。
KCP有正常模式和快速模式两种 , 通过以下策略达到提高流速的结果:
推荐阅读
- 带你玩转微信延期到账功能 微信转账延迟到账能撤回吗
- lol无限重连就是上不去 lol网络连接失败 请检查网络
- 2022永久免费的四款加速器 lol加速器排行榜
- 教大家Windows10打开游戏时鼠标操作出现延迟怎么办的方法
- lol新手剑圣怎么玩 lol剑圣怎么玩
- LOL游戏中怎么回复好友消息 lol游戏中怎么回复好友
- 人贱人爱的LOL小提莫 约德尔国队长
- lol控制技能最多的英雄 lol控线技巧和推线
- 延迟退休过渡期如何理解 过渡期是什么意思
- lol卡莎怎么玩,lol高端局十大英雄