kcp TCPvsKCP测试结果和作者的不一样

gcuhipw9  于 2022-10-25  发布在  其他
关注(0)|答案(4)|浏览(434)

之前参考的大佬的测试方法 #202
自己测试了一下300ms,20%丢包的结果图形如下:

测试网络环境:
tc qdisc add dev lo root netem delay 150ms loss 10% // lo网卡来回会翻倍

统计工具用的微软的ehtr,收发包大小都是5kB
测试结果:

  1. 平均延迟tcp(452.850ms)比kcp(536.570ms)更低
  2. 99.99%包,TCP落在2520.657ms内,kcp落在1989.420ms内

我的问题是

  1. 平均延迟tcp更低这正常吗?
  2. 只要丢包设置20%,那么tcp在80%内的包都是很快的,而80%之后的包延迟瞬间提高,为什么测不出作者那种平滑的曲线呢?
5sxhfpxr

5sxhfpxr1#

这是大佬测试的图。
我的kcp参数是:
{ "streammode":true, "key": "PASSWORD", "crypt": "", "mode": "", "mtu": 1400, "sndwnd": 10240, "rcvwnd": 10240, "datashard": 0, "parityshard":0, "dscp": 46, "nocomp": true, "acknodelay": true, "nodelay": 1, "interval": 10, "resend": 2, "nc": 1, "sockbuf": 4096000, "tcp": false }

vlf7wbxs

vlf7wbxs2#

  1. 不要用 kcptun 测试,自己写测试程序。
  2. 不要塞一堆数据进去,没意义。
  3. 定时,比如每秒钟 50 次,发送数据,每次发送 100 字节,内容是当前时间戳+96字节的填充。
  4. 发送完立马 flush,服务端收到即返回。
  5. 客户端收到计算 rtt 并记录。
8yoxcaq7

8yoxcaq73#

@skywind3000 感谢回复
我用的是kcp-go
按照你说的规则。服务端收到即返回同样大小的包。
我用微软那个测试工具
ethr -c 127.0.0.1 -port 4433 -d 0 -t l -i 600 --debug -l 100 -p tcp

一共测试600个来回,包大小是100字节。

发现还是,在丢包的时候,tcp延迟陡增,不丢包,80%包都集中在300ms完成传输,我感觉这种现象是符合预期的。可是不知道大佬图中TCP(青色圆圈)测试为何是曲线变化的?

vaqhlq81

vaqhlq814#

青色圆圈很正常,tcp 在一些复杂的网络环境下表现不均匀,还有要看操作系统版本对应的 tcp 实现。

后续建议:

  • 将 kcp 的 interval 改为 1
  • 可以给 KCP 下面加上 FEC

立马甩 quic 几条街。

相关问题