一、netstat 命令
1. 核心功能
-
显示网络连接、路由表、接口统计等信息。
-
支持TCP、UDP、UNIX域套接字等协议。
-
可查看进程与端口的关联。
2. 常用语法示例
查看所有活动连接
netstat -a
# 输出示例:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.1.2:22 10.0.0.5:54321 ESTABLISHED
-a
:显示所有连接(包括监听和非监听)。
查看TCP监听端口
netstat -tuln
# 输出示例:
Proto Recv-Q Send-Q Local Address State PID/Program name
tcp 0 0 0.0.0.0:80 LISTEN 1234/nginx
-t
:TCP协议;-u
:UDP协议;-l
:仅监听端口;-n
:禁用域名解析。
统计各连接状态的数量
netstat -ant | awk '/^tcp/ {print $6}' | sort | uniq -c
# 输出示例:
10 ESTABLISHED
2 TIME_WAIT
查看进程与端口的关联
netstat -tulnp
# 输出示例:
tcp6 0 0 :::80 :::* LISTEN 1234/nginx
二、ss 命令
1. 核心功能
-
替代
netstat
的现代工具,直接读取内核网络栈数据(通过netlink
接口)。 -
速度更快,支持更复杂的过滤语法。
-
支持显示TCP内部状态(如拥塞窗口、RTT)。
2. 常用语法示例
查看所有TCP连接
ss -at
# 输出示例:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.1.2:22 10.0.0.5:54321
-a
:所有连接;-t
:TCP协议。
查看监听端口
ss -tuln
# 输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 *:80 *:*
-u
:UDP协议;-l
:监听端口;-n
:禁用域名解析。
按状态过滤连接
ss -t state established
# 输出示例:
Recv-Q Send-Q Local:Port Peer:Port
0 0 192.168.1.2:22 10.0.0.5:54321
- 支持过滤:
established
,time-wait
,closed
等状态。
查看进程和Socket详细信息
ss -tulnp
# 输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=1234,fd=3))
-p
:显示进程信息(需root权限)。
统计各状态的连接数
ss -s
# 输出示例:
Total: 45 (kernel 60)
TCP: 10 (estab 5, closed 2, orphaned 0, timewait 3)
UDP: 3
三、核心区别对比
特性 | netstat | ss |
---|---|---|
数据来源 | 读取 /proc/net 文件 |
直接通过 netlink 接口读取内核数据 |
性能 | 较慢(高连接数时卡顿) | 极快(适合大规模服务器) |
功能复杂度 | 简单但功能有限 | 支持高级过滤和TCP内部状态分析 |
输出信息 | 基础连接信息 | 更详细的Socket元数据(如内存用量) |
系统兼容性 | 旧系统默认安装 | 新系统推荐工具(如CentOS 7+/Ubuntu 16+) |
进程关联显示 | 需要 -p 选项 |
同样支持,但格式更清晰 |
四、使用场景建议
1. 推荐使用 ss
的场景
-
高并发服务器:需快速统计数千个连接。
-
精准过滤:按状态、端口、IP等条件筛选连接。
ss -t src 192.168.1.2 and dport = 80
-
分析TCP性能:查看拥塞窗口、RTT等指标。
ss -ti
2. 可能仍需使用 netstat
的场景
-
旧系统兼容 :某些嵌入式系统未预装
ss
。 -
路由表查看 :
netstat -r
显示路由信息更直观。 -
接口统计 :
netstat -i
查看网络接口流量。
五、示例分析
案例:查找占用80端口的进程
** 使用 netstat
**
netstat -tulnp | grep ':80'
# 输出:
tcp6 0 0 :::80 :::* LISTEN 1234/nginx
** 使用 ss
**
ss -tulnp | grep ':80'
# 输出:
tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=1234,fd=3))
** 结果对比** :ss
输出更简洁,直接显示进程名称和文件描述符。
案例:统计ESTABLISHED连接数
** 使用 netstat
**
netstat -ant | grep ESTABLISHED | wc -l
** 使用 ss
**
ss -t state established | wc -l
- 效率对比 :
ss
直接过滤状态,速度更快。