ip addr列出每个网卡及其 IP 地址,确认自己的网络身份。
约 1281 字大约 4 分钟
2026-05-14
排查网络问题,第一步是把“网络不通”这句模糊的话拆开。拆的依据,就是 IP、端口、协议这几个最基础的概念:IP 找到机器,端口找到机器上的服务,协议决定它们怎么对话。这篇把这套坐标系建立起来。
理解 IP 定位主机、端口定位服务、协议决定通信方式,弄清 TCP 与 UDP 的区别,以及 HTTP/HTTPS 跑在哪一层。
ip addr列出每个网卡及其 IP 地址,确认自己的网络身份。
ss -lntp本机有哪些服务在监听、监听在哪个地址和端口。
nc -vz host 80只探测目标 host 的 80 端口是否可连接,不发数据。
curl -v http://host从 DNS、连接到 HTTP 响应,每一步都打印出来。
把网络通信想成寄快递:
192.168.1.10 这种。80/443,SSH 在 22,数据库各有约定。一个完整的通信目标是 IP + 端口 的组合,比如 192.168.1.10:443。所以“连不上”要分开问:是 IP 不可达(机器找不到),还是端口连不上(机器在、但那个服务没起或被挡)。
这俩经常引起困惑:
127.0.0.1(localhost):只代表本机,只有本机能访问。0.0.0.0:在“监听”语境里表示所有网卡地址,即对外开放。由此解释一个超高频问题——“本机 curl 得通,别的机器访问不了”。ss -lntp 看一下监听地址:如果服务监听在 127.0.0.1:8080,那它从设计上就只接受本机连接;要对外提供服务,得让它监听 0.0.0.0:8080(或具体的网卡 IP)。这不是防火墙问题,是监听地址问题。
它们是两种传输层协议,性格相反:
| TCP | UDP | |
|---|---|---|
| 连接 | 先握手建立连接 | 无连接,直接发 |
| 可靠性 | 保证送达、保证顺序、自动重传 | 不保证,丢了就丢了 |
| 开销 | 较大 | 很小 |
| 典型用途 | HTTP、SSH、数据库——要求数据完整 | DNS 查询、视频流、游戏——要求快 |
日常排查的服务绝大多数跑在 TCP 上。知道这点,ss -lntp 里的 -t(TCP)参数你就明白为什么这么用了。
协议是分层的。TCP 是传输层,HTTP 是应用层,跑在 TCP 之上。HTTPS 就是 HTTP 再加一层 TLS 加密。
分层的意义在于排查时能定位:curl -v 的输出会清楚地分段——先是 TCP 连接建立(Connected to ...),再是 TLS 握手,最后才是 HTTP 请求和响应。哪一段失败,问题就在哪一层。curl 的详细用法见 curl / wget 速查。
改监听地址 = 改服务对外暴露面
把服务的监听地址从 127.0.0.1 改成 0.0.0.0,意味着它从“只有本机能连”变成“网络上都能连”。改之前确认:这个服务该不该对外?有没有鉴权?防火墙(见 防火墙基础)有没有相应限制?很多安全事故就是某个本应内网自用的服务,被随手改成了 0.0.0.0 又没设防护。
| 误区 | 更稳妥的做法 |
|---|---|
| “连不上”不区分是 IP 还是端口的问题 | 分开问:机器可达吗(ping)、端口可连吗(nc -vz) |
| 本机能访问就以为外部也能 | ss -lntp 看监听地址,127.0.0.1 只对本机 |
| 把 HTTP 报错和网络不通混为一谈 | curl -v 分段看,TCP、TLS、HTTP 是不同层 |
| 随手把服务监听改成 0.0.0.0 | 先确认该不该对外、有没有鉴权和防火墙限制 |
版权归属:Shuo Liu