• localhost与127.0.0.1有什么区别?
  • 发布于 2个月前
  • 111 热度
    0 评论
  • 乱人心
  • 0 粉丝 37 篇博客
  •   
在进行前端开发时,我们经常使用localhost,只需运行npm run就能在浏览器中打开网页,地址栏显示类似于http://localhost:xxx/index.html,但是很多人并不了解更深层次的原理,不知道 localhost 与 127.0.0.1 到底有什么区别。

了解localhost是什么?
localhost是一个域名,从本质上来说和用于互联网访问的域名没有太大不同,只是更容易记忆。localhost的范围仅限于本地机器,其名称清楚地表明:“local”指的是在本地范围内的东西。我们都可以在各自的机器上使用localhost,而互不干扰,访问各自的页面内容。

从域名到程序
为了真正理解localhost,我们需要讨论用户通过域名访问程序的方式,以谷歌为例。在浏览器中输入google.com,首先会查询DNS获取google.com的IP地址。为什么需要IP地址?类比一下,如果有人向你的公司发送一个包裹,交付单上会包括公司的地址、名称和收件人等详细信息。交付的过程依赖于地址进行路由,最终到达收件人。类似地,在网络中,域名就像公司名称,而IP地址就像物理地址。在网络世界中,IP地址对于定位相应的程序至关重要。

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

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

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

但是当我们访问谷歌时,并没有指定端口。这是因为当没有指定时,使用默认端口,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解析的情况下使用localhost和127.0.0.1。

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

如果你不喜欢使用localhost,那也没关系。你可以将它命名为任何你喜欢的名称,比如myhost,并将其解析为127.0.0.1。你甚至可以使用google.com,但那只能给你自己使用,不会影响其他人。

域名层次结构
localhost并不完全类似于我们通常使用的域名,比如www.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的下一级,由注册者选择和注册,可以是个性化和易记的名称。例如,juejin.cn就是一个二级域,通常我们可以申请到。
三级域(3LD): 位于二级域的下一级,通常用于指向特定的服务器或子网。在blog.example.com中,“blog”就是一个三级域。而“www”是最常见的三级域,表示网站的主页或主站点,尽管这只是一种约定,现在许多站点建议直接通过二级域进行访问。

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

多个网站共享一个IP和端口
正如前面提到的,不同的网络程序不能使用相同的端口,但有方法可以规避这个问题。在个人博客流行的时候,许多人喜欢购买虚拟主机并部署开源博客平台来表达自己的想法。为了赚钱,虚拟主机提供商会在一台计算机上分配许多虚拟主机,允许每个人都可以使用默认的端口80访问他们的域名,而不会有任何问题。这是怎么可能的呢?

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

在启动时,Nginx和其他web服务器将端口80独占为自己使用。当网站请求到达Nginx的端口80时,它根据请求中的域名(主机头中的域名)识别出相应的网络程序,然后将请求转发给该网络程序。

私有IP地址
除了127.0.0.1之外,还有许多私有IP地址,比如常见的192.168.x.x。这些私有IP地址主要保留在局域网(LAN)中使用,因为为每台计算机分配唯一的IP地址是不可行的。只要在LAN中没有冲突,这些地址就可以自由使用。你的公司可以使用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。你也可以分配给自己一个像127.0.0.2这样的IP地址,它的功能与127.0.0.1相同。
169.254.0.0到169.254.255.255地址范围用于局域网内部。这种情况比较少见,如果你的计算机无法连接到LAN,你可能会看到这个IP地址,这是暂时分配的LAN地址。
这些地址范围也不能在公共互联网上使用。

还有一些较不常见的专用IPv4地址范围。有关IP地址范围的完整定义可以在IANA网站[1]上找到。

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地址。
用户评论