Linux网络管理利器:ss命令详解与应用指南

举报
江湖有缘 发表于 2025/03/31 14:04:41 2025/03/31
【摘要】 Linux网络管理利器:ss命令详解与应用指南


在这里插入图片描述

前言

ss(Socket Statistics)是Linux系统中用于分析网络连接信息的高效工具,作为netstat的现代化替代品,它以更快的执行速度和更详细的连接状态展示著称。本文将从基础语法到实战技巧,全面解析这一网络诊断利器的使用方法。


一、命令简介与核心优势

1.1 工具定位

  • 实时显示TCP/UDP/UNIX socket连接状态
  • 支持IPv4/IPv6双协议栈分析
  • 可关联进程信息与网络连接

1.2 对比netstat优势

特性 ss命令 netstat
执行速度 快10倍以上 较慢
内核数据获取 直接读取 遍历/proc目录
信息详细度 一般

二、基础语法与常用参数

2.1 标准语法格式

ss [选项] [过滤条件]

2.2 核心参数速查表

参数 功能描述
-t 显示TCP连接
-u 显示UDP连接
-l 仅显示监听状态的端口
-a 显示所有连接(含监听/非监听)
-n 禁用服务名称解析(显示端口号)
-p 显示关联进程信息
-s 输出统计摘要
-4 仅IPv4连接
-6 仅IPv6连接
-o 显示TCP定时器信息

三、典型应用场景与实例

3.1 快速查看活动连接

ss -tunap
  • -t:TCP协议
  • -u:UDP协议
  • -n:显示数字端口
  • -a:所有状态
  • -p:显示进程信息
root@jeven01:~# ss -tunap
Netid   State    Recv-Q   Send-Q                           Local Address:Port        Peer Address:Port    Process
udp     UNCONN   0        0                                127.0.0.53%lo:53               0.0.0.0:*        users:(("systemd-resolve",pid=686,fd=13))
udp     UNCONN   0        0          [fe80::be24:11ff:fe51:1ed4]%enp6s18:546                 [::]:*        users:(("systemd-network",pid=684,fd=20))
tcp     LISTEN   0        4096                                 127.0.0.1:38059            0.0.0.0:*        users:(("containerd",pid=728,fd=10))
tcp     LISTEN   0        128                                  127.0.0.1:6010             0.0.0.0:*        users:(("sshd",pid=5959,fd=7))
tcp     LISTEN   0        4096                                   0.0.0.0:80               0.0.0.0:*        users:(("haproxy",pid=940,fd=6))
tcp     LISTEN   0        128                                    0.0.0.0:22               0.0.0.0:*        users:(("sshd",pid=875,fd=3))
tcp     LISTEN   0        4096                                   0.0.0.0:8987             0.0.0.0:*        users:(("docker-proxy",pid=6499,fd=4))
tcp     LISTEN   0        4096                             127.0.0.53%lo:53               0.0.0.0:*        users:(("systemd-resolve",pid=686,fd=14))
tcp     LISTEN   0        4096                                   0.0.0.0:8080             0.0.0.0:*        users:(("haproxy",pid=940,fd=7))
tcp     LISTEN   0        4096                                   0.0.0.0:8000             0.0.0.0:*        users:(("docker-proxy",pid=1721,fd=4))
tcp     ESTAB    0        0                                 192.168.3.88:22         192.168.3.105:58051    users:(("sshd",pid=6070,fd=4))
tcp     ESTAB    0        52                                192.168.3.88:22         192.168.3.105:58050    users:(("sshd",pid=5959,fd=4))
tcp     LISTEN   0        128                                       [::]:22                  [::]:*        users:(("sshd",pid=875,fd=4))
tcp     LISTEN   0        4096                                      [::]:8987                [::]:*        users:(("docker-proxy",pid=6505,fd=4))
tcp     LISTEN   0        128                                      [::1]:6010                [::]:*        users:(("sshd",pid=5959,fd=5))
tcp     LISTEN   0        4096                                      [::]:8000                [::]:*        users:(("docker-proxy",pid=1728,fd=4))

3.2 定位特定服务端口

查看SSH服务(22端口)连接情况:

root@jeven01:~# ss -tn src :22
State           Recv-Q           Send-Q                       Local Address:Port                        Peer Address:Port            Process
ESTAB           0                0                             192.168.3.88:22                         192.168.3.105:58051
ESTAB           0                52                            192.168.3.88:22                         192.168.3.105:58050

3.3 分析TIME-WAIT状态连接

ss -t -o state time-wait

3.4 统计网络连接概况

root@jeven01:~# ss -s
Total: 208
TCP:   19 (estab 2, closed 5, orphaned 0, timewait 0)

Transport Total     IP        IPv6
RAW	  1         0         1
UDP	  2         1         1
TCP	  14        10        4
INET	  17        11        6
FRAG	  0         0         0

四、高级过滤技巧

4.1 状态过滤语法

ss state [state_name]

支持的状态类型:

  • established
  • syn-sent
  • syn-recv
  • fin-wait-1
  • fin-wait-2
  • time-wait
  • closed
  • close-wait
  • last-ack
  • listening
  • closing

示例

root@jeven01:~# ss -t state established
Recv-Q              Send-Q                           Local Address:Port                            Peer Address:Port              Process
0                   0                                 192.168.3.88:ssh                            192.168.3.105:58051
0                   52                                192.168.3.88:ssh                            192.168.3.105:58050 # 显示所有已建立的TCP连接

4.2 组合条件筛选

查看来自特定IP的连接:

root@jeven01:~# ss dst 192.168.3.105
Netid         State          Recv-Q          Send-Q                   Local Address:Port                    Peer Address:Port          Process
tcp           ESTAB          0               0                         192.168.3.88:ssh                    192.168.3.105:58051
tcp           ESTAB          0               52                        192.168.3.88:ssh                    192.168.3.105:58050

4.3 端口范围查询

ss -t sport gt :1024  # 源端口大于1024

在这里插入图片描述

五、安全分析与故障排查

5.1 检测异常连接

root@jeven01:~# ss -antp | grep -v '127.0.0.1' | column -t
State   Recv-Q  Send-Q  Local             Address:Port         Peer                                       Address:Port  Process
LISTEN  0       4096    0.0.0.0:80        0.0.0.0:*            users:(("haproxy",pid=940,fd=6))
LISTEN  0       128     0.0.0.0:22        0.0.0.0:*            users:(("sshd",pid=875,fd=3))
LISTEN  0       4096    0.0.0.0:8987      0.0.0.0:*            users:(("docker-proxy",pid=6499,fd=4))
LISTEN  0       4096    127.0.0.53%lo:53  0.0.0.0:*            users:(("systemd-resolve",pid=686,fd=14))
LISTEN  0       4096    0.0.0.0:8080      0.0.0.0:*            users:(("haproxy",pid=940,fd=7))
LISTEN  0       4096    0.0.0.0:8000      0.0.0.0:*            users:(("docker-proxy",pid=1721,fd=4))
ESTAB   0       0       192.168.3.88:22   192.168.3.105:58051  users:(("sshd",pid=6070,fd=4))
ESTAB   0       52      192.168.3.88:22   192.168.3.105:58050  users:(("sshd",pid=5959,fd=4))
LISTEN  0       128     [::]:22           [::]:*               users:(("sshd",pid=875,fd=4))
LISTEN  0       4096    [::]:8987         [::]:*               users:(("docker-proxy",pid=6505,fd=4))
LISTEN  0       128     [::1]:6010        [::]:*               users:(("sshd",pid=5959,fd=5))
LISTEN  0       4096    [::]:8000         [::]:*               users:(("docker-proxy",pid=1728,fd=4))

5.2 分析连接队列溢出

ss -ltn | grep 'Send-Q'
  • Recv-Q:等待应用读取的数据量
  • Send-Q:等待发送的数据量

5.3 追踪进程网络行为

ss -ap | grep 'python'

六、注意事项

  1. 权限要求:某些信息(如进程ID和详细连接数据)需要以管理员权限运行 ss,否则可能无法完整显示。

  2. 区分监听与非监听状态:使用 -l 选项仅显示监听中的端口,而默认情况下会显示所有活动连接。

  3. 避免误用反向DNS解析:默认启用的反向DNS解析可能影响性能,建议使用 -n 禁用解析以加快输出速度。

  4. 过滤条件需精确:过滤条件(如地址、端口)必须准确无误,否则可能导致结果为空或不符合预期。

  5. TCP与UDP区分-t  -u 分别用于查看TCP和UDP连接,切勿混淆两者。

  6. 小心处理大量连接:在高并发系统中,ss 输出可能非常庞大,建议结合 grep 或其他工具进行筛选。

  7. 进程信息依赖 /proc 文件系统-p 选项显示进程信息时,依赖于 /proc 文件系统,确保其已挂载。

  8. 版本差异:不同Linux发行版的 ss 版本可能存在功能差异,建议查阅本地手册页确认支持的选项。

  9. 注意IPv4与IPv6混合输出:默认情况下,ss 可能同时显示IPv4和IPv6连接,使用 -4  -6 明确指定协议版本。

  10. 清理输出格式:复杂场景下建议结合 -o(计时器信息)或自定义列格式,以优化输出可读性。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。