第 7 章 · 02 看端口: 、 本节摘要:确认了本机有 IP,下一步要确认「我的服务到底在不在监听端口」。这是排查「为什么连不上我的服务」的第二步——很多时候服务进程在跑,却没绑上端口(绑了 127.0.0.1 而非 0.0.0.0、或绑端口失败)。 是现代的端口查看命令(与 同属 iproute2),取代了老牌的 。本节要讲清 这个「端口排查标准命令」每个字母的含义,以及如何用它确认服务监听状态。 内容来源:综合 / 知识整理,套用体系化模板。 学习目标 阅读完本节,你应当能够: 用 列出本机所有 TCP 监听端口及其进程。 解读 (TCP)、 (仅监听)、 (不反解)、 (显示进程)四个选项的含义。 说清 (iproute2)取代 (net-tools)的原因(与 取代 同理)。
ss、netstat本节摘要:确认了本机有 IP,下一步要确认「我的服务到底在不在监听端口」。这是排查「为什么连不上我的服务」的第二步——很多时候服务进程在跑,却没绑上端口(绑了 127.0.0.1 而非 0.0.0.0、或绑端口失败)。
ss是现代的端口查看命令(与ip同属 iproute2),取代了老牌的netstat。本节要讲清ss -tlnp这个「端口排查标准命令」每个字母的含义,以及如何用它确认服务监听状态。
内容来源:综合
ss/netstat知识整理,套用体系化模板。
阅读完本节,你应当能够:
ss -tlnp 列出本机所有 TCP 监听端口及其进程。-t(TCP)、-l(仅监听)、-n(不反解)、-p(显示进程)四个选项的含义。ss(iproute2)取代 netstat(net-tools)的原因(与 ip 取代 ifconfig 同理)。ss 输出判断服务监听状态:绑在 127.0.0.1(只能本机访问)还是 0.0.0.0/*(对外开放)。服务部署的经典坑:你启动了一个 web 服务,ps 看进程在跑,systemctl status 显示 active,但用 curl 访问就是连不上。问题可能出在三个环节之一:
127.0.0.1 只允许本机访问,外部连不上)。ss 就是用来排查第 1、2 环节的——它告诉你「进程到底有没有在端口上监听、绑在哪个地址」。
ss -tlnpss -tlnp # 端口排查的标准四件套
四个字母的含义:
| 选项 | 全称 | 含义 |
|---|---|---|
-t |
tcp | 只看 TCP(还有 -u UDP) |
-l |
listening | 只看「监听」状态的套接字(服务端) |
-n |
numeric | 不反解 IP/端口为域名/服务名(快且精确) |
-p |
processes | 显示占用套接字的进程(需 root 看全) |
典型输出:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 *:* users:(("sshd",pid=1234,fd=3)) LISTEN 0 128 127.0.0.1:3306 *:* users:(("mysqld",pid=5678,fd=21)) LISTEN 0 511 *:80 *:* users:(("nginx",pid=9012,fd=6))
这是本节的关键。Local Address 告诉你服务绑在哪个地址,直接决定「外部能不能访问」:
| Local Address | 含义 | 外部可访问? |
|---|---|---|
0.0.0.0:80 或 *:80 |
绑所有 IPv4 地址 | 能(防火墙允许的话) |
127.0.0.1:3306 |
只绑回环地址 | 不能(只能本机) |
[::]:80 |
绑所有 IPv6(通常含 IPv4) | 能(IPv6 路径) |
192.168.1.10:80 |
只绑某块网卡的 IP | 该网段能 |
⚠️ 注意:
127.0.0.1:某端口意味着「只允许本机访问」,是数据库等内部服务的安全默认。如果你期望外部访问却看到127.0.0.1,就要改服务的监听地址配置(如 mysql 的bind-address),改成0.0.0.0才对外。
ss -tlnp # TCP 监听(服务端排查) ss -tnp # 所有 TCP 连接(含已建立的, 看谁连进来了) ss -tn state established # 只看已建立的连接 ss -ulnp # UDP 监听(-u) ss -s # 套接字统计(各类连接的数量概览)
老系统(或装了 net-tools 的)上用 netstat,对应关系:
netstat -tlnp # 等价 ss -tlnp netstat -an # 所有连接 netstat -rn # 路由表(等价 ip route)
netstat 与 ss 的关系,等同于 ifconfig 与 ip——前者是废弃的 net-tools,后者是现代的 iproute2。新系统优先 ss。
最常见的「连不上」原因。ss -tlnp 看到 127.0.0.1:3306,说明 mysql 只允许本机访问。改配置文件的 bind-address = 0.0.0.0,重启服务。
可能原因:
[::]:port)。ss -tlnp # 普通用户: Process 列空白 sudo ss -tlnp # root: 能看到进程名/PID
-p 需要足够权限才能看到别人的进程。排查系统服务务必 sudo。
ss 只能确认「进程在监听」。如果监听正常仍连不上,下一步查防火墙(iptables -L 或 firewall-cmd --list-all)、云主机安全组。这是第 1、2、3 环节之外的第 4 环节。
ss -tlnp 是端口排查标准命令:TCP(-t)、仅监听(-l)、不反解(-n)、显进程(-p)。ss(iproute2)取代 netstat(net-tools),与 ip 取代 ifconfig 同理。0.0.0.0/*(能)、127.0.0.1(只能本机,常见安全默认)、具体 IP(仅该网卡)。127.0.0.1:端口 是「连不上」的头号原因——改服务的 bind-address 配置,重启。下一节讲测链路可达——ping,以及它走 ICMP 带来的「ping 不通不代表服务不通」的特性。