Linux 怎样用 ss 区分监听与已连接套接字
Linux 上用 ss -ltn 查看 TCP 监听套接字,用 ss -tn state established 精确查看已建立的 TCP 连接。判断时以协议和状态列为准,不要把“非监听”直接理解为 ESTAB,也不要把 ss 的 connected 状态集合当成 established 的同义词。
ss 属于 iproute2。官方项目地址:https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/;上游手册源码:https://github.com/iproute2/iproute2/blob/main/man/man8/ss.8。以下都是只读查询示例,未在本机执行,不包含真实服务器输出,也不会创建连接或修改网络配置。
先把观察范围限定为 TCP
假设你在排查一个使用 8080 端口的服务:第一个问题是“有没有套接字在等新连接”,第二个是“有没有已经建立的连接”。这两个问题涉及不同套接字。监听对象可以继续存在,同时有多条已接受连接;不能因为监听记录仍在,就判断连接没有建立。
先确认 ss 可用,并在目标服务所在网络环境中查询。选项 -t 限定 TCP,-l 限定监听,-n 保留数字显示,-a 用于扩大查看范围。默认查询不展示监听,因此“直接运行 ss 没看到端口”不是服务没有监听的充分证据。本文不要求安装新服务,不启动测试服务器,也不需要为配图执行任何命令。
用两条命令分别回答监听与连接问题
# 只查 TCP 监听套接字,保留数字端口以便比较。 ss -ltn # 精确筛选 TCP 已建立连接,而不是笼统排除监听。 ss -tn state established # 查看 TCP 各状态,帮助判断筛选前的观察范围。 ss -tan
第一条应关注 LISTEN 记录及其 Local Address:Port;第二条只筛 established,输出状态通常显示为 ESTAB。第三条是辅助总览,而不是第二条的替代。ss 的过滤关键字使用 established,表格中的短标签 ESTAB 用来阅读结果,不必复制短标签拼成过滤条件。
把 TCP 作为一个协议范围,LISTEN 和 ESTAB 是其中两个不同状态;Local Address:Port 与 Peer Address:Port 是记录的两侧地址字段,State 则表明状态。两侧字段不是操作步骤,也不代表请求先后。

LISTEN 说明本机存在相应监听对象,不保证外部客户端可达;ESTAB 说明当时存在已建立的 TCP 连接,不保证业务响应正常。不要从这些状态直接得出防火墙已放行、接口无错误或应用无阻塞的结论。
按端口筛选时,先确认你站在哪一端
在本机记录视角中,sport 对应本地端口,dport 对应对端端口。8080 服务端的监听对象应按 sport 查;本机作为客户端连接远端 8080 时,则通常按 dport 查。端口本身不证明谁是客户端或服务端,还要结合地址、应用和协议上下文。
# 本地服务端口为 8080 的 TCP 监听套接字。 ss -ltn 'sport = :8080' # 本地端口为 8080 的已建立连接,常用于服务端视角。 ss -tn state established 'sport = :8080' # 远端端口为 8080 的已建立连接,常用于客户端视角。 ss -tn state established 'dport = :8080' # 两端任一端口为 8080;用引号保护括号和布尔表达式。 ss -tn state established '( sport = :8080 or dport = :8080 )'
这些命令利用 ss 自己的表达式过滤,不需要用 grep 搜整个输出。单纯搜索 8080 可能把远端端口、地址片段或其他字段一起命中;把状态条件和端口条件同时写清楚,更容易知道空结果究竟在回答哪个问题。单引号用于让 shell 原样传递括号和表达式,不属于 ss 的端口语法。
在静态筛选关系中,state established 约束 State;sport 约束 Local Address:Port;dport 约束 Peer Address:Port。三种筛选表达式与三种记录字段各有对应关系;or 表示两端任一条件匹配,不代表先查本地再查对端。

connected 不是“当前正在正常传数据”
ss 手册把 connected 定义为排除 listening 和 closed 的状态集合,因此它不只包含 established,也可能包含连接建立中、关闭中等状态。若你要统计 ESTAB,就直接使用 state established。CLOSE-WAIT 等状态虽然不是监听,但不能算作已建立状态的精确查询结果。
# connected 是状态集合,不等同于 established。 ss -tn state connected # 单独检查等待应用关闭的 TCP 状态,不能计作 ESTAB。 ss -tn state close-wait # UDP 单独列出,不套用 TCP 监听/握手解释。 ss -uan # 需要追查使用者时附加进程信息;可见程度受权限影响。 ss -ltnp 'sport = :8080'
UDP 要单独看待。它没有 TCP 的三次握手和相同的监听连接语义;常见 UNCONN 标签不能直接解读为“UDP 服务未启动”。即使某个 UDP 套接字关联了固定对端,也不意味着完成了 TCP 式握手。这里只保留协议区别,不把 UDP 记录硬塞进 LISTEN 与 ESTAB 的二分法。
-p 用于补充进程信息,并不改变监听或已建立的定义。看不到进程名时,先考虑可见性和权限,不要据此判断套接字没有使用者。遵守所在环境的权限管理要求,不为查看进程而随意提升权限。
空结果时,按原问题复查条件
| 想回答的问题 | 最小查询 | 结果不能证明什么 |
|---|---|---|
| TCP 是否监听 | ss -ltn | 不能证明外部网络可达 |
| 是否有已建立 TCP 连接 | ss -tn state established | 不能证明业务健康 |
| 本地 8080 是否接受了连接 | ss -tn state established 'sport = :8080' | 不能代表所有历史连接 |
| 本机是否连向远端 8080 | ss -tn state established 'dport = :8080' | 不能把本地监听也纳入 |
读者实际执行时,可先保留表头,对比协议、State、本地地址和对端地址;再检查端口条件是否写反,是否附加了 IPv4 或 IPv6 范围,以及是否在正确网络命名空间中观察。结果是当时的观察,短连接可能已结束;连续两次命令不应当作同一个原子快照。
本文没有创建任何网络资源,因此示例不需要清理服务或关闭套接字。如果为了观察短连接自行开展实验,应使用你有权限的独立测试环境,并按原有方式关闭实验进程;不要把查询改成强制关闭套接字的操作。
监听记录与 ESTAB 使用同一个本地端口,是否重复了?
不一定。同一服务监听对象和它接受的连接可以共享本地服务端口,连接记录还包含不同对端信息。不能只按本地端口把所有行合并成一条。
为什么 -ltn 没有显示 UDP 服务?
-t 已经选择 TCP。查看 UDP 应使用相应协议选项,并按 UDP 的套接字语义理解状态,不能把看不到 TCP LISTEN 当作 UDP 不工作的证据。
只排除 LISTEN 能得到已建立连接吗?
不能精确得到 ESTAB,因为仍可能保留其他 TCP 状态。使用明确的 state established,才能让查询条件与“已建立”这个问题一致。
记住两组对应即可:监听用 -ltn,已建立用 -tn state established;本地端口看 sport,对端端口看 dport。协议、状态和端口视角明确之后,再读结果就不容易把服务入口、连接对象和关闭状态混在一起。
Linux 服务怎样安全加载环境文件
- 上一篇
- Linux 服务怎样安全加载环境文件
- 下一篇
- Linux ARP 邻居状态异常怎样读取和刷新
-
- 文章 · linux | 1小时前 |
- Linux 怎样读取 cgroup v2 内存压力事件
- 144浏览 收藏
-
- 文章 · linux | 1小时前 | Linux · 安全 · Linux systemd capability CapabilityBoundingSet
- Linux 服务怎样按 capability 缩小权限
- 121浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux pidfd 怎样减少 PID 重用误杀风险
- 272浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux 怎样用 lsblk JSON 输出设备层级
- 467浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux 怎样为单个进程查看资源限制
- 228浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux ARP 邻居状态异常怎样读取和刷新
- 442浏览 收藏
-
- 文章 · linux | 1小时前 | Linux · systemd EnvironmentFile Linux服务环境变量
- Linux 服务怎样安全加载环境文件
- 434浏览 收藏
-
- 文章 · linux | 1小时前 | Linux · Linux journalctl 日志过滤 systemd日志 启动轮次 BOOT_ID
- Linux 怎样按启动轮次筛选 systemd 日志
- 465浏览 收藏
-
- 文章 · linux | 1小时前 | 服务管理 · Linux systemd systemd.socket ListenStream Accept socket activation systemd.service
- Linux socket 激活怎样把监听职责交给 systemd
- 376浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux 怎样用 systemd-analyze 找启动瓶颈
- 123浏览 收藏
-
- 文章 · linux | 19小时前 |
- Linux /proc 读取进程内存指标的方法
- 194浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 511次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 571次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 597次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 549次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 365次使用
-
- Linux vmstat 如何分辨内存抖动与磁盘等待:si、so、wa 与复测顺序
- 2026-08-30 501浏览
-
- Linux搭建vsftpdFTP服务器教程
- 2026-04-30 501浏览
-
- Shell脚本安装教程:.sh一键安装指南
- 2026-03-16 501浏览
-
- Linux清空文件内容的几种方法
- 2025-12-01 501浏览
-
- Linux命令行下载文件技巧
- 2025-11-23 501浏览
