测量网络浏览器的带宽

Posted

技术标签:

【中文标题】测量网络浏览器的带宽【英文标题】:Gauging a web browser's bandwidth 【发布时间】:2011-08-29 07:44:19 【问题描述】:

是否可以通过监控正常的 http 请求来衡量网络浏览器的上传和/或下载速度?理想情况下,Web 应用程序无需任何修改也无需像 javascript/Java/Flash 这样的客户端脚本就能够判断客户端的速度。因此,即使客户端使用 Curl 之类的库访问服务,它仍然可以工作。如果这是可能的,怎么做?如果不可能,为什么?这种方法的准确性如何?

(如果它有助于假设 php/Apache,但实际上这是一个独立于平台的问题。另外,能够衡量上传速度对我来说更重要。)

【问题讨论】:

【参考方案1】:

概述

您要求的是沿路径进行通常称为“被动”可用带宽 (ABW) 的测量(而不是测量单个链路的 ABW)。有许多不同的技术1使用被动观察或低带宽“主动”ABW 探测技术来估计带宽。但是,生产服务中最常用的算法是主动 ABW 技术;他们观察来自两个不同端点的数据包流。

我最熟悉yaz,它从一侧发送数据包并测量另一侧的延迟变化。单侧无源路径 ABW 测量技术被认为更具实验性; AFAIK 算法没有可靠的实现。

讨论

您所要求的任务的问题是所有非侵入式2 ABW 测量技术依赖于时间。可悲的是,在使用 http 时,时间安排是一件非常棘手的事情......

您必须处理object caching(例如,akamai)和http proxies(它们会过早终止您的 TCP 会话并经常将 Web 服务器的 IP 地址欺骗给客户端)的现实情况。 您必须处理可能会间歇性受到抨击的网络主机

最后,主动 ABW 技术依赖于结构化数据包流(wrt 数据包大小和时间),这与您在标准 http 传输中看到的不同。

总结

总之,除非您为 ABW 测量设置专用客户端/服务器/协议,否则我认为您会对结果感到相当沮丧。您可以在 TCP/80 上保持 ABW 套接字连接,但我看到的工具不会使用 http3

编者注:我最初的回答表明 ABW 与 http 是可能的。经过进一步思考,我改变了主意。


尾注: ---
    见Sally Floyd's archive of end-to-end TCP/IP bandwidth estimation tools 最常见的入侵技术(例如speedtest.net)使用浏览器中的Flash 或Java 小程序在20-30 秒内向每个端点发送和接收3-5 个并行TCP 流。随着时间的推移,添加流的平均吞吐量(不包括需要重新传输的丢失数据包),您将获得该路径的 tx 和 rx ABW。这显然对 VoIP 通话或正在进行的任何下载造成了极大的破坏。破坏性测量称为批量传输容量(BTC)。见RFC 3148: A Framework for Defining Empirical Bulk Transfer Capacity Metrics。 BTC 测量通常使用 HTTP,但 BTC 似乎不是您所追求的。 这很好,因为它通过拒绝 http 缓存要缓存的对象来消除内联缓存的风险;虽然有些工具(如 yaz)是 udp-only。

【讨论】:

【参考方案2】:

由于the way TCP connections adapt to available bandwidth,不,这是不可能的。请求很小,通常适合一两个数据包。您需要至少十几个完整大小的数据包才能获得粗略的带宽估计,因为 TCP 首先必须扩展到可用带宽(“TCP 慢启动”),并且您需要平均抖动效应。如果您想要任何准确性,您可能需要数百个数据包。这就是为什么上传速率测量脚本通常会传输几兆字节的数据。

OTOH,您也许可以根据三次握手和确认的时间来估计往返延迟。但下载速度的影响至少与上传速度一样大。

【讨论】:

【参考方案3】:

javascript 或任何浏览器组件不支持测量上传性能。

我能想到的唯一方法是,如果您要上传到页面/http 处理程序,并且页面正在接收传入的字节,它可以测量每秒接收的字节数。然后使用会话 ID 将其存储在某个应用程序范围的字典中。

然后,您可以从浏览器定期轮询服务器以使用会话 ID 获取字典中的值并将其显示给用户。这样你就可以知道上传速度如何了。

【讨论】:

【参考方案4】:

您可以使用 AJAXOMeter,这是一个 JavaScript 库,可测量您的上传和下载速度。你可以看到一个现场演示here。

【讨论】:

它给了我错误的结果,由于 speedtest.net 我的当前速度下降:890 KB/s,上升:564 KB/s 但 AJAXOMeter 显示,下降:178 KB/s 及上升:134 KB/s【参考方案5】:

这通常是不可行的,因为入站和出站带宽经常不对称。不同的 ISP 在这里有显着不同的比率,这些比率可能会在一天中的均匀时间发生变化。

【讨论】:

以上是关于测量网络浏览器的带宽的主要内容,如果未能解决你的问题,请参考以下文章

如何测量客户端和服务器之间使用的网络带宽?

iperf3 在底层使用啥算法来测量网络基础设施中端到端之间的带宽和延迟?

树莓派使用iperf3测量网络带宽

Linux常用网络带宽监控工具(转)

linux如何消耗网络流量?

网速测量流量监控软件 Bandwidth Meter Pro