ss命令 #
ss
命令(socket statistics)用于显示套接字统计信息。它是netstat
命令的现代替代品,提供了更多信息和更好的性能。ss
命令可以显示比其他工具更多的TCP和状态信息。
语法 #
ss [选项] [过滤器]
常用选项 #
选项 | 描述 |
---|---|
-a, --all |
显示所有套接字(包括监听和非监听的) |
-l, --listening |
只显示监听套接字 |
-t, --tcp |
显示TCP套接字 |
-u, --udp |
显示UDP套接字 |
-x, --unix |
显示Unix域套接字 |
-n, --numeric |
不解析服务名称 |
-p, --processes |
显示使用套接字的进程 |
-i, --info |
显示内部TCP信息 |
-e, --extended |
显示详细的套接字信息 |
-m, --memory |
显示套接字内存使用情况 |
-o, --options |
显示定时器信息 |
-s, --summary |
显示套接字使用概要 |
-4, --ipv4 |
只显示IPv4套接字 |
-6, --ipv6 |
只显示IPv6套接字 |
-0, --packet |
显示PACKET套接字 |
-r, --resolve |
解析主机名 |
-h, --help |
显示帮助信息 |
-V, --version |
显示版本信息 |
过滤器语法 #
ss
命令支持强大的过滤器语法,可以根据各种条件过滤套接字:
ss [选项] [ state 状态 ] [ EXPRESSION ]
其中,EXPRESSION
的语法为:
dport = :443
sport = :http
src = 192.168.1.1
dst = 192.168.1.1:443
常见用法 #
1. 显示所有套接字 #
ss
2. 显示所有TCP套接字 #
ss -t
3. 显示所有UDP套接字 #
ss -u
4. 显示所有监听套接字 #
ss -l
5. 显示所有监听的TCP套接字 #
ss -lt
6. 显示所有监听的UDP套接字 #
ss -lu
7. 显示所有已建立的TCP连接 #
ss -t state established
8. 显示所有处于TIME-WAIT状态的TCP连接 #
ss -t state time-wait
9. 显示进程信息 #
sudo ss -p
10. 显示详细的套接字信息 #
ss -e
11. 显示内存使用情况 #
ss -m
12. 显示定时器信息 #
ss -o
13. 显示套接字统计信息 #
ss -s
14. 不解析服务名称 #
ss -n
15. 显示IPv4套接字 #
ss -4
16. 显示IPv6套接字 #
ss -6
17. 显示Unix域套接字 #
ss -x
过滤示例 #
1. 显示特定端口的连接 #
ss -t src :80
ss -t dst :80
2. 显示特定IP地址的连接 #
ss -t src 192.168.1.1
ss -t dst 192.168.1.1
3. 显示特定IP和端口的连接 #
ss -t src 192.168.1.1:80
ss -t dst 192.168.1.1:80
4. 使用多个过滤条件 #
ss -t src 192.168.1.1 dst 192.168.1.2
5. 使用比较操作符 #
# 显示源端口大于1024的连接
ss -t sport \> :1024
# 显示目标端口小于1024的连接
ss -t dport \< :1024
# 显示源端口在1024到65535之间的连接
ss -t sport \> :1024 sport \< :65535
6. 使用状态过滤 #
# 显示已建立的连接
ss -t state established
# 显示多个状态的连接
ss -t state established,time-wait
# 显示除已建立外的所有连接
ss -t state all exclude established
与netstat的对比 #
ss
命令是netstat
命令的现代替代品,提供了更多信息和更好的性能。以下是一些常见的netstat
命令及其ss
命令的等效形式:
netstat命令 | ss命令 | 描述 |
---|---|---|
netstat -a |
ss |
显示所有套接字 |
netstat -at |
ss -t |
显示所有TCP套接字 |
netstat -au |
ss -u |
显示所有UDP套接字 |
netstat -l |
ss -l |
显示所有监听套接字 |
netstat -lt |
ss -lt |
显示所有监听的TCP套接字 |
netstat -lu |
ss -lu |
显示所有监听的UDP套接字 |
netstat -p |
ss -p |
显示进程信息 |
netstat -n |
ss -n |
不解析服务名称 |
netstat -s |
ss -s |
显示统计信息 |
netstat -r |
ip route |
显示路由表 |
实用示例 #
1. 查找监听特定端口的进程 #
sudo ss -tlnp | grep ":80"
2. 统计各种连接状态的数量 #
ss -tan state all | awk '{print $1}' | sort | uniq -c
3. 查看连接到特定IP地址的连接 #
ss -t dst 192.168.1.1
4. 查看网络接口的错误统计 #
ss -s
5. 监控实时连接数 #
watch -n 1 "ss -t | wc -l"
6. 查看特定进程的网络连接 #
sudo ss -p | grep nginx
7. 检查是否有异常的TIME_WAIT或CLOSE_WAIT连接 #
ss -t state time-wait | wc -l
ss -t state close-wait | wc -l
8. 查看网络流量统计 #
ss -s
9. 查看所有已建立的SSH连接 #
ss -o state established '( dport = :ssh or sport = :ssh )'
10. 查看所有HTTP和HTTPS连接 #
ss -o state established '( dport = :http or sport = :http or dport = :https or sport = :https )'
套接字状态 #
TCP套接字可以处于以下状态:
状态 | 描述 |
---|---|
ESTABLISHED |
连接已建立 |
SYN-SENT |
已发送连接请求,等待确认 |
SYN-RECV |
已收到连接请求,等待确认 |
FIN-WAIT-1 |
等待远程TCP关闭连接或发送FIN |
FIN-WAIT-2 |
等待远程TCP关闭连接 |
TIME-WAIT |
等待足够的时间以确保远程TCP收到连接关闭确认 |
CLOSED |
连接已关闭,不在表中 |
CLOSE-WAIT |
等待本地用户关闭连接 |
LAST-ACK |
等待远程TCP确认连接关闭请求 |
LISTEN |
监听连接请求 |
CLOSING |
等待远程TCP确认连接关闭 |
UNKNOWN |
未知状态 |
提示 #
- 使用
-n
选项可以加快ss
的执行速度,特别是在DNS解析缓慢的情况下 - 使用
-p
选项需要root权限才能查看所有进程信息 - 结合
grep
命令可以过滤特定的连接或状态 - 使用
watch
命令可以实时监控连接状态的变化 - 在脚本中,通常使用
-n
选项以便于解析输出 - 使用
-s
选项可以查看详细的网络统计信息,这对于诊断网络问题很有用 - 使用状态过滤器可以快速找到特定状态的连接
- 使用
-o
选项可以查看定时器信息,这对于诊断连接问题很有用 - 使用
-e
选项可以查看详细的套接字信息,包括拥塞窗口、接收窗口等 - 使用
-m
选项可以查看套接字的内存使用情况