帧同步的一些思考(四):Kcp 与 RakNet 测试比较

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013272009/article/details/81430262

测试代码

https://github.com/fananchong/test_udp/tree/master/test1

测试内容

服务器以 66 毫秒 发送 400 字节的数据包,查看客户端前后 2 个包的时间间隔

弱网模拟

本次测试做以下2种测试:

  1. 服务器输出方向模拟

    类似:

    tc qdisc add dev $NETCARD root netem delay 100ms 20ms distribution normal loss $2%
  2. 双向模拟

    类似:

    modprobe ifb
    ip link set dev ifb0 up
    tc qdisc add dev $NETCARD ingress
    tc filter add dev $NETCARD parent ffff: protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0
    tc qdisc add dev $NETCARD root netem delay 100ms 20ms distribution normal loss $2%
    tc qdisc add dev ifb0 root netem delay 100ms 20ms distribution normal loss $2%

完整脚本:

netem模拟原理:https://wiki.linuxfoundation.org/networking/netem

为什么测试 2 种模拟网络

双向模拟更能测试可靠 UDP 库的性能

可靠 UDP 库,或多或少会有些ACK、控制指令由客户端发起

因此双向模拟更具实际参考意义

由于没有实际网络 上行、下行参数可供参考, 这里测试 上行、下行的延迟、丢包率均设置相同

而 服务器输出方向模拟(下行),原先做过 非可靠 UDP 库测试 。这里仅顺带测试一把。

测试结果 - 服务器输出方向模拟

  1. delay 100ms 20ms distribution normal loss 5%

    这里写图片描述

  2. delay 100ms 20ms distribution normal loss 10%

    这里写图片描述

  3. delay 100ms 20ms distribution normal loss 15%

    这里写图片描述

测试结果 - 双向模拟

  1. delay 100ms 20ms distribution normal loss 5%

    这里写图片描述

  2. delay 100ms 20ms distribution normal loss 10%

    这里写图片描述

  3. delay 100ms 20ms distribution normal loss 15%

    这里写图片描述

结论

  • 客户端收到前后 2 个包的时间间隔,Kcp 比 RakNet 更小些
  • RakNet 毛刺比 Kcp 多不少,特别是丢包率增大的情况

    总而言之,Kcp 在收发包延迟上要优于 RakNet

猜你喜欢

转载自blog.csdn.net/u013272009/article/details/81430262