当前位置:首页>Linux>Linux 中 localhost、127.0.0.1 与 Loopback(回环地址)详解

Linux 中 localhost、127.0.0.1 与 Loopback(回环地址)详解

  • 2026-10-11 07:06:08
Linux 中 localhost、127.0.0.1 与 Loopback(回环地址)详解

localhost是一台计算机用来指代其自身的名称,当一个程序连接到 localhost 时,它实际上是连接回同一台机器,因此网络流量会保留在本地,而不会向外发送到网络中。

本文将解释什么是 localhost、它如何映射到 127.0.0.1 和 ::1 等回环地址,以及它在开发、测试和网络诊断中的用途。本文中示例将使用 Linux 命令,但核心概念适用于 Linux、macOS、Windows、BSD 及其他支持网络的操作系统。

1. localhost 的含义

每款现代操作系统都有一个特殊的虚拟网络接口,称为回环接口(loopback interface)。与物理网卡不同,回环接口完全存在于软件中。任何发送到该接口的数据包都会被立即回环到同一台机器,无需经过任何硬件或外部网络。

回环接口在 IPv4 中被分配了 IP 地址 127.0.0.1。IETF(互联网工程任务组)将整个 127.0.0.0/8 网段保留为回环地址,这意味着从 127.0.0.1 到 127.255.255.254 之间的任何地址都会路由回本地机器。在实践中,127.0.0.1 是使用的标准地址。

在 IPv6 中,回环地址为 ::1。

在 Linux 上,localhost 通常在查询 DNS 之前先通过 /etc/hosts 文件进行解析:

cat /etc/hosts

输出示例:

[root@yyzcdb ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.200.100 yyzcdb
[root@yyzcdb81 ~]# 

在大多数 Linux 系统中,根据 /etc/nsswitch.conf 中的解析器顺序,/etc/hosts 中的条目会在 DNS 解析之前被优先检查。其他操作系统也有相同的 localhost 概念,但 hosts 文件路径和解析器配置有所不同。

2. localhost vs 127.0.0.1 vs 0.0.0.0

localhost、127.0.0.1 和 0.0.0.0 经常被同时提及,但它们的用途各不相同。

地址/名称说明
localhost
是一个主机名。它通常解析为 IPv4 的 127.0.0.1,也可能解析为 IPv6 的 ::1。
127.0.0.1
是标准的 IPv4 回环地址。连接到它始终意味着连接到本机。
::1
是 IPv6 回环地址。其用途与 127.0.0.1 相同,但针对 IPv6 流量。
0.0.0.0
不是
回环地址。当服务器绑定到 0.0.0.0 时,它会监听所有可用的 IPv4 接口,包括回环接口和面向网络的接口。
  • 对于仅本地开发的场景,应将服务绑定到 localhost 或 127.0.0.1。
  • 若要让服务能够被网络上的其他设备访问,则需要将其绑定到机器的局域网 IP 地址或 0.0.0.0,然后确保防火墙允许该端口。

3. 回环流量是如何工作的

当向 127.0.0.1 或 localhost 发送请求时,TCP/IP 协议栈会识别出回环地址,并将数据包在内部回环到同一台机器。该流量不会到达物理网络接口(NIC),也不会传输到任何路由器或外部网络。

这与普通的网络流量不同,普通流量会通过物理或虚拟网络接口发送,由路由器转发,并在网络中传输以到达目标。

在 Linux 上,可以使用 ip 命令验证回环接口是否处于活动状态:

ip a show lo

输出示例:

[root@yyzcdb ~]# ip a show lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
[root@yyzcdb ~]# 

4. 使用 ping 测试回环

在 Linux 上,可以使用 ping 命令验证回环接口是否正常工作:

ping -c 5 localhost

输出示例:

[root@yyzcdb ~]# ping -c 5 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.031 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.078 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.077 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.081 ms
64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.078 ms

--- localhost ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4003ms
rtt min/avg/max/mdev = 0.031/0.069/0.081/0.019 ms
[root@yyzcdb ~]# 

接近零的响应时间证实了流量并未离开本机。

5. 常见使用场景

5.1 应用程序开发与测试

Web 服务器和开发工具在本地运行时,默认绑定到 localhost 或 127.0.0.1。这使得应用程序只能从同一台机器访问,而不能从网络访问。例如,运行在 8080 端口的本地 Web 服务器,可通过 http://localhost:8080 访问。

5.2 测试时覆盖域名

可以通过在 /etc/hosts 中将域名映射到回环地址,将其流量重定向到本地服务器。例如,添加以下行会将所有对 example.com 的请求路由到本地机器:

127.0.0.1   example.com

这在部署之前使用生产域名本地测试网站时非常有用。

5.3 屏蔽域名

将域名映射到 /etc/hosts 中的 127.0.0.1 可以有效屏蔽该域名。对该域名的任何请求都会被发送到本地回环,而那里没有任何服务在监听,因此连接会静默失败。

5.4 网络诊断

Ping 127.0.0.1 可以确认本地机器的 TCP/IP 协议栈是否正常运行,与网络硬件或连接状态无关。如果 ping 127.0.0.1 失败,说明本地网络协议栈本身存在问题。

6. 快速参考

任务命令 / 值
localhost 主机名
localhost
IPv4 回环地址
127.0.0.1
IPv6 回环地址
::1
查看 hosts 映射
cat /etc/hosts
检查回环接口
ip a show lo
测试回环连通性
ping -c 4 localhost
仅监听 localhost
将服务绑定到 127.0.0.1
监听所有接口
将服务绑定到 0.0.0.0

7. 常见问题

7.1 localhost 和 127.0.0.1 有什么区别?

实际上它们指向的是同一个东西。

localhost 是一个主机名,通过 /etc/hosts 文件解析为 127.0.0.1。使用 127.0.0.1 跳过了主机名解析这一步,但结果完全相同。

7.2 0.0.0.0 是什么?

0.0.0.0 与 localhost 不同。

当服务器绑定到 0.0.0.0 时,它会监听所有可用的网络接口,包括回环接口、局域网接口及其他任何接口。而当服务器绑定到 127.0.0.1 时,它只接受来自本机的连接。

7.3 其他设备能连接到我的 localhost 吗?

不能,发送到 127.0.0.1 或 localhost 的流量永远不会离开本机。

网络上的其他设备无法访问仅绑定到回环接口的服务,要允许外部连接,服务必须绑定到机器的局域网 IP 或 0.0.0.0。

7.4 localhost 的 IPv6 对应地址是什么?

IPv6 的回环地址是 ::1。

对于 IPv6 流量,它的行为与 127.0.0.1 相同。

7.5 为什么我的应用程序在 localhost 上使用 3000、8080 或 8000 端口?

这些是各种 Web 框架和工具常用的默认开发端口。在大多数 Linux 系统上,绑定 80 端口(HTTP)和 443 端口(HTTPS)需要 root 权限,因此开发服务器默认使用任何用户都可以使用的高编号端口。

最新文章

随机文章