0

0

Linux怎么查看系统套接字_Linux ss与socket状态分析【网络】

冰火之心

冰火之心

发布时间:2026-01-10 10:21:08

|

264人浏览过

|

来源于php中文网

原创

必须准确识别socket状态含义及命令字段:ss命令高效查看TCP/UDP套接字,State列如ESTAB、LISTEN等对应TCP状态机,Recv-Q/Send-Q反映收发队列积压,/proc/net和lsof可辅助验证与进程定位。

linux怎么查看系统套接字_linux ss与socket状态分析【网络】

如果您需要诊断Linux系统中的网络连接问题或监控当前活跃的套接字状态,则必须准确识别各类socket的状态含义及对应命令输出字段。以下是使用ss命令和相关工具分析socket状态的具体操作步骤:

一、使用ss命令查看套接字概览

ss(socket statistics)是现代Linux系统中替代netstat的高效工具,可直接从内核获取套接字信息,响应速度快且资源占用低。它能显示TCP、UDP、Unix域套接字等详细状态,并支持过滤与格式化输出

1、执行基础命令列出所有TCP监听端口
ss -tln

2、列出所有已建立的TCP连接:
ss -tn

3、同时显示进程名与PID(需root权限):
ss -tunlp

4、过滤特定端口(如80端口)的连接:
ss -tun sport = :80 or dport = :80

二、解析ss命令关键字段含义

ss命令输出包含State、Recv-Q、Send-Q、Local Address:Port、Peer Address:Port等列,理解其语义对状态判断至关重要。例如Recv-Q非零可能表示应用层未及时读取数据,而State字段直接反映TCP有限状态机当前所处阶段。

1、State列常见值包括:ESTAB(已建立连接)、LISTEN(监听中)、TIME-WAIT(等待关闭确认)、CLOSE-WAIT(对方已关闭,本方尚未关闭)、SYN-RECV(收到SYN,等待三次握手完成)

2、Recv-Q为接收队列中未被应用读取的字节数,持续大于0可能表明应用存在读取阻塞或崩溃

3、Send-Q为发送队列中未被对端确认的字节数,若长期不为0且连接处于ESTAB状态,可能意味着网络丢包或对端接收窗口为0

三、使用netstat辅助验证(兼容性方案)

尽管ss为推荐工具,但在部分老旧发行版或调试环境中,netstat仍具参考价值。其输出结构更直观,便于初学者理解套接字生命周期,但性能开销较大且部分功能已被弃用。

1、安装net-tools包(如未预装):
yum install net-tools 或 apt-get install net-tools

2、查看所有监听端口:
netstat -tuln

降迹灵AI
降迹灵AI

用户口碑TOP级的降AIGC率、降重平台

下载

3、查看特定协议的连接数统计:
netstat -s -t(TCP统计)或 netstat -s -u(UDP统计)

4、比对ss与netstat输出差异时,需注意netstat中TIME_WAIT状态数量通常显著高于ss,因其默认包含已关闭但未释放的连接条目

四、通过/proc/net目录直接读取内核套接字数据

/proc/net/子目录下存放着内核实时维护的套接字信息文件,绕过用户态工具可获得最原始数据。该方法适用于脚本化监控或排查ss/netstat输出异常场景,无需额外依赖。

1、查看TCP套接字状态汇总:
cat /proc/net/tcp | head -n 20

2、解析十六进制inode字段后,可关联到具体进程:
ls -l /proc/[pid]/fd/ | grep socket

3、从/proc/net/tcp中提取第4列(st列),其值为十六进制状态码01对应ESTAB,0A对应LISTEN,06对应TIME-WAIT

五、结合lsof定位套接字所属进程

当ss或netstat显示PID但无法确认进程行为时,lsof可提供更丰富的上下文,包括用户、命令行参数、文件描述符类型等,特别适用于多线程服务或容器环境下的精准归因。

1、安装lsof工具:
yum install lsof 或 apt-get install lsof

2、列出所有网络套接字及其进程:
lsof -i -P -n

3、仅显示监听TCP端口的进程:
lsof -iTCP -sTCP:LISTEN -P -n

4、针对特定端口(如22)查找持有者:
lsof -i :22

5、若输出中出现can't identify protocol错误,说明对应socket未绑定到标准协议,可能是raw socket或AF_PACKET类型

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

384

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

568

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

479

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

143

2025.12.24

tcp和udp的区别
tcp和udp的区别

TCP和UDP的区别,在连接性、可靠性、速度和效率、数据报大小以及适用场景等方面。本专题为大家提供tcp和udp的区别的相关的文章、下载、课程内容,供大家免费下载体验。

118

2023.07.25

udp是什么协议
udp是什么协议

UDP是OSI参考模型中一种无连接的传输层协议。本专题为大家带来udp是什么协议的相关文章,免费提供给大家。

276

2023.08.08

tcp和udp有什么区别
tcp和udp有什么区别

tcp和udp的区别有:1、udp是无连接的,tcp是面向连接的;2、udp是不可靠传输,tcp是可靠传输;3、udp是面向报文传输,tcp是面向字节流传输。想了解更多tcp相关的内容,可阅读本专题下面的相关文章。

364

2024.11.14

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1347

2023.06.21

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

25

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.9万人学习

Git 教程
Git 教程

共21课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号