Linux 网络排查入门:ping、curl、ss 与端口占用定位

举报
yd_220055865 发表于 2026/11/11 12:52:06 2026/11/11
【摘要】 Linux 网络排查入门:ping、curl、ss 与端口占用定位服务突然访问不了,是服务器运维里最常见的故障之一。页面打不开、接口连不上、SSH 连不上,原因可能出在很多环节:本机网络、域名解析、服务没启动、端口被占用、防火墙拦住了。排查网络问题最忌讳上来就重启服务或者乱改配置,正确的做法是按链路一层一层缩小范围:先确认网络通不通,再确认服务在不在,最后确认端口和防火墙。本文介绍排查时最...

Linux 网络排查入门:ping、curl、ss 与端口占用定位

服务突然访问不了,是服务器运维里最常见的故障之一。页面打不开、接口连不上、SSH 连不上,原因可能出在很多环节:本机网络、域名解析、服务没启动、端口被占用、防火墙拦住了。排查网络问题最忌讳上来就重启服务或者乱改配置,正确的做法是按链路一层一层缩小范围:先确认网络通不通,再确认服务在不在,最后确认端口和防火墙。本文介绍排查时最常用的四个工具:ping、curl、ss 和 lsof。

一、ping:先确认网络通不通

ping 是最基础的连通性测试,它向目标发 ICMP 回显请求,看对方回不回:

ping -c 4 example.com

-c 4 表示只发 4 个包就停,不加它会一直发下去。输出里重点看两点:有没有收到回复,以及往返时间大概是多少。能收到回复,说明本机到目标的网络基本是通的;全部丢包,则可能是目标关机、网络不通,也可能是对方禁了 ICMP——很多云服务器默认禁 ping,ping 不通不等于服务挂了,这一点要先记住。

排查时通常按顺序 ping 三个目标:先 ping 网关或者一个公认的地址确认本机出网正常,再 ping 自己的服务器 IP,最后 ping 域名。如果 IP 能 ping 通、域名 ping 不通,问题大概率出在 DNS 解析上,这时可以用 cat /etc/resolv.conf 看 DNS 配置,或者换一个公共 DNS 试试。如果连网关都 ping 不通,先检查本机网络和安全组出方向规则,不要急着动服务器上的配置。

二、curl:服务在不在,用它直接问

ping 通只说明网络层没问题,不代表服务在跑。curl 是直接向服务发 HTTP 请求的工具,能告诉你服务有没有响应、响应是什么:

curl -I https://example.com

-I 只取响应头,适合快速确认服务是否存活。返回 200 OK 说明服务正常;返回 502、503 往往是后端服务没起来或者反向代理配错了;Connection refused 说明目标端口上根本没有程序在监听;Connection timed out 则可能是防火墙拦住了,或者服务绑的地址不对。

需要看完整响应体时去掉 -I,加上 -v 可以看到请求和响应的完整细节,包括 DNS 解析用的哪个地址、TLS 握手是否成功:

curl -v https://example.com

排查本地服务时,直接对本机地址测一次,再对外网地址测一次,对比结果很有用。本机 curl http://127.0.0.1:8080 能通、外网访问不通,问题往往在监听地址或者防火墙上;本机也通不了,那服务本身多半就没起来,先去看服务日志。

三、ss:端口到底被谁占了

服务起不来,报错里经常写着 Address already in use,意思是端口已经被别的程序占了。这时用 ss 查监听状态:

ss -tlnp

这几个选项的意思是:-t 只看 TCP,-l 只看正在监听的,-n 显示数字端口不反查域名,-p 显示占用端口的进程。输出里 0.0.0.0:8080 表示监听所有网卡地址,外网能访问;127.0.0.1:8080 表示只监听本机回环地址,外网访问不到——很多“本地能访问、外网打不开”的问题就是监听地址写错了。

查某个具体端口有没有被占用,可以这样:

ss -tlnp | grep 8080

没有输出,说明这个端口上没有程序在监听,服务可能根本没启动成功,或者配置文件里写的端口不是 8080。有输出但进程不是预期的那个,说明端口被别的程序抢了,要么停掉抢占的程序,要么改自己服务的端口。

ss 的老搭档是 netstat,用法类似,但新系统上 ss 更快、输出更干净,优先用 ss 就够了。

四、lsof:反过来查,某个进程开了哪些端口

ss 是按端口找进程,lsof 可以反过来按进程找端口,也可以查某个文件被谁打开了:

lsof -i :8080

这条命令列出占用 8080 端口的进程,和 ss -tlnp | grep 8080 的作用类似。按进程名查则用:

lsof -i -P -n | grep nginx

它会列出 nginx 打开的所有网络连接。服务日志里写着“启动成功”,但端口查不到监听,多半是服务启动后又立刻退出了,这时不要只看启动命令的回显,一定要回头看服务的日志文件或者 systemctl status 服务名 的输出。

五、一个实用的排查顺序

把上面四个工具串起来,遇到“服务访问不了”可以按这个顺序走:

第一步,ping 目标 IP。 通,说明网络层没问题,往下走;不通,先看是本机出网问题、DNS 问题,还是对方禁了 ICMP,不要直接下结论。

第二步,curl 目标地址。 Connection refused 去查 ss 看端口有没有监听;Connection timed out 去查防火墙和安全组;返回 502、503 去查反向代理和后端服务日志。

第三步,ss 查监听。 确认服务是不是真的在监听预期的端口、监听地址是 0.0.0.0 还是 127.0.0.1。端口没监听,先看服务状态和日志;端口被别的进程占了,先处理冲突。

第四步,看日志定结论。 前面三步只是定位到哪一层,真正的原因几乎都在日志里:配置文件写错、依赖的数据库连不上、磁盘满了导致服务起不来。工具帮你缩小范围,日志告诉你答案。

小结

  • ping 测网络通不通,但对方禁 ICMP 时 ping 不通不等于服务挂了。
  • curl 直接问服务有没有响应,-I 看状态码、-v 看完整握手细节。
  • ss -tlnp 查端口被谁监听,监听地址是 0.0.0.0 还是 127.0.0.1 决定外网能不能访问。
  • lsof -i :端口 反查占用端口的进程,配合服务日志确认服务到底起没起来。
  • 排查按“网络—服务—端口—日志”的顺序走,先缩小范围再动手改配置,别一上来就重启。

网络排查没有捷径,靠的就是一层一层排除。把 ping、curl、ss、lsof 这四个命令的输出读明白,大多数“访问不了”的问题都能在改配置之前找到真正的环节。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。