Linux 网络排查实战:ping、telnet、curl、ss 怎么配合用?
Linux 网络排查实战:ping、telnet、curl、ss 怎么配合用?
1. 前言
Linux 服务器出现网络问题时,很多人第一反应就是“网络不通”。
但网络不通其实有很多层含义:
- IP 不通;
- DNS 解析失败;
- 端口没开;
- 服务没启动;
- 防火墙拦截;
- 路由不对;
- HTTP 服务异常;
- 应用接口报错。
所以排查网络问题不能只靠一个命令。
本文用 ping、telnet、curl、ss 组合出一套常用排查流程。
2. 网络排查的基本思路
可以按下面顺序排查:
1. ping:检查 IP 层是否可达
2. nslookup/dig:检查 DNS 是否正常
3. telnet/nc:检查 TCP 端口是否能连上
4. ss:检查本机服务是否监听端口
5. curl:检查 HTTP/HTTPS 服务是否正常
6. 防火墙/路由:检查是否被拦截或走错路径
不要一上来就看应用代码。
很多问题其实卡在网络层、端口层或防火墙层。
3. ping:检查主机是否可达
ping 用于测试目标 IP 是否可达。
ping 8.8.8.8
限制发送 4 个包:
ping -c 4 8.8.8.8
测试域名:
ping -c 4 www.baidu.com
如果 IP 能 ping 通,但域名 ping 不通,通常说明 DNS 有问题。
常见结果:
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=20.1 ms
说明网络可达。
如果出现:
Destination Host Unreachable
可能是路由、网关、目标主机不可达。
如果出现:
Request timeout
可能是目标禁 ping、防火墙拦截、链路异常。
4. ping 不通不一定代表服务不可用
很多服务器会禁用 ICMP。
所以 ping 不通,不代表 HTTP、SSH、数据库一定不通。
例如:
ping example.com
失败,但:
curl -I https://example.com
可能成功。
因此,ping 只能说明 ICMP 探测情况,不能完全代表业务端口状态。
5. telnet:检查 TCP 端口
telnet 常用于测试某个 TCP 端口是否能连上。
测试 80 端口:
telnet example.com 80
测试 SSH 端口:
telnet 192.168.1.10 22
如果连接成功,通常会看到:
Connected to example.com.
如果失败,常见结果:
Connection refused
说明目标主机可达,但端口没有服务监听,或者服务拒绝连接。
Connection timed out
说明可能被防火墙拦截、路由不通,或者目标主机无响应。
6. nc 可以替代 telnet
很多系统默认没有 telnet,可以使用 nc。
nc -vz example.com 80
参数说明:
| 参数 | 含义 |
|---|---|
-v |
显示详细信息 |
-z |
只扫描端口,不发送数据 |
示例:
nc -vz 192.168.1.10 3306
用于测试 MySQL 端口是否可达。
7. ss:检查本机监听端口
如果你在服务器本机排查服务,可以用 ss 查看监听端口。
查看 TCP 监听端口:
ss -lntp
参数说明:
| 参数 | 含义 |
|---|---|
-l |
listening,只看监听 |
-n |
不解析服务名,直接显示数字端口 |
-t |
TCP |
-p |
显示进程信息 |
示例输出:
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6))
说明 Nginx 正在监听 80 端口。
查看某个端口:
ss -lntp | grep ':80'
8. curl:检查 HTTP 服务
curl 用来测试 HTTP/HTTPS 服务非常方便。
查看响应头:
curl -I http://example.com
查看完整响应:
curl http://example.com
显示详细连接过程:
curl -v http://example.com
测试接口:
curl http://127.0.0.1:8080/health
如果 TCP 端口通,但 curl 返回 500,说明网络层基本通了,问题可能在应用层。
9. 本机服务排查示例
问题:访问服务器 8080 端口失败。
9.1 先看服务是否监听
ss -lntp | grep ':8080'
如果没有输出,说明本机没有进程监听 8080。
需要检查服务是否启动:
systemctl status myapp
或:
ps -ef | grep myapp
9.2 本机 curl 测试
curl -v http://127.0.0.1:8080
如果本机访问失败,优先查应用日志。
9.3 远程端口测试
在另一台机器上:
nc -vz 服务器IP 8080
如果本机 curl 正常,但远程端口不通,重点排查防火墙、安全组、监听地址。
10. 监听 127.0.0.1 和 0.0.0.0 的区别
查看:
ss -lntp
如果看到:
127.0.0.1:8080
说明服务只监听本机回环地址。
外部机器无法访问。
如果看到:
0.0.0.0:8080
说明服务监听所有 IPv4 地址,外部机器可以访问。
很多应用配置中有:
host=127.0.0.1
如果希望外部访问,通常要改成:
host=0.0.0.0
11. DNS 排查
如果访问域名失败,先检查 DNS。
nslookup example.com
或:
dig example.com
查看系统 DNS:
cat /etc/resolv.conf
如果 IP 可以访问,域名不能访问,基本就是 DNS 问题。
12. 常见问题判断
| 现象 | 可能原因 |
|---|---|
| ping IP 不通 | 路由、网关、防火墙、目标不可达 |
| ping IP 通,ping 域名不通 | DNS 问题 |
| telnet 端口 refused | 服务未启动或端口未监听 |
| telnet 端口 timeout | 防火墙、安全组、网络链路问题 |
| ss 看不到端口 | 本机服务未监听 |
| curl 返回 500 | 应用层错误 |
| curl 返回 404 | 路径或路由错误 |
| curl 超时 | 服务无响应或网络阻塞 |
13. 推荐排查流程
ping -c 4 目标IP
nslookup 域名
nc -vz 目标IP 端口
ss -lntp | grep 端口
curl -v http://目标IP:端口
systemctl status 服务名
journalctl -u 服务名 -n 100
这套流程可以覆盖大多数 Linux 网络故障。
14. 小结
四个命令可以这样记:
ping:测 IP 通不通
telnet/nc:测 TCP 端口通不通
ss:看本机端口有没有监听
curl:测 HTTP 服务是否正常
实际排查时,要一层一层定位:
网络可达
↓
DNS 正常
↓
端口可达
↓
服务监听
↓
HTTP 正常
↓
应用逻辑正常
这样排查效率会比直接猜问题高很多。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)