睿诚科技协会

Linux网络连接状态如何查看?

核心概念:Linux 网络连接状态

在深入工具之前,先理解几个关键概念:

Linux网络连接状态如何查看?-图1
(图片来源网络,侵删)
  1. 套接字:这是网络通信的基本单元,无论是 TCP 还是 UDP 通信,最终都会表现为一个或多个套接字,查看网络连接,本质上就是查看系统中的套接字状态。
  2. TCP 状态:TCP 是面向连接的协议,其连接有明确的生命周期,如 ESTABLISHED (已建立)、TIME_WAIT (等待结束)、CLOSE_WAIT (等待关闭) 等,这些状态对于排查连接问题至关重要。
  3. /proc 文件系统:Linux 内核将许多信息,包括网络连接,暴露在 /proc 文件系统中,用户空间的工具通过读取这些文件来获取信息。
  4. Netfilter/iptables:Linux 内核的防火墙框架,所有经过网络数据包都会经过它,因此它记录了所有网络连接的详细信息,这些信息被称为“连接跟踪表”(Conntrack Table)。

经典且强大的命令行工具

这些是系统管理员和开发者最常使用的工具。

ss - Socket Statistics (推荐首选)

ssnetstat 的现代替代品,速度更快,功能更强大,它直接从内核的 netlink 套接字获取信息,而不是像 netstat 那样解析 /proc 文件,因此在处理大量连接时效率极高。

基本用法:

# 显示所有 TCP 和 UDP 连接 (默认显示已建立的)
sudo ss
# 显示所有类型的连接,包括监听端口
sudo ss -a
# 只显示 TCP 连接
sudo ss -t
# 只显示 UDP 连接
sudo ss -u
# 只显示监听  的连接
sudo ss -l
# 同时显示监听和已建立的连接
sudo ss -ltp

高级和常用选项:

Linux网络连接状态如何查看?-图2
(图片来源网络,侵删)
  • -n:以数字形式显示地址和端口,不进行 DNS 反向解析,速度更快。
  • -p:显示进程 ID (PID) 和进程名称,非常有助于排查哪个程序在占用端口。
  • -t, -u, -w, -x:分别对应 TCP, UDP, RAW, Unix-domain sockets。
  • -4, -6:分别显示 IPv4 和 IPv6 连接。
  • -s:显示摘要信息,如总连接数、TCP 各状态的数量。
  • state:过滤特定状态的连接。

示例:

# 显示所有监听的 TCP 连接,并显示对应的进程
sudo ss -tlnp
# 显示所有处于 TIME_WAIT 状态的 TCP 连接
sudo ss -t state time-wait
# 显示所有与 80 端口相关的连接
sudo ss -t 'sport = :80 or dport = :80'
# 显示网络连接的摘要统计
sudo ss -s

netstat - Network Statistics (传统工具)

netstat 是一个历史悠久且功能全面的工具,在大多数系统上仍然可用,尽管 ss 更快,但 netstat 的选项和输出格式为许多人所熟知。

基本用法:

# 显示所有网络连接
sudo netstat -a
# 只显示 TCP 连接
sudo netstat -t
# 只显示 UDP 连接
sudo netstat -u
# 只显示监听端口
sudo netstat -l
# 以数字形式显示
sudo netstat -n
# 显示 PID 和程序名
sudo netstat -p

高级选项:

Linux网络连接状态如何查看?-图3
(图片来源网络,侵删)
  • -i:显示网络接口的统计信息。
  • -r:显示路由表。
  • -c:持续输出,每隔一秒刷新一次,适合实时监控。

示例:

# 持续监控 TCP 连接
sudo netstat -ctn
# 显示所有监听的 TCP 连接及进程
sudo netstat -tlnp

注意:在连接数非常多的服务器上,netstat 可能会变得很慢,此时应优先使用 ss

lsof - List Open Files

lsof 的字面意思是“列出打开的文件”,在 Linux 中,一切皆文件,网络连接(套接字)也不例外。lsof 也可以用来查看网络连接。

用法:

# 列出所有网络连接
sudo lsof -i
# 列出所有监听的网络连接
sudo lsof -i -sTCP:LISTEN
# 找出正在使用特定端口的进程
sudo lsof -i :80
# 找出某个 PID 打开的所有网络连接
sudo lsof -i -p <PID>

优点:非常灵活,可以从进程、端口、文件等多个角度查看。 缺点:对于单纯的网络连接查看,ssnetstat 更直接。


内核视角和防火墙视角

/proc/net 目录

这是内核直接暴露的原始数据,工具如 ssnetstat 会解析这些文件。

  • /proc/net/tcp:显示所有 TCP 套接字。
  • /proc/net/udp:显示所有 UDP 套接字。
  • /proc/net/tcp6/proc/net/udp6:IPv6 版本。

直接查看示例:

# 查看 TCP 连接,格式化输出(列名从第一行获取)
cat /proc/net/tcp | column -t

输出中的 st 列表示状态,local_addressrem_address 是十六进制表示的 IP 和端口。

conntrack - 连接跟踪表

如果你的服务器启用了防火墙(iptablesnftables),那么所有网络连接的状态都会被记录在连接跟踪表中。conntrack 工具用于查看和管理这个表。

安装:

# Debian/Ubuntu
sudo apt-get install conntrack
# RHEL/CentOS
sudo yum install conntrack

用法:

# 显示所有连接跟踪条目
sudo conntrack -L
# 显示所有 TCP 连接
sudo conntrack -L -t tcp
# 显示与特定 IP 相关的连接
sudo conntrack -L --src <IP_ADDRESS>
# 显示处于 ESTABLISHED 状态的连接
sudo conntrack -L --state ESTABLISHED
# 删除一个特定的连接跟踪条目(用于调试)
sudo conntrack -D --orig-src <IP> --orig-dst <IP>

conntrack 对于排查防火墙规则、NAT 转发问题以及理解内核如何处理连接状态非常有价值。


图形化工具

如果你不习惯命令行,可以使用图形界面工具。

nethogs

nethogs 不是一个连接状态查看器,而是一个进程级网络带宽监控器,它能实时显示哪个进程正在消耗网络流量,非常直观。

安装和使用:

# 安装
sudo apt-get install nethogs  # Debian/Ubuntu
sudo yum install nethogs      # RHEL/CentOS
# 运行,按流量大小排序
sudo nethogs

gnome-system-monitor (GNOME 桌面环境)

如果你在使用 GNOME 桌面,自带的“系统监视器”非常强大,在“资源”选项卡中,可以查看每个进程的网络接收和发送速度。

iftop

iftop 是一个基于终端的实时网络带宽监控工具,它显示哪个主机正在与你的服务器通信,以及通信的带宽占用情况。

安装和使用:

# 安装
sudo apt-get install iftop  # Debian/Ubuntu
sudo yum install iftop      # RHEL/CentOS
# 运行
sudo iftop

总结与选择建议

工具名称 主要用途 优点 缺点 适用场景
ss 查看套接字/连接状态 速度快,功能新,信息全面 部分旧系统可能未预装 首选和日常使用,尤其在高并发服务器
netstat 查看套接字/连接状态 功能全面,历史悠久 速度慢,解析 /proc 兼容旧系统,或习惯其输出的用户
lsof 列出打开的文件(包括连接) 灵活,可从进程/端口切入 对纯连接查看不够直接 需要将连接与特定文件/进程关联时
/proc/net 查看内核原始数据 最直接,无工具依赖 格式原始,不易读 调试、底层分析或编写脚本
conntrack 查看/管理防火墙连接跟踪 深入内核防火墙逻辑 仅在启用防火墙时有意义 排查防火墙/NAT问题,理解连接生命周期
nethogs/iftop 监控网络带宽使用 实时直观,显示流量 不显示连接状态细节 快速定位哪个进程/主机在消耗流量

  • 日常快速查看连接:用 sudo ss -tlnp
  • 排查哪个程序在用端口:用 sudo ss -tlnpsudo lsof -i :<port>
  • 监控实时网络流量:用 iftopnethogs
  • 深入防火墙或内核问题:用 conntrack 或直接看 /proc/net
分享:
扫描分享到社交APP
上一篇
下一篇