在浏览器地址栏输入 127.0.0.1,能打开本机运行的网站。但把地址改成 127.0.0.2,有时同样能访问。这并不是浏览器的特殊能力,而是 IP 协议为本机通信预留的一块地址空间。
127.0.0.2 为什么能工作?
IPv4 将整个 127.0.0.0/8 网段预留给环回(loopback)用途。换句话说,从 127.0.0.1 到 127.255.255.254 的常规主机地址都指向当前这台电脑;发往它们的数据包不会进入网卡、交换机或路由器,而是由操作系统直接送回本机网络协议栈。
因此,下面这些地址通常都代表本机:
127.0.0.1127.0.0.2127.1.1.1127.88.99.10127.255.255.254
127.0.0.1 只是最常用、最容易辨认的那个,并不是唯一的本机 IPv4 地址。通常不把 127.0.0.0 和 127.255.255.255 当作服务地址使用,因为它们分别具有网段和广播语义。
IPv6 的本机地址:::1
IPv6 也有自己的环回地址:::1。它相当于 IPv6 世界里的 127.0.0.1:
http://[::1]:8000IPv6 地址里带有冒号,所以在 URL 中必须用方括号把地址括起来。与 IPv4 的整个 127.0.0.0/8 网段不同,IPv6 只定义了这一个环回地址,没有 ::2、::3 这样的环回地址家族。
平时使用的 localhost 不是 IP 地址,而是主机名。它可能解析为 127.0.0.1、::1,也可能同时解析为两者;具体优先使用哪个地址,取决于操作系统、浏览器和服务是否支持 IPv6。因此,排查本地服务问题时,直接指定 IP 地址往往更明确。
多个环回地址的作用
最直接的用途是让多个本地服务使用相同端口,同时仍保持网络层面的隔离。例如,下面三个命令可以各自使用 8000 端口:
python -m http.server 8000 --bind 127.0.0.1python -m http.server 8000 --bind 127.0.0.2python -m http.server 8000 --bind 127.0.0.3对应访问地址分别是:
http://127.0.0.1:8000http://127.0.0.2:8000http://127.0.0.3:8000这里区分服务的不是端口本身,而是「本地 IP 地址 + 端口」这个组合。它很适合测试多个虚拟主机、回调地址或需要模拟多台主机的场景。
不过有一个容易混淆的细节:服务若只监听 127.0.0.1,就不会自动接受发往 127.0.0.2 的连接。想通过其他 127.* 地址访问,需要让服务显式绑定该地址,或按所用框架和操作系统的规则监听通配地址。
0.0.0.0 不是一个可访问的目标
需要注意的是,0.0.0.0是一个特殊存在:
它的含义是「监听所有 IPv4 网络接口」,包括局域网网卡和环回接口,并不表示存在一台 IP 为 0.0.0.0 的主机。实际访问时,应改用具体地址,例如 127.0.0.1:3000 或 192.168.1.20:3000。
总结
127.0.0.1 并不孤单:整个 127.0.0.0/8 都服务于 IPv4 本机环回,::1 则承担 IPv6 环回的角色。掌握这些地址的区别,能帮助我们更准确地配置服务监听、隔离本地测试环境,并避免把 0.0.0.0 或公网 IP 误当成普通访问地址。