localhost 和 127.0.0.1 有哪些区别?

目录
文章目录隐藏
  1. localhost 是什么?
  2. 从域名到程序
  3. localhost 和 127.0.0.1 有什么区别?
  4. 域名层级
  5. 多个网站共享一个 IP 和端口
  6. 私有 IP 地址
  7. IPv6

localhost 和 127.0.0.1 有哪些区别?
localhost都不陌生,当前端开发人员在本地调试时,可以在浏览器中打开他们的网页,地址栏显示类似于 http://localhost:xxx/index.html的内容。

很多人在使用它时可能没有思考过与 127.0.0.1 之间的区别。

不光是以前前端开发人员,还是现在的前端开发人员也有很多缺乏对这两者区别的清晰理解,我觉得有必要在这个话题上做一个总结,万一哪天被面试官问到了,哈哈。

localhost 是什么?

localhost 是一个域名,从根本上说,与用于互联网访问的域名没有什么不同,只是它更容易记忆。

localhost 的范围仅限于本地机器——它的名字说明了一切:“local”指的是本地的东西。

张三和李四都可以在各自的机器上使用 localhost,且不会相互干扰,访问他们各自的页面内容。

从域名到程序

想要真正理解 localhost,我们需要讨论用户是如何通过域名访问程序的,以码云笔记为例。

1.在浏览器中输入 mybj123.com 时,它首先查询 DNS 以获取 mybj123.com 的 IP 地址。

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

DNS 就像一个公司目录,列出每个域名对应的 IP 地址。有些域名可能没有注册,使得它们的 IP 地址无法找到,而其他域名可能有多个 IP 地址,DNS 会根据特定规则自动返回其中一个。购买域名后,域名服务提供商通常会提供 DNS 解析服务,将域名及其对应的 IP 地址注册在 DNS 中。

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

2.有了 IP 地址,浏览器就会向这个地址发送请求,操作系统会将请求打包成 IP 数据包,然后通过网络传输。网络的路由协议根据提供的 IP 地址和通过各种路由器,最终到达绑定该 IP 的计算机。

3.一台计算机上可能部署了多个网络应用程序。哪一个应该接收请求?这时候端口就起作用了。每个网络应用程序都可以绑定一个或多个端口,系统会防止端口重叠。在请求中指定一个端口可以将请求路由到正确的网络应用程序。

但当我们访问码云笔记时,我们并不指定端口。这是因为当未指定端口时,默认使用 HTTP 的80端口和 HTTPS 的443端口。启动网络程序时绑定端口是必须的,尽管有些框架会自动选择计算机上未使用的端口。

localhost 和 127.0.0.1 有什么区别?

在了解了基础知识后,我们就可以更容易地理解这个问题。

localhost 是一个域名,那么127.0.0.1呢?它是一个 IP 地址,即当前机器的本地 IP 地址,只能在该机器上使用。你的计算机可以在没有连接到互联网的情况下使用这个 IP 地址,这对于开发和测试网络程序非常方便。我们调试的程序绑定到这个 IP 地址上。

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

那么localhost是如何解析到127.0.0.1的呢?它需要通过 DNS 吗?不需要。每台计算机都可以在没有 DNS 解析的情况下使用localhost127.0.0.1

这个解析是由每台计算机独立处理的。每台计算机上都有一个hosts文件,里面包含一些硬编码的 DNS 解析规则,包括将localhost解析到127.0.0.1的规则,这是一个约定。

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

你甚至可以使用mybj123.com,但这只会对你自己有效,不会影响到其他任何人。

域名层级

localhost 与我们通常使用的域名,如 www.juejin. cnbaidu. comcsdn. net不太一样。wwwcncomnet代表什么?为什么localhost不需要它们?

域名是分层的,分为顶级域名(TLD)、二级域名(SLD)和三级域名(3LD)等。

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

二级域名(SLD):位于 TLD 之下,由注册者选择并注册,可以是一个个性化和易记的名称。例如,mybj123.com是一个二级域名,这通常是我们可以申请的。顶级域名如.com.net.cn的意义通常被忽略,以便简短和易记。

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

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

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

如前所述,不同的网络程序不能使用相同的端口,但有方法可以绕过这个限制。

在个人博客流行的时候,许多人喜欢购买虚拟主机并部署一个开源博客平台来表达自己。为了赚钱,虚拟主机提供商会在一台计算机上分配许多虚拟主机,让每个人都可以使用默认的80端口访问他们的域名而不会有任何问题。这是怎么做到的呢?

如果你有使用 Nginx、Apache 或 IIS 等网络服务器的经验,你可能对主机头的概念有所了解。主机头实际上就是域名。通过设置主机头,我们的程序可以共享一个网络端口。

在 Nginx 等网络服务器中部署网站时,我们配置它以在主机头中包含域名。

启动时,Nginx 和其他网络服务器会将 80 端口占为己用。

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

然后,Nginx 会将请求转发给该网络程序,如果需要,启动它。

私有 IP 地址

除了127.0.0.1,还有很多私有 IP 地址,例如常见的192.168.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.0127.255.255.255地址范围用于回环测试,包括问题中提到的127.0.0.1 地址。你还可以分配给自己一个类似127.0.0.2的 IP 地址,它的功能与127.0.0.1相同。

169.254.0.0169.254.255.255地址范围用于局域网内部。这种情况较少见,如果你的计算机无法连接到局域网,可能会看到这个 IP 地址,它是临时分配的局域网地址。

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

还有一些不太常见的专用 IPv4 地址范围。

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 的进一步讨论超出了本文的范围,感兴趣的可以下去进一步探索。

「点点赞赏,手留余香」

1

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系maynote@foxmail.com处理
码云笔记 » localhost 和 127.0.0.1 有哪些区别?

发表回复