Code Monkey home page Code Monkey logo

Comments (16)

LiTianjue avatar LiTianjue commented on May 21, 2024 21

谢谢skywind300的提示,今天又做了一天测试

  1. 按照skywind300的说明,修改了测试程序
  2. 用tc工具人为制造较差的网络环境(实在找不到公网高峰期到底是什么点)

再来列一下测试结果
**1. 网络本身的延时对 TCP和KCP是公平的
2. 网络的抖动会对TCP的抖动造成明显影响,对KCP无明显影响

  1. 当无网络丢包(指无人为加入的干预)TCP比KCP有优势,KCP有更小的抖动
  2. 当网络发生丢包的时候才能体现出KCP的优势,
  3. 当网络有5%的丢包率的时候,KCP和TCP有相似的表现
  4. 当丢包率大于5%的时候,KCP平均延时,最大延时,抖动都比TCP有优势
  5. 丢包达到 15% 的时候,KCP的延时性能表现已经比 TCP 好 50% 以上了

8.所以,结论是在高丢包环境下,KCP改善了延时和抖动
**
这是我的结果,目前来看,5%的丢包率算是一个分水线吧

from kcp.

skywind3000 avatar skywind3000 commented on May 21, 2024 12

别据说,自己一试便知。云帆加速就是用kcp解决**主播的推流问题,kcptun最好的案例就是用来加速海外vps的 ss 访问速度的。

from kcp.

skywind3000 avatar skywind3000 commented on May 21, 2024 5

对,没错。

from kcp.

skywind3000 avatar skywind3000 commented on May 21, 2024 4

即便不丢包也不可能比tcp慢,即便0%-5%的丢包,tcp也照样无法体现出优势来,问题有几个:

  1. 你可以注意查看,ikcp_waitsnd 来查看发送队列是否还有等待,如果有,就继续调大发送窗口。
  2. 设置了快速模式以后,手工将:kcp->rx_minrto = 5,或者更小
  3. udp是工作在interval模式下的,而tcp是工作在 epoll模式下的,有数据不用等待到下一个1毫秒。将udp也放入poll,一旦收到数据包,立马 ikcp_input 然后while循环ikcp_recv/ikcp_send,然后再掉一次update,数据基本没有停留的机会。
  4. 可以尝试放到公网测试,关闭模拟丢包。

from kcp.

 avatar commented on May 21, 2024 2

这个情况 我通过实测 kcp延迟确实比tcp延迟要高 虽然通过 kcp传http数据 延迟要比tcp延迟低
但是实际在游戏环境中延迟会比tcp高10-15ms 毕竟游戏也是udp数据包 正常游戏数据包在3-5kb/s的速度传输 单包体积都比较小
优势在于国外游戏加速的时候不会因为丢包造成游戏延迟 以及画面飘逸
在wireguard中这个情况虽然延迟会有好转 但是不会对数据包进行重传 也就造成了丢包的情况 当丢包率高到一定程度也会出现飘逸的情况 就目前来看kcp综合性能还算可以

from kcp.

LiTianjue avatar LiTianjue commented on May 21, 2024

KCP协议有很多人在用自然是有优势的,我比较菜,只是把我直观的测试感受写出来,还是希望能把KCP用在我们的应用下

from kcp.

skywind3000 avatar skywind3000 commented on May 21, 2024

第一,你的数据量大了,默认的发送和接收窗口太小,远小于tcp的sndbuf rcvbuf量,需要调大,比如都调节为原来的4-5倍,这样可以提高数据量的并发性,避免累积。
第二,尝试减少数据量比如每次0.5k
第三,每次发送完调用flush,把数据刷出去,否则要下次update才出的去,你一次100k的数据按照mtu分成一百个包,窗口又小,积累严重不说,发送还要到下一轮。
第四,可选择公网高峰期测试
第五,调高udp的SNDBUF,RCVBUF

from kcp.

LiTianjue avatar LiTianjue commented on May 21, 2024

在附上TC操作的命令
tc qdisc add dev eth0 root netem delay 50ms 30ms loss 5%
这句的意思是给网卡eth0加上 50ms的延时,± 30ms 的抖动,在加 5%的丢包率

丢包率测到20%的时候没往上测了,因为我的终端已经开始有点敲不动了

from kcp.

horsley avatar horsley commented on May 21, 2024

同样跟TCP网络比较差距较大,请问服务器和客户端相关参数是否需要一致?

from kcp.

skywind3000 avatar skywind3000 commented on May 21, 2024

当然要一样

from kcp.

horsley avatar horsley commented on May 21, 2024

但是像窗口大小这种参数感觉是控制本地状态机对应buf长度的,也需要一致?

from kcp.

cod1ingcoding avatar cod1ingcoding commented on May 21, 2024

在网络掉包率大的时候,优势明显。

在网络无掉包的情况下, 还是用TCP把, 少一些麻烦(如果TCP优先的话)

from kcp.

Zonciu avatar Zonciu commented on May 21, 2024

TCP先行,KCP备用,做好封装,设计一个传输策略来决定用TCP还是KCP发包,网络顺畅时TCP,网络波动到一定程度后切换KCP,使用KCP期间TCP定期检查网络状态,波动恢复后切回TCP。
略复杂。

from kcp.

skywind3000 avatar skywind3000 commented on May 21, 2024

错了,是默认延迟敏感数据就走kcp,不用切换,大包耗流量那种,延迟又不敏感的走tcp。

from kcp.

Zonciu avatar Zonciu commented on May 21, 2024

看用在什么地方了,用在游戏的话就是同步操作用KCP,其他操作(聊天、语音、商店等)用TCP。

from kcp.

xinqiangren avatar xinqiangren commented on May 21, 2024

据说udp包在网络高峰期容易被防火墙丢弃,特别是跨运营商或跨国的时候,这导致了kcp的应用受限,不知道大家遇到过没?

from kcp.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.