端口监听检查是什么
「服务没起来」和「服务起来了但绑错地址」是两类完全不同的故障,但外部表现都是连不上。前者通常是 Connection refused,后者则常常是「本机 curl 127.0.0.1 通、外部连不上」。判定手段是看监听列表里的绑定地址:0.0.0.0 表示所有 IPv4 网卡都可达,127.0.0.1 只接受本机回环,[::] 是 IPv6 双栈绑定,具体行为还受内核参数影响。
基本信息
| 适用平台 | Linux(ss/netstat/lsof)、Windows(netstat -ano) |
|---|---|
| 常用命令 | ss -lntp / ss -lunp / lsof -iTCP:端口 -sTCP:LISTEN |
| 参数含义 | -l 仅监听 -n 数字显示 -t TCP -u UDP -p 显示进程 |
| 关键列 | Local Address:Port、Process、State |
| 权限 | 看到其他用户的进程名需要 root |
| 相关项 | 绑定地址、防火墙规则、SELinux 策略 |
典型使用场景
- 排查服务启动后端口未监听:先确认进程是否存在,再看是否绑定成功
- 确认服务绑定的是 0.0.0.0 还是 127.0.0.1,判断外部可达性
- 容器排障:应用绑 127.0.0.1 时即使做了端口映射,宿主机也连不上
- 冲突排查:同一端口被两个进程争抢,第二个会启动失败
- 上线前核对 UDP 服务是否也正确监听(DNS、syslog 等)
检查监听与绑定
检查监听与绑定
ss -lntp | grep 8080 # 看 TCP 8080 是否监听及绑定地址
ss -lunp | grep 53 # 检查 UDP 监听
netstat -lntp | grep -E ':(80|443)' # 传统工具,输出格式兼容性好
lsof -iTCP:8080 -sTCP:LISTEN # 反查是哪个进程占用的
ss -lntp | awk '{print $4}' | sort -u # 汇总所有绑定地址,快速发现异常绑定绑定形态读法
| 绑定形态 | 含义 | 外部可达性 |
|---|---|---|
| 0.0.0.0:8080 | 监听所有 IPv4 网卡地址 | 可达,但仍受防火墙与安全组限制 |
| 127.0.0.1:8080 | 仅本机回环,供本地进程访问 | 外部不可达,只能本机 curl |
| [::]:8080 | IPv6 双栈绑定,通常也接受 v4-mapped | 取决于内核与监听选项设置 |
| [::1]:8080 | 仅 IPv6 回环 | 外部不可达 |
| 无该端口记录 | 没有进程在监听 | 连接被拒(Connection refused) |
「端口没监听」和「端口监听但被防火墙拦截」的现象不同:前者立即返回 Connection refused,后者通常表现为超时无响应。用 telnet/nc 一测就能区分,别在错误的方向上排查。
ss 与 netstat 的 -p 参数只能显示有权限看到的进程:非 root 执行时对方进程名显示为空,容易误判为「没有进程占用端口」。