版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013272009/article/details/81430262
测试代码
https://github.com/fananchong/test_udp/tree/master/test1
测试内容
服务器以 66 毫秒 发送 400 字节的数据包,查看客户端前后 2 个包的时间间隔
弱网模拟
本次测试做以下2种测试:
服务器输出方向模拟
类似:
tc qdisc add dev $NETCARD root netem delay 100ms 20ms distribution normal loss $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%
完整脚本:
- https://github.com/fananchong/test_udp/blob/master/bin/netem_1.sh
- https://github.com/fananchong/test_udp/blob/master/bin/netem_2.sh
netem模拟原理:https://wiki.linuxfoundation.org/networking/netem
为什么测试 2 种模拟网络
双向模拟更能测试可靠 UDP 库的性能
可靠 UDP 库,或多或少会有些ACK、控制指令由客户端发起
因此双向模拟更具实际参考意义
由于没有实际网络 上行、下行参数可供参考, 这里测试 上行、下行的延迟、丢包率均设置相同
而 服务器输出方向模拟(下行),原先做过 非可靠 UDP 库测试 。这里仅顺带测试一把。
测试结果 - 服务器输出方向模拟
delay 100ms 20ms distribution normal loss 5%
delay 100ms 20ms distribution normal loss 10%
delay 100ms 20ms distribution normal loss 15%
测试结果 - 双向模拟
delay 100ms 20ms distribution normal loss 5%
delay 100ms 20ms distribution normal loss 10%
delay 100ms 20ms distribution normal loss 15%
结论
- 客户端收到前后 2 个包的时间间隔,Kcp 比 RakNet 更小些
RakNet 毛刺比 Kcp 多不少,特别是丢包率增大的情况
总而言之,Kcp 在收发包延迟上要优于 RakNet