丢包分析工具 - iperf

一、背景

由于我们的服务既支持 tcp 链接也支持 udp 链接,所以想测试下我们服务在 tcp 链接和 udp 链接的抗弱网能力。

所以我们使用 chaos-mesh 工具,模拟网络故障 - 丢包(Loss)。但在测试过程中发现一个奇怪的现象,当设置 75% 丢包后,tcp 链接就会断开,但使用 udp 链接时设置 100% 丢包,还是可以正常通信。

所以怀疑 chaos-mesh 的丢包没有限制 udp 协议?(最后发现是设置错了服务器😄)

开始想用 nc 来测试一下,但 nc 只能测试是否打开了 udp 端口,不能测试 udp 的丢包率。没办法只能使用 iperf 来测试了。

二、iperf 是一个网络性能测试工具,可以用来:

  1. 测试 tcp/udp 链接的 带宽、延迟抖动 和 丢包率
  2. 测试 tcp/udp 的连通性(比如测试防火墙是否开放了 8080 端口)

三、测试 udp 链接的丢包率

例如,要测试 udp 的丢包率。可以按如下步骤测试

1、登陆 服务器,并启动 iperf 服务端

iperf -p 80 -s -u -i 1

参数说明:

  • -p : 端口号
  • -s : 表示服务端
  • -u : 表示 udp 协议
  • -i : 检测的时间间隔(单位,秒) 

2、在客户端,启动 iperf 客户端

iperf -c 127.0.0.1 -p 80 -u -b 10M -t 10 -i 1 -P 1

参数说明:

  • -c : 服务端的 ip 地址
  • -p : 端口号
  • -u : 标示udp协议
  • -b : 每一次发送的数据大小
  • -t : 总的发送时间(单位,秒)
  • -i : 发送数据的时间间隔 (单位,秒)
  • -P : 表示线程个数,不指定则默认单线程

3、运行结果如下图 

注意:

  • 由于只是想测试 udp 的丢包率,所以 -p 参数指定的 80 端口,只要你的机器上没有占用随便一个即可
  • 由于只是想测试 udp 的丢包率,所以不必非要在 服务器 启动  iperf 服务端,随便你在哪里运行都行。
  • 但要注意如果你在服务器设置的入站丢包,那 iperf 服务端一定要在服务器上运行

四、测试 tcp 链接的带宽

测试 tcp 跟 udp 没啥区别,就是去掉 -u 参数

1、登陆 服务器,并启动 iperf 服务端

iperf -p 80 -s -i 1

2、在客户端,启动 iperf 客户端

iperf -c 127.0.0.1 -p 80 -b 10M -t 10 -i 1 -P 1

3、运行结果如下图

 注意:

  • 用 iperf 只能测试 tcp 的带宽,不能测试丢包率。因为 tcp 会帮你重传来保证 tcp 链接的可靠
  • 但可以看到带宽的下降。如果你在测试之前启动 chaos-mesh 工具,并设置一定丢包后,只能看到带宽下降而不会看到丢包率

五、测试 tcp/udp 的连通性

例如,要测试是否开放了服务器 A 的 udp 13000 端口。

1、登陆 服务器 A

2、将现有使用 udp 13000 端口

3、在服务器 A 中启动 iperf 服务端,命令如下

iperf -p 13000 -s -u -i 1

4、找一台机房外部的电脑(比如需要在家访问服务器),启动 iperf 客户端,命令如下

iperf -c 127.0.0.1 -p 13000 -u -b 10M -t 10 -i 1 -P 1

5、这样如果能看到丢包测试结果,也就证明网络是通的。如下图

无论在服务端还是客户端看到如红框内容都代表 udp 13000 是通的,没有被防火墙拦截。

 

posted @ 2024-06-06 10:41  rslai  阅读(422)  评论(0编辑  收藏  举报