Skip to content

Linux 之 ss 和 netstat 命令

在 Linux 中,ssnetstat 都是用于监控网络连接和套接字统计信息的重要工具。

ss 命令

ss(socket statistics)是 netstat 的现代替代品,速度更快,提供的信息更详细。

ss 常用选项

bash
ss --help

# 显示所有连接
ss -a

# 显示 TCP 连接
ss -t

# 显示 UDP 连接
ss -u

# 显示监听端口
ss -l

# 显示数字格式
ss -n

# 显示进程信息
ss -p

# 显示定时器信息
ss -o

# 显示更详细的信息
ss -e

# 显示套接字统计摘要
ss -s

查看监听端口

bash
ss -tunlp

ss 查看端口占用,并从小到大排序

shell
ss -tunlp | sort -n -t: -k2

查看特定端口的连接

bash
# 查看 80 端口的连接
ss -t sport = :80

# 查看源端口为 443 的连接
ss -t dport = :443

查看特定状态的连接

bash
# 仅显示已建立的 TCP 连接
# 查看所有 ESTABLISHED 状态的 TCP 连接
ss -t state established

# 仅显示监听中的 TCP 连接
# 查看所有 LISTEN 状态的 TCP 连接
ss -t state listening

状态说明

常见的 TCP 连接状态:

  • LISTEN - 监听连接请求
  • ESTABLISHED - 已建立的连接
  • SYN-SENT - 发送连接请求后等待匹配
  • SYN-RECEIVED - 收到连接请求后发送确认
  • CLOSE-WAIT - 等待从本地用户发来的连接中断请求
  • TIME-WAIT - 等待足够的时间以确保远程TCP接收到连接中断请求的确认

netstat 命令

简介

netstat(network statistics)是一个传统的网络工具,用于显示网络连接、路由表、接口统计等信息。

netstat 常用选项

bash
# 显示所有连接
netstat -a

# 显示 TCP 连接
netstat -t

# 显示 UDP 连接
netstat -u

# 显示监听端口
netstat -l

# 显示数字格式(不解析主机名和服务名)
netstat -n

# 显示进程信息
netstat -p

# 组合使用示例
netstat -tunlp    # 显示所有 TCP/UDP 监听端口及进程信息
netstat -rn       # 显示路由表
netstat -i        # 显示网络接口统计

netstat 查看端口占用,并从小到大排序

shell
netstat -tunlp | sort -n -k 4.2

netstat 根据端口号,查询进程名称和进程 ID

shell
[root@localhost ~]# netstat -tunlp | grep 3306
tcp6       0      0 :::3306(端口号)     :::*      LISTEN      29520/mysqld(进程号/进程名称)

netstat 根据进程名称,查询进程 ID 和端口号

shell
[root@localhost ~]# netstat -tunlp | grep mysqld
tcp6       0      0 :::33060(端口号)    :::*     LISTEN      29520/mysqld(进程号/进程名称)
tcp6       0      0 :::3306 (端口号)    :::*     LISTEN      29520/mysqld(进程号/进程名称)

netstat 根据进程 ID,查询进程名称和端口号

shell
[root@localhost ~]# netstat -tunlp | grep 29520
tcp6       0      0 :::33060(端口号)    :::*     LISTEN      29520/mysqld(进程号/进程名称)
tcp6       0      0 :::3306 (端口号)    :::*     LISTEN      29520/mysqld(进程号/进程名称)

主要区别

特性netstatss
性能较慢,从 /proc/net 读取快速,直接从内核获取
信息详细度基本信息更详细的信息(定时器、内存使用等)
状态过滤有限强大的状态过滤功能
系统资源占用较多占用较少
现代系统逐渐被淘汰推荐使用

建议

在现代 Linux 系统中,推荐使用 ss 命令,因为它:

  • 速度更快
  • 提供更详细的信息
  • 功能更强大
  • 是未来发展的方向

不过,了解 netstat 仍然很有用,因为在一些老系统或容器环境中可能只有这个工具可用。