代理IP连接建立为什么慢?TCP三次握手和TLS握手的延时分解

curl计时参数拆分DNS/TCP/TLS/首字节耗时,定位代理连接慢的瓶颈
发布于
3

代理IP配好后每个请求感觉比直连多了几百毫秒——不是代理带宽不够,是多了至少一次TCP握手和一次TLS握手。用curl的计时参数把延时拆开,能看到卡在哪一步。

用curl把请求时间拆开看

curl -x http://代理IP:端口 
  -w "DNS解析: %{time_namelookup}snTCP握手: %{time_connect}snTLS握手: %{time_appconnect}sn首字节: %{time_starttransfer}sn总时间: %{time_total}sn" 
  -o /dev/null -s https://目标网站

输出解读:time_namelookup=DNS查目标域名的耗时。time_connect=TCP三次握手完成耗时(含DNS)。time_appconnect=TCP加TLS握手总耗时。time_starttransfer=从发请求到收到第一个字节的总耗时。time_total=完整请求时间。

典型直连:DNS 10ms + TCP 30ms + TLS 50ms = 约90ms建立连接。典型代理:DNS 5ms + TCP到代理 40ms + TLS到目标(经过代理)60ms + 代理转发延迟20ms = 约125ms。多了35ms是代理的转发延迟。

延时大头在哪

time_connect减去time_namelookup=纯TCP握手时间。如果这个值超过100ms→代理节点太远,换更近的节点。天行IP(邀请码 blsj,月付6元起)选延迟低的节点。

time_appconnect减去time_connect=纯TLS握手时间。TLS 1.3比1.2快一个往返(1-RTT vs 2-RTT)→确认代理和客户端都支持TLS 1.3。time_starttransfer减去time_appconnect=服务器处理时间→和目标网站性能有关,代理管不了。

复用连接省掉握手

HTTP Keep-Alive让同一个TCP连接可以发多个请求——省掉后续请求的TCP握手和TLS握手。相当于第一个请求90ms加后续每个请求5ms(只有转发延迟)。参考第34篇(ID 13579)的连接池配置。

常见问题

代理模式下time_namelookup比直连慢?

代理服务器的DNS解析目标域名时走了代理服务器的DNS——可能没有使用最快的DNS服务器。确认代理的DNS配置(看代理服务器用的是哪个DNS)。

time_starttransfer远大于time_appconnect?

从连接建立到收到第一个字节间隔太长→目标网站响应慢或代理转发慢。如果是代理转发慢(代理服务器的处理性能差),换代理节点。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600

代理IP延迟高的原因可能是网络路径长的客观事实(物理距离决定的延迟降不了),也可能是节点配置问题(可以优化)。先测清楚延迟卡在哪一段再动手。 延迟到底卡在哪——从你到目标的分段测速 你通过代理IP访问目标网站的延迟由三段组成:你到代理IP