前言
当前端开发人员在本地调试时,他们经常与本地主机交互,只需运行npm run在浏览器中打开他们的网页,地址栏显示类似http://localhost:xxx/index.html.
在运维查看ip的时候,会看到有一个127.0.0.1的地址。
那么他们两者之间有什么区别呢?
什么是本地主机(localhost)
localhost 是一个域名,除了便于记忆之外,与用于访问互联网的域名本质上没有什么不同。
localhost 的范围仅限于本地机器——它的名字很清楚:“本地”指的是本地范围内的东西。
每个人都可以在各自的计算机上使用 localhost,访问各自的页面内容,而不会互相干扰。
从域名到程序
要真正理解localhost,我们需要讨论用户如何通过域名访问程序, 以百度为例。
- 在浏览器中输入baidu.com后,首先向DNS查询baidu.com的IP地址。
为什么是IP地址?打个比方,如果有人向您的公司发送包裹,递送单将包括公司的地址、名称和收件人等详细信息。投递过程依赖于地址进行路由,最终到达收件人。同样,在网络中,域名就像公司名称,IP 地址就像物理地址。在网络世界中,IP 地址对于定位相应的程序至关重要。DNS 的作用就像一个公司目录,列出每个域对应的 IP 地址。有些域名可能未注册,导致其 IP 地址无法找到,而另一些域名可能有多个 IP 地址,DNS 根据某些规则自动返回一个 IP 地址。购买域名后,域名服务提供商通常会提供 DNS 解析服务,在 DNS 中注册域名及其对应的 IP 地址。IP地址从哪里来?每台在线计算机都有一个IP地址,但个人计算机IP通常不适合公共访问,类似于公司内部位置,内部人员清楚,外部人员则不清楚。对于 Baidu 提供的外部服务,需要公共 IP 地址,通常由互联网服务提供商提供。例如,如果您的公司使用中国联通访问互联网,您可以让他们为您公司的网关服务器分配一个公共IP地址。网关服务器就像一个交换机,处理所有内部网络通信,并设置转发规则以将传入请求路由到适当的服务器。
- 有了IP地址,浏览器向该地址发送请求,由操作系统将请求封装成IP数据包,然后通过网络进行传输。网络的路由协议基于提供的 IP 地址并通过各种路由器,最终到达绑定到该 IP 的计算机。
- 一台计算机上可能部署多个网络应用程序。哪一个应该收到请求?这就是端口发挥作用的地方。每个网络应用程序都可以绑定到一个或多个端口,系统可以防止重叠。在请求中指定端口会将其路由到正确的网络应用程序。
但是当我们访问Baidu时,我们并没有指定端口。这是因为在未指定端口时,将使用默认端口(HTTP 为 80,HTTPS 为 443)。启动网络程序时必须绑定端口,尽管某些框架会自动选择计算机上未使用的端口。
localhost 和 127.0.0.1 有什么区别?
有了上面的基础知识,我们就很容易理解这个问题了。如前所述,localhost 是一个域名。
127.0.0.1 怎么样?它是一个IP地址,当前机器的本地IP地址,只能在本机本身使用。您的计算机无需连接互联网即可使用该IP地址,方便开发和测试网络程序。我们调试的程序都是绑定到这个IP地址的。
值得注意的是,我们常见的IP地址的格式为XXXX,以点分为四段。实际上,它是一个 32 位二进制数,分为四个 8 位段,然后转换为十进制数进行显示。
该解决方案由每台计算机单独处理。每台计算机上都有一个主机文件(/etc/hosts),其中包含一些硬编码的 DNS 解析规则,包括将 localhost 解析为 127.0.0.1 的规则,这是一种约定。
如果您不想使用 localhost,也没关系。您可以将其命名为任何名称,例如 wodehost,并将其解析为 127.0.0.1。
您甚至可以使用 baidu.com,但它仅供您自己使用,不会影响其他任何人。
总结
localhost 和 127.0.0.1 都是用于指向本地计算机的地址,但它们之间存在一些差异:
- 表示方式:
- localhost 是一个域名,它代表本地计算机。
- 127.0.0.1 是一个ip地址,也代表本地计算机。
- 解析方式:
- localhost 被DNS解析成 127.0.0.1,即本地计算机的IP地址。
- 127.0.0.1 是一个环回地址,它总是指向本地计算机,不需要经过DNS解析。
- 网络传输:
- localhost 不经过网卡传输,不受网络防火墙和网卡限制。
- 127.0.0.1 依赖于网卡,会受到防火墙和网卡的限制。
- 应用场景:
- localhost 通常用于本地服务,因为它不会解析成IP,也不会占用网卡、网络资源,因此在某些情况下使用localhost可能会更方便快捷。
- 127.0.0.1 也可以用来表示本地计算机,但在某些情况下,使用localhost可能会比使用127.0.0.1更方便,因为它可以避免DNS解析的开销。
- 特殊用途:
- 在Linux上,当使用 localhost 来连接数据库的时候,Mysql会使用Unix domain socket来传输数据,这是一种进程内通信(IPC)机制,不需要经过网络协议栈,因此速度会更快。而使用 127.0.0.1 时,Mysql仍然会使用TCP/IP协议栈来进行数据传输。
综上所述,localhost 和 127.0.0.1 都可以用来表示本地计算机,但它们的表示方式和解析方式不同,且在网络传