searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

网络性能诊断:当云服务器访问外网或互访延迟高时,系统性的排查思路与工具使用

2026-05-14 14:17:16
4
0

一、先定框架:网络排查的"三层漏斗模型"

网络问题看起来复杂,但本质上只有三层。我把它叫做"三层漏斗模型"——从外到内,逐层缩小范围,直到锁定根因。

层级 排查对象 核心问题 典型工具
第一层:云上网络层 云主机、VPC、安全组、路由表、NAT网关、带宽 是不是云上的配置或资源限制导致的? ping、traceroute、控制台监控
第二层:公网链路层 运营商骨干网、国际出口、DNS解析、CDN回源 是不是公网传输过程中出了问题? mtr、dig、httping、跨国ping
第三层:应用与目标层 目标服务器、第三方API、数据库连接 是不是对方的问题,不是你的问题? curl -w、telnet、tcping

核心原则:先排除自己,再怀疑别人。 80%的"网络问题"其实是自己的配置问题,但我们总是习惯性地先怪运营商。


二、第一层:云上网络层排查——"先扫自家院子"

当你发现延迟高的第一步,不是去ping百度,而是先检查你自己的云上配置

2.1 第一步:查带宽,是不是被打满了?

这是最常见、也最容易被忽略的原因。

打开云控制台,查看你的云主机或负载均衡的带宽监控曲线。如果出方向带宽已经打满(比如你买的是5Mbps,但实际跑到了4.8Mbps),那延迟高就是必然的——管道堵了,水流再急也没用。

怎么判断?看两个指标:

  • 带宽利用率:超过80%就要警惕,超过95%基本就是瓶颈
  • 丢包率:带宽打满时,丢包率会从0%飙升到5%以上

某电商团队在大促期间发现API响应慢,排查了半小时应用代码没找到问题,最后一看带宽监控——出方向带宽打满了,丢包率12%。临时升级带宽后,响应时间从3秒降到200毫秒。

工具:控制台带宽监控 + 云监控告警(建议设置80%利用率告警)

2.2 第二步:查安全组,是不是规则太多导致性能下降?

安全组规则不是免费的。每一条规则都需要匹配,规则越多,匹配开销越大。当安全组规则超过50条时,可能导致网络包处理延迟增加。

排查方法

  • 查看安全组规则数量,超过50条考虑拆分
  • 检查是否有重叠规则(比如允许了0.0.0.0/0访问80端口,又单独允许了某个IP访问80端口——后面那条是多余的)
  • 检查是否有过于宽泛的规则(比如允许所有ICMP——这在生产环境是大忌)

2.3 第三步:查路由表,是不是流量走了弯路?

路由表配置错误,会导致流量绕远路。

典型场景:你的云主机在VPC-A,需要访问同区域的云数据库,但路由表把流量导向了NAT网关,先出公网再回来——延迟直接翻倍。

排查方法

  • 检查VPC路由表,确认内网流量走的是"内网互通"而不是"出公网"
  • 检查是否有不必要的静态路由把流量导向了错误的下一跳

某企业的开发环境就出过这个问题:路由表配置错误,内网流量全部走NAT网关出公网再回来,延迟从1ms变成了80ms。改了一条路由,问题瞬间解决。

2.4 第四步:查NAT网关,是不是SNAT连接数打满了?

NAT网关是有连接数上限的。当大量云主机通过同一个NAT网关出公网时,SNAT连接数可能被打满,新连接被拒绝或排队。

排查方法

  • 查看NAT网关的连接数监控,超过最大连接数的80%就要扩容
  • 查看是否有僵尸连接(长时间不关闭的连接占着坑位)
  • 考虑增加EIP数量,分散SNAT压力

工具:NAT网关控制台连接数监控 + SNAT端口利用率


三、第二层:公网链路层排查——"查路上的坑"

确认云上配置没问题后,下一步就是查公网链路。

3.1 第一步:ping + traceroute——定位丢包在哪一跳

这是最基础、也最有效的组合拳。

ping 告诉你"通不通、延迟多少"。
traceroute(或mtr) 告诉你"在哪一跳开始出问题"。

操作方法

1# 先ping目标,看延迟和丢包
2ping -c 20 目标IP
3
4# 再trace路径,看哪一跳开始异常
5traceroute 目标IP
6# 或用更强大的mtr
7mtr -r -c 20 目标IP
8

怎么看结果?

现象 含义 可能原因
前几跳延迟正常,中间某一跳突然飙升 瓶颈在运营商骨干网某个节点 运营商网络拥塞,你控制不了
最后几跳延迟正常,但中间丢包严重 链路质量差 国际线路或跨运营商传输
第一跳(网关)延迟就很高 你自己的网络有问题 云主机到网关之间的内部网络
全程延迟都高(>200ms跨国) 物理距离决定的,正常 考虑用CDN或全球加速

某跨境电商的案例:用户反馈访问海外站慢。mtr结果显示,流量在跨太平洋链路的第8跳开始丢包率飙升到30%。这不是云的问题,是国际海底光缆在那个时段拥塞——换了个时段访问,问题自动消失。

3.2 第二步:mtr——比traceroute强10倍的神器

traceroute只能看一次路径,但mtr能持续监测每一跳的延迟和丢包率,实时刷新。

mtr的输出怎么看?

1Host                      Loss%   Snt   Last   Avg  Best  Wrst
21. 10.0.0.1               0.0%    20    0.3   0.4   0.2   1.1
32. 100.64.0.1             0.0%    20    1.2   1.5   0.8   3.4
43. 202.97.xx.xx           2.0%    20    8.7   9.1   7.2  15.3  ← 开始升高
54. 202.97.xx.xx           5.0%    20   45.2  48.7  42.1  67.8  ← 明显异常
65. 目标IP                 3.0%    20  120.5 125.3 118.2 145.6
7

第4跳开始延迟飙升、丢包增加——问题就在这一跳。这是运营商的节点,你改不了,但你知道问题在哪了,工单就有依据了。

3.3 第三步:dig——DNS解析慢,你以为是网络慢

很多时候,你以为的"网络延迟高",其实是DNS解析慢

浏览器要先把域名解析成IP,才能建连接。如果DNS解析花了2秒,你会以为是网络慢,但其实是DNS慢。

排查方法

1# 查看DNS解析耗时
2dig 目标域名
3# 关注Query time字段
4
5# 对比不同DNS的解析速度
6dig @8.8.8.8 目标域名
7dig @114.114.114.114 目标域名
8
DNS Query time 评价
默认DNS 150ms 太慢了
8.8.8.8 30ms 正常
114.114.114.114 25ms 正常(国内更快)

某团队发现API调用慢,排查了一圈网络没问题,最后发现是云上默认DNS响应慢。把DNS改成114.114.114.114后,首次连接建立时间从1.5秒降到0.3秒。

3.4 第四步:httping——比curl更适合测HTTP延迟

curl能测HTTP请求的总时间,但它把DNS解析、TCP建连、SSL握手、服务器处理、内容传输全混在一起了,你看不出哪个环节慢。

httping 可以把这些环节拆开:

指标 含义 正常值
dns DNS解析时间 <50ms
connect TCP三次握手时间 <100ms(同城)/ <200ms(跨城)
ssl SSL握手时间 <200ms
send 发送请求时间 忽略不计
wait 服务器处理时间 <500ms(API)/ <100ms(静态资源)
total 总时间 各环节之和

某API网关优化案例:httping显示connect时间正常(80ms),但wait时间高达2.3秒——问题不在网络,在后端服务处理慢。 团队立刻把排查方向从网络转向应用,半小时就找到了慢SQL。


四、第三层:应用与目标层排查——"也许不是你的锅"

确认链路没问题后,最后一步是确认:是不是目标服务器的问题?

4.1 tcping——测端口通不通,比telnet好用

telnet只能测TCP端口,tcping还能测延迟和丢包。

1tcping 目标IP 443
2

如果tcping显示延迟正常、无丢包,说明链路到目标服务器是通的,网络没问题。如果tcping也超时,那就是目标服务器的防火墙或安全组拦了你。

4.2 curl -w——把HTTP请求的每个环节计时拆开

1curl -o /dev/null -s -w "
2dns: %{time_namelookup}s
3connect: %{time_connect}s
4ssl: %{time_appconnect}s
5total: %{time_total}s
6" https://目标域名
7

输出示例:

1dns: 0.032s
2connect: 0.087s
3ssl: 0.156s
4total: 2.341s
5

dns+connect+ssl = 0.275秒,但total是2.341秒——差的那2秒,是服务器处理时间。 网络没问题,是后端慢。

4.3 对比测试:换个目标,问题还在吗?

如果你怀疑是目标服务器的问题,最简单的验证方法是:换一个目标测。

  • 访问目标A慢,访问目标B快 → 目标A的问题
  • 访问所有目标都慢 → 你自己的网络问题
  • 访问所有目标都快,但用户反馈慢 → 可能是用户侧网络问题(弱网、跨运营商)

五、实战排查流程:一张表搞定

步骤 动作 工具 预期结果 如果异常
1 查带宽利用率 控制台监控 <80% 升级带宽或优化流量
2 查安全组规则数 控制台 <50条 清理冗余规则
3 查路由表 控制台 内网走内网路由 修正路由配置
4 ping目标 ping 延迟<100ms,丢包<1% 进入下一步
5 traceroute/mtr mtr 定位丢包/延迟突增的跳 记录跳数,联系运营商
6 查DNS dig Query time<50ms 更换DNS
7 测HTTP各环节 httping/curl -w 拆分各环节耗时 定位慢的环节
8 测目标端口 tcping 延迟正常,无丢包 目标服务器防火墙问题
9 换目标对比 curl 确认是谁的问题 明确责任方

六、写在最后:网络排查的本质,是"排除法"

网络问题之所以难,不是因为技术难,而是因为变量太多、不可控因素太多。你控制不了运营商的骨干网,控制不了国际海底光缆,控制不了目标服务器的防火墙。

但你能控制的是:你的带宽有没有打满、你的安全组有没有写错、你的路由有没有配反、你的DNS有没有选对。

这四件事,占了80%的"网络问题"。

剩下20%,用mtr定位跳数,用httping拆分环节,用tcping确认端口——你不需要解决它,你只需要证明"不是我的问题"。 这就够了。

网络排查不是玄学,是科学。工具给你了,思路给你了,流程给你了。下次凌晨两点告警响了,别慌——打开mtr,按流程走一遍,半小时内锁定根因。

你的代码跑在网络上,网络的品质就是你应用的天花板。而诊断网络的能力,就是你在天花板上开一扇窗的能力。

0条评论
0 / 1000
思念如故
1810文章数
3粉丝数
思念如故
1810 文章 | 3 粉丝
原创

网络性能诊断:当云服务器访问外网或互访延迟高时,系统性的排查思路与工具使用

2026-05-14 14:17:16
4
0

一、先定框架:网络排查的"三层漏斗模型"

网络问题看起来复杂,但本质上只有三层。我把它叫做"三层漏斗模型"——从外到内,逐层缩小范围,直到锁定根因。

层级 排查对象 核心问题 典型工具
第一层:云上网络层 云主机、VPC、安全组、路由表、NAT网关、带宽 是不是云上的配置或资源限制导致的? ping、traceroute、控制台监控
第二层:公网链路层 运营商骨干网、国际出口、DNS解析、CDN回源 是不是公网传输过程中出了问题? mtr、dig、httping、跨国ping
第三层:应用与目标层 目标服务器、第三方API、数据库连接 是不是对方的问题,不是你的问题? curl -w、telnet、tcping

核心原则:先排除自己,再怀疑别人。 80%的"网络问题"其实是自己的配置问题,但我们总是习惯性地先怪运营商。


二、第一层:云上网络层排查——"先扫自家院子"

当你发现延迟高的第一步,不是去ping百度,而是先检查你自己的云上配置

2.1 第一步:查带宽,是不是被打满了?

这是最常见、也最容易被忽略的原因。

打开云控制台,查看你的云主机或负载均衡的带宽监控曲线。如果出方向带宽已经打满(比如你买的是5Mbps,但实际跑到了4.8Mbps),那延迟高就是必然的——管道堵了,水流再急也没用。

怎么判断?看两个指标:

  • 带宽利用率:超过80%就要警惕,超过95%基本就是瓶颈
  • 丢包率:带宽打满时,丢包率会从0%飙升到5%以上

某电商团队在大促期间发现API响应慢,排查了半小时应用代码没找到问题,最后一看带宽监控——出方向带宽打满了,丢包率12%。临时升级带宽后,响应时间从3秒降到200毫秒。

工具:控制台带宽监控 + 云监控告警(建议设置80%利用率告警)

2.2 第二步:查安全组,是不是规则太多导致性能下降?

安全组规则不是免费的。每一条规则都需要匹配,规则越多,匹配开销越大。当安全组规则超过50条时,可能导致网络包处理延迟增加。

排查方法

  • 查看安全组规则数量,超过50条考虑拆分
  • 检查是否有重叠规则(比如允许了0.0.0.0/0访问80端口,又单独允许了某个IP访问80端口——后面那条是多余的)
  • 检查是否有过于宽泛的规则(比如允许所有ICMP——这在生产环境是大忌)

2.3 第三步:查路由表,是不是流量走了弯路?

路由表配置错误,会导致流量绕远路。

典型场景:你的云主机在VPC-A,需要访问同区域的云数据库,但路由表把流量导向了NAT网关,先出公网再回来——延迟直接翻倍。

排查方法

  • 检查VPC路由表,确认内网流量走的是"内网互通"而不是"出公网"
  • 检查是否有不必要的静态路由把流量导向了错误的下一跳

某企业的开发环境就出过这个问题:路由表配置错误,内网流量全部走NAT网关出公网再回来,延迟从1ms变成了80ms。改了一条路由,问题瞬间解决。

2.4 第四步:查NAT网关,是不是SNAT连接数打满了?

NAT网关是有连接数上限的。当大量云主机通过同一个NAT网关出公网时,SNAT连接数可能被打满,新连接被拒绝或排队。

排查方法

  • 查看NAT网关的连接数监控,超过最大连接数的80%就要扩容
  • 查看是否有僵尸连接(长时间不关闭的连接占着坑位)
  • 考虑增加EIP数量,分散SNAT压力

工具:NAT网关控制台连接数监控 + SNAT端口利用率


三、第二层:公网链路层排查——"查路上的坑"

确认云上配置没问题后,下一步就是查公网链路。

3.1 第一步:ping + traceroute——定位丢包在哪一跳

这是最基础、也最有效的组合拳。

ping 告诉你"通不通、延迟多少"。
traceroute(或mtr) 告诉你"在哪一跳开始出问题"。

操作方法

1# 先ping目标,看延迟和丢包
2ping -c 20 目标IP
3
4# 再trace路径,看哪一跳开始异常
5traceroute 目标IP
6# 或用更强大的mtr
7mtr -r -c 20 目标IP
8

怎么看结果?

现象 含义 可能原因
前几跳延迟正常,中间某一跳突然飙升 瓶颈在运营商骨干网某个节点 运营商网络拥塞,你控制不了
最后几跳延迟正常,但中间丢包严重 链路质量差 国际线路或跨运营商传输
第一跳(网关)延迟就很高 你自己的网络有问题 云主机到网关之间的内部网络
全程延迟都高(>200ms跨国) 物理距离决定的,正常 考虑用CDN或全球加速

某跨境电商的案例:用户反馈访问海外站慢。mtr结果显示,流量在跨太平洋链路的第8跳开始丢包率飙升到30%。这不是云的问题,是国际海底光缆在那个时段拥塞——换了个时段访问,问题自动消失。

3.2 第二步:mtr——比traceroute强10倍的神器

traceroute只能看一次路径,但mtr能持续监测每一跳的延迟和丢包率,实时刷新。

mtr的输出怎么看?

1Host                      Loss%   Snt   Last   Avg  Best  Wrst
21. 10.0.0.1               0.0%    20    0.3   0.4   0.2   1.1
32. 100.64.0.1             0.0%    20    1.2   1.5   0.8   3.4
43. 202.97.xx.xx           2.0%    20    8.7   9.1   7.2  15.3  ← 开始升高
54. 202.97.xx.xx           5.0%    20   45.2  48.7  42.1  67.8  ← 明显异常
65. 目标IP                 3.0%    20  120.5 125.3 118.2 145.6
7

第4跳开始延迟飙升、丢包增加——问题就在这一跳。这是运营商的节点,你改不了,但你知道问题在哪了,工单就有依据了。

3.3 第三步:dig——DNS解析慢,你以为是网络慢

很多时候,你以为的"网络延迟高",其实是DNS解析慢

浏览器要先把域名解析成IP,才能建连接。如果DNS解析花了2秒,你会以为是网络慢,但其实是DNS慢。

排查方法

1# 查看DNS解析耗时
2dig 目标域名
3# 关注Query time字段
4
5# 对比不同DNS的解析速度
6dig @8.8.8.8 目标域名
7dig @114.114.114.114 目标域名
8
DNS Query time 评价
默认DNS 150ms 太慢了
8.8.8.8 30ms 正常
114.114.114.114 25ms 正常(国内更快)

某团队发现API调用慢,排查了一圈网络没问题,最后发现是云上默认DNS响应慢。把DNS改成114.114.114.114后,首次连接建立时间从1.5秒降到0.3秒。

3.4 第四步:httping——比curl更适合测HTTP延迟

curl能测HTTP请求的总时间,但它把DNS解析、TCP建连、SSL握手、服务器处理、内容传输全混在一起了,你看不出哪个环节慢。

httping 可以把这些环节拆开:

指标 含义 正常值
dns DNS解析时间 <50ms
connect TCP三次握手时间 <100ms(同城)/ <200ms(跨城)
ssl SSL握手时间 <200ms
send 发送请求时间 忽略不计
wait 服务器处理时间 <500ms(API)/ <100ms(静态资源)
total 总时间 各环节之和

某API网关优化案例:httping显示connect时间正常(80ms),但wait时间高达2.3秒——问题不在网络,在后端服务处理慢。 团队立刻把排查方向从网络转向应用,半小时就找到了慢SQL。


四、第三层:应用与目标层排查——"也许不是你的锅"

确认链路没问题后,最后一步是确认:是不是目标服务器的问题?

4.1 tcping——测端口通不通,比telnet好用

telnet只能测TCP端口,tcping还能测延迟和丢包。

1tcping 目标IP 443
2

如果tcping显示延迟正常、无丢包,说明链路到目标服务器是通的,网络没问题。如果tcping也超时,那就是目标服务器的防火墙或安全组拦了你。

4.2 curl -w——把HTTP请求的每个环节计时拆开

1curl -o /dev/null -s -w "
2dns: %{time_namelookup}s
3connect: %{time_connect}s
4ssl: %{time_appconnect}s
5total: %{time_total}s
6" https://目标域名
7

输出示例:

1dns: 0.032s
2connect: 0.087s
3ssl: 0.156s
4total: 2.341s
5

dns+connect+ssl = 0.275秒,但total是2.341秒——差的那2秒,是服务器处理时间。 网络没问题,是后端慢。

4.3 对比测试:换个目标,问题还在吗?

如果你怀疑是目标服务器的问题,最简单的验证方法是:换一个目标测。

  • 访问目标A慢,访问目标B快 → 目标A的问题
  • 访问所有目标都慢 → 你自己的网络问题
  • 访问所有目标都快,但用户反馈慢 → 可能是用户侧网络问题(弱网、跨运营商)

五、实战排查流程:一张表搞定

步骤 动作 工具 预期结果 如果异常
1 查带宽利用率 控制台监控 <80% 升级带宽或优化流量
2 查安全组规则数 控制台 <50条 清理冗余规则
3 查路由表 控制台 内网走内网路由 修正路由配置
4 ping目标 ping 延迟<100ms,丢包<1% 进入下一步
5 traceroute/mtr mtr 定位丢包/延迟突增的跳 记录跳数,联系运营商
6 查DNS dig Query time<50ms 更换DNS
7 测HTTP各环节 httping/curl -w 拆分各环节耗时 定位慢的环节
8 测目标端口 tcping 延迟正常,无丢包 目标服务器防火墙问题
9 换目标对比 curl 确认是谁的问题 明确责任方

六、写在最后:网络排查的本质,是"排除法"

网络问题之所以难,不是因为技术难,而是因为变量太多、不可控因素太多。你控制不了运营商的骨干网,控制不了国际海底光缆,控制不了目标服务器的防火墙。

但你能控制的是:你的带宽有没有打满、你的安全组有没有写错、你的路由有没有配反、你的DNS有没有选对。

这四件事,占了80%的"网络问题"。

剩下20%,用mtr定位跳数,用httping拆分环节,用tcping确认端口——你不需要解决它,你只需要证明"不是我的问题"。 这就够了。

网络排查不是玄学,是科学。工具给你了,思路给你了,流程给你了。下次凌晨两点告警响了,别慌——打开mtr,按流程走一遍,半小时内锁定根因。

你的代码跑在网络上,网络的品质就是你应用的天花板。而诊断网络的能力,就是你在天花板上开一扇窗的能力。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0