如何从命令行测量主机的网络传输速度?

如何从命令行测量主机的网络传输速度?

我想从命令行测量主机的带宽。

许多主机都在互联网上,不受我的控制。这将用于测试我的实际互联网连接带宽。我知道与站点的连接可能比我的总带宽慢,具体取决于服务器端的设置方式。我计划通过对几个可靠的主机运行速度测试来自己控制这一点。

像 SCP 这样的解决方案将不起作用,因为我没有 SSH 访问 google.com 的权限。

我还将把它用于我控制的 LAN 上的主机。因此,理想的解决方案是从网页下载资源,并且我可以使用虚拟网站运行 nginx,只是为了使其与测试方法兼容。

我的目标是诊断我的互联网连接。我想比较互联网连接的带宽与路由器的连接带宽,并且我想随着时间的推移多次执行此操作,以便我可以查看一天中是否有速度较慢的时间。我知道在速度测试期间恰好运行的其他程序可能会扭曲结果,但我愿意在分析数据时处理这个问题。

以前,我使用过速度测试 CLI但这是非常有限的。它只使用那家公司的服务器,需要很长的时间,而且我不能用它来测试局域网带宽。

答案1

许多主机都在互联网上,不受我的控制。

你基本上不能。对方房东必须配合你;它可以进行协作,即它发送数据以响应您发出的 HTTP 请求(即,当您下载文件时)。但随后您需要相信它会在连接允许的情况下尽快完成此操作。通常,较大的 HTTP 服务器不会这样做 - 它们具有流量整形功能(因为在一定数量下,您需要考虑到您为连接带宽付费,并且您最好确保拥有流量的人小请求得到满足后就消失了,比 2 GB 请求快 25%)。

其他主机将根本不提供 HTTP 或任何其他对大文件有用的服务,或者根本不提供大文件。小文件不是一个选择;请求和确认开销很重要。

我使用了 Speedtest CLI,但这非常有限。只用那家公司的服务器,需要很长时间

好吧,我不知道这一切背后的商业结构是怎样的,但这些服务器只是有人愿意为进行可靠测试所需的流量付费。请注意,这本质上意味着测试不可能在不到一秒的时间内完成 - 不仅存在连接时间开销,而且还存在 ISP 端的主动流量整形。

所以,在我看来,你想要一些不可能的东西。

幸运的是,我认为您还想要一些无用的东西 - 如果您想要应用程序级别的可靠性和吞吐量度量,那么衡量应用程序,而不是其他东西。换句话说,如果您想知道 youtube 的速度有多快,请使用yt-dlp(或其他 youtube 客户端)下载 rickroll 视频。如果您想测试 SSH 连接的工作情况,请进行 SSH 测试。如果您想测试 IMAP 服务器连接的工作情况,则获取包含 20000 封邮件的邮件文件夹列表并计时,然后创建一个新文件夹,放入 20 MB 的邮件,再次删除它和该文件夹,然后到时候了。如果您想知道 DNS 解析的性能如何,请让您的 DNS 解析器进行解析。
这是否会导致您可以直接比较提供不同服务的不同服务器的数字?不会。
这些数字对您的使用实际上意味着什么吗?是的!

我还将把它用于我控制的 LAN 上的主机。

如果您想测试您的 LAN 带宽:呃,这只是您的网卡和交换机的功能。除非您涉及的 NIC 速度超过 25 Gb/s(我几乎确定您会提到),否则如果使用最大数据包大小并避免过度定期确认接收,现代 PC 可以并且将会使 LAN 中的线速饱和的包。

如果您想测试计算机对特定应用程序请求(例如 SMB/CIFS 文件共享、视频流、备份接收)做出反应的能力,那么请再次测试这些实际应用程序。

对于您实际上打算对您的压力测试的情况网络堆栈(而不是应用程序级软件/操作系统/硬件协作),那么iperf3可能是您选择的命令行应用程序。但是,再说一遍,现代 PC 甚至连眼睛都不眨一下就能使 1 Gb/s 以太网饱和,除非您故意将配置设置得低效(小数据包、短争用窗口、人为丢包)。

相关内容