ss命令详细使用讲解文章

ss 命令作为 iproute2 软件包的一部分,是Socket Statistics的缩写,也称为IPC(Inter-process Communication)套接字统计

ss命令用于显示sockets(套接字)的状态。与netstat类似,但它通常提供更详细的统计信息和更快的性能。但ss更高效因为它直接利用了内核的TCP连接跟踪状态信息(通过tcp_diag)模块,并且提供了更丰富和详细的网络连接状态视图。
ss 命令的输出可以与 grepawksort 等命令结合使用,进行更复杂的数据处理和过滤。

ss:基本语法

ss [选项] [过滤器]

常见命令选项 

用法:ss [OPTIONS]
ss        [选项]       [过滤器]
-h、   --帮助此消息
-V、  --版本输出版本信息
-n、或  --numeric: --数字不解析服务名称,(不进行 DNS 解析,直接显示 IP 地址和端口号。)
-r、或  --resolve: --解析主机名。尝试解析 IP 地址到主机名和端口号到服务名。
-a、  --所有显示所有插座
-l、   --监听显示监听插座
-o、 或  --options:  显示计时器和套接字选项。
-e、  --extended --扩展显示详细的套接字信息 ,(显示更多详细信息,如套接字的标记、队列长度等。)
-m、  --内存显示套接字内存使用情况
-p、 或  --processes   --进程显示使用套接字的进程。(显示与套接字关联的进程 ID 和名称。)
-i、    --info显示内部TCP信息
-s、   --summary显示套接字使用情况摘要
-b、   --bpf显示bpf筛选器套接字信息
-E、  --事件在套接字被破坏时不断显示套接字
-Z、  --上下文显示进程SELinux安全上下文
-z、  --上下文显示进程和套接字SELinux安全上下文
-N、 --net切换到指定的网络命名空间名称
-4,  --ipv4仅显示IP版本4套接字
-6,  --ipv6仅显示IP版本6套接字
-0, --数据包显示packet套接字
-t、  --tcp仅显示tcp套接字
-S、 --sctp仅显示sctp套接字
-u、 --udp仅显示udp套接字
-d、 --dccp仅显示dccp套接字
-w、 --仅原始显示raw套接字
-x、  --unix仅显示unix域套接字
--vsock  仅显示vsock套接字
-f、 --family=family类型的family显示插座
系列:={inet|inet6|link|unix|netlink|vsock|help}
-K、 --kill强制关闭套接字,显示关闭的内容
-H、 --无标题取消标题行
 -A, --query=QUERY, --socket=QUERY
       QUERY := {all|inet|tcp|udp|raw|unix|unix_dgram|unix_stream|unix_seqpacket|
-D、 --diag=FILE将有关TCP套接字的原始信息转储到FILE
-F、 --filter=FILE从FILE读取筛选器信息
        FILTER:=[state state-FILTER][EXPRESSION]
        STATE-FILTER:={all|connected|synchronized|bucket|big|TCP-STATES}
        TCP-STATES:={已建立|已发送同步|已同步recv|fin-wait-{1,2}|时间等待|关闭|关闭等待|最后一次确认|侦听|关闭}
        connected:={已建立|同步发送|同步recv | fin wait-{1,2}|时间等待|关闭等待|最后一次确认|关闭}
        synchronized:={已建立|syn-recv|fin-wait-{1,2}|时间等待|关闭等待|最后一次确认|关闭}
        bucket:={syn-recv | time wait}
        big:={已建立|syn-sent|fin-wait-{1,2}|closed|close-wait|last-ack|listen|closed}

显示所有套接字

ss 或 ss -a:显示所有类型的套接字,包括监听(Listening)和非监听状态的。

ss -a

 仅显示监听套接字

ss -l:列出所有监听状态的套接字。

ss -l

 TCP 和 UDP 连接

ss -t:显示所有 TCP 连接。

ss -u:显示所有 UDP 连接。

ss -t
ss -u
结合选项 

ss -at:显示所有 TCP 连接(包括监听和非监听)。

ss -au:显示所有 UDP 连接。

ss -at
ss -au

 过滤与排序

  • 可以通过 -f 或 --filter 加上表达式来过滤输出,比如 state established 只显示已建立的连接。
  • 使用 -o 后可以加上列名对输出进行排序,例如,-o state 按照状态排序。

要查看所有正在监听的 TCP 连接

ss -lt

要查看所有 TCP 连接,并解析主机名和端口号

ss -ane

要查看所有连接,并显示进程信息

ss -ap

输出排序与限制

  • 排序:使用 -o 或 --sort 选项可以对输出进行排序,例如按接收或发送的数据量排序。
  • 限制输出数量:使用 -n (与 -t-u-x 等结合) 限制输出的条目数,如 ss -nt 10 只显示前10个TCP连接。

目标筛选

  • 指定目标IP或端口:通过 dst 或 sportdport 参数筛选特定目标或端口的连接,例如 ss dst 192.168.1.1 或 ss sport = :80

统计与分析

  • 统计信息-s 或 --summary 提供了关于各种协议(TCP, UDP, RAW, UNIX等)的统计信息,包括连接数、接收/发送字节数等。
  • 计时器信息:使用 -o 选项可以显示每个套接字的计时器信息,这有助于分析网络延迟问题。

高级应用

  • 与其它命令结合ss 的输出可以方便地与 grepawksedsort 等命令结合使用,进行更复杂的过滤和数据分析。
  • 实时监控:配合 watch 命令,如 watch -n 1 'ss -ant',可以实时查看网络连接的变化情况,其中 -n 1 表示每秒更新一次。

替代传统命令

  • ss 命令因其高效性和详细信息,常被推荐作为 netstatifconfigroute 等传统网络管理命令的替代品。它不仅提供更详尽的TCP连接状态,还支持现代协议如DCCP和SCTP。

 连接状态筛选

状态筛选:你可以根据连接的状态来筛选输出。例如,ss state ESTABLISHED 会显示所有已建立的连接。

ss state established

常见的状态包括:SYN-SENTSYN-RECVESTABLISHEDFIN-WAIT-1FIN-WAIT-2TIME-WAITCLOSEDCLOSE-WAITLAST-ACKLISTENCLOSING

  1. CLOSED:

    • 这是TCP连接的初始状态,表示没有连接活动。
  2. LISTEN:

    • 服务器端socket处于此状态,表示它正在监听来自客户端的连接请求。
  3. SYN_SENT:

    • 客户端发起连接请求,发送SYN报文后进入此状态,等待服务器响应。
  4. SYN_RECEIVED:

    • 服务器接收到客户端的SYN报文后,会以SYN+ACK响应,并进入此状态,等待客户端的确认。
  5. ESTABLISHED:

    • 客户端收到服务器的SYN+ACK后,回复ACK,连接建立成功,双方进入此状态,开始数据传输。
  6. FIN_WAIT_1:

    • 连接终止的第一步,主动关闭方发送FIN报文后进入此状态,等待对方的FIN报文或ACK。
  7. FIN_WAIT_2:

    • 主动关闭方收到对方对FIN的ACK后,进入此状态,等待对方的FIN报文。
  8. CLOSE_WAIT:

    • 被动关闭方收到FIN后,回应ACK并进入此状态,此时连接还未完全关闭,等待应用程序关闭连接。
  9. CLOSING:

    • 双方几乎同时尝试关闭连接,即双方都发送了FIN且至少一端收到了ACK,但还没收到对方的FIN。
  10. LAST_ACK:

    • 被动关闭方在发送完自己的FIN后,等待最后一个ACK到来的状态。
  11. TIME_WAIT:

    • 主动关闭方在接收到对方的FIN并发送ACK后进入此状态,等待足够长的时间以确保所有分组在网络中消失,防止延迟的数据包引起混淆。
  12. CLOSED:

    • 连接彻底关闭,回到初始状态。

这些状态反映了TCP连接建立(三次握手)和拆除(四次挥手)的整个过程,以及连接期间可能出现的其他情况,如一方请求关闭连接而另一方继续处理数据等。

连接状态筛选案例

1. 查看所有已建立的连接(ESTABLISHED)

1ss state established

这个命令会显示所有TCP连接中状态为“ESTABLISHED”的连接,即数据传输正在进行中的连接。

2. 查看监听状态的套接字(LISTEN)

1ss state listening

此命令会列出所有正在监听并等待连接请求的套接字,这对于了解哪些服务正在运行并监听端口非常有用。

3. 查找处于SYN_SENT状态的连接

1ss state syn-sent

此命令显示那些已发送SYN包但尚未收到SYN+ACK确认的连接,这可能意味着连接建立过程中出现了延迟或问题。

4. 查看TIME_WAIT状态的连接

1ss state time-wait

TIME_WAIT状态表示连接已经关闭,但是为了确保所有数据包都被正确接收,套接字在一段时间内保持打开。过多的TIME_WAIT状态可能表明之前有很多连接被快速打开和关闭。

5. 查找CLOSE_WAIT状态的连接

1ss state close-wait

CLOSE_WAIT状态意味着本地端已经接收到对方的关闭连接请求,但还没有完成关闭操作。长时间处于此状态可能意味着程序未正确关闭连接。

6. 显示所有状态的连接,包括不常见状态

1ss state all

此命令将显示所有状态的网络连接,包括但不限于上述提到的状态,有助于全面了解系统的网络连接状况。

7. 结合其他条件进行筛选

例如,查找特定IP的ESTABLISHED连接:

1ss state established dst 10.0.0.1

这会显示所有与IP地址10.0.0.1之间已建立的TCP连接。

  • 31
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jingyu飞鸟

醒来觉得甚是爱你。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值