Linux 中如何查看所有活动的网络连接?

文章导读
在 Linux 系统中,查看活动网络连接最推荐的方式是使用 ss 命令。它是 netstat 的现代替代品,能更直接从内核获取 socket 信息,效率更高。
📋 目录
  1. 常用命令组合
  2. 参数详解与避坑
  3. 验证方法
  4. 常见错误与排查
A A

在 Linux 系统中,查看活动网络连接最推荐的方式是使用 ss 命令。它是 netstat 的现代替代品,能更直接从内核获取 socket 信息,效率更高。

先说结论:查看监听端口用 ss -tunlp,查看所有连接(含已建立)用 ss -tunap。务必加 sudo 权限以显示进程信息。

  • 适合:排查端口占用、网络连接状态、异常连接定位
  • 注意:-l 仅显示监听状态,不加 -l 或使用 -a 才能看到已建立的连接
  • 建议:加上 -n 避免 DNS 解析延迟,加上 -p 查看进程名

常用命令组合

根据排查目的不同,选择合适的参数组合:

1. 查看监听端口(Listening):

Linux 中如何查看所有活动的网络连接?

适用于检查服务是否正常启动并监听特定端口。

sudo ss -tunlp

2. 查看所有活动连接(All):

适用于排查异常外连、确认客户端连接状态(ESTAB)。

sudo ss -tunap

如果系统较旧没有 ss,可以使用 netstat(需安装 net-tools):

Linux 中如何查看所有活动的网络连接?
sudo netstat -tunap

参数详解与避坑

理解参数含义能避免误判连接状态:

  • -t / -u:分别显示 TCP 和 UDP 连接。
  • -n:不解析域名,直接显示 IP 地址,避免命令卡顿。
  • -p:显示进程 ID 和名称(需要 root 权限)。
  • -l仅显示监听状态。如果只用这个参数,会漏掉已建立的连接。
  • -a:显示所有状态(包含监听和已建立)。

关键区别:原标题要求查看“所有活动连接”,若仅使用 -l 参数,只能看到服务器是否在听,看不到谁连进来了。务必使用 -a 或去掉 -l

验证方法

通过模拟服务端和客户端连接,验证命令是否能捕捉到不同状态:

  1. 启动监听:新开终端运行 python3 -m http.server 8000
  2. 查看监听:运行 sudo ss -tunlp | grep 8000,应看到状态为 UNCONNLISTEN
  3. 建立连接:在另一个终端运行 curl http://localhost:8000 保持连接(或使用 telnet)。
  4. 查看全量:运行 sudo ss -tunap | grep 8000,此时应能看到状态为 ESTAB 的连接记录。

常见错误与排查

  • 进程列为空:未加 sudo 导致权限不足,无法读取其他用户的进程信息。
  • 命令卡顿:未加 -n 参数,系统尝试反向解析 IP 地址,在网络配置错误时会长时间等待。
  • 工具缺失:最小化安装可能缺少 iproute2(含 ss)或 net-tools(含 netstat),需通过 yum install iprouteapt install iproute2 安装。
  • 漏看连接:习惯性使用 -l 参数,导致误以为没有外部连接接入,实际只是没显示非监听状态。