ss命令是比netstat更高效精确的linux网络连接查看工具,支持按协议、状态、端口、地址过滤及进程信息显示,并提供连接统计功能。

如果您需要实时掌握Linux系统中网络连接的详细状态,ss命令是比netstat更高效、更精确的替代工具。以下是使用ss命令查看网络连接状态的具体操作步骤:
一、基础连接状态查看
ss命令默认显示所有已建立的TCP连接,不依赖外部模块,执行速度快,输出精简。它直接从内核socket子系统读取信息,避免了netstat可能产生的延迟和权限问题。
1、打开终端,输入以下命令查看当前所有已建立的TCP连接:
2、执行 ss -t 命令,仅显示TCP协议的连接(不含监听端口)。
3、执行 ss -tuln 查看所有监听中的TCP和UDP端口,其中-t表示TCP、-u表示UDP、-l表示监听状态、-n表示以数字形式显示地址和端口(不解析主机名和服务名)。
二、按连接状态筛选特定连接
通过状态过滤可快速定位异常或关键连接,例如只关注已建立(ESTAB)、正在监听(LISTEN)或已关闭(CLOSE_WAIT)的连接,提升排查效率。
1、执行 ss -tn state established 列出所有处于ESTABLISHED状态的TCP连接。
2、执行 ss -tn state listen 仅显示当前监听的TCP端口及对应进程(需配合-p参数才显示进程名)。
3、执行 ss -tn state fin-wait-1 检查处于FIN-WAIT-1状态的连接,用于识别主动关闭连接后的残留会话。
三、显示进程与用户信息
结合-p参数可获取连接所属进程ID及启动用户,但需root权限才能看到其他用户的进程信息,这对定位服务归属和权限问题至关重要。
1、执行 sudo ss -tunlp 显示所有监听和已连接的TCP/UDP套接字,并附带进程名、PID和用户。
2、若提示“Permission denied”,说明当前用户无权访问部分进程信息,必须使用sudo或切换至root用户执行。
3、在输出结果中,最后一列格式为 users:(("进程名",pid=xxx,fd=xx)),其中pid即进程ID,fd为文件描述符编号。
四、按端口或地址过滤连接
使用-s选项或grep配合可精准匹配目标端口、IP地址或域名,适用于多服务共存或存在大量连接的服务器环境。
1、执行 ss -tn sport :80 查看本地发起的、源端口为80的所有TCP连接。
2、执行 ss -tn dport = 443 查看所有目标端口为443的TCP连接(如HTTPS请求)。
3、执行 ss -tn dst 192.168.1.100 筛选出目标IP为192.168.1.100的所有TCP连接。
五、统计连接状态分布
使用-s选项可快速获取系统级连接汇总数据,包括各协议套接字数量、内存使用、排队情况等,适用于性能初筛和容量评估。
1、执行 ss -s 输出当前socket统计摘要,含TCP、UDP、RAW、UNIX等类型总数。
2、输出中类似 TCP: 123 (estab 45, closed 32, orphaned 2, synrecv 0, timewait 18/0) 的字段,分别表示ESTAB、CLOSED、孤儿连接、SYN_RECV和TIME_WAIT数量。
3、若发现orphaned值持续升高,表明存在未被回收的孤儿连接;timewait值过高则可能影响端口复用效率。










