服务器明明跑在带宽充足、配置不差的机器上,国内用户打开页面却要好几秒;换成海外同事访问,速度又快得飞起。这种"只有国内慢"的现象,几乎都出在跨境链路上:DNS 解析要绕到境外、TCP 握手要跨洋往返好几次、每个静态资源都要跨洋拉取一遍。更麻烦的是,这类问题往往不是单一原因,DNS、TCP、TLS、静态资源、源站线路五个环节各自贡献一部分耗时。本文按"用户敲下回车到页面渲染完成"的时间顺序,逐段拆解耗时来源,给出对应的检测方法与优化手段。
一、先测量:把耗时拆成五段
优化的前提是知道时间花在哪。最实用的工具是 curl 的分段计时,它能把一次 HTTPS 请求拆成若干个可归因的阶段。
1.1 curl 分段计时
curl -o /dev/null -s -w 'DNS:%{time_namelookup} TCP:%{time_connect} TLS:%{time_appconnect} TTFB:%{time_starttransfer} TOTAL:%{time_total}\n' https://example.com/
各字段含义与责任归属:
| 字段 | 含义 | 耗时大时的责任环节 |
|---|---|---|
| time_namelookup | DNS 解析完成时间 | DNS 服务商、解析线路、TTL 设置 |
| time_connect | TCP 三次握手完成时间 | 跨境链路质量、防火墙、距离 |
| time_appconnect | TLS 握手完成时间 | 加密套件、证书链、RTT 放大效应 |
| time_starttransfer | 收到第一个字节(TTFB) | 服务器处理、数据库、应用逻辑 |
| time_total | 全部传输完成 | 内容体积、带宽、传输效率 |
用减法得到各段净耗时:TLS - time_connect 是 TLS 握手耗时;time_starttransfer - time_appconnect 是服务器处理耗时;time_total - time_starttransfer 是内容传输耗时。先算出哪一段最大,再针对性优化,不要一上来就换机房。
1.2 网络层基线
# 延迟与抖动基线,100 个包 ping -c 100 -i 0.2 203.0.113.10 # 逐跳定位延迟与丢包 mtr --report --report-cycles 100 203.0.113.10 # 机房对 ICMP 限速时用 TCP 模式 mtr -T -P 443 --report --report-cycles 100 203.0.113.10
关注 mdev(抖动)与丢包率。mdev 超过 avg 的 15% 说明链路不稳,丢包超过 1% 就该重视。
二、第一段优化:DNS 解析
DNS 是很多海外站点被忽略的耗时大户。如果权威 DNS 在境外,国内用户每次解析都要跨洋查询,首次访问可能要多花几百毫秒,且 TTL 过期后重复发生。
2.1 检测 DNS 解析耗时与结果
# 查看解析结果 dig +short example.com # 指定公共 DNS 查询,对比不同 DNS 的响应 dig @8.8.8.8 example.com dig @1.1.1.1 example.com # 查看完整解析过程与耗时 dig example.com # 查询指定记录类型 nslookup -type=AAAA example.com nslookup -type=MX example.com # 追踪完整解析链路 dig +trace example.com
用 dig 输出中的 Query time 可以横向对比不同 DNS 服务的响应速度。dig +trace 则能看到从根服务器到权威服务器的完整查询链条,用于排查某个层级的响应缓慢。
2.2 DNS 优化手段
- 使用支持分区域解析的 DNS 服务:让国内用户解析到离他们更近的节点或优化线路入口,海外用户解析到源站或就近节点
- 合理设置 TTL:TTL 太短会增加解析频率,太长则变更生效慢。稳定业务可设 300-3600 秒,变更前再临时调低
- 减少解析依赖:页面引用的第三方域名越多,DNS 查询次数越多。合并域名、减少外链能有效降低首屏时间
- 考虑 HTTPDNS 或 DoH:移动端 App 场景下可绕过运营商 Local DNS 的污染与劫持问题
- 启用 CAA 与 DNSSEC 时评估开销:安全性提升的同时会增加查询与验证成本
三、第二段优化:CDN 分发
对海外站点而言,CDN 通常是投入产出比最高的一项优化。它的核心价值是把静态资源(图片、CSS、JS、字体、视频切片)缓存到离用户更近的节点,让绝大多数请求不必跨洋。
3.1 为什么 CDN 对跨境场景特别有效
跨境访问慢的本质是"每个请求都要跨洋往返"。一个典型网页有几十个资源请求,如果都要到源站取,光是 TCP + TLS 握手的往返就要叠加几十次 RTT。CDN 之后:
- 静态资源在边缘节点命中,用户与节点之间只有几十毫秒
- 连接复用(HTTP/2 多路复用)进一步减少握手次数
- 源站只需处理动态请求与回源,带宽与连接压力大幅下降
3.2 静态资源优化要点
- 拆分动静:静态资源走独立域名并接入 CDN,动态接口保持回源
- 设置合理缓存头:带版本号的静态资源用长
Cache-Control(如max-age=31536000),HTML 页面用短缓存或no-cache - 启用压缩:Brotli 或 Gzip 压缩文本类资源,体积通常可下降 60%-80%
- 图片格式升级:WebP / AVIF 相比 JPEG/PNG 有显著体积优势,配合响应式尺寸
- 开启 HTTP/2 或 HTTP/3:多路复用减少连接数;HTTP/3 基于 QUIC,在高丢包跨洋链路上表现更好
- 资源合并与懒加载:减少首屏请求数,非关键资源延后加载
- 预热与刷新策略:大促前预热热点资源,发布后及时刷新变更内容
3.3 验证 CDN 是否命中
# 查看响应头中的缓存状态 curl -I https://cdn.example.com/app.js # 关注这些头 # cache-control: max-age=31536000 # x-cache: HIT / MISS # age: 表示该资源在节点上已缓存的秒数 # via / server / cf-ray 等字段可判断经由的 CDN 节点
首次访问通常是 MISS(需要回源),第二次应为 HIT。若持续 MISS,检查缓存规则、是否带了 Set-Cookie、URL 是否带有随机参数(如时间戳)导致无法命中。
四、第三段优化:服务器线路
CDN 解决静态资源,动态请求和回源流量仍要走源站线路。这一段的质量由机房位置、线路类型、运营商接入共同决定。
4.1 机房位置决定延迟量级
以下为常见机房到中国大陆的 RTT 经验区间,仅为参考值,实际随线路类型、运营商、时段大幅波动,请以自身实测为准:
| 机房地区 | RTT 参考区间 | 适用业务 |
|---|---|---|
| 香港 | 30-60ms | 国内用户为主的动态业务 |
| 新加坡 | 40-80ms | 东南亚 + 国内兼顾 |
| 日本 | 60-100ms | 国内东部用户、对稳定性要求高的业务 |
| 美国西海岸 | 150-200ms | 欧美用户为主、国内访问为辅 |
| 欧洲 | 200-300ms | 欧洲业务、后台服务 |
需要强调:物理距离带来的延迟无法通过任何软件手段消除。光在光纤中每毫秒约传播 200 公里,跨洋往返的物理下限决定了美西到国内不可能低于 100ms 量级。所以对国内用户为主的业务,选香港/新加坡/日本才是根本解法。
4.2 线路类型决定稳定性
同样的机房,走不同线路体验差异巨大。跨境链路中常见的影响因素:
- 是否绕路:本可直达却绕道第三地,延迟凭空翻倍
- 走哪张骨干网:国内访问境外常见经由 163 骨干网(其节点 IP 常以
202.97.开头)或 CN2 网络(节点 IP 常以59.43.开头)。后者在晚高峰的拥塞程度通常更轻,但具体产品形态(如 CN2 GT 与 CN2 GIA)在覆盖方向和路径完整性上有差异,GT 通常只在部分路径或单向走优化网络,GIA 则双向全程走优化网络 - 国际出口拥塞:国内时间 20:00-23:00 是跨境访问高峰,出口排队会导致延迟与丢包同步上升
- 是否 BGP 多线:机房若同时接入多家运营商,不同运营商用户可各走本网,避免跨网互联点拥塞
4.3 路由检测方法
# 看路径是否绕路 traceroute -n -T -p 443 203.0.113.10 # 逐跳延迟与丢包 mtr -T -P 443 --report --report-cycles 100 203.0.113.10 # 回程测试:登录服务器反向追踪到国内 mtr -n --report --report-cycles 100 1.2.4.8
去程和回程都要测。很多线路去程很快但回程走普通骨干,晚高峰照样卡。判断绕路时逐跳核对 IP 归属地,出现地理上不合理的中转节点即为绕路。
五、第四段优化:协议与应用层
即使线路不变,通过减少往返次数也能显著改善体感。
5.1 减少 RTT 次数
- 启用 HTTP/2 / HTTP/3:多路复用,一个连接并发多个请求,避免队头阻塞
- 开启 Keep-Alive:复用 TCP 连接,省去重复握手
- TLS 会话复用:开启 session ticket / session cache,减少完整握手次数
- OCSP Stapling:避免客户端额外发起证书状态查询
- 启用 0-RTT(HTTP/3):在安全评估允许的前提下减少握手往返
5.2 传输效率优化
# 查看当前拥塞控制算法 sysctl net.ipv4.tcp_congestion_control # 查看可用算法 sysctl net.ipv4.tcp_available_congestion_control # 查看 TCP 缓冲区设置 sysctl net.ipv4.tcp_rmem net.ipv4.tcp_wmem
对跨洋高延迟链路,BBR 通常比默认 CUBIC 有更好的吞吐表现,尤其在存在轻微丢包时。但要明确:BBR 优化的是吞吐,不会降低延迟和抖动。同时应适当调大 TCP 缓冲区,避免长肥管道下窗口受限。
5.3 服务器自身排查
# 网卡协商状态 ethtool eth0 # 网卡错包与丢帧 cat /proc/net/dev # 连接的 RTT 与重传 ss -i # 实时流量,确认是否跑满 sar -n DEV 1
若 ss -i 中 retrans 持续增长且 rtt 偏高,说明存在真实丢包;若 ethtool 显示速率或双工协商异常,先解决链路层问题。
六、优化实施清单
- 测量基线:用
curl -w记录五个阶段的耗时,用ping -c 100 -i 0.2记录延迟与抖动 - 排查 DNS:
dig +short、dig @8.8.8.8对比响应速度,检查 TTL 与解析结果是否合理 - 接入 CDN:静态资源独立域名并全量接入,配置长缓存与压缩
- 验证命中:
curl -I确认x-cache为 HIT,age正常增长 - 升级协议:开启 HTTP/2 或 HTTP/3、Keep-Alive、TLS 会话复用、OCSP Stapling
- 压缩与瘦身:Brotli/Gzip、WebP/AVIF、代码合并与懒加载
- 检查线路:
traceroute -n -T -p 443看是否绕路,mtr -T -P 443双向测试 - 晚高峰复测:在 21 点前后重测全部指标,与白天对比
- 服务端调优:评估 BBR、调整 TCP 缓冲区、检查网卡与连接状态
- 评估机房位置:若用户以国内为主且延迟不可接受,考虑迁移到香港/新加坡/日本
- 建立长期监控:把分段耗时纳入定时采样,形成时间序列
- 验证闭环:每次优化后重测,确认目标段落耗时确实下降
七、常见误区
7.1 只优化一个环节
页面加载是串行叠加的,如果 DNS 300ms、TCP 200ms、TLS 400ms、内容传输 2s,只优化 TLS 省下 200ms 感知有限。先找出最大的那一段,往往收益最明显;而对跨境场景,CDN 通常是一次性削减最多环节的手段。
7.2 以为换了机房就万事大吉
机房位置决定延迟量级,但如果 DNS 仍解析到境外、静态资源没有 CDN,换机房的收益会被这些环节吃掉。先做 CDN 和 DNS 优化,再决定是否迁移,很多时候迁移就不必要了。
7.3 忽略动态内容的回源
CDN 对静态资源有效,但个性化页面、API、数据库查询仍要回源。对这类内容应考虑接口合并、缓存片段(ESI / 边缘计算)、数据库读写分离等手段,而不是指望 CDN。
7.4 只看单次测试结果
跨境链路质量随时段波动很大。只在白天测一次就判断"已经优化好了",晚高峰可能依然糟糕。必须在晚高峰(20:00-23:00)复测,并做多网络交叉验证。
小结
网站海外访问慢是多个环节叠加的结果,解决思路是"先测量、再分段、按收益排序"。用 curl -w 把一次请求拆成 DNS、TCP 建连、TLS 握手、服务器处理、内容传输五段,找出最大耗时段;用 dig 系列命令排查解析环节并改用分区域解析;用 CDN 承接静态资源,这是跨境场景投入产出比最高的一步;用 traceroute -T -p 443 与 mtr -T -P 443 双向检查线路是否绕路、晚高峰是否拥塞;用 HTTP/2、Keep-Alive、BBR、压缩等手段减少往返次数与传输体积。避坑要点:不要只优化单一环节,先找最大耗时段;不要忽略 DNS,它常常贡献几百毫秒;不要以为 CDN 万能,动态请求仍需回源优化;不要只在白天测试,晚高峰数据才是真实水平;不要指望 BBR 降低延迟,它只改善吞吐。最后要清醒认识到,机房位置决定的物理延迟下限无法突破,当用户以国内为主且延迟要求苛刻时,把源站放到香港、新加坡或日本,才是最彻底的解法。
本文延迟数值均为经验参考区间,实际表现随线路类型、运营商、时段与网络状况波动;不涉及任何具体厂商报价。
企业QQ咨询




