Linux 命令:ss (socket statistics)

1. 写在前面

本文主要介绍 Linux ss (socket statistics) 命令: 用于显示 socket 统计信息的 CLI 命令。ss 命令是现已过时的 netstat 命令的简化版,相对速度更快、显示更多更详细关于 TCP 和连接状态的信息。

本文概述了如何使用 ss 命令,并举例说明了最常见的使用情况。

2. Linux ss 命令示例

ss 命令基本用法:ss [options] 不带任何参数,输出已建立连接的开放非监听套接字列表。

root@dev:~# ss
------------------------------------------------------------------------------------
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
u_str ESTAB 0 0 /run/systemd/journal/stdout 19228 * 21675
u_str ESTAB 0 0 /run/containerd/containerd.sock.ttrpc 2810571 * 2811796
u_str ESTAB 0 0 /run/containerd/containerd.sock 25659 * 23929
u_str ESTAB 0 0 /run/systemd/journal/stdout 23410 * 25645
u_str ESTAB 0 0 /run/containerd/containerd.sock.ttrpc 2810556 * 2810555

显示以下详细信息:

  • Netid :套接字(socket)类型,常见类型有 TCP、UDP、u_str(Unix stream)和 u_seq(Unix sequence);

  • State :套接字(socket)状态,常见 ESTAB(已建立)、UNCONN(未连接)、LISTEN(正在监听);

  • Recv-Q :队列中已接收数据包的数量;

  • Send-Q :队列中已发送数据包的数量;

  • Local Address:Port :本机地址和端口;

  • Peer Address:Port :远程主机地址和端口;

要获得更详细的输出结果,可在 ss 命令中添加选项:

ss <options>

ss <option 1> <option 2> <option 3>

【注意】:如果在运行 ss 命令时遇到以下错误:

```
ss: command not found
```

可以根据 Linux 发行版安装以下软件包:

```

Debian: apt-get install iproute2
Ubuntu: apt-get install iproute2
Alpine: apk add iproute2
Arch Linux: pacman -S iproute2
Kali Linux: apt-get install iproute2
CentOS: yum install iproute
Fedora: dnf install iproute
Raspbian: apt-get install iproute2
```

2.1 列出所有连接

列出所有监听和非监听的连接:

root@dev:~# ss -a
------------------------------------------------------------------------------------
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
nl UNCONN 0 0 rtnl:kernel *
nl UNCONN 0 0 rtnl:systemd-resolve/609 *
nl UNCONN 0 0 rtnl:dockerd/907 *
nl UNCONN 0 0 rtnl:systemd/1 *

或:

ss --all

2.2 监听套接字列表

仅显示监听套接字(默认情况下省略);

ss -l

ss --listen

2.3 列出 TCP 连接

要列出 TCP 连接,请在 ss 命令中添加 -t 选项;

ss -t

ss --tcp

列出所有 TCP 连接

将选项 -a 和 -t 与 ss 命令结合使用,可输出所有 TCP 连接的列表:

root@dev:~# ss -at
------------------------------------------------------------------------------------
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 0.0.0.0:http 0.0.0.0:*
LISTEN 0 128 127.0.0.1:41331 0.0.0.0:*

列出所有监听 TCP 连接

将选项 -l 和 -t 与 ss 命令结合使用,可以列出所有监听的 TCP 连接:

root@dev:~# ss -lt
------------------------------------------------------------------------------------
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 0.0.0.0:http 0.0.0.0:*
LISTEN 0 128 127.0.0.1:41331 0.0.0.0:*
LISTEN 0 128 127.0.0.1:43829 0.0.0.0:*

2.4 列出 UDP 连接

显示 UDP 连接列表;

ss -u

ss --udp

列出所有 UDP 连接

将选项 -a 和 -u 与 ss 结合使用,可输出所有 TCP 连接的列表:

ss -au

列出所有监听的 UDP 连接

列出所有正在监听的 UDP 连接,使用带有 -l 和 -u 选项的 ss 命令:

ss -lu

2.5 列出 Unix 套接字

显示所有 Unix 系列套接字;

root@dev:~# ss -f unix
------------------------------------------------------------------------------------
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
u_str ESTAB 0 0 /run/systemd/journal/stdout 19228 * 21675
u_str ESTAB 0 0 /run/containerd/containerd.sock.ttrpc 2810571 * 2811796
u_str ESTAB 0 0 /run/containerd/containerd.sock 25659 * 23929

或者使用更短的别名:

ss -x

2.6 原始套接字列表

列出原始套接字;

ss -w

ss --raw

2.7 列出与特定 IP 地址的连接

列出与特定目标 IP 地址的连接:

ss dst <address>

示例:

root@dev:~# ss dst 10.100.0.111
------------------------------------------------------------------------------------
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp ESTAB 0 0 10.100.0.111:33474 10.100.0.111:6379
tcp ESTAB 0 0 10.100.0.111:60820 10.100.0.111:6379
tcp ESTAB 0 0 10.100.0.111:35706 10.100.0.111:6379
tcp ESTAB 0 0 10.100.0.111:35624 10.100.0.111:6379

显示与特定源地址的连接:

ss src <addresss>

示例:

root@dev:~# ss src 10.100.0.111
------------------------------------------------------------------------------------
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp ESTAB 0 0 10.100.0.111:33474 10.100.0.111:6379
tcp ESTAB 0 0 10.100.0.111:60820 10.100.0.111:6379

2.8 显示进程 ID (PID)

root@dev:~# ss -p
------------------------------------------------------------------------------------
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
u_str ESTAB 0 0 /run/systemd/journal/stdout 19228 * 21675 users:(("systemd-journal",pid=373,fd=31),("systemd",pid=1,fd=76))
u_str ESTAB 0 0 /run/containerd/containerd.sock.ttrpc 2810571 * 2811796 users:(("containerd",pid=684,fd=66))

2.9 列表汇总统计

列出以下连接的汇总统计信息

root@dev:~# ss -s
------------------------------------------------------------------------------------
Total: 471
TCP: 461 (estab 75, closed 306, orphaned 0, timewait 0)

Transport Total IP IPv6
RAW 1 0 1
UDP 2 2 0
TCP 155 117 38
INET 158 119 39
FRAG 0 0 0

2.10 列出 IPv4 和 IPv6 套接字连接

IPv4:

ss -4

IPv6:

ss -6

例如,用以下命令列出所有 IPv6 UDP 连接:

ss -au6

2.11 过滤连接

使用 ss 命令可以对结果进行高级过滤,并搜索特定端口或 TCP 状态;

使用 TCP 状态进行过滤:

使用 TCP 预定义状态过滤 TCP 连接:

ss state <name of state>

例如,查找所有正在监听的 TCP 连接:

root@dev:~# ss -t state listening
------------------------------------------------------------------------------------
Recv-Q Send-Q Local Address:Port Peer Address:Port Process
0 4096 0.0.0.0:http 0.0.0.0:*
0 128 127.0.0.1:41331 0.0.0.0:*

按端口号筛选:

筛选特定目标端口号或端口名称:

ss <options> dst :<port number or name>

示例:

root@dev:~# ss dst :9000
------------------------------------------------------------------------------------
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp CLOSE-WAIT 1 0 10.100.0.111:34054 10.100.0.111:9000
tcp CLOSE-WAIT 1 0 10.100.0.111:43514 10.100.0.111:9000

或使用端口名称:

ss dst :https

组合多个查询,进行更高级的过滤。例如,查找目标端口为 5228 或源端口为 mysql 的所有连接:

ss -a dst :5228 or src :mysql

2.12 帮助手册或列出所有命令

有关如何使用该命令的详细介绍:

man ss

ss -h

3. netstat VS ss 

ss 命令被认为是过时的 netstat 命令的替代命令,与 net-tools 软件包相比,iproute2 软件包的 CLI 实用程序速度更快,过滤选项更好。

效率对比:

root@dev:~# time netstat -at
------------------------------------------------------------------------------------
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN
... ...
real 0m0.301s
user 0m0.000s
sys 0m0.016s
root@dev:~# time ss -at
------------------------------------------------------------------------------------
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 0.0.0.0:http 0.0.0.0:*
LISTEN 0 128 127.0.0.1:41331 0.0.0.0:*
... ...

real 0m0.011s
user 0m0.000s
sys 0m0.011s

从上面的执行效率可以清晰地看到,ss 命令的执行速度是 netstat 的 27 倍(不同环境可能执行效率不一样),可以看到 ss 命令的执行之快的优势,体现的尤为突出。也为我们的工作解决执行节省时间(即使当服务器效率较低时)。 

4. 结论

该工具可利用高级过滤选项查找套接字和网络统计数据,从而获得更好的故障排除体验。该工具是任何系统和网络管理员都必须掌握的工具。

感谢您花时间阅读文章!

收藏本站不迷路!


原文始发于微信公众号(滑翔的纸飞机):Linux 命令:ss (socket statistics)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/260907.html

(0)
土豆大侠的头像土豆大侠

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!