通过 ping 计算上传/下载速度

Posted

技术标签:

【中文标题】通过 ping 计算上传/下载速度【英文标题】:Calculate upload/download speed by ping 【发布时间】:2011-06-02 07:27:27 【问题描述】:

如何通过一些平均 ping 速率来计算 Internet 连接的速度。其中涉及哪些计算。是否可以通过 ping 速率来计算上传/下载限制

编辑 如果 ping 不是解决方案,还有什么办法?

【问题讨论】:

关于延迟和带宽的好文章rescomp.stanford.edu/~cheshire/rants/Latency.html Ping 测量 ICMP 延迟,而不是 TCP 或 UDP。您无法将 ICMP 延迟与 TCP 或 UDP 上传或下载进行比较。 @Janning 发布的链接已失效,这里有一个替代方案:stuartcheshire.org/rants/Latency.html 【参考方案1】:

ping 是通过 ICMP 在网络上发送的单个数据包。通常每秒发送一个数据包来 ping 远程机器,并且路由可能与通常用于数据传输的 TCP 和 UDP 不同;远程机器可能拒绝回复 ping 请求。因此,通过 ping 请求测量网络吞吐量是不可靠的,而且可能毫无用处。

【讨论】:

【参考方案2】:

Ping 远程主机可以让您测量网络的延迟(该主机是否响应)。它不会为您提供有关该网络连接上可用带宽的有用信息。

【讨论】:

【参考方案3】:

不,不是。

ping 数据包很小,仅用于验证从 A 点到 B 点的速度(或者更常见的用法 - 如果它们之间存在路径,则 IE 是否有计算机响应)

一个Ping(到一个Pong)的过程就是一个小包从A发送到B 当 B 收到数据包时,它会以 Pong 响应,然后立即将其发送回 A。 在 A 获得 Pong 时,总时间(希望以毫秒为单位)已注册,您的 Ping 以毫秒为单位。

这当然假设 B 没有设置为拒绝 ping 或根本没有到达那里,或者是在 *** 或其他减慢响应速度的措施之后。

最后,您得到的只是 Ping 从 A 运行到 B 再返回 A 所需的时间。

为了比较,试着跑过马路再跑回来。测量时间。现在找到一种方法来计算您的体重。

【讨论】:

要衡量速度,您需要大小和时间: 1) 大小:您发送的数据包大小。 | 2)时间:数据包在A点和B点之间花费的时间。您的说法是:“最后,您得到的只是 Ping 从 A 运行到 B 再返回 A 所需的时间。”你得到的一切?这似乎正是我需要的:p 是的,可能你的知识有限,但是 ping 数据包默认很小,但是它们的大小和速率可以增加到使链路饱和的程度,因此可以用来估计链接容量。【参考方案4】:

延迟与带宽不同。想象一下,一卡车的 DVD 正在全国各地行驶。带宽很高,但延迟巨大

【讨论】:

为了将您的类比与我的回答联系起来,您可以通过依次发送 2 辆卡车来测量带宽。如果它们相隔 30 分钟出现在该国的另一边,那么您系统的带宽限制为每小时 2 卡车。也许网络在一个效率特别低的收费站出现拥塞,排队时间为 30 分钟。每辆卡车穿越全国需要 5 天,这一事实是正交的。【参考方案5】:

正如其他人所说,ping 会告诉您延迟而不是带宽。 试试netperf。 http://www.netperf.org/netperf/。您可能需要提供特定选项(如 TCP/UDP)等。

【讨论】:

您可以调整 ping 数据包的大小和比率,直到达到带宽限制,因此它也可以用来让您了解这一点。【参考方案6】:

实际上可以仅从类似 ping 的测量中得出带宽估计值。

在 GigE 链路上传输一个 1500 字节的数据包总是需要 12.3µs。换句话说,如果您能够以协议允许的速度通过不拥塞的 GigE 链路从一台机器向另一台机器发送两个 1500 字节的数据包,它们将相隔大约 12.3µs。观察这种情况可以确认您的 GigE 链接实际上没有拥塞。

现在来看一个跨 WAN 测量的简单示例(再次假设它没有拥塞):

HostA -------- RouterA -------- RouterB -------- HostB
        GigE             OC-3             GigE

主机 A 快速连续发送两个 1500 字节的数据包。当路由器 A 接收到第一个数据包时,它开始通过 OC-3 WAN 链路 (155Mbps) 转发它。将一个 1500 字节的数据包转发到 OC3 需要 81.5µs,因此路由器 A 在收到来自主机 A 的第二个数据包时将处于转发第一个数据包的中间。它必须将第二个数据包排队,直到它完成传输首先。

当路由器 B 接收完第一个数据包后,将其转发给主机 B,仅需 12.3µs;同时路由器 B 开始接收第二个数据包。当路由器 B 接收完第二个数据包后,它会将其转发给主机 B。

所以主机 B 看到 12.3µs 的数据包接收,69.2µs 的静默,然后是 12.3µs 的数据包接收——换句话说,到达间隔时间为 81.5µs。从这个观察中,主机 B 可以推断出路径带宽被限制在 155Mbps。


现在这在理论上很好,但在实践中事​​情变得更加复杂。拥塞事件往往是突发的,所以前一时刻路由器的队列可能很满,而下一时刻它们是空的。许多样本对于获得任何有意义的东西都是必要的。进行精确测量也很棘手。端到端延迟可能在数十或数百毫秒内,您正在查看几微秒的差异。如果从 A 到 B 有多条路径,祝你好运。

通常更容易只爆破流量,看看有多少流量。然后你就可以确定你的可用带宽是多少——零。

【讨论】:

谢谢!所有这些充满信心并回答NO的人!但理论上,ping 可以通过改变数据包大小和速率来测量最大吞吐量。然而,它有些不可靠,而且绝对不切实际,因此并不常见。 查看Estimating Available Bandwidth Using Packet Pair Probing 或Informed Bandwidth Adaptation in Wi-Fi Networks usingPing-Pair 之类的工作或Van Jacobson's pathchar 之类的工具。【参考方案7】:

我使用 ping 计算本地网络的带宽。我认为它与其他测量带宽的方法(例如下载大文件)一样准确。如果您有到 Internet 的对称链接(即不是 adsl),您也可以将它用于您的 Internet 连接。

我是这样做的:

我有一个千兆以太网 LAN,我想测量我的计算机和服务器机房中的主机之间的速度。我的 MTU 是 1500,所以我使用数据包大小 1472。只是随机的,我在这个测试中使用了 83,333 个数据包(大约 1 千兆位)。那么:

sudo ping -f -c 83333 -s 1472 192.168.3.103

在我得到的结果的最后:

round-trip min/avg/max/stddev = 0.174/0.219/2.078/0.020 ms

因此发送 1500 字节和接收 1500 字节平均需要 0.219 毫秒,即 24 kb。

24 kb / 0.219 ms = 110 Mb/s

如果您想将它用于 Internet 上的服务器,您需要将数据包大小降低到 1464(对于 MTU 1492),删除 -f 选项并降低计数,这样就不会花费太长时间完成。

附言我认为这应该交给超级用户,而不是 ***。

【讨论】:

我不明白你的数学:“1500 字节并接收 1500 字节,即 24 kb。” ——你能解释一下吗?谢谢 这是字节到位的转换,3,000 字节 = 24,000 位 = 24 kb 为什么没有 sudo 就不能泛滥? 要求ping -f $ ping -f host PING host (X.X.X.X) 56(84) bytes of data. ping: cannot flood; minimal interval allowed for user is 200ms 这个计算根本上是错误的。如果将延迟与带宽混淆并且无法填充线路。如果我对我的路由器运行一次测试(并按时间正确划分发送+接收的数据),我得到 80Mb/s。但如果我同时运行 3 次 ping,每个 80Mb/s 的速度总共为 240Mb/s。如果我同时运行 10 个,我每个得到 40Mb/s,总共 400Mb/s。通过千兆以太网(全双工),这表明路由器的响应速度有点慢。【参考方案8】:

这是可能的,尽管不切实际且不可靠。

它在您的本地网络 (LAN) 上效果最好。

默认情况下,ping 发送仅表示延迟的小数据包。但是,该命令需要参数来修改数据包大小和速率。理论上,您可以将数据包的大小和速率增加到使链路饱和的程度,然后您可以使用数据包统计信息来计算发生这种情况的速度。

【讨论】:

【参考方案9】:

Ping 测量延迟(多快)。不是吞吐量(容量)。此外,时间是以往返来衡量的。使用选项 -c 您可以指定 ping 携带的有效负载大小(以字节为单位)。总数据大小为“有效负载大小 + 标头”。

为了测量数据速率(容量或吞吐率),您需要指定 MAX 允许的有效负载大小,即 65536 字节(2 字节标头长度字段允许的 0xFFFF 字节)。

在上面评价最高的答案中,我看到每次传输使用 1500 个字节。 (还有 83333 转账!-为什么?)。它会给出错误的结果,因为即使你有一个很大的数据管道,你也将一个非常小的数据放入其中;并且数据吞吐率将不正确 - 您需要使用 MAX 允许的有效负载使 ping 饱和。

这是我的命令,然后是我的测量结果:

 ping -v -f -c 100 -s 65507 192.168.0.24
使用的最大负载:65507(即 65535,包括标头)字节 往返次数:100 '-f' 选项用于泛洪(即不要在传输之间等待)

我用它来连接我子网中的另一台电脑。使用有线以太网连接。结果如下:

linuxlab@linuxlab-murugan:/boot$ sudo ping -v -f -c 100 -s 65507 192.168.0.24
[sudo] password for linuxlab: 
ping: socket: Permission denied, attempting raw socket...
PING 192.168.0.24 (192.168.0.24) 65507(65535) bytes of data.
 
--- 192.168.0.24 ping statistics ---
100 packets transmitted, 100 received, 0% packet loss, time 1146ms
rtt min/avg/max/mdev = 11.428/11.490/11.702/0.153 ms, ipg/ewma 11.576/11.483 ms

计算:

65535 字节 x 2 发送和接收 100 次。平均耗时 11.490 毫秒。

*因此:(65535 字节 x 2 往返)x 8 位/字节 / 0.01149 秒 = 91259878 位/秒 即 91.3 Mbps。

- 如果我的答案不正确或需要改进,请输入 cmets - 谢谢

【讨论】:

Ping 使用 ICMP,因此它仅测量该协议的延迟,并且该测量与 TCP、UDP 或应用程序实际使用的其他协议的测量可能非常、非常不同。 Ping 实际上只是为了测试 IP 连接性而设计的。

以上是关于通过 ping 计算上传/下载速度的主要内容,如果未能解决你的问题,请参考以下文章

计算下载/上传速度

UbuntuCentOSmacOS测试服务器上传和下载速度

UbuntuCentOSmacOS测试服务器上传和下载速度

基于H5的Speedtest网速测试工具搭建

Ubuntu 16.04通过Trickle限制某个软件的下载/上传速度

恒星下载没速度