一、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
复制代码 查看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
复制代码 查看监听端口
- 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))
复制代码 统计各状态的连接数
- ss -s
- # 输出示例:
- Total: 45 (kernel 60)
- TCP: 10 (estab 5, closed 2, orphaned 0, timewait 3)
- UDP: 3
复制代码 三、核心区别对比
特性netstatss数据来源读取 /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等指标。
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
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |