可靠性传输协议对比

1 测试场景设计

参考:

使用工具模拟弱网,使用本机作为客户端,本机作为服务端,使用本机 loopback 网 卡,测试不同弱网场景下的 latency。

什么叫 latency?

客户端发送数据,大小可以超过MTU,此时记录时间 t1,服务端收到并完整返回,客户端收到完整数据,此时记录时间 t2,t2-t1=latency

(rtt 一般指的是 ping 测试,是 icmp 包,这里 latency 是真实的 udp/tcp 包,不是 icmp 包,也不限制一个MTU)

为什么对比 latency?

因为 kcp 是为 latency 设计的,并不是为吞吐量设计的,应用场景是降低弱网下的 latency。

为什么用本机测试?

因为本机测试最方便准确。如果用wifi模拟,会存在抖动问题:其他人抢占,物理位置,干扰。

2 测试弱网设计

丢包+延迟表格

丢包/延迟 10ms 50ms …

0% .. ..

5% .. ..

这样得到几十种不同的组合,针对每种组合,分别测试三种协议发送 1B 和 5KB 数据 时的 latency 分布,绘制一张 latency 分布的表格

3 测试结果说明

横坐标是 latency,纵坐标是该协议有百分之多少的样本小于等于横坐标代表的值 线条波形,越接近左上⻆越好,说明该协议的 latency,相比其他协议,大部分情况 (y 轴的值)都落在了低延迟区间(x 轴的值)

比如:110ms 对应 80%,那么就是 80% 的 latency 在 110ms 内,说明该协议降 latency 效果好

4 测试工具说明

弱网模拟工具:

示例:

comcast --device=lo0 --latency=250 --target-bw=1000 --packet-loss=10%

注意丢包上下行是单独算的,比如 10% 指上行 10%+ 下行 10%,这样其实是 20%

latency 测试工具:

命令: 服务端

./ethr -s -p kcp -port 443

-s 表示服务器

-p 监听协议,kcp 表示同时监听 tcp 和 kcp,quic 表示只监听 quic 客户端

./ethr -c 127.0.0.1 -port 443 -d 30s -t l -i 200 --debug -l 5000 -p tcp

-t 测试类型 l延迟 b带宽

-d 测试时⻓

-p 测试协议

-i 测试 latency 来回的总次数,做平均处理。如果无法显示结果,降低这个值。

-l 测试包大小,即模拟每次发送多大的数据,大于 mtu,各协议内部会拆包 5 测试方法说明

Comcast 设置好弱网,注意上下行各设置一半 设置好 kcp 参数,在 kcp.json 中

启动服务端 ethr

启动客户端 ethr 产出结果来自客户端控制台打印信息

5 测试结果汇总

测试结结果汇总到 excel 中,然后使用带直线和数据标记的散点图绘制图表,这个如 果不熟悉需要搜一下,需要手动给图标选择数据。

只要做好一个 excel 模版,然后复制,接下来就是复制客户端的打印信息,黏贴到表 格中对应的行即可,散点图会自动更新。

效果展示图如下

弱网条件:

ping测试数据

100 packets transmitted, 91 packets received, 9.0% packet loss round-trip min/avg/max/stddev = 2.967/15.264/139.070/21.717 ms

 

我测试过,发现quic最有优势的场景其实还是在高频发包,比如文件传输,音视频!对于一些业务动态请求,效果不大
 
转自:https://zhuanlan.zhihu.com/p/387034743
posted @ 2022-08-03 10:16  CNHK19  阅读(271)  评论(0编辑  收藏  举报