Comments (16)
谢谢skywind300的提示,今天又做了一天测试
- 按照skywind300的说明,修改了测试程序
- 用tc工具人为制造较差的网络环境(实在找不到公网高峰期到底是什么点)
再来列一下测试结果
**1. 网络本身的延时对 TCP和KCP是公平的
2. 网络的抖动会对TCP的抖动造成明显影响,对KCP无明显影响
- 当无网络丢包(指无人为加入的干预)TCP比KCP有优势,KCP有更小的抖动
- 当网络发生丢包的时候才能体现出KCP的优势,
- 当网络有5%的丢包率的时候,KCP和TCP有相似的表现
- 当丢包率大于5%的时候,KCP平均延时,最大延时,抖动都比TCP有优势
- 丢包达到 15% 的时候,KCP的延时性能表现已经比 TCP 好 50% 以上了
8.所以,结论是在高丢包环境下,KCP改善了延时和抖动
**
这是我的结果,目前来看,5%的丢包率算是一个分水线吧
from kcp.
别据说,自己一试便知。云帆加速就是用kcp解决**主播的推流问题,kcptun最好的案例就是用来加速海外vps的 ss 访问速度的。
from kcp.
对,没错。
from kcp.
即便不丢包也不可能比tcp慢,即便0%-5%的丢包,tcp也照样无法体现出优势来,问题有几个:
- 你可以注意查看,ikcp_waitsnd 来查看发送队列是否还有等待,如果有,就继续调大发送窗口。
- 设置了快速模式以后,手工将:kcp->rx_minrto = 5,或者更小
- udp是工作在interval模式下的,而tcp是工作在 epoll模式下的,有数据不用等待到下一个1毫秒。将udp也放入poll,一旦收到数据包,立马 ikcp_input 然后while循环ikcp_recv/ikcp_send,然后再掉一次update,数据基本没有停留的机会。
- 可以尝试放到公网测试,关闭模拟丢包。
from kcp.
这个情况 我通过实测 kcp延迟确实比tcp延迟要高 虽然通过 kcp传http数据 延迟要比tcp延迟低
但是实际在游戏环境中延迟会比tcp高10-15ms 毕竟游戏也是udp数据包 正常游戏数据包在3-5kb/s的速度传输 单包体积都比较小
优势在于国外游戏加速的时候不会因为丢包造成游戏延迟 以及画面飘逸
在wireguard中这个情况虽然延迟会有好转 但是不会对数据包进行重传 也就造成了丢包的情况 当丢包率高到一定程度也会出现飘逸的情况 就目前来看kcp综合性能还算可以
from kcp.
KCP协议有很多人在用自然是有优势的,我比较菜,只是把我直观的测试感受写出来,还是希望能把KCP用在我们的应用下
from kcp.
第一,你的数据量大了,默认的发送和接收窗口太小,远小于tcp的sndbuf rcvbuf量,需要调大,比如都调节为原来的4-5倍,这样可以提高数据量的并发性,避免累积。
第二,尝试减少数据量比如每次0.5k
第三,每次发送完调用flush,把数据刷出去,否则要下次update才出的去,你一次100k的数据按照mtu分成一百个包,窗口又小,积累严重不说,发送还要到下一轮。
第四,可选择公网高峰期测试
第五,调高udp的SNDBUF,RCVBUF
from kcp.
在附上TC操作的命令
tc qdisc add dev eth0 root netem delay 50ms 30ms loss 5%
这句的意思是给网卡eth0加上 50ms的延时,± 30ms 的抖动,在加 5%的丢包率
丢包率测到20%的时候没往上测了,因为我的终端已经开始有点敲不动了
from kcp.
同样跟TCP网络比较差距较大,请问服务器和客户端相关参数是否需要一致?
from kcp.
当然要一样
from kcp.
但是像窗口大小这种参数感觉是控制本地状态机对应buf长度的,也需要一致?
from kcp.
在网络掉包率大的时候,优势明显。
在网络无掉包的情况下, 还是用TCP把, 少一些麻烦(如果TCP优先的话)
from kcp.
TCP先行,KCP备用,做好封装,设计一个传输策略来决定用TCP还是KCP发包,网络顺畅时TCP,网络波动到一定程度后切换KCP,使用KCP期间TCP定期检查网络状态,波动恢复后切回TCP。
略复杂。
from kcp.
错了,是默认延迟敏感数据就走kcp,不用切换,大包耗流量那种,延迟又不敏感的走tcp。
from kcp.
看用在什么地方了,用在游戏的话就是同步操作用KCP,其他操作(聊天、语音、商店等)用TCP。
from kcp.
据说udp包在网络高峰期容易被防火墙丢弃,特别是跨运营商或跨国的时候,这导致了kcp的应用受限,不知道大家遇到过没?
from kcp.
Related Issues (20)
- 客户端重连问题 HOT 1
- 一次性发送1000个1K的包,需要8-10秒左右
- 关于 ikcp_update HOT 1
- Kcp 相比于 srt 或者 quic 的优势是什么,弱网下回有更好的表现吗 HOT 2
- 请问主动丢包有解决方案了么? HOT 4
- > 没看懂,你要主动丢包么?
- 请问大神,之前在下面这个issue里讨论的丢包问题,什么时候能支持一下呢? HOT 4
- 纯 python 版本实现,申请加入开源案例 HOT 2
- 包模式下如果rcvWnd<255 并且分包数量>=rcvWnd,接受端因为接受不到足够的数量组装完整包而卡住.
- 请教一个关于停止ikcp_update的方法
- 这里检测使用的buffer超过mtu就output一次是不是会导致seg分成两段 HOT 7
- 关于ikcp_check实现的疑问
- test.cpp 运行结果不符合预期 HOT 3
- Multiple multi-thread clients, one server HOT 2
- 关于服务端和多客户端的问题 HOT 6
- 关于上行卡顿,下行包流畅的问题 HOT 7
- 实时流应用场景,crash的疑问 HOT 4
- 关于源码中的慢启动和拥塞避免算法 HOT 3
- 发送端网络受限 ,接收端网络不好,kcp是否会带来改善? HOT 1
- 为每个kcp设置独立的allocator HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kcp.