ss -tuln 是什么
ss -tuln 是判断『服务到底起没起来、听在哪儿』的第一命令:四个字母分别代表看 TCP、看 UDP、只看监听状态、不做名称解析。输出里最值得盯的是本地地址那一列,绑定在所有地址上表示外部可以访问,绑定在回环地址上表示只有本机可以访问。多数『应用正常但外部访问不通』的争议,答案就在这一列。
基本信息
| 适用平台 | Linux 各主流发行版,随 iproute2 预装 |
|---|---|
| 参数含义 | -t TCP、-u UDP、-l 仅监听、-n 不解析名称、-p 显示进程、-H 去掉表头 |
| 权限要求 | 查看监听列表不需要特权;显示进程归属需要 root 或同用户 |
| 结果对照 | 本机访问正常而外部不通时,先看绑定地址,再怀疑防火墙 |
| 常见写法 | ss -tlnp 只看 TCP 监听并带进程,排查 Web 服务最常用 |
典型使用场景
- 部署后核验:确认服务按预期监听了端口,且不是只监听回环
- 端口冲突排查:启动报端口占用时,用进程参数找出占用者
- 外部访问不通定位:先用本命令排除绑定地址问题,再去查策略
- 安全巡检:列出所有对外监听的端口,核对是否都在预期清单内
- 容器与宿主对照:确认容器端口映射前后端口监听情况的差异
常用组合
常用组合
ss -tuln # 监听端口总览
ss -tlnp # 只看 TCP 监听,并显示归属进程
ss -tlnp 'sport = :80 or sport = :443' # 只关心 Web 端口
ss -ulnp # 只看 UDP 监听,排查解析等服务
ss -tln | grep -v '127.0.0.1' # 挑出对外监听的端口
ss -tln | awk '{print $4}' | sort # 只看本地地址列,快速通读输出逐列读法
| 列 | 含义 | 正常与异常 |
|---|---|---|
| State | 监听状态 | 出现监听以外的状态说明过滤条件用错了 |
| Recv-Q | 监听时表示已完成握手但还没被应用接受的连接数 | 持续非零且增长说明应用接受太慢 |
| Send-Q | 监听时表示等待队列的上限 | 数值很小说明并发余量有限,可对照内核参数 |
| Local Address:Port | 本端监听的地址与端口 | 绑定回环地址时外部必然访问不通 |
| Process | 归属进程名与进程号 | 看不到多为权限不足,用 root 复核 |
同一条服务同时看到绑定所有地址与绑定在 IPv6 全地址上的两行是常见现象,多数系统在后者上也接受 IPv4 映射连接,不代表重复监听。
监听队列的积压与应用性能直接相关:看到接收队列持续非零,应先看应用是否有阻塞、线程池是否打满,而不是先调内核队列上限。
本机通外部不通的对照
| 本机结果 | 外部结果 | 最可能原因 |
|---|---|---|
| 回环访问正常 | 外部不通 | 服务只绑定了回环地址,需要改绑定或加代理 |
| 内网地址正常 | 外网不通 | 安全策略或网络地址转换未放行对应端口 |
| 本机与外网都不通 | 服务未启动或端口冲突 | 先看进程是否在运行,再用进程参数找占用者 |
| 本机正常且外部偶发不通 | 负载均衡或后端健康检查异常 | 对照多个后端实例的监听与日志 |
核验顺序建议固定为:先确认进程在跑,再确认监听地址,最后从外部用真实路径复测;顺序固定能避免反复在策略与配置之间来回猜。
服务只绑定回环地址时,外部访问不通跟防火墙无关;改绑定地址前要评估安全影响,更稳妥的做法是前置反向代理。