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

localhost是一台计算机用来指代其自身的名称,当一个程序连接到 localhost 时,它实际上是连接回同一台机器,因此网络流量会保留在本地,而不会向外发送到网络中。
本文将解释什么是 localhost、它如何映射到 127.0.0.1 和 ::1 等回环地址,以及它在开发、测试和网络诊断中的用途。本文中示例将使用 Linux 命令,但核心概念适用于 Linux、macOS、Windows、BSD 及其他支持网络的操作系统。
一、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@zhaoxin ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.200.100 zhaoxin [root@zhaoxin ~]#
在大多数 Linux 系统中,根据 /etc/nsswitch.conf 中的解析器顺序,/etc/hosts 中的条目会在 DNS 解析之前被优先检查。其他操作系统也有相同的 localhost 概念,但 hosts 文件路径和解析器配置有所不同。
二、 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,然后确保防火墙允许该端口。
三、回环流量是如何工作的?
当向 127.0.0.1 或 localhost 发送请求时,TCP/IP 协议栈会识别出回环地址,并将数据包在内部回环到同一台机器。该流量不会到达物理网络接口(NIC),也不会传输到任何路由器或外部网络。
这与普通的网络流量不同,普通流量会通过物理或虚拟网络接口发送,由路由器转发,并在网络中传输以到达目标。
在 Linux 上,可以使用 ip 命令验证回环接口是否处于活动状态:
ip a show lo
输出示例:
[root@zhaoxin ~]# 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@zhaoxin ~]#
四、使用 ping 测试回环
在 Linux 上,可以使用 ping 命令验证回环接口是否正常工作:
ping -c 5 localhost
输出示例:
[root@zhaoxin ~]# 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@zhaoxin ~]#
接近零的响应时间证实了流量并未离开本机。
五、常见使用场景
应用程序开发与测试
Web 服务器和开发工具在本地运行时,默认绑定到 localhost 或 127.0.0.1。这使得应用程序只能从同一台机器访问,而不能从网络访问。例如,运行在 8080 端口的本地 Web 服务器,可通过 http://localhost:8080 访问。
测试时覆盖域名
可以通过在 /etc/hosts 中将域名映射到回环地址,将其流量重定向到本地服务器。例如,添加以下行会将所有对 example.com 的请求路由到本地机器:
127.0.0.1 example.com
这在部署之前使用生产域名本地测试网站时非常有用。
屏蔽域名
将域名映射到 /etc/hosts 中的 127.0.0.1 可以有效屏蔽该域名。对该域名的任何请求都会被发送到本地回环,而那里没有任何服务在监听,因此连接会静默失败。
网络诊断
Ping 127.0.0.1 可以确认本地机器的 TCP/IP 协议栈是否正常运行,与网络硬件或连接状态无关。如果 ping 127.0.0.1 失败,说明本地网络协议栈本身存在问题。
六、快速参考
| 任务 | 命令 / 值 |
|---|---|
| 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 |
七、常见问题
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 时,它只接受来自本机的连接。
其他设备能连接到我的 localhost 吗?
不能,发送到 127.0.0.1 或 localhost 的流量永远不会离开本机。
网络上的其他设备无法访问仅绑定到回环接口的服务,要允许外部连接,服务必须绑定到机器的局域网 IP 或 0.0.0.0。
localhost 的 IPv6 对应地址是什么?
IPv6 的回环地址是 ::1。
对于 IPv6 流量,它的行为与 127.0.0.1 相同。
为什么我的应用程序在 localhost 上使用 3000、8080 或 8000 端口?
这些是各种 Web 框架和工具常用的默认开发端口。在大多数 Linux 系统上,绑定 80 端口(HTTP)和 443 端口(HTTPS)需要 root 权限,因此开发服务器默认使用任何用户都可以使用的高编号端口。
以上关于详解 Linux 中 localhost、127.0.0.1 与 Loopback(回环地址)的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 详解 Linux 中 localhost、127.0.0.1 与 Loopback(回环地址)
微信
支付宝