使用curl分析HTTPS连接耗时

前言

当访问某个 HTTPS 网站时,如果发现连接建立时间较长或请求响应缓慢,可以通过 curl输出的时间指标快速定位问题出现在连接链路的哪个阶段,例如:

  • DNS 解析是否耗时过长
  • TCP 建连是否存在延迟
  • TLS 握手是否异常
  • 服务端响应是否缓慢

使用 curl 查看连接各阶段耗时

Linux/macOS 环境下可执行:

curl -o /dev/null -s -w "DNS解析: %{time_namelookup}s\nTCP连接: %{time_connect}s\nTLS握手: %{time_appconnect}s\n首字节时间(TTFB): %{time_starttransfer}s\n总耗时: %{time_total}s\n" https://example.com

Windows 环境建议使用英文输出,避免终端编码导致中文乱码:

curl -o /dev/null -s -w "time_namelookup: %{time_namelookup}s\ntime_connect: %{time_connect}s\ntime_appconnect: %{time_appconnect}s\ntime_starttransfer: %{time_starttransfer}s\ntime_total: %{time_total}s\n" https://example.com

各时间指标含义

变量含义
time_namelookupDNS 查询完成时间
time_connectTCP 三次握手完成时间
time_appconnectSSL/TLS 握手完成时间(HTTPS 特有)
time_pretransfer开始传输前的总准备时间
time_starttransfer收到服务器第一个字节时间(TTFB)
time_total整个请求完成时间

实测分析

下面以访问 www.baidu.com 为例进行测试。

在相同网络出口、相同目标站点的情况下,两次请求的整体耗时却存在明显差异。

从测试结果可以发现:

  1. 第一阶段的 DNS 解析时间已经出现明显差距;
  2. 后续 TCP 建连和 TLS 握手时间也是有差距;
  3. 加起来总耗时差异就会显得有些大。

当遇到 HTTPS 访问缓慢的问题时,建议优先观察:

  • time_namelookup 是否异常升高
  • time_connect 是否明显增加
  • time_appconnect 是否存在 TLS 握手延迟
  • time_starttransfer 是否过长(服务端处理慢)

通过逐阶段分析,可以快速缩小排查范围,避免盲目定位问题。

从本次测试结果来看,需以DNS 解析阶段作为突破点,后续可进一步通过更换 DNS 服务器、抓包分析或使用 dig/nslookup 等工具进行验证。

出现以上差距的实际原因是:一个使用了国内dns,解析较快,并且返回国内IP;一个使用了国外dns,解析出现延迟,并返回了国外IP;导致每个阶段都增加了延迟。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注