从netstat 到 ss

本文对比了Linux中ss和netstat两个网络连接状态查看命令的功能及使用方法。ss命令利用tcp_diag模块,在Redhat/Centos7及以上版本提供更快的统计速度,支持GRE隧道技术。文章介绍了ss命令的基本用法,包括查看网络连接统计、展示具体程序名称等,并列举了与netstat命令在部分功能上的相似之处。

Linux中一直习惯了用netstat来查看网络连接状态信息,偶尔在一个接受ss的页面看到其比netstat命令还要好,习惯要改变,特此对这两个命令做记录。

ss是Redhat/centos7中开始有的命令,利用了tcp协议栈中的tcp_diag模块,统计速度比netsat要快很多,即使系统中没有了tcp_diag模块,其速度也是netsat所无法比拟的

还有一个原因是net-tools工具不支持GRE隧道技术,而iproute2支持

netstat命令其安装包是net-tools, ss命令的安装包是iproute2

下面是ss命令的简单使用

一查看当前服务器的网络连接统计   

    一般用做宏观统计

[root@localhost ~]# ss -s
Total: 1243 (kernel 1647)
TCP:   15 (estab 1, closed 1, orphaned 0, synrecv 0, timewait 0/0), ports 0


Transport Total     IP        IPv6
*  1647      -         -        
RAW  1         0         1        
UDP  6         5         1        
TCP  14        8         6        
INET  21        13        8        

FRAG  0         0         0 

二查看打开的网络接口并看到具体的程序名称 下面省略了很多

ss -pl

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

users:(("cupsd",pid=1072,fd=12))
tcp   LISTEN     0      100    127.0.0.1:smtp                         *:*                     users:(("master",pid=1776,fd=13))
tcp   LISTEN     0      128           :::sunrpc                      :::*                     users:(("systemd",pid=1,fd=44))
tcp   LISTEN     0      128          ::1:webcache                    :::*                     users:(("sshd",pid=2689,fd=10))
tcp   LISTEN     0      128          ::1:http                        :::*                     users:(("sshd",pid=2689,fd=8))
tcp   LISTEN     0      128           :::ssh                         :::*                     users:(("sshd",pid=1154,fd=4))
tcp   LISTEN     0      128          ::1:ipp                         :::*                     users:(("cupsd",pid=1072,fd=11))

tcp   LISTEN     0      100          ::1:smtp                        :::*                     users:(("master",pid=1776,fd=14))

三 查看服务器上面相关的socket连接

ss -ta   查看tcp sockets

ss -ua  查看udp  sockets

ss -wa  查看 RAW sockets

ss -xa  查看 UNIX sockets

四特意百度了一下两者使用上的相通处

开启某个网络接口    ifconfig  eth0 up        ip link set up eth0

停止某个网络接口    ifconfig   eth0 down     ip link set down eth0

设置IP地址             ifconfig eth0 1.1.1.1/24    ip addr add 1.1.1.1/24 dev eth0

删除网络IP             ifconfig eth0 0                 ip addr del 1.1.1.1/24 dev eth0

显示某个网络接口的IP地址   ifconfig  eth0      ip addr show dev eth0

显示路由表            route  -n                         ip route show

添加默认网关         route add default gw 192.168.1.1 eth0     ip route add defaults via 192.168.1.1 eth0

删除默认网关       route del default gw 192.168.1.1 eth0         ip route replace default via 192.168.1.1 dev eth0


<think>好的,用户现在问的是netstatss的区别。之前用户已经让我介绍过ss命令,现在需要比较这两个工具。我需要先回忆一下之前的回答,确保一致性。 首先,用户可能是在学习Linux网络管理,或者遇到了网络问题需要排查。他们可能已经知道ss的基本用法,现在想了解为什么选择ss而不是netstat。用户可能希望得到两者在性能、功能、使用场景上的具体差异,以便在实际工作中选择更合适的工具。 接下来,我需要整理两者的区别。根据之前的回答,ss属于iproute2套件,直接读取内核数据,速度快,支持BPF过滤。而netstat属于net-tools,解析/proc下的文件,速度较慢,功能较少。用户可能需要明确的对比表格,比如数据来源、速度、功能、过滤语法等。 还要注意用户可能关心权限问题,比如ss需要sudo才能显示进程信息,而某些netstat版本可能不需要。另外,netstat在一些旧系统或最小化安装中可能仍被使用,但逐渐被ss取代。 需要强调ss在连接数多时的优势,比如处理高并发连接更快。同时,用户可能想知道迁移到ss的原因,比如net-tools已停止维护,而iproute2是未来趋势。 要确保回答结构清晰,分点列出区别,可能括对比表格、使用示例、迁移建议。还要注意用户可能需要的实际例子,比如如何用ss替代常见的netstat命令,这样他们能更快上手。 最后,检查是否有遗漏的重要区别,比如网络统计信息的详细程度,或者输出格式的不同。确保回答准确,符合用户的实际需求,帮助他们做出明智的工具选择。</think>### `netstat` 与 `ss` 的核心区别详解 `netstat` 和 `ss` 都是 Linux 中用于查看网络连接状态的工具,但它们在实现方式、性能、功能上有显著差异。以下是两者的对比分析: --- #### 一、**底层实现** | **特性** | `netstat` | `ss` | |----------------|------------------------------------|-----------------------------------| | **所属工具集** | `net-tools`(已停止维护) | `iproute2`(官方推荐,持续更新) | | **数据来源** | 解析 `/proc/net` 目录下的文本文件 | 直接读取内核的 `netlink` 接口 | | **速度** | 较慢(尤其连接数多时) | 极快(内核级数据访问) | **原理说明** - `netstat` 需要逐行读取 `/proc/net/tcp`、`/proc/net/udp` 等文件并解析,当连接数超过 1 万时性能急剧下降。 - `ss` 通过 `netlink` 机制与内核通信,直接获取结构化数据,效率提升 10 倍以上(尤其在处理高并发场景如 Web 服务器时)。 --- #### 二、**功能对比** | **功能** | `netstat` | `ss` | |----------------|------------------------------------------|-------------------------------------------| | **协议支持** | 基础协议(TCP/UDP/ICMP等) | 支持更多协议(SCTP、Unix Domain Socket等)| | **过滤语法** | 简单过滤(如端口、IP) | 支持 **BPF 过滤器**(类似 tcpdump 语法) | | **详细信息** | 显示基本连接状态 | 可输出内核级参数(如 TCP 计时器、拥塞窗口)| | **统计信息** | 有限的统计(`netstat -s`) | 更详细的分类统计(`ss -s`) | --- #### 三、**常用命令对比** | **场景** | `netstat` 命令示例 | `ss` 等效命令 | |-----------------------|----------------------------------------|----------------------------------------| | 查看所有 TCP 连接 | `netstat -tuna` | `ss -tna` | | 查看监听端口 | `netstat -tunlp` | `ss -tunlp` | | 统计连接数 | `netstat -s` | `ss -s` | | 过滤特定端口(如 80) | `netstat -an \| grep ':80'` | `ss -nt '( dport = :80 or sport = :80 )'` | | 显示进程信息 | `netstat -p`(部分系统需 root) | `ss -p`(需 root 权限) | --- #### 四、**输出格式差异** **`netstat` 输出示例**(可读性强,但信息较少): ``` Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd ``` **`ss` 输出示例**(信息更密集,支持扩展参数): ``` Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3)) ``` --- #### 五、**迁移到 `ss` 的理由** 1. **性能优势** - 处理 10 万级连接时,`ss` 响应时间在毫秒级,而 `netstat` 可能卡顿数秒。 2. **未来兼容性** - `net-tools` 已停止维护,新内核特性(如 Multipath TCP)可能不被支持。 3. **高级调试能力** - 查看 TCP 内部参数: ```bash ss -ti # 显示拥塞窗口(cwnd)、RTT、重传次数等 ``` --- #### 六、**何时仍需使用 `netstat`** 1. **旧系统兼容性** - 部分嵌入式系统或老旧发行版可能未预装 `iproute2`。 2. **简单场景** - 快速检查端口时,若习惯 `netstat` 语法可继续使用。 --- ### 总结建议 | **选择工具** | **场景** | |--------------|--------------------------------------------------------------------------| | 优先使用 `ss` | 高并发连接分析、需过滤复杂条件、需内核级网络诊断 | | 临时使用 `netstat` | 简单检查端口、旧系统环境、用户已熟悉 `netstat` 语法 | **关键结论**:在大多数现代 Linux 系统中,`ss` 是更高效、更强大的替代方案,建议逐步迁移至 `ss`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值