使用 ss 命令替代 netstat

2025-12-25 17:06:13 303

使用 ss 命令替代 netstat:Linux 网络连接分析新利器

 

欢迎来到8455线路检测中心技术小课堂。

Linux 网络故障排查和性能分析中,监控网络连接状态是基础而关键的技能。传统的 netstat命令曾长期是网络连接分析的首选工具,但在现代 Linux 系统中,ssSocket Statistics)以其更高的性能和更丰富的功能逐渐成为更好的选择。本文将详细介绍 ss命令的使用方法,帮助您高效分析网络连接状态。

为什么选择 ss 而非 netstat?

1. 性能优势ss直接从内核空间获取信息,速度远快于 netstat

2. 更多信息:提供更详细的套接字统计信息

3. 更精确的过滤:支持丰富的过滤表达式

4. netstat 已过时:许多 Linux 发行版已默认不再安装 netstat

1. ss 命令基础

安装 ss

大多数现代 Linux 发行版已预装 ss,它是 iproute2软件包的一部分:

# 检查是否安装

which ss

 

# 如果未安装,安装 iproute2

sudo apt install iproute2  # Ubuntu/Debian

sudo yum install iproute   # CentOS/RHEL

基本语法

ss [选项] [过滤表达式]

2. 常用选项和输出解读

显示所有连接

# 显示所有连接

ss

 

# 显示所有 TCP 连接

ss -t

 

# 显示所有 UDP 连接

ss -u

 

# 显示所有 UNIX 域套接字

ss -x

 

# 显示所有 RAW 套接字

ss -w

常用选项组合

# 显示监听端口(最常用)

ss -tln

 

# 显示所有 TCP 连接(包括监听)

ss -tan

 

# 显示所有 UDP 连接

ss -uan

 

# 显示进程信息

ss -tlnp

选项说明

· -t, --tcpTCP 连接

· -u, --udpUDP 连接

· -l, --listening:仅显示监听套接字

· -a, --all:显示所有套接字

· -n, --numeric:不解析服务名

· -p, --processes:显示使用套接字的进程

· -o, --options:显示计时器信息

· -e, --extended:显示详细的套接字信息

· -m, --memory:显示套接字内存使用

· -4, --ipv4:仅 IPv4

· -6, --ipv6:仅 IPv6

输出字段解析

ss -tlnp

输出示例:

State      Recv-Q Send-Q Local Address:Port  Peer Address:Port

LISTEN     0      128          *:80               *:*        users:(("nginx",pid=1234,fd=6))

LISTEN     0      128    127.0.0.1:3306           *:*        users:(("mysqld",pid=5678,fd=21))

ESTAB      0      0      192.168.1.100:443   203.0.113.10:54210  users:(("nginx",pid=1234,fd=7))

关键字段:

· State:套接字状态

· Recv-Q:接收队列中的字节数

· Send-Q:发送队列中的字节数

· Local Address:Port:本地地址和端口

· Peer Address:Port:对端地址和端口

· users:使用该套接字的进程信息

3. 网络连接状态分析

查看各种状态的连接

# 查看所有状态的连接数统计

ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn

 

# 查看特定状态的连接

ss -tan state established

ss -tan state time-wait

ss -tan state close-wait

常见 TCP 状态

· LISTEN:监听连接请求

· ESTABLISHED:已建立的连接

· TIME-WAIT:等待足够时间确保对端收到终止请求

· CLOSE-WAIT:等待本地应用程序关闭连接

· SYN-SENT:发送连接请求后等待匹配

· SYN-RECV:收到连接请求后发送确认

4. 实际应用示例

示例1:查看端口占用情况

# 查看80端口是否被占用

ss -tlnp | grep :80

 

# 查看哪个进程使用特定端口

ss -tlnp sport = :80

ss -tlnp dport = :80

 

# 查看指定进程的网络连接

ss -tanp | grep "pid=1234"

示例2:排查连接数过多问题

# 查看各状态的连接数

ss -tan | awk 'NR>1 {print $1}' | sort | uniq -c

 

# 查看TIME-WAIT状态的连接

ss -tan state time-wait

 

# 查看连接数最多的IP

ss -tan | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10

 

# 查看本地端口使用情况

ss -tan | awk '{print $4}' | cut -d: -f2 | sort | uniq -c | sort -rn | head -10

示例3:监控网络连接变化

# 实时监控新连接

watch -n 1 "ss -tan state established | wc -l"

 

# 监控特定端口的连接

watch -n 1 "ss -tan sport = :443 | grep ESTAB | wc -l"

 

# 监控连接状态变化

while true; do

    echo "=== $(date) ==="

    ss -tan state established | tail -n +2 | wc -l

    sleep 5

done

 

8455线路检测中心官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,8455线路检测中心整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。

更多技术知识,8455线路检测中心期待与你一起探索。

 


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题:
XML 地图