如何测量延迟
网络延迟可以指单向延迟,但往返时间(RTT)更容易测量。RTT 涵盖数据从设备传到目标再返回的整个过程。网页测试工具还会测量连接时间、首字节时间(TTFB)和总响应时间。
以下 curl 命令会以秒为单位显示各阶段的累计耗时:
curl -o /dev/null -s -w 'connect=%{time_connect} ttfb=%{time_starttransfer} total=%{time_total}' https://example.com
这些数值并非单纯的网络延迟,还包括域名解析、连接建立和服务器处理等环节的耗时。
哪些因素会增加延迟
- 距离与路由: 信号传输需要时间。网络路径越长或越迂回,延迟通常越高。
- 连接建立: 发送请求前,可能需要完成 DNS 查询、TCP 握手和 TLS 握手。
- 网络拥塞与丢包: 链路繁忙时会出现排队。丢失的数据包可能需要重传,导致 RTT 增加。
- 端点处理: 代理服务器或网站可能需要时间检查、转发请求或生成响应。TTFB 高并不一定表示网络本身很慢。
延迟与带宽
| 指标 | 衡量内容 | 常用单位 |
|---|---|---|
| 延迟 | 一次传输的延迟 | 毫秒 |
| 带宽 | 传输容量 | Mbps 或 Gbps |
| 响应时间 | 完整请求的耗时 | 毫秒或秒 |
带宽和延迟是相互独立的指标。即使连接带宽很高,每次响应前仍可能出现等待。传输大量数据时,带宽更重要;需要发送大量小请求的任务通常更容易受延迟影响。
延迟与代理
正向代理会将请求路径从 client → website 改为 client → proxy → website。多出的这一跳通常会增加一些延迟,具体增加多少取决于距离、路由、负载和目标服务器。
要诊断代理延迟,可以:
- 比较同一个 URL。 在允许直连的情况下,从同一客户端分别测量直连请求和代理请求。
- 让出口地区与任务匹配。 靠近目标服务器的出口通常能缩短传输时间,除非测试要求使用其他地区。
- 复用连接。 HTTP keep-alive 和连接池可避免每个请求都重复建立连接。
- 跟踪百分位数。 中位数和 p95 数据能反映偶发的慢请求,而平均值可能掩盖这些情况。将连接超时阈值设在正常波动范围之上,并采用有次数上限的退避重试。
常见问题
代理延迟多少算好?
这取决于目标、出口地区和工作负载。应将代理请求与直连基准进行比较,关注稳定的中位数和 p95 数据,而不是依赖统一的阈值。
代理一定会增加延迟吗?
通常会,因为代理增加了一段网络路径和一个处理环节。如果网络路由不同,代理路径偶尔也可能与直连路径速度相当,甚至更快。
延迟和 ping 是一回事吗?
不是。ping 通常测量 ICMP 往返时间。HTTP 请求还包括 DNS、连接建立、加密、代理处理和网站响应时间。