公众号旧文

你知道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 其实都是你自己。