17611538698
webmaster@21cto.com

localhost 和 127.0.0.1 有什么区别?

运维 0 115 2024-03-26 08:55:04

图片

当开发者在本地调试时,经常与localhost这个名字交互,比如只需运行npm run在浏览器中打开他们的网页,地址栏显示类似http://localhost:xxx/index.html.

还有一个ip地址,那就是127.0.0.1,也指的是本地主机。许多人在使用它时并没有考虑两者之间的区别。

考虑到我过去的合作和经验,一些对他们的差异缺乏清晰的了解,我觉得传播一些关于这个主题的知识至关重要。

什么是localhost?


localhost 是一个域名,除了便于记忆之外,与用于访问互联网的域名本质上没有什么不同。


localhost 的范围仅限于本地机器——它的名字很清楚:“本地”指的是本地范围内的东西。


张三和王二麻子都可以在各自的计算机上使用 localhost,访问各自的页面内容,而不会互相干扰。


从域名到Web应用


要真正理解localhost,我们需要讨论用户如何通过域名访问程序,我们以谷歌网站为例。

1. 在浏览器中输入google.com后,首先向DNS查询google.com的IP地址。

什么是IP地址?打个比方,如果有人向你的公司发送包裹,递送单将包括公司的地址、手机号和收件人等详细信息。投递过程依赖于地址进行路由,最终到达收件人。同样,在网络中,域名就像公司名称,IP 地址就像物理地址。在网络世界中,IP 地址对于定位相应的程序至关重要。

而DNS( domain name service)的作用就如同一个公司目录,列出每个域名对应的 IP 地址。如果域名未注册,所以其 IP 地址无法找到,而另一些域名可能有多个 IP 地址,DNS 根据某些规则自动返回一个 IP 地址。当你成功购买域名后,域名服务提供商通常会提供 DNS 解析服务,在 DNS 中注册域名及其对应的 IP 地址。

IP地址从哪里来?每台在线计算机都有一个IP地址,但个人计算机IP通常不适合公共访问,类似于公司内部位置,只有内部人员清楚,外部人员则不清晰。对于 Google 网站是提供的外部服务,需要公共 IP 地址,通常由互联网服务提供商提供。例如,如果你的公司使用中国联通访问互联网,你可以让他们为公司的网关服务器分配一个公共IP地址。网关服务器就像一个交换机,处理所有内部网络通信,并设置转发规则以将传入请求路由到适当的本地服务器。

2.有了IP地址,浏览器向该地址发送请求,由操作系统将请求封装成IP数据包,然后通过网络进行传输。网络的路由协议基于提供的 IP 地址并通过各种路由器,最终到达绑定该 IP 的计算机。

3. 一台计算机上可能部署多个Web应用程序。哪一个应该收到请求?这就是端口发挥作用的地方。每个Web应用程序都可以绑定到一个或多个端口,系统可以防止重叠。在请求中指定端口会将其路由到正确的应用程序。

但是,当访问Google.com时,我们并没有指定端口。这是因为在未指定端口时,将使用默认端口(HTTP 为 80,HTTPS 为 443)。启动Web程序时必须绑定端口,尽管某些框架会自动选择计算机上未使用的端口。

图片


localhost 和 127.0.0.1 有什么区别?


有了上面的基础知识,我们现在就很容易理解这个问题了。


如前所述,localhost 是一个域名。


127.0.0.1 是什么?它是一个IP地址,也就是当前机器的本地IP地址,只限在本机使用。计算机无需连接互联网即可使用该IP地址,方便开发和测试网络程序。我们调试的程序都是默认绑定到这个IP地址的。


值得我们注意的是,常见的IP地址的格式为XXXX,以点分为四段。实际上,它是一个 32 位二进制数,分为四个 8 位段,然后转换为十进制数进行显示。


那么 localhost 如何解析为 127.0.0.1 呢?它还通过 DNS 吗?不需要。每台计算机都可以使用 localhost 和 127.0.0.1,无需 DNS 解析。


该解析由每台计算机单独处理。每台计算机上都有一个主机文件,文件名为hosts,其中包含一些“硬编码”的 DNS 解析规则,包括将 localhost 解析为 127.0.0.1 的规则,这已经是一种业界约定。


如果不想使用 localhost,也没关系。你可以将其命名为任何名称,例如 wodehost,并将其解析到 127.0.0.1。


甚至可以使用 google.com,但它仅供自己使用,不会影响外部其他任何人。


域名层次结构


localhost 与我们通常使用的域名不太像,例如www.21cto.com、juejin.cn、 google.com 或 csdn.net 。www、cn、com 和 net 是什么意思?为什么 localhost 不需要它们?


其实网络域名是有层次的,分为顶级域名(TLD)、二级域名(SLD)和三级域名(3LD)……


顶级域名(TLD):域名系统中的最高级别,位于域名的最右侧,通常由几个字母组成。TLD分为通用TLD和国家代码TLD,常见的通用通用TLD包括代表商业企业的.com、代表网络提供商的.net、代表非营利组织的.org,而国家代码TLD则代表特定的国家或地区,例如.cn 代表中国,.uk 代表英国。


二级域名 (SLD):低于 TLD 的级别,由注册人选择和注册,可以是个性化且易于记忆的名称。例如,21cto.cn是二级域名,通常由中国用户申请。为了简洁和便于记忆,.com、.net 或 .cn 等顶级域名的重要性往往被忽视。

三级域(3LD):在二级域之下,通常用于指向特定的服务器或子网。在 blog.example.com 中,“blog”是一个三级域名。“www”是最常见的三级域名,代表网站的主页或主站点,但这只是一种约定,现在许多网站建议通过二级域名直接访问。

根据这个定义,我们可以将 localhost 视为顶级域名,尽管是保留域,仅用于访问当前计算机。

多个网站共享一个IP和端口


如前所述,不同的Web程序不能使用相同的端口,但有一些方法可以规避这一点。


个人博客流行时,许多人更愿意购买虚拟主机并部署开源博客平台来表达自己。了赚钱,虚拟主机提供商会在一台计算机上分配许多虚拟主机,允许每个人使用默认端口 80 访问他们的域名,这没有任何问题。


为什么这样能够实现


如果你有使用 Nginx、Apache 或 IIS 等 Web 服务器的经验,可能会熟悉主机标头的概念。主机头本质上是一个域名。通过设置主机头,我们的程序可以共享一个网络端口。


当在 Nginx 等 Web 服务器中部署网站时,我们将其配置为在主机标头中包含域名。


启动后,Nginx 和其他 Web 服务器会为自己占用端口 80。

当网站请求到达Nginx的80端口时,它会根据请求中的域名识别配置了相应主机头的相应Web应用程序或网站。

然后,Nginx 将请求转发到该Web程序,并在必要时启动它。

图片


私有IP地址


除了127.0.0.1之外,其实还有很多私有IP地址,例如常见的192.168.xx、10.x.x.x这些私有IP地址大多保留在机构或家庭的局域网(LAN)内使用,因为为每台计算机分配唯一的IP地址是不可行的,只要局域网内不发生冲突,这些地址就可以自由使用。的公司可以使用192.168.1.1,我的公司也可以使用192.168.1.1,但是如果你想访问我的公司,你还是需要通过公共IP地址。


常用的IPv4私有IP地址范围分为如下三类:

  • A 类:从 10.0.0.0 到 10.255.255.255

  • B 类:从 172.16.0.0 到 172.31.255.255

  • C 类:从 192.168.0.0 到 192.168.255.255。

这些私有 IP 地址仅供内部网络使用,不能在公共互联网上使用。除了上面提到的三个私有IPv4地址范围外,还有一些保留的IPv4地址范围:

  • 127.0.0.0到127.255.255.255地址范围用于回环测试,其中包括问题中提到的127.0.0.1地址。你还可以为自己分配一个 IP 地址,例如 127.0.0.2,其功能与 127.0.0.1 相同。

  • 169.254.0.0 到 169.254.255.255 地址范围亦用于本地网络。这种情况比较少见;如果你的计算机无法连接到 LAN,可能会看到此 IP 地址,该地址是临时指定 LAN 局域网地址的。

这些地址范围也不能在公共互联网上使用。

还有一些不太常见的专用 IPv4 地址范围。IP 地址范围的完整定义可以在这里找到:www.iana.org/assignments...

IPv6


各位可能还听说过 IPv6,它的推出是解决 IPv4 地址空间不足,可用地址数据太少IPv6理论上可以为地球上的每一粒沙子分配一个IP地址。

尽管人们都谈论了很多年,IPv4 仍然得到更广泛的使用。造成这种情况的原因有很多,这里不再讨论。

IPv6 地址类似于:

XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX

它的长度为 128 位,用冒号分为 8 段,其中每个 X 代表一个十六进制数(范围从 0 到 F)。

IPv6 地址空间明显大于 IPv4。例如,2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b 是有效的 IPv6 地址。

关于 IPv6 的进一步讨论超出了本文的范围,但有兴趣的同学可以进一步探索。

感谢你阅读到最后,如果对你有用,请考虑点赞分享本文,鼓励作者的创作!图片

作者:金宝

评论