Linux如何查看具体的网络套接字等待状态详情

雨枫君_5383

雨枫君_5383

2026-08-17

379人浏览

原创

ss -tn state time-wait或close-wait可查对应状态套接字,状态名须小写带连字符,否则静默失效;加-o显示定时器,加-p需sudo且受内核版本与权限限制。

linux如何查看具体的网络套接字等待状态详情

ss 怎么看 TIME_WAIT、CLOSE_WAIT 这些状态的套接字详情

直接用 ss -tn state time-wait 或 ss -tn state close-wait 就能列出对应状态的 TCP 套接字,但要注意:状态名必须小写、带连字符,且 state 后面不能跟多个状态(比如 state time-wait close-wait 会报错)。

常见错误是把状态写成大写(如 TIME-WAIT)或漏掉连字符(timewait),ss 会静默忽略该条件,返回空结果,容易误判为“没有这类连接”。

  • ss -tn state time-wait:只查 IPv4 的 TIME_WAIT 连接,不解析地址和服务名,速度快
  • 加 -o 可显示定时器信息(如 timer:(keepalive,119min,0)),对判断连接是否卡在回收阶段很有用
  • 加 -p 需要 sudo,否则看不到进程字段;即使有权限,某些内核版本(如 5.10+)对非 root 进程的 fd 映射可能受限,users:(()) 里 pid 可能为空

/proc/net/tcp 里怎么识别 ESTABLISHED 和 LISTEN 状态

/proc/net/tcp 是内核原始输出,第4列是十六进制状态码,不是文字。比如 01 表示 ESTABLISHED,0A 表示 LISTEN,08 是 CLOSE_WAIT —— 这些值固定不变,但得查文档或记熟几个常用码,否则容易看错。

用 awk 过滤更可靠:awk ' == "01" {print ,,}' /proc/net/tcp 输出本地/远程地址(十六进制)和状态码。注意地址列是十六进制 IP:PORT,比如 0100007F:0016 对应 127.0.0.1:22(0016 是十进制 22)。

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载
  • IPv6 状态在 /proc/net/tcp6,字段结构一致,但地址长度不同
  • 该文件无需权限即可读,适合无 sudo 权限时做轻量排查
  • 字段顺序固定,但不同内核版本列数可能微调(如新增 timestamp 列),建议始终用 `$n` 而非 `NF-1` 类动态索引

为什么 ss -tulnp 显示不了某些监听端口的进程名

最常见原因是权限不足:-p 需要能读取目标进程的 /proc/[pid]/fd/ 目录,而普通用户默认只能访问自己启动的进程。哪怕你看到某端口在监听,只要不是你 own 的进程,ss -tulnp 就会显示 - 或完全不显示 users:(()) 字段。

  • 用 sudo ss -tulnp 是标准解法,但生产环境有时禁用 sudo,此时可尝试 lsof -i :端口号(需装 lsof,且同样受权限限制)
  • 某些容器化环境(如 rootless Podman)中,即使加了 sudo,ss 也可能因 PID 命名空间隔离而无法关联到宿主进程
  • 如果 ss -tulnp 显示了 users:(("nginx",pid=1234,fd=6)),但 ps aux | grep 1234 找不到进程,大概率是该进程已退出但 socket 还在 TIME_WAIT 中未释放

netstat 和 ss 在状态过滤上有什么关键差异

netstat 不支持按状态筛选(如 netstat -tn | grep ESTABLISHED 是靠 shell 过滤,不是命令原生能力),而 ss 的 state 是内建谓词,直接走内核 socket 子系统路径,不经过用户态拼接,性能高、结果准。

  • netstat -tn 默认包含所有状态(LISTEN/ESTABLISHED/TIME_WAIT 等混在一起),想筛特定状态只能靠 grep,但 grep LISTEN 可能误匹配到字符串 “listen” 出现在其他列(比如进程名里有 listen)
  • ss -tn state established 是原子操作,不会漏行也不会多行,尤其在连接数过万时,ss 耗时通常不到 netstat 的 1/5
  • 部分旧版 netstat(如 RHEL 6 自带)不支持 -p 显示进程,而 ss 从诞生起就原生支持,且兼容性更好

真正容易被忽略的是:状态码含义在不同协议下不通用 —— 比如 UDP 没有 ESTABLISHED,ss -un state established 永远返回空;查 UDP 绑定端口,只能用 ss -unl 看 LISTEN,别试图用 state 过滤。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

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

2023.06.21

4210

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3553

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2793

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6830

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6462

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3733

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3225

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3459

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习