13 10 月 2026

"网络不通"是最难查的故障,因为链路上的每一环都可能出问题:本地网络、DNS、运营商、防火墙、安全组、服务本身。

这篇把常用网络工具按"从粗到细"的顺序讲一遍,形成一套排查套路。

网络质量直接影响访问体验。财富云计算 的云服务器提供稳定网络;内网服务、游戏服务端可选 NAT 型(无独立公网 IP,价格比带独立 IP 机型省一半以上,通过端口映射对外服务)。

一、排查顺序:由外到内

1. ping        通不通、延迟多少、丢不丢包
2. mtr         哪一跳出问题(本地?运营商?机房?)
3. dig/nslookup DNS 解析对不对
4. telnet/nc   端口开没开
5. ss/netstat  本机监听状态
6. curl        应用层能不能正常响应
7. tcpdump     抓包看细节(终极手段)

二、ping:最基础

ping -c 10 example.com           # 发 10 个包
ping -c 100 -i 0.2 example.com   # 快速发 100 个包,看丢包
ping -s 1400 example.com         # 指定包大小(查 MTU 问题)
ping -4 example.com              # 强制 IPv4

输出解读:

64 bytes from 1.2.3.4: icmp_seq=1 ttl=54 time=25.3 ms
...
--- example.com ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9013ms
rtt min/avg/max/mdev = 24.8/25.6/27.1/0.7 ms
指标含义参考值
packet loss丢包率0% 正常,>1% 影响体验
time往返延迟同城 <10ms,跨省 20~50ms,跨国 100ms+
mdev抖动越小越稳,>20ms 说明网络不稳

注意:很多服务器禁 ping(ICMP 被防火墙拦),ping 不通不代表服务不可用,要配合其他工具。


三、mtr:定位哪一跳出问题(最好用)

mtr = ping + traceroute,能持续统计每一跳的丢包和延迟。

apt install mtr -y          # Debian/Ubuntu
yum install mtr -y          # CentOS

mtr example.com             # 交互式
mtr -r -c 100 example.com   # 报告模式,发 100 个包后输出
mtr -n example.com          # 不解析域名,更快
mtr -T -P 443 example.com   # 用 TCP 探测(ICMP 被拦时用)
mtr -u -P 27015 example.com # 用 UDP 探测(游戏端口)

输出:

HOST: localhost              Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 192.168.1.1           0.0%   100    1.2   1.5   0.9   8.2   0.9
  2.|-- 10.10.10.1            0.0%   100    8.1   9.2   7.5  20.1   2.1
  3.|-- 202.xx.xx.xx          0.0%   100   10.3  11.0   9.8  25.4   2.5
  4.|-- 219.xx.xx.xx         12.5%   100   30.1  32.4  28.0  60.2   8.1   ← 这里丢包
  5.|-- 1.2.3.4               0.0%   100   31.0  33.1  29.5  62.0   7.8

怎么读:

  • 某一跳丢包,后面几跳也丢 → 这一跳真有问题
  • 某一跳丢包,后面不丢 → 那一跳只是不回应 ICMP,不是故障(常见)
  • 最后一跳丢包 → 目标服务器或它的防火墙有问题

看到第 4 跳丢包,就知道问题在运营商骨干网的那个节点,自己改不了,只能反馈给服务商或换线路。


四、traceroute:路径追踪

traceroute example.com
traceroute -T -p 443 example.com     # TCP 模式
traceroute -n example.com            # 不解析域名

Windows 上是 tracert。

功能与 mtr 类似,但只做一次不做统计,不如 mtr 好用。


五、DNS 排查:dig / nslookup

# 安装
apt install dnsutils -y
dig example.com                          # 完整输出
dig example.com +short                   # 只要 IP
dig example.com A +short                 # 查 A 记录
dig example.com MX +short                # 查 MX
dig example.com NS +short                # 查 NS
dig example.com TXT +short               # 查 TXT
dig -x 1.2.3.4                           # 反向解析

dig @8.8.8.8 example.com +short          # 指定 DNS 服务器
dig @223.5.5.5 example.com +short        # 阿里 DNS
dig @114.114.114.114 example.com +short  # 114 DNS

dig example.com                          # 看 Query time

对比多个 DNS 的结果能判断是不是 DNS 污染或缓存未同步:

for dns in 8.8.8.8 223.5.5.5 114.114.114.114; do
  echo -n "$dns: "; dig @$dns example.com +short | head -1
done
nslookup example.com                     # Windows 也有
nslookup -type=mx example.com

详见《域名解析与 DNS 记录详解》。


六、端口检测:telnet / nc / nmap

telnet(最简单)

telnet example.com 80
telnet 1.2.3.4 27015
  • 连上:显示 Connected 或黑屏,说明端口通
  • Connection refused:端口没服务在监听
  • Connection timed out:被防火墙拦了(或网络不通)

nc(netcat,更灵活)

apt install netcat -y

nc -zv 1.2.3.4 80              # 扫描单个端口
nc -zv 1.2.3.4 20-100          # 扫描端口范围
nc -zv -u 1.2.3.4 27015        # UDP 端口(注意 UDP 检测不一定准)
nc -l 8080                     # 本机监听 8080(测试用)
echo "hello" | nc 1.2.3.4 8080 # 发送数据

nmap(专业扫描)

apt install nmap -y

nmap 1.2.3.4                   # 常见端口扫描
nmap -p 1-65535 1.2.3.4        # 全端口(慢)
nmap -sV 1.2.3.4               # 探测服务版本
nmap -sU -p 27015 1.2.3.4      # UDP 扫描
nmap -O 1.2.3.4                # 探测操作系统
⚠️ 只扫描自己的服务器,扫描他人系统可能违法。

七、本机连接状态:ss / netstat

ss -tulnp                      # 查看监听端口(推荐)
ss -tulnp | grep :80
ss -tnp                        # 已建立的 TCP 连接
ss -s                          # 统计概览
ss -tn state established       # 只看已建立
ss -tn state time-wait | wc -l # TIME_WAIT 数量

netstat -tulnp                 # 老命令
netstat -an | grep :80 | wc -l

关键:服务是否监听在正确的地址

ss -tulnp | grep 3306
# tcp  LISTEN  0  80  127.0.0.1:3306    ← 只监听本地,外网访问不到
# tcp  LISTEN  0  80  0.0.0.0:3306      ← 监听所有地址

很多"防火墙全开还是连不上"的问题,根源就是服务只监听了 127.0.0.1。

连接数统计(排查攻击):

# 每个 IP 的连接数
ss -tn | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -20

# 各状态数量
ss -ant | awk '{print $1}' | sort | uniq -c
状态异常可能原因
SYN_RECV 很多SYN Flood 攻击
TIME_WAIT 巨多短连接过多,需开 keepalive
ESTABLISHED 来自少量 IP 且数量巨大CC 攻击

八、HTTP 层:curl

curl -I https://example.com                    # 只看响应头
curl -s -o /dev/null -w "%{http_code}\n" URL   # 只要状态码
curl -L URL                                    # 跟随重定向
curl -v URL                                    # 详细过程(调试用)
curl -H "Host: example.com" http://1.2.3.4     # 指定 Host 测试
curl --resolve example.com:443:1.2.3.4 https://example.com   # 跳过 DNS
curl -x http://proxy:8080 URL                  # 走代理

性能分析(最实用):

curl -o /dev/null -s -w '
DNS:     %{time_namelookup}s
TCP:     %{time_connect}s
TLS:     %{time_appconnect}s
TTFB:    %{time_starttransfer}s
总计:    %{time_total}s
大小:    %{size_download} bytes
速度:    %{speed_download} B/s
' https://example.com

详见《网站打开慢的排查流程》。


九、抓包:tcpdump(终极手段)

当所有工具都看不出问题时,抓包看原始数据。

apt install tcpdump -y

# 抓指定网卡
tcpdump -i eth0

# 抓指定端口
tcpdump -i eth0 port 80

# 抓指定主机
tcpdump -i eth0 host 1.2.3.4

# 组合
tcpdump -i eth0 host 1.2.3.4 and port 443

# 抓 HTTP 包(含内容)
tcpdump -i eth0 -A -s 0 'tcp port 80'

# 只抓 SYN 包(看有没有收到连接请求)
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0'

# 保存到文件(用 Wireshark 分析)
tcpdump -i eth0 -w capture.pcap

# 读取
tcpdump -r capture.pcap

# 抓 100 个包就停
tcpdump -i eth0 -c 100

# 不解析域名(更快)
tcpdump -nn -i eth0

实用场景:

  1. 判断请求有没有到达服务器:在服务器上 tcpdump -i eth0 host 客户端IP,如果客户端说访问不了但这里能看到包,说明包到了,问题在服务端(防火墙规则、服务本身)。
  2. 看 DNS 查询是否正常:tcpdump -i eth0 port 53
  3. 看 TLS 握手是否完成:tcpdump -i eth0 port 443

十、带宽与流量

# 实时流量(按连接)
apt install iftop -y
iftop -i eth0
iftop -i eth0 -n            # 不解析域名

# 按进程看流量
apt install nethogs -y
nethogs eth0

# 网卡吞吐统计
apt install sysstat -y
sar -n DEV 1
sar -n DEV 1 10             # 采样 10 次

# 看网卡配置和统计
ip -s link
ethtool eth0                # 看网卡速率(千兆/万兆)

测速:

# 下载测速
curl -o /dev/null https://speed.cloudflare.com/__down?bytes=100000000

# 安装 speedtest
apt install speedtest-cli -y
speedtest-cli

十一、路由与网卡

ip a                        # 查看 IP 和网卡
ip route                    # 查看路由表
ip route get 8.8.8.8        # 查到某 IP 走哪条路由
ip neigh                    # ARP 表
ip link set eth0 up/down    # 启用/禁用网卡

# 老命令
ifconfig
route -n

常见网络配置问题:

# DNS 配置
cat /etc/resolv.conf
# nameserver 8.8.8.8

# 永久改 DNS(Ubuntu 用 netplan)
nano /etc/netplan/00-installer-config.yaml
netplan apply

# CentOS
nmcli con mod eth0 ipv4.dns "8.8.8.8 223.5.5.5"
nmcli con up eth0

十二、实战:端口不通的完整排查

服务起好了,外面访问不了,按这个顺序查:

# ① 服务在不在跑
systemctl status nginx
ps aux | grep nginx

# ② 有没有监听端口
ss -tulnp | grep :80
# 注意是 127.0.0.1 还是 0.0.0.0

# ③ 本机能不能访问
curl http://127.0.0.1:80

# ④ 系统防火墙
ufw status / firewall-cmd --list-all

# ⑤ 云平台安全组(去控制台看)

# ⑥ 从外部测
nc -zv 服务器IP 80
# 或用在线端口扫描工具

# ⑦ 服务端抓包,看请求有没有到
tcpdump -i eth0 host 你的IP and port 80

# ⑧ DNS 是否解析到正确 IP
dig 域名 +short

最常见的三个原因:

  1. 服务只监听 127.0.0.1(占 40%)
  2. 云平台安全组没放行(占 30%)
  3. 系统防火墙没放行(占 20%)

十三、工具速查表

目的命令
通不通ping -c 10 IP
哪一跳有问题mtr -r -c 100 IP
DNS 对不对dig 域名 +short
端口开没开nc -zv IP 端口
本机监听ss -tulnp
连接数统计ss -s / `ss -ant \awk ...`
HTTP 响应curl -I URL
性能分解curl -w "%{time_starttransfer}"
实时流量iftop -i eth0
进程流量nethogs eth0
抓包tcpdump -i eth0 host IP
路由ip route
网卡速率ethtool eth0

网络问题往往不在你这一端,选一个网络稳定的云服务商很重要。财富云计算 的云服务器提供稳定网络与多线路支持;做内网服务、游戏服务端可选 NAT 型(无独立公网 IP,价格比带独立 IP 机型省一半以上),通过端口映射按需开放服务。

相关阅读:

  • 《网站打开慢的排查流程》
  • 《Linux 防火墙配置:ufw / firewalld / iptables》
  • 《域名解析与 DNS 记录详解》
延伸阅读
  1. 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
  2. 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
  3. 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
  4. 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
  5. 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
  6. RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
  7. 短链接服务搭建:Shlink 自托管,链接数据自己掌握
  8. 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道
更多阅读
  1. 上一篇:Linux 磁盘挂载与扩容实战:加硬盘、扩分区、救急清空间
  2. 下一篇:crontab 计划任务完全指南:定时备份、定时重启、定时巡检
发表评论 1