网络localhostIP开发调试

127.0.0.1、localhost 和 0.0.0.0 的区别

从回环地址、本机监听和所有网卡监听三个角度解释 127.0.0.1、localhost 和 0.0.0.0 的差异,重点说明为什么本地能访问、局域网却访问不到,以及 hosts 文件里的两种写法有什么区别。

·更新于 ·阅读约 9 分钟·计算中...

开发里最常见的混淆不是“127.0.0.10.0.0.0 哪个更高级”,而是没有分清它们分别表示“发给谁”或“监听谁”。简单说:

  • 127.0.0.1 是回环地址,请求只回到当前机器
  • localhost 通常解析到回环地址
  • 0.0.0.0 在服务端绑定时表示监听所有可用网卡

这也是为什么你本机能打开服务,手机或同网段另一台电脑却访问不到。

目录

127.0.0.1 是什么

127.0.0.1 属于 IPv4 loopback 范围,发给它的请求不会出当前机器,而是直接绕回本机网络栈。

常见用途:

  • 测本地 Web 服务
  • 测数据库、Redis 等本机依赖
  • hosts 文件里把某个域名重定向回本机
curl http://127.0.0.1:3000

如果服务只监听在 127.0.0.1,那么局域网其他设备通常无法访问。

localhost 和 127.0.0.1 是一回事吗

大多数开发场景里可以近似这么理解,但严格说不是同一个概念:

  • localhost 是主机名
  • 127.0.0.1 是 IPv4 地址

系统会通过 hosts 或 DNS 解析把 localhost 指向回环地址,很多机器上也可能同时有 IPv6 的 ::1

所以当你写:

curl http://localhost:3000

最终访问的通常仍是本机回环接口。

0.0.0.0 在服务端代表什么

服务端绑定 0.0.0.0 时,意思通常是“监听当前机器所有可用网络接口”:

python -m http.server --bind 0.0.0.0 8080

这意味着:

  • 本机可通过 127.0.0.1:8080 访问
  • 局域网设备也可能通过机器真实 IP 访问
  • 是否真的能从外部访问,还取决于防火墙、端口映射、容器网络和反向代理

为什么“本机能打开,别人打不开”

最常见原因是服务只绑定在回环地址:

服务监听 127.0.0.1:3000

此时浏览器在本机访问没问题,但局域网其他设备访问 192.168.x.x:3000 会失败,因为服务根本没挂在那张网卡上。

如果改成:

服务监听 0.0.0.0:3000

它才有机会接收来自其他网卡的连接。

这和 Docker 场景经常一起出现。容器内监听、宿主机端口映射、Nginx 反向代理是三层不同问题,不要混为一谈。容器内绑定差异可以继续看 Docker 中 localhost 与 0.0.0.0 的区别,代理层见 反向代理与 Nginx 指南

hosts 文件里为什么有人写 127.0.0.1,有人写 0.0.0.0

两种都能用来阻止某些域名访问,但含义和行为不完全一样。

127.0.0.1 example.com
0.0.0.0 ads.example.com

通常的经验是:

  • 127.0.0.1:把请求导向本机回环
  • 0.0.0.0:更像让请求尽快失效,不再尝试有效远端目标

不过这里的具体表现还会受浏览器、系统解析和协议影响,所以更适合把它当成“用途倾向”,而不是所有平台都完全一致的绝对结果。

客户端里 0.0.0.0 不是正常目标地址

开发者容易把“服务监听 0.0.0.0”和“浏览器访问 0.0.0.0”混成一件事。前者常见且有效,后者通常不是你真正该输入的访问地址。

服务监听:

0.0.0.0:3000

客户端访问时,一般还是用:

  • 127.0.0.1:3000
  • localhost:3000
  • 192.168.x.x:3000
  • 真实域名

一个判断公式

你可以这么记:

  • 想访问自己:看 127.0.0.1 / localhost
  • 想让服务接所有入口:绑定 0.0.0.0
  • 想让别的设备访问你:不仅要绑定 0.0.0.0,还要检查端口、防火墙和网络路径

结论

  • 127.0.0.1 是本机回环地址。
  • localhost 通常会解析到回环地址,但它本质是主机名。
  • 0.0.0.0 在服务端绑定时表示监听所有可用网络接口。
  • “本机能访问、外部不能访问”时,先查监听地址,再查防火墙和代理。

参考资料

7 分钟

硬链接(Hard Link)技术概述

在文件系统中,每个文件都会有一个 inode,该 inode 存储了文件的元数据(如文件大小、权限等)以及文件数据在磁盘上的位置。当你创建一个硬链接时,操作系统并不会复制文件的数据内容,而是为文件创建一个新的目录项(即一个新的文件名),并将其指向原文件的 inode。并不直接包含

9 分钟

Linux 常用命令:文件、进程、网络速查

按文件目录、文本查看、进程排查、网络连接和环境变量五类整理 Linux 常用命令,重点讲开发与运维里最常见的 ls、cd、cp、mv、rm、find、ps、top、curl、ssh、ip。

12 分钟

Docker 常用命令:容器、镜像、日志与清理

按实际排障流程整理 Docker 容器、镜像、日志、网络、数据卷和磁盘清理命令,解释 run、exec、logs、inspect 与 prune 的使用边界。

订阅 FreeMac

每周精选:免费 Mac 软件评测、可信来源更新、替代方案和少折腾指南。