很多刚入门网络或编程的小伙伴,写代码、调试环境、部署服务的时候,经常会在三个名词之间打转:
- •
<span leaf="">localhost</span> - •
<span leaf="">127.0.0.1</span> - • 本机 IP(如
<span leaf="">192.168.1.101</span>)
看起来都跟“自己这台电脑”有关,但到底有什么区别?哪个更快?哪个能上网?哪个能被别人访问?
今天,我们就把这三者的来龙去脉掰开揉碎讲透彻,保你以后再也不迷糊。
🔍一图概览
localhost 是什么?
在计算机世界中,<span leaf="">localhost</span> 是一个默认指向本机的域名,相当于你给自己起的昵称,说白了:
“localhost 就是指向我自己这台电脑的域名。”
它不是 IP 地址,但会通过解析(DNS 或 <span leaf="">hosts</span> 文件)转换为 IP。
在大多数操作系统中,<span leaf="">localhost</span> 会被映射成:
127.0.0.1 localhost
这个映射保存在:
- • Windows:
<span leaf="">C:\Windows\System32\drivers\etc\hosts</span> - • Linux/Mac:
<span leaf="">/etc/hosts</span>
所以你访问 <span leaf="">http://localhost</span>,实际上访问的是 <span leaf="">127.0.0.1</span>,这是“回环地址”,请求根本不会发到网络上。
有些新系统中,<span leaf="">localhost</span> 还会被映射成 IPv6 的回环地址 <span leaf="">::1</span>,如下所示:
::1 localhost
127.0.0.1 是什么?
在 IPv4 中,<span leaf="">127.0.0.1</span> 是最典型的回环地址,也被叫做 Loopback。整个 <span leaf="">127.0.0.0/8</span> 段都保留作回环用途,但 <span leaf="">127.0.0.1</span> 是默认代表。
你访问 <span leaf="">127.0.0.1</span>,本质是:
“我向自己发送网络请求,但不经过物理网卡。”
这是一种内部自我通信机制,用于测试网络协议栈是否正常。
如果你在一台机器上运行服务绑定到 <span leaf="">127.0.0.1</span>,其他设备是访问不到的。因为这是本地地址,只能在本机访问本机。
本机 IP 是什么?
本机 IP,指的是你设备通过网卡从网络中获得的地址,比如:
- • 通过 DHCP 自动分配:如
<span leaf="">192.168.1.101</span> - • 手动静态设置:如
<span leaf="">10.0.0.10</span> - • 连接热点或公网:如
<span leaf="">100.64.10.5</span>
这个地址是真正参与局域网甚至互联网通信的 IP,是系统网卡在网络上的“身份证”。
只要你的电脑开启了服务,并且防火墙、监听配置正确,其他设备就可以通过本机 IP 来访问你机器上的服务。
比如你在电脑上运行了一个 Python HTTP 服务器:
python3 -m http.server 8000
- • 在浏览器访问
<span leaf="">127.0.0.1:8000</span>:自己访问自己。 - • 在手机浏览器输入
<span leaf="">192.168.1.101:8000</span>:只要在同一局域网,手机就能访问这个服务!
三者核心区别汇总
在不同场景中该用哪个?
localhost 有时候也“翻车”!
有些奇葩场景,比如:
在容器里执行 <span leaf="">curl localhost</span>,访问的是容器自己,而不是宿主机!
想访问宿主机,请使用:
- • Linux 下:
<span leaf="">172.17.0.1</span>(docker0 网桥 IP) - • Windows/Mac 下:
<span leaf="">host.docker.internal</span>
安全角度分析
本地服务默认应绑定 127.0.0.1,更安全!
来自运维工程师的一句话总结 🧙
localhost 是名字,127.0.0.1 是地址,本机 IP 是门牌号。一个靠内存,一个靠网卡,一个能让邻居找上门。
是不是豁然开朗?😄
那 0.0.0.0 又是啥?
很多人也常把 <span leaf="">0.0.0.0</span> 和上面几个混淆,简单说一下:
- •
<span leaf="">0.0.0.0</span>通常表示“不特定地址” - • 用于监听全部网卡接口:比如绑定
<span leaf="">0.0.0.0:80</span>,表示监听所有 IP 地址 - • 在 DHCP 申请时表示“我还没有 IP 地址”
感兴趣的可以移步我之前的一篇文章:
看似相同,其实各司其职
虽然 localhost、127.0.0.1 和本机 IP 都能“访问自己”,但它们背后的工作机制、用途、安全性、跨设备访问能力却完全不同。
下次搭服务、调接口、写代码时,别再混用了!
你现在知道:
- •
<span leaf="">localhost</span>是“代号” - •
<span leaf="">127.0.0.1</span>是“我给我发消息” - •
<span leaf="">本机 IP</span>是“别人找我用的地址”
网络的细节,从来不简单,但正是这些细节,构成了我们数字世界的稳固地基。

发表评论