32

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

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

4

9 回答 9

34

我使用 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 选项并降低计数,这样就不会花费太长时间来完成。

ps我认为这应该交给超级用户,而不是stackoverflow。

于 2012-10-24T04:46:12.207 回答
11

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

于 2011-01-01T20:14:53.577 回答
7

实际上,仅从类似 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 有多条路径,祝你好运。

通常更容易爆炸流量并查看有多少通过。然后您将确定您的可用带宽是多少——零。

于 2011-01-02T16:55:22.433 回答
2

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

于 2011-01-01T20:10:26.657 回答
2

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

于 2011-01-01T20:12:51.823 回答
1

不,这不对。

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

一个 Ping(到一个 Pong)的过程是一个小包从 A 发送到 B 当 B 得到这个包时,它用一个 Pong 来响应,这个 Pong 立即被发送回 A。总时间(希望以毫秒为单位)已注册,并且您的 Ping 以毫秒为单位。

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

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

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

于 2011-01-01T20:14:38.897 回答
0

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

于 2011-01-02T14:54:35.337 回答
0

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

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

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

于 2019-02-08T11:13:04.530 回答
0

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' 选项用于泛洪(即不要在传输之间等待)

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

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。

- 如果我的回答不正确或需要改进,请在评论中输入 - 谢谢

于 2020-10-20T21:47:50.087 回答