测量Web浏览器的带宽

时间:2011-05-20 01:21:19

标签: performance http tcp network-protocols bandwidth

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

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

5 个答案:

答案 0 :(得分:13)

概述

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

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

讨论

您要求的任务的问题是所有非侵入式 2 ABW测量技术都依赖于计时。可悲的是,在使用http ...

时,时机是一件非常棘手的事情
  • 您必须处理object caching(例如,akamai)和http proxies的现实(它会过早终止您的TCP会话并经常将网络服务器的IP地址欺骗到客户)。
  • 你必须处理可能间歇性抨击的网络主机

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

摘要

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

编辑说明:我的原始答案表明ABW与http是可能的。经过进一步反思,我改变了主意。

<小时/>

END-NOTES:

  1. 请参阅Sally Floyd's archive of end-to-end TCP/IP bandwidth estimation tools
  2. 最常见的侵入式技术(例如speedtest.net)在浏览器中使用flash或java applet发送&amp;每个端点接收3-5个并行TCP流,持续20-30秒。随着时间的推移添加流的平均吞吐量(不包括需要重传的丢失数据包),并获得该路径的tx和rx ABW。这显然对VoIP呼叫或任何正在进行的下载都具有破坏性。破坏性测量称为批量传输容量(BTC)。见RFC 3148: A Framework for Defining Empirical Bulk Transfer Capacity Metrics。 BTC测量通常使用HTTP,但BTC似乎不是你想要的。
  3. 这很好,因为它通过拒绝http缓存对象进行缓存来消除内联缓存的风险;虽然有些工具(如yaz)只是udp。

答案 1 :(得分:6)

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

OTOH,您可能能够估计三次握手和确认时间的往返延迟。但下载速度至少与上传速度相同。

答案 2 :(得分:3)

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

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

然后,从浏览器中,您可以定期轮询服务器以使用会话ID获取字典中的值并将其显示给用户。通过这种方式,您可以了解上传速度。

答案 3 :(得分:3)

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

答案 4 :(得分:3)

这通常是不可行的,因为入站和出站带宽经常不对称。不同的ISP在这里具有显着不同的比率,即使在一天的基础上也可以变化。