Skip to content

0.0.0.0、127.0.0.1 与 localhost 的区别

约 972 字大约 3 分钟

计算机网络知识

2019-02-03

在开发和部署服务时,0.0.0.0127.0.0.1localhost 经常出现。它们看起来相似,但含义和使用场景完全不同。

先记住一句话:

  • 0.0.0.0绑定所有 IPv4 网卡地址
  • 127.0.0.1仅本机回环地址
  • localhost主机名,通常解析到本机回环地址(127.0.0.1 或 ::1)

1) 0.0.0.0 是什么?

0.0.0.0 在服务监听场景中表示“本机所有可用 IPv4 网络接口”。

例如服务监听 0.0.0.0:3000,意味着它会接受来自以下地址的连接:

  • 127.0.0.1:3000(本机)
  • 192.168.x.x:3000(局域网)
  • 公网 IP:3000(若机器有公网且放行端口)

常见用途

  • 服务端监听所有网卡(开发联调、容器部署)
  • 路由中表示默认路由(常见写法是 0.0.0.0/0

示例

# Node.js 服务监听所有 IPv4 接口
node server.js --host 0.0.0.0 --port 3000

# 查看监听情况
ss -tuln | grep 3000

安全提醒:监听 0.0.0.0 可能让外部可访问,务必配合防火墙/安全组。


2) 127.0.0.1 是什么?

127.0.0.1 是 IPv4 的回环地址(loopback),代表“这台机器自己”。

访问 127.0.0.1 的流量不会经过物理网卡,不出机器,只在本机网络栈内完成。

常见用途

  • 本地开发与调试
  • 本机进程间通信
  • 排查“应用问题”与“网络问题”的边界

示例

# 本机访问服务
curl http://127.0.0.1:3000

# 例如 MySQL 走 TCP 连接
mysql -h 127.0.0.1 -u root -p

3) localhost 是什么?

localhost主机名,不是 IP 地址。它通过系统解析(如 /etc/hosts 或 DNS)映射到本机地址。

常见映射:

  • IPv4:127.0.0.1
  • IPv6:::1

常见 hosts 配置

127.0.0.1   localhost
::1         localhost

为什么有时 localhost127.0.0.1 表现不同?

因为 localhost 可能优先解析到 ::1(IPv6),而你的服务可能只监听了 IPv4,导致访问失败或变慢。


4) IPv6 对应关系

  • IPv4 回环:127.0.0.1
  • IPv6 回环:::1
  • localhost:可能解析到两者之一(取决于系统和解析优先级)

5) 一张表看懂区别

项目0.0.0.0127.0.0.1localhost
本质IPv4 通配监听地址IPv4 回环地址主机名
是否可被外部访问可能可以(取决于防火墙/安全组)不可以不可以(解析到本机)
典型用途服务对外监听本地测试/本机通信本地访问(更易读)
是否涉及 DNS/hosts
可能走 IPv6是(可能解析到 ::1

6) 常见场景建议

开发环境

  • 只自己调试:监听 127.0.0.1
  • 需要手机/同事访问:监听 0.0.0.0(并控制网段和端口)

Docker 端口映射

# 默认会绑定宿主机所有地址(等价于 0.0.0.0)
docker run -p 8080:80 nginx

# 仅绑定到宿主机本地回环,更安全
docker run -p 127.0.0.1:8080:80 nginx

生产环境

  • 应用可监听 127.0.0.1 或内网地址
  • 由 Nginx/网关统一对外暴露
  • 必配防火墙、安全组、最小暴露面

7) 常见问题(FAQ)

Q1:监听了 0.0.0.0,为什么外网还是访问不到?

常见原因:

  • 服务器防火墙未放行端口
  • 云安全组/NACL 未放行
  • 服务实际没启动或监听端口不对
  • 中间网络策略(网关、代理)拦截

Q2:localhost127.0.0.1 该用哪个?

  • 追求明确、避免解析差异:用 127.0.0.1
  • 追求可读性:用 localhost
  • 遇到异常时,先用 127.0.0.1 排除解析与 IPv6 问题

Q3:为什么 localhost 有时很慢?

可能是:

  • 主机名解析异常
  • IPv6 优先但服务未监听 IPv6
  • 本机安全软件拦截

8) 最佳实践(可直接照做)

  1. 本地开发默认绑定 127.0.0.1
  2. 需要局域网访问时再改为 0.0.0.0
  3. 对外暴露前,先配置防火墙/安全组
  4. 生产环境优先“反向代理 + 内网监听”
  5. 排障时优先用 127.0.0.1 做基线测试