Linux中网络管理与端口排查常用命令总结

 更新时间:2026年11月09日 15:18:42   作者:jyOverQ  
在后端开发中,我们经常会遇到各种网络问题,这一篇主要讲解 Linux 中常用的网络管理和端口排查命令,包括 ping、curl、ss、lsof、netstat 等,并结合 Spring Boot 项目部署场景,演示如何定位网络问题,希望对大家有所帮助

在后端开发中,我们经常会遇到各种网络问题。例如,Spring Boot 项目启动失败,提示端口已经被占用;服务明明启动成功,但是浏览器无法访问;本地可以访问接口,其他机器却无法访问。

这些问题通常都与 Linux 网络配置、网络连通性和端口管理有关。

这一篇主要讲解 Linux 中常用的网络管理和端口排查命令,包括 ping、curl、ss、lsof、netstat 等,并结合 Spring Boot 项目部署场景,演示如何定位网络问题。

1. Linux 网络基础知识

在学习网络排查命令之前,我们先了解几个基本概念。

IP 地址: 用于标识网络中的设备,例如 192.168.1.100,可以理解为设备在网络中的地址。

端口(Port): 用于标识设备上具体的网络服务或应用程序。例如,Spring Boot 项目默认可能使用 8080 端口,MySQL 通常使用 3306 端口。

协议(Protocol): 规定网络设备之间如何进行通信。常见的有 TCP 和 UDP。

网卡(Network Interface): 计算机连接网络的接口,例如 eth0、ens33 等。

DNS: 域名系统,负责将域名解析为 IP 地址。例如,将 www.baidu.com 解析为对应的 IP 地址。

这里需要特别理解 IP 地址和端口之间的关系:

  • IP 地址用于定位网络中的设备。
  • 端口用于定位设备上的网络服务。
  • TCP 和 UDP 则规定了数据如何传输。

例如,当我们访问 http://192.168.1.100:8080 时,实际上就是通过 IP 地址找到服务器,再通过 8080 端口访问对应的服务。

2. ping:测试网络连通性

ping 是 Linux 中最常用的网络排查命令之一,主要用于测试目标主机是否能够通过 ICMP 协议进行通信。

例如:

# 测试与百度服务器的网络连通性
ping www.baidu.com

# 只发送 4 个数据包
ping -c 4 www.baidu.com

# 设置发送间隔为 2 秒
ping -i 2 www.baidu.com

# 设置超时时间
ping -W 2 www.baidu.com

执行后可能看到类似结果:

PING www.baidu.com (220.181.38.148) 56(84) bytes of data.

64 bytes from 220.181.38.148: icmp_seq=1 ttl=54 time=12.3 ms
64 bytes from 220.181.38.148: icmp_seq=2 ttl=54 time=11.9 ms

--- www.baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss

这里几个字段的含义:

字段含义
icmp_seq数据包序号
ttl生存时间,表示数据包允许经过的最大路由跳数
time数据包往返时间
packet loss数据包丢失率

例如,time=12.3 ms 表示这次 ICMP 请求的往返时间约为 12.3 毫秒。

ping 有什么作用?

假设我们的 Spring Boot 服务无法访问,可以先通过 ping 测试服务器是否能够与目标设备进行基本的网络通信。

ping 192.168.1.100

如果能够收到响应,说明 ICMP 通信正常。

如果无法收到响应,也不一定代表目标服务器宕机,因为有些服务器或防火墙会禁止 ICMP 请求。

另外,ping 只能测试网络连通性,不能直接判断某个 TCP 端口是否开放。

3. curl:测试 HTTP 接口

curl 是一个非常常用的网络请求工具,可以通过命令行发送 HTTP、HTTPS 等请求。

对于后端开发来说,curl 尤其重要,因为我们可以直接在 Linux 服务器上测试接口是否正常。

3.1 发送 GET 请求

# 访问百度
curl https://www.baidu.com

# 访问本地 Spring Boot 服务
curl http://localhost:8080

3.2 查看 HTTP 响应头

curl -I http://localhost:8080

-I 表示只获取响应头,可以快速查看 HTTP 状态码等信息。

例如:

HTTP/1.1 200
Content-Type: application/json

常见 HTTP 状态码:

状态码含义
200请求成功
301永久重定向
302临时重定向
400请求参数错误
401未认证
403服务器拒绝访问
404资源不存在
500服务器内部错误

3.3 发送 POST 请求

在开发中,我们经常需要测试 POST 接口。

例如,Spring Boot 提供了一个用户创建接口:

curl -X POST \
-H "Content-Type: application/json" \
-d '{"name":"zhangsan","age":20}' \
http://localhost:8080/user

这里:

  • -X POST:指定请求方法为 POST。
  • -H:设置 HTTP 请求头。
  • -d:指定请求体数据。

3.4 查看详细请求信息

如果请求失败,可以使用 -v 查看详细的请求和响应过程:

curl -v http://localhost:8080

这样可以帮助我们排查 DNS 解析、TCP 连接、TLS 握手以及 HTTP 请求等环节的问题。

4. ss、lsof、netstat:查看端口占用

在 Linux 中,服务启动时通常需要监听一个端口。

例如,Spring Boot 默认可能监听 8080 端口。

如果这个端口已经被其他程序占用,再启动一个使用相同 IP 和端口组合的服务,就可能出现端口绑定失败的问题。

常见报错:

Web server failed to start. Port 8080 was already in use.

这时就需要找到究竟是哪个进程占用了端口。

4.1 ss:查看网络连接和监听端口

ss(Socket Statistics)用于查看系统中的网络连接、Socket 状态和监听端口,是目前 Linux 中推荐使用的网络排查工具。

# 查看所有 TCP 和 UDP Socket
ss -a

# 查看 TCP 连接
ss -t

# 查看 UDP 连接
ss -u

# 查看监听状态的 TCP 端口
ss -lnt

# 查看监听端口及对应进程
sudo ss -lntp

# 查看所有 TCP 和 UDP 监听端口及对应进程
sudo ss -tulnp

常用选项:

选项含义
-t显示 TCP Socket
-u显示 UDP Socket
-l只显示监听状态的 Socket
-n以数字形式显示地址和端口,不进行名称解析
-p显示对应的进程信息
-a显示所有 Socket

例如,查看 8080 端口:

sudo ss -lntp | grep 8080

可能得到:

LISTEN 0 128 0.0.0.0:8080 0.0.0.0:* users:(("java",pid=1234,fd=45))

这说明:

  • LISTEN:当前端口处于监听状态。
  • 0.0.0.0:8080:监听所有 IPv4 网络接口上的 8080 端口。
  • java:占用端口的进程名称。
  • pid=1234:进程 ID 为 1234。

4.2 lsof:查看文件和端口对应的进程

lsof(List Open Files)用于查看系统中进程打开的文件。

在 Linux 中,网络 Socket 也可以通过文件描述符进行管理,因此 lsof 也可以用来查询端口占用情况。

# 查看 8080 端口被哪个进程占用
sudo lsof -i :8080

# 查看所有网络连接
sudo lsof -i

# 查看指定进程打开的文件
sudo lsof -p 1234

例如:

COMMAND  PID USER  FD  TYPE DEVICE SIZE/OFF NODE NAME
java    1234 app   45u IPv4  ...        0t0  TCP *:8080 (LISTEN)

可以看到,PID 为 1234 的 Java 进程正在监听 8080 端口。

4.3 netstat:传统网络查看工具

netstat 也是常见的网络管理命令,可以查看网络连接、路由表以及端口监听情况。

# 查看所有网络连接和监听端口
netstat -an

# 查看 TCP 监听端口
netstat -tln

# 查看端口及对应进程
sudo netstat -tlnp

常用选项:

选项含义
-a显示所有连接和监听端口
-n以数字形式显示地址和端口
-t显示 TCP
-u显示 UDP
-l显示监听状态
-p显示对应进程

需要注意:netstat 属于传统网络工具,在不少现代 Linux 发行版中需要额外安装 net-tools。现在更推荐使用 ss。

4.4 三者有什么区别?

命令主要作用适用场景
ss查看 Socket 和网络连接网络连接、监听端口排查
lsof查看进程打开的文件和资源查询端口对应的进程
netstat查看网络连接、端口和路由信息传统网络排查

日常开发中,优先掌握 ss 和 lsof 就可以解决大部分端口排查问题。

5. 实战:解决 Spring Boot 端口被占用问题

假设我们启动 Spring Boot 项目时,出现:

Web server failed to start. Port 8080 was already in use.

说明当前需要使用的 8080 端口已经被占用。

可以按照下面的步骤进行排查。

第一步:查看端口占用情况

sudo lsof -i :8080

也可以:

sudo ss -lntp | grep 8080

第二步:获取占用端口的 PID

假设查询结果显示:

java    1234 app    ... TCP *:8080 (LISTEN)

那么占用端口的进程 PID 就是 1234。

第三步:查看进程详细信息

ps -fp 1234

确认它究竟是什么程序,避免误杀其他重要服务。

第四步:结束进程

如果确认该进程可以停止,可以先尝试正常终止:

kill 1234

等待一段时间后再次检查:

sudo ss -lntp | grep 8080

如果进程仍然无法退出,再根据实际情况考虑使用:

kill -9 1234

第五步:重新启动 Spring Boot 项目

java -jar app.jar

这样就完成了端口占用问题的基本排查。

6. 查看 Linux 网络配置

除了端口排查,我们还需要了解如何查看服务器本身的网络配置。

6.1 ip addr:查看 IP 地址

ip addr

也可以简写为:

ip a

用于查看网卡名称、IP 地址、网络接口状态等信息。

例如:

2: eth0:
    inet 192.168.1.100/24

表示当前网卡的 IPv4 地址为 192.168.1.100。

6.2 ip route:查看路由表

ip route

用于查看系统的路由信息。

例如:

default via 192.168.1.1 dev eth0

表示默认流量通过 192.168.1.1 这个网关转发,并通过 eth0 网卡发送。

6.3 hostname -I:查看本机 IP

hostname -I

可以快速查看当前机器配置的 IP 地址。

6.4 nslookup:查看 DNS 解析

nslookup www.baidu.com

用于查询域名对应的 IP 地址,可以帮助排查 DNS 解析问题。

例如,如果服务器可以通过 IP 访问目标机器,但是通过域名无法访问,就需要进一步检查 DNS 配置。

7. 防火墙与端口开放

有时我们发现 Spring Boot 服务已经正常启动,本机也可以通过 curl 访问,但是其他机器却无法访问。

这时除了检查服务监听地址,还需要检查防火墙规则。

Linux 中常见的防火墙管理工具有 firewalld 和 ufw。

7.1 firewalld

firewalld 在 CentOS、Rocky Linux 等发行版中比较常见。

# 查看防火墙状态
sudo systemctl status firewalld

# 查看当前开放的端口
sudo firewall-cmd --list-ports

# 开放 8080 TCP 端口(永久生效)
sudo firewall-cmd --permanent --add-port=8080/tcp

# 重新加载防火墙配置
sudo firewall-cmd --reload

# 再次查看开放端口
sudo firewall-cmd --list-ports

7.2 ufw

ufw 在 Ubuntu 系统中比较常见。

# 查看防火墙状态
sudo ufw status

# 开放 8080 TCP 端口
sudo ufw allow 8080/tcp

# 删除开放规则
sudo ufw delete allow 8080/tcp

注意:开放端口之前,需要确认服务确实需要对外提供访问,不要随意开放不必要的端口。

另外,如果使用的是云服务器,还需要检查云平台的安全组规则。即使 Linux 本机防火墙已经放行,云服务器安全组没有放行对应端口,外部仍然可能无法访问。

8. 实战:Spring Boot 服务无法从外部访问

假设 Spring Boot 项目已经启动,端口为 8080,但是其他机器无法访问。

可以按照下面的流程排查。

第一步:确认服务是否正常运行

sudo systemctl status myapp

如果服务由 systemd 管理,可以先检查是否处于 active (running) 状态。

第二步:检查端口是否处于监听状态

sudo ss -lntp | grep 8080

如果没有结果,说明当前没有发现对应的 TCP 监听端口。

第三步:检查本机是否能够访问

curl http://127.0.0.1:8080

如果本机可以访问,说明服务至少能够通过本地回环地址提供响应。

第四步:检查监听地址

如果结果显示:

127.0.0.1:8080

说明服务只监听本地回环接口,其他机器无法直接通过服务器网卡 IP 访问。

如果需要对外提供访问,需要根据实际部署环境配置服务监听地址,例如让 Spring Boot 监听 0.0.0.0。

第五步:检查防火墙和云服务器安全组

确认 8080/tcp 是否已经在 Linux 防火墙以及云平台安全组中放行。

第六步:从其他机器测试

curl http://服务器IP:8080

通过上述步骤,就可以逐步判断问题出现在服务进程、监听地址、防火墙还是网络链路上。

9. 常用命令速查表

命令作用
ping测试 ICMP 网络连通性
curl发送 HTTP 请求,测试接口
ss查看 Socket 和端口监听情况
lsof查看进程打开的文件和网络资源
netstat查看网络连接和端口信息
ip addr查看网卡和 IP 地址
ip route查看路由表
hostname -I查看本机 IP 地址
nslookup查询 DNS 解析
firewall-cmd管理 firewalld 防火墙
ufw管理 UFW 防火墙

总结

其中,ping 用于测试基本网络连通性,curl 用于测试 HTTP 接口,ss 和 lsof 用于查看端口监听和进程占用情况,而 ip addr、ip route、nslookup 则可以帮助我们排查网络配置和 DNS 问题。

对于后端开发来说,掌握这些命令非常重要。当 Spring Boot 项目出现端口冲突、接口无法访问或者网络连接异常时,我们就可以直接在 Linux 服务器上定位问题,而不必完全依赖图形化工具。

以上就是Linux中网络管理与端口排查常用命令总结的详细内容,更多关于Linux网络管理与端口排查命令的资料请关注脚本之家其它相关文章!

相关文章

最新评论