网络慢、丢包、连不上?常用网络排查命令与技巧

网络慢、丢包、连不上?常用网络排查命令与技巧

用户说网站打不开。你上去一看,服务器CPU正常,内存够用,磁盘没满,Nginx也在跑。

那问题在哪?

在网络上。网络问题是服务器故障里最难查的,因为它不在你的服务器里,在服务器和用户之间。你看不到,只能靠命令去猜。

今天教你一套命令,从用户到服务器的完整链路,每一步都能查。


先看一个数据

某云厂商统计,超过30%的“服务器故障”投诉,根源不在服务器,在网络。用户连不上、打开慢、时而好时而坏——这些问题里,很大一部分是网络丢包、路由绕路、DNS解析错误导致的。

你在服务器上查不到,因为你的服务器一切正常。问题在路上。


第一步:先确认是服务器问题还是网络问题

在服务器上敲:

bash

curl -I 127.0.0.1

如果返回200,说明服务器自己访问自己正常。如果这里都打不开,那就是服务器本身的问题(Nginx挂了、防火墙拦了)。

如果本地正常,从外面访问不正常,那就是网络问题。继续往下查。


第二步:ping —— 测连通性和延迟

bash

ping 你的服务器IP

看三样东西:

  • 丢包率:100%就是不通,0%最好
  • 平均延迟:国内30-50ms正常,跨国的100-200ms正常
  • 延迟波动:忽大忽小说明网络不稳定

反常识点:ping不通不等于网站打不开。很多服务器禁ping,为了安全。如果你ping不通但网站能打开,说明服务器禁ping了,正常。


第三步:traceroute/mtr —— 看数据包走了哪条路

ping只能告诉你“堵了”,traceroute能告诉你“堵在哪”。

bash

traceroute 你的服务器IP

会列出从你的电脑到服务器经过的每一跳(路由器)。每一跳的延迟都能看到。

如果某一跳突然延迟飙升,或者连续几个星号(超时),说明问题出在那附近。

更好用的工具:mtr

bash

mtr 你的服务器IP

mtr把ping和traceroute合在一起,实时显示每一跳的丢包率和延迟。按q退出。

看mtr的结果:

  • 如果某一跳丢包高,但后面几跳恢复了,那是那台路由器在限速,不是真丢包
  • 如果从某一跳开始丢包一直持续到最后,那就是真丢包了

第四步:telnet/nc —— 测端口是否开放

ping测的是IP通不通,但网站用的是80(HTTP)和443(HTTPS)端口。IP通了,端口不一定通。

bash

telnet 你的服务器IP 80

如果显示Connected,说明端口通。如果卡住或显示Connection refused,说明端口没开。

Windows默认没装telnet,可以用Test-NetConnection或者装个Putty。

Linux替代命令:

bash

nc -zv 你的服务器IP 80

-z是只测连接不发送数据,-v显示详细信息。


第五步:nslookup/dig —— 测DNS解析

用户访问example.com,首先要通过DNS把域名转成IP。如果DNS解析错了,用户就去错地方了。

bash

nslookup 你的域名

看返回的IP是不是你的服务器IP。不是的话,去域名控制台改解析。

bash

dig 你的域名

信息更详细,能看到DNS服务器的响应时间。如果响应时间超过100ms,说明DNS服务器慢,可以考虑换一个(比如Cloudflare的1.1.1.1)。

反常识点:很多时候“网站打不开”是因为你刚改了解析,你本地的DNS还没更新。换手机网络试试,或者清DNS缓存。


第六步:curl —— 测HTTP请求

前面都是网络层,curl测的是应用层。模拟浏览器发一个HTTP请求,看服务器怎么响应。

bash

curl -I https://你的域名

-I只返回响应头,不返回正文。看第一行:

  • 200 OK:正常
  • 301/302:重定向,正常
  • 403:权限问题
  • 500/502/503/504:服务器内部错误

还可以测响应时间:

bash

curl -o /dev/null -s -w 'Total: %{time_total}s\n' https://你的域名

返回总耗时。如果超过1秒,说明服务器处理慢,去优化代码或数据库。


第七步:netstat/ss —— 看本机网络状态

前面的命令都是测外面到服务器,netstat是看服务器自己。

bash

netstat -tunlp

列出所有监听的端口。看80和443在不在。不在的话,Nginx没启动或配置错了。

bash

ss -tunp | grep ESTAB

看当前有多少活跃连接。如果成千上万,可能被攻击了。


第八步:综合排查流程图

从用户输入网址到看到页面,完整链路:

  1. 用户电脑 → DNS服务器:解析域名
    • 命令:nslookupdig
    • 问题:解析出的IP不对、解析慢
  2. 用户电脑 → 服务器:网络传输
    • 命令:pingmtrtraceroute
    • 问题:丢包、延迟高、路由绕路
  3. 用户电脑 → 服务器端口:TCP连接
    • 命令:telnetnc
    • 问题:端口不通、防火墙拦截
  4. 服务器 → Web服务:HTTP处理
    • 命令:curlcurl -I
    • 问题:Nginx挂了、返回错误码
  5. 服务器内部:应用代码、数据库
    • 命令:top、查日志、看监控
    • 问题:代码慢、数据库慢

按这个顺序查,90%的网络问题都能定位。


一个真实案例

有次一个朋友说他的网站“时而能打开,时而打不开”。我让他用mtr跑了一分钟,发现从某省电信节点开始丢包30%,持续到服务器。

判断:省电信骨干网拥堵。他联系云厂商,云厂商协调运营商调整路由,问题解决。

如果他没有查网络,可能会花一星期折腾服务器配置。


最后一句

网络问题排查,最难的不是技术,是“看不见”。数据包从用户到服务器,中间几十跳,你一台都看不到。

但命令是你的眼睛。ping看通不通,mtr看堵在哪,telnet看端口开没开,curl看服务正不正常。

一套命令走下来,问题在哪,一目了然。

下次用户说“网站打不开”,先别登服务器。从你的电脑开始,一步一步查。

知识库

日志把磁盘撑爆了?logrotate日志轮转配置教程

2026-4-21 14:18:31

实操指南知识库

云服务器ClickHouse实时数据分析平台搭建

2024-12-16 15:36:16

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧