网络诊断三剑客:`ping`、`curl` 和 `ss`

 

“我明明把网站部署到服务器上了,为什么浏览器里就是打不开?”

这是一个足以让任何开发者(尤其是新手)抓狂的时刻。你面对着一个黑色的终端窗口和毫无反应的浏览器,感觉自己仿佛置身于信息孤岛。网络问题,因其看不见、摸不着,常常让人束手无策。

但别担心!在Linux的世界里,我们有三位强大的“剑客”,它们能帮你拨开网络的迷雾,一步步定位问题的根源。它们就是:pingcurlss。掌握了它们,你就掌握了网络诊断的基本功。

第一位剑客 ping:网络通不通,问它就知道

ping 是最基础的网络诊断工具,它的作用只有一个:检查你的电脑和目标服务器之间的网络线路是否通畅

你可以把它想象成声纳探测。你的电脑向服务器发送一个小小的“探测信号”(一个数据包),然后等待服务器的回应。如果收到了回应,就说明线路是通的。

如何使用?

打开终端,输入:

$ ping google.com
PING google.com (142.250.199.14) 56(84) bytes of data.
64 bytes from lga34s35-in-f14.1e100.net (142.250.199.14): icmp_seq=1 ttl=112 time=15.8 ms
64 bytes from lga34s35-in-f14.1e100.net (142.250.199.14): icmp_seq=2 ttl=112 time=16.1 ms
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 15.823/15.962/16.101/0.139 ms

你需要关注两个关键信息:

  • time=15.8 ms: 这是延迟(latency),即信号往返所需的时间。时间越短,网络速度越快。
  • 0% packet loss: 这是丢包率。如果是0%,说明网络连接很稳定。如果这个数字很高,说明网络质量很差。

问题定位:如果你 ping 一个地址,却长时间没有收到回应,或者提示 Destination Host Unreachable,这通常意味着问题出在网络层。原因可能是:

  • 你的网络连接断了。
  • 对方服务器关机了。
  • 中间的某个防火墙阻止了你的“探测信号”。

第二位剑客 curl:服务好不好,让它替你瞧

ping 通了,只能代表你和服务器之间的“路”是通的,但路尽头的“商店”(比如你的网站服务)是否开着门,ping 是不知道的。这时,curl 就该登场了。

curl 是一个强大的命令行工具,可以模拟浏览器向服务器发送HTTP请求,直接检查你的应用程序是否正常工作。

如何使用?

最简单的用法是直接跟上网址。但我们通常使用 -I 参数,它只获取HTTP头信息,这样结果更清晰,速度也更快。

$ curl -I https://www.google.com
HTTP/2 200 
content-type: text/html; charset=ISO-8859-1
date: Thu, 24 Jul 2025 12:00:00 GMT
... (其他信息)

你只需要看懂第一行:HTTP/2 200200 是HTTP状态码,代表“成功”。只要看到 2xx3xx 的状态码,通常就意味着服务器上的Web服务是正常运行的。

问题定位:如果 ping 能通,但 curl 却返回 Connection refused (连接被拒绝) 或 Failed to connect,这说明:

  • 网络线路是好的。
  • 问题出在应用层:你的Web服务器程序(如Nginx, Apache, Node.js)没有启动,或者崩溃了。

第三位剑客 ss:谁在监听,一查便知

curl 连接被拒绝时,我们就需要登录到服务器内部,从“内部视角”来检查问题了。是不是我们的程序根本就没启动?或者,它启动了,但没有在正确的端口上“监听”网络请求?

ss 命令可以告诉我们答案。它是 netstat 的现代替代品,速度更快,信息更清晰。

如何使用?

记住这个黄金组合:ss -tuln

  • -t: 显示 TCP 连接
  • -u: 显示 UDP 连接
  • -l: 只显示正在监听 (listening) 的端口
  • -n: 以数字形式显示端口号,而不是服务名(如显示80而不是http
$ ss -tuln
State      Recv-Q Send-Q  Local Address:Port    Peer Address:Port
LISTEN     0      128         0.0.0.0:22           0.0.0.0:*
LISTEN     0      80          0.0.0.0:80           0.0.0.0:*
LISTEN     0      80        127.0.0.1:3306         0.0.0.0:*

上面的输出告诉我们:

  • 有一个程序在所有IP地址 (0.0.0.0) 的 22 端口上监听(这是SSH服务)。
  • 有一个程序在所有IP地址的 80 端口上监听(这很可能是我们的Web服务!)。
  • 还有一个程序只在本地 (127.0.0.1) 的 3306 端口监听(这是MySQL数据库,只允许服务器内部访问)。

问题定位:运行 ss -tuln 后,如果在列表中没有找到你预期的端口(比如 80443),那就破案了:你的应用程序根本没有成功启动,或者配置错误,没有监听在正确的端口上。你需要检查你的程序日志来找到失败的原因。

终极排错流程

现在,让我们把三位剑客串联起来,形成一个清晰的排错流程:

  1. 第一步: ping your_server_ip

    • 不通? -> 检查你的本地网络、服务器是否开机、云服务商的安全组/防火墙规则。
    • 通? -> 进入第二步。
  2. 第二步: curl your_server_ip

    • 成功 (看到HTML或200状态码)? -> 服务正常。如果你在浏览器还是打不开,可能是域名解析或浏览器缓存问题。
    • 失败 (Connection refused)? -> 进入第三步。
  3. 第三步: (登录服务器后) ss -tuln

    • 看不到你的服务端口? -> 你的应用程序没有成功启动。去检查它的日志文件,找到错误原因并修复它。
    • 能看到服务端口? -> 程序已启动。检查它监听的IP是否正确(应该是0.0.0.0而不是127.0.0.1才能被外部访问),或者服务器内部的防火墙(如ufw, firewalld)是否放行了该端口。

总结

网络诊断就像探案,需要由外到内,层层递进。这三位“剑客”正是你探案的得力助手:

  • ping 负责勘察道路。
  • curl 负责敲门试探。
  • ss 负责入室调查。

下次再遇到网络问题,不要慌张。请出这三位剑客,你就能像一个经验丰富的侦探一样,冷静地找到问题的真相。

Comments

Popular posts from this blog

VLESS-XTLS-Vision-uTLS-REALITY Setup Guide

Sing-Box Reality 节点搭建教程

Python 爬虫入门实战:从零开始构建一个图书信息采集器