localhost 和 127.0.0.1 之间有什么区别

什么是 localhost?

localhost是一个域名,本质上跟上网的域名没什么区别,只是比较容易记住。

localhost 的范围仅限于本地机器——其名称明确指出:“local”指的是本地范围内的某物。

用户如何通过域名访问程序

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

为什么是 IP 地址?打个比方,如果有人给你的公司寄包裹,包裹单上会写明公司的地址、名称、收件人等信息。包裹的运送过程依靠地址进行路由,最终到达收件人手中。同样,在网络中,域名就像公司名称,而 IP 地址就像物理地址。在网络世界中,IP 地址对于定位相应的程序至关重要。

DNS 就像公司目录一样,列出每个域对应的 IP 地址。有些域名可能未注册,因此无法找到其 IP 地址,而其他域名可能有多个 IP 地址,DNS 会根据某些规则自动返回一个 IP 地址。购买域名后,域名服务商一般会提供DNS解析服务,将域名和其对应的IP地址注册到DNS中。

IP 地址从何而来?每台上网的电脑都有一个 IP 地址,但个人电脑 IP 通常不适合公开访问,类似于公司内部位置,内部人员可以知道,但外部人员则不知道。对于像谷歌提供的服务,需要一个公共 IP 地址,通常由互联网服务提供商提供。例如,如果您的公司使用中国联通上网,您可以让他们为您公司的网关服务器分配一个公共 IP 地址。网关服务器就像一个总机,处理所有内部网络通信,并设置转发规则以将传入请求路由到适当的服务器。

2. 浏览器获得 IP 地址后,向该地址发送请求,由操作系统打包成 IP 数据包,在网络上传输,网络的路由协议根据提供的 IP 地址,经过各种路由器,最终到达绑定该 IP 的计算机。

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

但是我们访问 baidu 时,并没有指定端口。这是因为,当没有指定端口时,会使用默认端口,HTTP 端口为 80,HTTPS 端口为 443。启动网络程序时,绑定端口是必须的,不过有些框架会自动选择电脑上未使用的端口。

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。

甚至可以使用 baidu.com,但它只能供自己使用,不会影响任何其他人。

域名层次结构

localhost 和我们平时用的域名不太一样,比如www.juejin.cn、baidu.com、csdn.net。www、cn、com、net 分别代表什么意思?localhost 又为什么不需要这些?

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

顶级域名(TLD):

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

二级域名(SLD):

由注册人选择和注册的 TLD 之下的一级域名,可以是个性化且容易记住的名称。例如,juejin.cn 就是二级域名,我们通常可以申请这种域名。.com、.net 或 .cn 等顶级域名的重要性通常被人们忽视,人们更看重简洁性和易记性。

三级域名 (3LD):

位于二级域名之下,通常用于指向特定服务器或子网。在 blog.example.com 中,“blog” 就是三级域名。“www” 是最常见的三级域名,代表网站的主页或主站点,不过这只是惯例,现在许多网站都建议通过二级域名直接访问。

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

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

不同的网络程序不能使用相同的端口,但有办法可以解决这个问题。

以前个人博客风靡的时候,很多人会购买虚拟主机,部署开源博客平台来表达自己的想法。为了赚钱,虚拟主机提供商会在一台电脑上分配多个虚拟主机,让每个人都能通过默认的 80 端口访问他们的域名,没有任何问题。这怎么可能呢?

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

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

启动时,Nginx 和其他 Web 服务器会为自己声明端口 80。

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

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

私有 IP 地址

除了 127.0.0.1,还有很多私有 IP 地址,比如常见的 192.168.xx 这些私有 IP 地址大多是局域网络内部使用的,因为不可能给每台电脑分配一个唯一的 IP 地址,只要局域网络内部没有冲突,这些地址都可以自由使用。A公司可以用 192.168.1.1,B也可以用 192.168.1.1,但如果你想访问B公司,就必须通过公网 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 地址。
这些地址范围也不能在公共互联网上使用。

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 地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值