0.0.0.0、127.0.0.1 和 localhost 的区别
在 Web 前端开发启动本地服务时,我们经常会使用 http://localhost、http://127.0.0.1 访问本地项目;同时还有 0.0.0.0、192.168.*.* 内网 IP 这两个容易混淆的地址。
其中 192.168.*.* 属于内网 IP,主要用于同一局域网下其他设备访问本机服务。
在配置 webpack 的 devServer 时会观察到一个现象:
- 如果 host 设置为
localhost、127.0.0.1,服务启动成功,但无法使用内网 IP192.168.*.*访问; - 如果 host 设置为内网 IP
192.168.*.*,则无法通过localhost、127.0.0.1访问; - 如果 host 设置为
0.0.0.0,localhost、127.0.0.1、内网 IP192.168.*.*全部都可以正常访问。
devServer: {
host: '0.0.0.0',
port: 8080,
}
本文就从网络基础出发,梳理 0.0.0.0、127.0.0.1、localhost 的含义与相互区别。
IP 地址分类
IP 是 TCP/IP 协议族核心协议,TCP、UDP、ICMP、IGMP 的数据全部封装在 IP 数据报中传输。
IP 地址表示
IPv4 地址由两部分构成:网络号(net-id) + 主机号(host-id)
- net-id(网络号):标识该 IP 归属哪一个网络;
- host-id(主机号):标识该网络内的某一台主机。
格式定义:IP-address ::= { <Network-ID>, <Host-ID> }

IP 地址分类
IPv4 地址分为 A、B、C、D、E 五大类,划分依据为网络号占用字节、地址开头的比特位:
- A 类地址:网络号占 1 字节,首位比特固定为
0; - B 类地址:网络号占 2 字节,前两位比特固定为
10; - C 类地址:网络号占 3 字节,前三位比特固定为
110; - D 类地址:前四位比特
1110,用于组播(一对多通信); - E 类地址:前四位比特
1111,保留,用于实验。
A、B、C 属于单播地址,一对一通信,日常业务最常使用;D 类为组播,E 类保留未投入使用。
备注:现行路由使用 CIDR,A、B、C 分类是历史划分,仍常用来理解地址结构和私有网段。

特殊 IP 地址
RFC 6890 等规范定义了一系列具备特殊用途的 IPv4 地址,下面逐条说明:
{0,0}:网络号、主机号全部为 0,含义为本网络上的本机。该地址只允许作为源地址,不能作为目标地址接收数据包。{0, host-id}:代表本网络内部的某一台指定主机。同样仅能够作为源地址向外发包,不可以用作目的地址。{-1,-1}:网络号与主机号全部二进制位为 1,也就是255.255.255.255受限广播地址。仅作为目的地址,数据包只会在本地子网广播,路由器不会把这个数据包转发到外网。{net-id,-1}:定向广播,向指定的整个网络发送广播数据包,只能用作目的地址。{net-id,subnet-id,-1}:定向广播,向指定网络下的某一个子网广播,仅用作目的地址。{net-id,-1,-1}:定向广播,向指定网络下全部子网广播,仅用作目的地址。{127, *}:127 网段全部地址,属于回环 loopback 地址。所有发往 127 网段的数据包不会流出本机物理网卡,仅在操作系统内部流转,只能用于本机内部通信。
备注:-1 代表对应字段全部二进制位置 1。
0.0.0.0
IPv4 协议中,0.0.0.0 在不同上下文含义不同:作为目标地址时通常视为无效、未知或不可达;作为监听地址时则表示本机全部网卡。
严格来说它并不是一个可以绑定到物理网卡的真实 IP 地址。
- 路由层面:代表默认路由,当路由表中没有任何精确匹配的路由条目,就会匹配这条默认路由。
- 服务监听层面(开发最常用):
0.0.0.0代表本机所有可用 IP 地址,包含回环地址、有线网卡、无线网卡的各个内网 IP。
如果服务监听 0.0.0.0:8080,本机无论多少块网卡、多少个 IP,所有发往本机 8080 端口的报文都能被该服务接收。
示例:机器同时拥有 192.168.1.1、10.1.2.1 两个内网 IP,服务监听 0.0.0.0,那么这两个 IP、127 回环地址都可以访问服务。
不同业务上下文下 0.0.0.0 含义:
- DHCP 分配 IP 阶段,主机还没有拿到 IP 地址时,用来指代主机自身;
- 路由表配置项:代表任意 IPv4 主机,对应默认路由;
- 作为数据包目标 IP:通常视为无效、不可达;
- 服务端 Socket 监听:监听本机全部网卡、全部 IP 地址。
127.0.0.1
127.0.0.1 是经典回环(loopback)保留 IP 地址,用于本机 TCP/IP 协议栈测试。
整个网段 127.0.0.0~127.255.255.255 全部属于回环地址;实际工程几乎只使用 127.0.0.1。
所有发送到 127 网段的数据包,只会在本机内部流转,不会经过物理网卡,不会出现在外部网络。
127.0.0.1 绑定在操作系统虚拟网卡 loopback,和真实物理网卡(有线网卡 ethernet、无线网卡 wlan)相互独立:
- 真实网卡:对应内网 IP 如
192.168.x.x,数据包会走网线、Wi-Fi 物理链路; - loopback 虚拟网卡:IP 为
127.0.0.1,只做本机内部进程之间网络交互。
主要用途:
- 回环测试:
ping 127.0.0.1,验证本机 TCP/IP 协议栈是否正常工作; - 安全防护:部分 DDoS 防御方案,将恶意域名解析指向 127.0.0.1;
- 本地程序开发测试,服务绑定 127.0.0.1 之后只有本机自身能够访问,局域网其他设备无法接入。
localhost
localhost 是域名,而不是一个 IP 地址!
绝大多数操作系统的 hosts 文件做了静态域名映射:
# /etc/hosts(macOS、Linux)
127.0.0.1 localhost
::1 localhost
所以日常访问 localhost,默认解析到 IPv4 127.0.0.1,IPv6 ::1。
hosts 文件可以自行修改映射,你完全可以把 localhost 指向别的 IP:
127.0.0.1 izhao.com.cn
hosts 文件介绍:hosts 是系统静态文本文件,维护域名与 IP 的本地映射。系统解析域名时,优先读取 hosts 配置;hosts 没有匹配记录,才向 DNS 服务器发起域名解析。hosts 是静态配置,如果设备 IP 发生变更,需要手动更新文件。
其他特殊 IP 地址
255.255.255.255
受限广播地址。数据包仅在当前子网内部广播,路由器默认不会转发该报文,数据包不会跨子网传递。
典型场景:DHCP 客户端尚未获取 IP 地址的时候,向 255.255.255.255 发送广播请求,局域网内 DHCP 服务器收到报文之后分配 IP。该地址不能分配给任何主机网卡作为自身 IP。
224.0.0.1
D 类组播地址。
广播:发给子网内全部主机;组播:发给预先加入组播组的一部分主机。
224.0.0.0~239.255.255.255 整个网段全部是组播地址。224.0.0.1 代表本网段全部主机;224.0.0.2 代表本网段全部路由器。多用于多媒体流、IRDP 互联网路由发现协议等场景。
169.254.x.x
APIPA,自动专用 IP 寻址地址。Windows 等系统在 DHCP 服务器故障、DHCP 请求超时,没有获取到分配 IP 的情况下,操作系统会自动分配该网段地址。如果网卡拿到这个网段 IP,基本代表本机 DHCP 获取 IP 失败,网络存在异常。
私有 IP 地址(内网 IP)
IANA 互联网数字分配机构专门预留了三段 IPv4 地址,作为私有内网地址。私有 IP 报文路由器不会直接转发到公网互联网,只允许在内网局域网中通信。内网主机访问互联网,必须依靠 NAT 网络地址转换,把内网私有 IP 转换成运营商分配的公网 IP。
完整私有地址网段:
10.0.0.0 ~ 10.255.255.255- A 类私有网段,地址数量规模最大,可用地址超过一千六百万;
- 常见大型企业内网、大型园区网络使用该网段。
172.16.0.0 ~ 172.31.255.255- B 类私有网段,一共 16 个子网段,总地址数量超过一百万;
- 中型企业、部分 VPN 虚拟网络经常使用该网段。
192.168.0.0 ~ 192.168.255.255- C 类私有网段,合计 65536 个可用地址;
- 家用路由器最常用,绝大多数家庭 Wi-Fi 路由器默认使用
192.168.1.1或192.168.0.1作为网关地址。
补充区分公网 IP 与私有 IP:
- 公网 IP:由运营商分配,全球互联网唯一,公网路由可以直接转发;需要向 ISP 申请,公网 IP 资源整体稀缺。
- 私有内网 IP:不需要向互联网机构申请,各个局域网内部可以独立重复使用,不同家庭局域网都可以同时使用
192.168.1.1,依靠 NAT 做地址转换实现上网。
举个例子:家里路由器分配给电脑的 IP 是 192.168.1.100,这个是 C 类私有 IP。电脑向外访问网页的时候,路由器 NAT 会把源 IP 从 192.168.1.100 替换成运营商给路由器的公网 IP;服务器回复数据回来,路由器再转换回内网 IP 交给电脑。
注意:私有 IP 只保证在同一个局域网内部互通。两台不同家庭的设备,就算 IP 都是 192.168.1.100,两者之间不能直接互相访问。
总结
- 127.0.0.1:回环虚拟网卡的 IP 地址,数据包仅限本机内部,外部局域网设备无法访问;
- localhost:域名,hosts 文件默认映射到
127.0.0.1,可以手动修改映射关系; - 192.168.x.x:真实物理网卡(有线、无线)的内网私有 IP,同局域网其他设备可以访问;
- 0.0.0.0:服务端监听时代表本机全部网卡全部 IP,同时接收回环访问 + 内网 IP 访问。