公众号旧文
你知道127.0.0.1是本机,那127.0.0.2是谁?
学过计算机网络的人都知道
127
.
0
.
0
.
1
代表的是 localhost,也就是 本机。
当你访问
http
:
//127.0.0.1
实际上访问的是 你自己的电脑。
许多开发者每天都用它,比如:
- 启动本地网站
- 连接本地数据库
- 调试 API
- 运行开发服务器
但是有一个问题可能很多人都没想过:
如果 127.0.0.1 是自己,那 127.0.0.2 又是谁?
很多人第一反应是:另一台机器?
但正确答案其实——还是你自己。
不仅是 127.0.0.2,实际上:
127
.
0
.
0
.
3
127
.
1
.
1
.
1
127
.
255
.
255
.
255
这些地址 全部都是你自己。
为什么会这样? 这就要从互联网设计里的一个概念说起。
一、互联网里的自言自语
在网络协议中,有一种特殊地址叫:
Loopback Address(回环地址)
它的作用是:让一台机器可以和自己通信。
当程序把数据发送到回环地址时,数据包不会经过:
- 网卡
- 路由器
- 交换机
而是直接在操作系统内部返回。
简单来说就是:
程序 → 操作系统 → 程序
数据根本不会离开电脑。
这带来两个重要好处:
1 不依赖网络
即使你的网卡坏了,回环地址依然可以使用。
2 速度极快
因为通信完全发生在 内核内部。
二、为什么是 127.0.0.1?
在 IPv4 标准里,有一整段地址被专门保留出来:
127
.
0
.
0
.
0
/
8
它的范围是:
127
.
0
.
0
.
0
—
127.255.255.255
这一整段地址在互联网标准中被定义为:
Loopback Network(回环网络)
也就是说,只要 IP 地址是:
127.x.x.x
操作系统都会认为:
这是我自己。
因此,当系统看到目标地址属于这个范围时,就会直接把数据交给本机处理,不会发到真实网络。
三、那为什么大家都用 127.0.0.1?
虽然整个 127.0.0.0/8 都属于回环地址,但最常用的是:
127
.
0
.
0
.
1
原因很简单:
在 IPv4 的传统规则中
x
.x.x.
0
通常表示 网络地址。
所以:
127
.
0
.
0
.
0
代表的是这个网络本身。
而:
127
.
0
.
0
.
1
就是这个网络里的 第一个可用主机地址。
因此,它就成了默认的回环地址。
四、那 127.0.0.2 有什么用?
它通常用于一些 开发和测试场景。
例如:
在一台机器上模拟多个服务:
127
.
0
.
0
.
1
api.local
127
.
0
.
0
.
2
db.local
127
.
0
.
0
.
3
cache.local
这样:
- API
- 数据库
- 缓存
可以绑定不同 IP,但仍然在同一台电脑上运行。
很多开发者会利用这一点来 模拟多服务器架构。
五、localhost 不也是本机吗?它又是怎么来的?
相比 IP 地址,人类更习惯使用名字。
因此操作系统通常会在一个文件里定义:
localhost
这个文件就是:
/etc/hosts
典型内容是:
127
.
0
.
0
.
1
localhost
当你访问:
http
:
//localhost
系统会自动把它解析为:
127
.
0
.
0
.
1
这就是为什么很多软件默认使用 localhost。
例如:
- MySQL
- PostgreSQL
- Redis
- Docker
- 各种 Web 框架
六、为什么 Linux 里还有 127.0.1.1?
在很多 Linux 系统里,你可能会看到:
127
.
0
.
1
.
1
myhostname
例如:
127
.
0
.
1
.
1
myserver
这通常是 Debian / Ubuntu 系列的设计。
目的是避免把主机名和 localhost 混在一起。
如果写成:
127
.
0
.
0
.
1
localhost myserver
某些程序可能会把主机名解析为:
localhost
而不是:
myserver
这会导致一些软件(例如邮件服务器、日志系统)行为异常。
因此它们使用了另一个回环地址:
127
.
0
.
1
.
1
这样:
127
.
0
.
0
.
1
→ localhost
127
.
0
.
1
.
1
→ hostname
逻辑就更清晰了。
七、IPv6 里的“自己”
在 IPv6 中,也有一个回环地址:
::1
它和:
127
.
0
.
0
.
1
作用完全一样。
访问:
http
:
//[::1]
也是访问本机。
127.0.0.1 解决了一个非常基础的问题:
一台机器如何和自己通信。
而很多人不知道的是:
整个 127.0.0.0/8 其实都是你自己。