通过 TCP 发送一段时间的随机数据,并统计发送了多少字节

通过 TCP 发送一段时间的随机数据,并统计发送了多少字节

为了测试数据吞吐量,我想 1) X 秒 2) 发送随机数据 3) 通过 TCP,4) 之后确切地知道传输了多少字节。

我最好的尝试(不多)

1) 超时 X
2) dd if=/dev/urandom count=65535 bs=1500
3) > /dev/tcp/<主机>/<端口>
4) ... ?我可以用吗wc -c?如果失败,也许将我的随机数据通过管道传输tee到文件中/dev/tcp,然后,当超时结束时,计算文件的字节大小?

谁能提供一个优雅的 bash 命令来做到这一点?


[更新] 这是针对 Linux 的定制版本。对于安全海豚来说,并非所有命令都可用。我会检查所有建议并尽快回复您。

答案1

既然您要求解决方案,我将向您提供我提到的解决方案和 @SatoKatsura 提到的解决方案。首先,生成随机网络负载通常不是进行负载测试的最有用的方法。通常您需要重新创建高工作负载的现实状态。不过,如果您只是想找到与任何类型的竞争负载下的另一个工作负载性能相关的内容,那么将随机数据放入管道中仍然是有意义的。

从您提到的内容中获取您想要的内容的最直接的方法就是我在评论中提到的nc。设置接收端,使其侦听某个随机端口并将输出重定向到/dev/null

[root@listeningServerFQDN ~]# nc -l listeningServerFQDN 1023 >/dev/null

然后在客户端nc再次使用将/dev/urandom数据发送到远程端:

[root@transmit ~]# dd if=/dev/urandom count=65535 bs=1500 | nc listeningServerFQDN 1023

之后,您可以使用您想要使用的任何工具。


这是一种可能的解决方案,另一种是iperf@SatoKatsura 提到的工具。这更适合需要的网络工程师一些由于某种原因在网络上运行的负载。例如,如果他们想要测试他们正在尝试实施的 QoS 策略。在这种情况下,他们不在乎它是否代表工作负载,他们只是测试带宽是否受到适当限制。

基本iperf用法涉及设置服务器进程:

[root@listeningServerFQDN ~]# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------

然后在客户端上运行测试:

[root@transmit ~]# iperf -c listeningServerFQDN -r
bind failed: Address already in use
------------------------------------------------------------
Client connecting to transmit.example.com, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[  4] local 10.762.40.95 port 54610 connected with 10.762.40.95 port 5001
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  37.1 GBytes  31.8 Gbits/sec

它在服务器实例上重复,并将以下内容附加到我的输出中:

[  4] local 10.762.40.95 port 5001 connected with 10.762.40.95 port 54610
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  37.1 GBytes  31.7 Gbits/sec
------------------------------------------------------------
Client connecting to 10.762.40.95, TCP port 5001
TCP window size: 4.00 MByte (default)
------------------------------------------------------------
[  4] local 10.762.40.95 port 54640 connected with 10.762.40.95 port 5001
[  5] local 10.762.40.95 port 5001 connected with 10.762.40.95 port 54640
[  4]  0.0-10.0 sec  37.4 GBytes  32.1 Gbits/sec
[  5]  0.0-10.0 sec  37.4 GBytes  32.1 Gbits/sec

显然,您可以从那里进行分支,但您可以获得总体思路,并且可以查看手册页以了解其他所有内容。


我的看法:nc如果您的标准实际上只是“将随机数据发送到管道中”,那么我实际上会坚持使用该解决方案nc,这是一个通常有用的工具,您可以用它来做的不仅仅是这一件事,而且我怀疑其用例iperf非常狭窄。

我会使用nc(或您更熟悉的任何工具)进行基本测试,然后逐步模拟实际负载,而不是进行iperf另一个“管道中的随机数据”测试。

相关内容