做后端、做运维、做站长的同学,多多少少都遇到过这样的场景:
- 自己访问网站飞快,部分地区用户反馈"打不开"或"加载半天";
- ECS 主机本机
curl接口几十毫秒,外网调用却动辄 800ms; - 一段时间没动配置,业务突然开始有零星超时告警;
- 服务器 IP 被某 CDN/邮件服务商封禁,自己却毫无察觉。
这一类问题难就难在它通常不是"服务器本身坏了",而是中间某一段链路、某一个节点、甚至某个区域的运营商出了问题。如果你只在自己电脑上 ping 一下、curl 一下,永远复现不出来。
这篇文章不讲理论,把我自己这几年踩坑总结的"全链路诊断七步法"完整写出来,每一步对应什么命令、什么工具、什么典型现象,看完你可以直接抄作业。
一、先建立心智模型:一个 HTTP 请求会经过哪些环节
排查网络问题之所以让人头大,本质是因为很多人没有清晰的链路模型,眉毛胡子一把抓。
把一次普通的 https://api.example.com/user 请求拆开看,至少经过这些环节:
用户终端
│
├─ ① 本地 DNS 解析(把域名解析成 IP)
│
├─ ② 用户出口 ISP(电信/联通/移动 城域网)
│
├─ ③ 骨干网 / 跨网互联点(最容易拥塞的地方)
│
├─ ④ 你的云厂商入口(BGP / Anycast)
│
├─ ⑤ 云内网络(SLB → ECS)
│
├─ ⑥ TCP 三次握手 + TLS 握手
│
├─ ⑦ 应用层处理(你的代码、数据库)
│
└─ ⑧ 返回响应(链路反向走一遍)
每一步都可能引入延迟或失败。全链路诊断的核心思路就是:从外往内,逐段隔离,缩小怀疑范围。
下面进入正题。
二、第一步:Ping —— 别小看这个老工具,但要会用
2.1 单点 Ping 的最大问题
很多人排查到一半就得出结论:"我 ping 着挺好啊,没问题。"——这是非常典型的误判。
单点 Ping 只能告诉你:从你这一个出口、走你这一条线路,到目标 IP 的延迟和丢包。它无法回答:
- 江苏电信用户访问是否正常?
- 广东移动用户走的路径是否绕到了境外?
- 某个海外节点是否延迟突增?
ECS 部署在华东,自己在华东用电信测当然飞快,但实际用户散布在全国甚至海外。
2.2 多地多线路 Ping 才是正确姿势
正确做法是从多个地理位置 + 多个运营商同时发起 Ping,对比延迟和丢包。
如果你不想自己搭一堆探针节点,可以直接用在线的多节点检测平台。我自己常用的是 BiuPing.com(聚合了全国电信/联通/移动以及海外节点),免费无需注册,结果会按地区+运营商分组展示,能很直观看出"是不是某个地区或某个运营商出了问题"。
判断技巧:
| 现象 | 大概率原因 |
|---|---|
| 全国所有节点都丢包/超时 | 服务器本身宕机,或被全网封禁 |
| 仅某个运营商(如移动)丢包 | 跨网互联点拥塞,或被该运营商限制 |
| 仅某个地区(如新疆、海南)延迟极高 | 区域骨干绕路,常见于自建/低价云 |
| 海外节点全部超时,国内正常 | 国际带宽问题,或被防火墙拦截 |
| 延迟正常但丢包 5%+ 抖动大 | 链路拥塞或 QoS 限速 |
2.3 持续 Ping vs 单次 Ping
排查抖动类问题时,单次 Ping 几乎没有意义。一定要做持续 Ping(至少 30 秒以上),观察延迟的最大值、最小值、标准差。
# Linux/Mac 持续 ping 60 秒并统计
ping -c 60 api.example.com
# Windows 用 -t,按 Ctrl+C 结束后会显示统计
ping -t api.example.com
重点看输出最后一行的 mdev(标准差)。如果 mdev 超过 avg 的 30%,说明链路抖动严重,即便平均延迟看起来不高,实际用户体验也会很差(尤其是游戏、视频会议、实时通信类业务)。
三、第二步:TCPing —— 当 ICMP 被禁的时候
很多云厂商默认的安全组、还有大部分企业出口防火墙,会禁用 ICMP 协议(也就是 Ping 用的协议)。这时候你 Ping 不通,不代表服务真的不可用。
正确的做法是用 TCPing —— 直接对目标 IP + 端口发起 TCP 连接,测试三次握手能否完成。
3.1 命令行用法
Linux 用 tcping(需安装)或 nc:
# 用 nc 测试 443 端口
nc -vz api.example.com 443
# 用 paping(跨平台)持续测试
paping api.example.com -p 443 -c 30
Windows PowerShell 自带:
Test-NetConnection api.example.com -Port 443
3.2 TCPing 适用场景
- ICMP 被防火墙拦截,但服务实际可访问
- 排查"端口是否对外开放"(比如刚改完安全组规则要验证)
- 7×24 监控 TCP 服务可用性
- 区分"服务器宕机"和"端口未开放"
如果 Ping 不通但 TCPing 通,说明服务正常,只是 ICMP 被拦了,可以放心。反过来,Ping 通但 TCPing 不通,那就是端口/进程的问题,跟网络链路无关,要去查应用层。
同样,TCPing 也建议从多节点发起,原理同上。BiuPing 的 TCPing 工具支持指定端口的多地检测,对验证 SLB、CDN 回源端口非常方便。
四、第三步:HTTP 测速 —— 用户实际体验的真实指标
Ping 和 TCPing 测的都是"网络层"的延迟,但用户实际感知的是"网页打开速度",这二者经常对不上。
一个 HTTP 请求的耗时拆解:
总耗时 = DNS 解析 + TCP 握手 + TLS 握手 + 等待首字节(TTFB) + 内容下载
任何一环慢都会拖累体验。最常见的几个坑:
4.1 DNS 解析慢
特别是用了海外 DNS 服务商、或者 CNAME 链路过长的网站。可以用 curl 看明细:
curl -o /dev/null -s -w "DNS:%{time_namelookup}s | TCP:%{time_connect}s | TLS:%{time_appconnect}s | TTFB:%{time_starttransfer}s | TOTAL:%{time_total}s\n" https://api.example.com/
如果 time_namelookup 超过 100ms,DNS 就有问题。
4.2 TLS 握手慢
握手慢通常是证书链问题(比如 OCSP Stapling 没开、中间证书缺失)。打开浏览器开发者工具的 Network 面板,看 Timing 标签页能直观看到。
4.3 TTFB 慢
如果前面几步都正常,但 TTFB(首字节时间)超过 500ms,问题就在你的应用层 —— 可能是数据库慢查询、可能是后端逻辑卡住,这已经不是网络问题了,要去看 APM。
排查全国测速建议同样用多节点工具,能直接给出 DNS / TCP / TLS / TTFB 的瀑布图,比自己每个地方跑 curl 高效得多。
五、第四步:Traceroute / MTR —— 定位是哪一跳出了问题
到这一步,前面的 Ping/TCPing/HTTP 测速已经告诉你"哪个地区/运营商有问题",下一步要回答的是 "问题出在中间链路的哪一跳"。
这就轮到 Traceroute(路由追踪)和 MTR 上场。
5.1 Traceroute 的原理
简单说,它通过逐渐增大数据包的 TTL 值,让路径上的每一跳路由器返回 ICMP 超时消息,从而绘制出完整路径。
# Linux/Mac
traceroute api.example.com
# Windows
tracert api.example.com
# 推荐:用 mtr 做持续追踪 + 丢包统计
mtr -r -c 50 api.example.com
5.2 怎么读懂 Traceroute 输出
新手最容易犯的错:看到中间某一跳显示 * * * 就以为那里挂了。其实大部分中间路由器会限速 ICMP 响应,"星号"通常是被限速了,只要后续跳能正常响应,就不是问题。
真正要警惕的几种现象:
- 延迟在某一跳突然飙升且不再下降 —— 那一跳是真正的瓶颈
- 某一跳开始大量丢包,且后续跳也丢包 —— 该节点拥塞
- 路径绕到境外再绕回来 —— 经典的"路由绕路",跨网互联问题
- 同一目标,不同时间路径完全不同 —— BGP 路由抖动
5.3 国内三网路由特别坑
国内电信/联通/移动三家网络互联点很少,跨网访问经常绕路。比如:
- 移动用户访问联通 IDC,可能从北京绕到上海再到广州
- 自建机房访问云厂商,可能走小运营商绕路出境
这种时候单方向 traceroute 还不够,必须做双向 traceroute(你这边 trace 服务器 + 服务器上 trace 用户的 IP),因为 IP 路由本质是单向的,去和回的路径可能完全不同。
如果嫌命令行麻烦,BiuPing 的路由追踪工具直接可视化每一跳的地理位置和运营商归属,配合 MTR 模式做持续丢包统计,定位拥塞节点会快很多。
5.4 关于线路名词
排查过程中你会经常看到 CN2、CMI、9929、CMIN2 这类名词。简单解释:
- CN2 (GIA/GT):电信精品国际线路,延迟最低、最贵
- CMI:移动国际出口
- 9929:联通精品国际网(AS9929)
- CMIN2:移动新一代国际网
跨国业务遇到延迟问题时,先查目标服务器走的是哪条线路,能少走很多弯路。
六、第五步:DNS 解析检查 —— 最容易被忽视的"源头"
我见过太多次案例:用户反馈打不开,排查半天 ECS、CDN、SLB 都正常,最后发现是某个地区的 DNS 解析被污染了,或者域名换了 NS 但全国还没生效。
6.1 DNS 排查命令
# 直接查权威解析(绕过本地缓存)
dig @8.8.8.8 api.example.com
# 查所有记录类型
dig api.example.com ANY
# 查 NS 记录变更后的全网生效情况
dig +trace api.example.com
6.2 多地 DNS 一致性检测
DNS 污染、解析劫持的特征是不同地区拿到的解析结果不一样。这个用本地命令查不出来,必须用多节点工具对各地的 DNS 解析结果做一致性比对。
如果发现:
- 各地解析 IP 一致 → DNS 正常
- 部分地区返回错误/不存在的 IP → 大概率被劫持或污染
- 部分地区超时无响应 → DNS 服务器到该地区的链路问题
6.3 TTL 设置建议
业务侧建议:
- 平时 TTL 设为 600~3600 秒
- 计划做切换前 24 小时把 TTL 调到 60 秒
- 切换完成且稳定后,再把 TTL 调回去
这样可以把切换的影响窗口控制在分钟级。
七、第六步:IP 信誉查询 —— 服务器被攻击或被滥用后的善后
这一步很多人完全没意识到,但其实非常致命。
7.1 什么场景会用到
- 服务器被入侵后被用来发垃圾邮件,IP 进了 Spamhaus 黑名单
- 邮件服务器发件被对方拒收,错误码提示
IP listed on RBL - API 调用对方服务总是 403,怀疑被风控
- 业务用户突然反馈大量 CAPTCHA 验证码
- 准备给客户分配一批新 IP,想先验下"干不干净"
7.2 IP 信誉的核心维度
一个 IP 的"信誉"通常包含:
- 黑名单举报记录(Spamhaus、SpamCop、Barracuda 等数十个 RBL)
- 类型分类(数据中心 / 住宅 / 移动 / VPN / Tor / 代理)
- 威胁情报标签(是否参与过僵尸网络、扫描、CC 攻击)
- 风险评分(0-100,越高越危险)
很多业务方(尤其是金融、电商、广告)会基于 IP 信誉做风控决策,机房 IP 默认风险就比住宅 IP 高,被列入黑名单的更不用说。
7.3 排查工具
聚合多源威胁情报的查询比单查 Spamhaus 全得多,BiuPing 的 IP 信誉查询是把多个黑名单库 + 威胁情报源合并展示的,能一次看出 IP 在哪些库里被举报、被打了什么标签。
发现 IP 被列入黑名单后的处理流程:
- 先排查根因:是被入侵了,还是邻居 IP 被牵连,还是历史遗留?
- 整改完成后,去对应黑名单库的官方网站申请移除(delisting)
- 如果是云厂商分配的 IP 历史就脏,最简单的方式是申请释放重新购买
- 预防:邮件服务器配好 SPF/DKIM/DMARC,关闭不必要端口,加好 fail2ban
八、实战案例:一次完整的"用户反馈访问慢"排查
把上面七步串起来,看一个真实案例。
背景
某 SaaS 业务部署在阿里云华东 2,前端走 CDN,后端 API 直连华东 2 的 SLB。某天客服群里出现大量"广东移动用户反馈打开慢"的反馈。开发自测一切正常。
排查过程
第一步:多地 Ping API 域名
结果:电信/联通各地都在 30ms 内,但广东、广西、海南的移动节点延迟 200ms+,丢包 3%。
→ 初步判断:移动南方区域链路问题。
第二步:TCPing 443 端口
结果一致,移动南方丢包,其他正常。
→ 排除 ICMP 限速,确认是真实链路问题。
第三步:HTTP 测速
广东移动 TTFB 高达 1.2 秒,其他地区 80ms 左右。
→ 用户体验下降确认,问题在网络层不在应用层。
第四步:从广东移动节点 traceroute 到 SLB IP
发现路径在第 7 跳进入"中国移动→中国电信"互联点时延迟从 30ms 跳到 180ms,且后续每一跳都丢包。
→ 定位:移动→电信跨网互联点拥塞。
第五步:DNS 检查
各地解析一致,排除 DNS 问题。
第六步:处理方案
- 短期:在移动南方区域加一组接入点(华南 BGP 节点)
- 中期:API 域名启用智能 DNS,按运营商分流
- 长期:评估接入移动 CMI 精品线路
复盘
- 没有多节点检测,问题永远定位不到是"移动南方"
- 没有 traceroute,永远看不到拥塞点在跨网互联
- 如果只看应用监控,TTFB 高会被误判为"代码慢"
九、工具与命令速查表
整理成一张表方便随时翻:
| 排查目标 | 命令 / 工具 | 关键指标 |
|---|---|---|
| 基础连通性、丢包 | ping -c 60 |
平均延迟、mdev 抖动、丢包率 |
| 端口连通(ICMP 被禁) | nc -vz / Test-NetConnection |
三次握手是否成功 |
| 真实用户体验 | curl -w 模板 |
DNS / TCP / TLS / TTFB 各阶段耗时 |
| 中间链路定位 | mtr -r -c 50 |
哪一跳延迟突增、哪一跳丢包 |
| DNS 是否被污染 | dig @8.8.8.8 + 多地对比 |
各地解析结果一致性 |
| IP 是否被拉黑 | 多源 RBL 聚合查询 | 黑名单命中数、风险评分、IP 类型 |
| 网段批量存活 | nmap / masscan / FindPing | 存活率、响应时间分布 |
命令行工具适合自动化、写脚本、CI 集成;多地多源场景下用聚合检测平台效率更高,两者搭配最好。
十、写在最后:建立你自己的"诊断肌肉记忆"
网络问题排查最忌讳"凭感觉"。同样一个"访问慢"现象,背后可能是丢包、可能是路由绕路、可能是 DNS 污染、可能是 IP 被封禁、也可能是你自己的代码慢。
养成几个习惯,能让你的排查效率翻几倍:
- 永远先从"多节点"看问题,再下结论——单点视角误判率 80% 以上
- 任何故障第一时间留 traceroute / mtr 快照——事后再追问题,链路状态可能已经变了
- 对核心域名做"多地+多协议"持续监控,而不是等用户反馈才动手
- 建立 IP 信誉的常态化审计——尤其是邮件服务器、API 网关、跨境业务
- 理解链路模型,胜过死记一百条命令
希望这份清单对你有用。如果还有具体场景排查不下去,欢迎评论区扔出来一起讨论。
作者注:文中提到的多节点 Ping、TCPing、HTTP 测速、路由追踪、DNS 一致性检测、IP 信誉聚合查询,可以在 BiuPing.com 直接使用,免登录,覆盖国内三网 + 海外节点,IPv4/IPv6 双栈都支持。文章纯个人实战经验分享,欢迎指正。