roo*_*ook 10 performance tcp http bandwidth network-protocols
是否可以通过监控正常的http请求来衡量Web浏览器的上传和/或下载速度?理想情况下,Web应用程序无需任何修改即可告知客户端的速度,并且无需像JavaScript/Java/Flash那样的客户端脚本.因此,即使客户端使用像Curl这样的库访问服务,它仍然可以工作.如果这是可能的,怎么样?如果不可能,为什么?这种方法有多准确?
(如果它有助于假设PHP/Apache,但实际上这是一个独立于平台的问题.同样能够衡量上传速度对我来说更重要.)
Mik*_*ton 13
您要求沿路径通常称为"被动"可用带宽(ABW)测量(与测量单个链路的ABW相比).有许多不同的技术1使用被动观察或低带宽"主动"ABW探测技术来估计带宽.但是,生产服务中使用的最常用算法是有源 ABW技术; 他们观察来自两个不同端点的数据包流.
我最熟悉的是yaz
,它从一侧发送数据包并测量另一侧的延迟变化.单侧无源路径ABW测量技术被认为是更实验性的; 算法AFAIK没有可靠的实现.
您要求的任务的问题是所有非侵入式2 ABW测量技术都依赖于时序.可悲的是,使用http时,时机是一件非常棘手的事情......
最后,主动ABW技术依赖于结构化数据包流(wrt数据包大小和时序),这与您在标准http传输中看到的不同.
总之,除非您为ABW测量设置专用客户端/服务器/协议,否则我认为您对结果感到非常沮丧.您可以将您的ABW套接字连接保留在TCP/80上,但我见过的工具不会使用http 3.
编辑说明:我的原始答案表明ABW与http是可能的.经过进一步的反思,我改变了主意.
yaz
)只是udp.由于TCP连接适应可用带宽的方式,不可能做到这一点.请求很小,通常适合一个或两个数据包.您需要至少十几个全尺寸数据包才能获得粗略的带宽估计,因为TCP首先必须扩展到可用带宽("TCP慢启动"),并且您需要平均抖动效果.如果你想要任何准确性,你可能需要谈论数百个数据包.这就是为什么上传速率测量脚本通常会传输几兆字节的数据.
OTOH,您可能能够估计三次握手和确认时间的往返延迟.但下载速度至少与上传速度相同.