面试官问:127.0.0.1和localhost的区别?我:不是一样吗...

127.0.0.1和localhost的区别?

localhost 介绍

首先,localhost 是一个主机名,它指向用于网络操作的本地回环接口。当你在浏览器中输入 http://localhost 时,你告诉浏览器要连接到你的本地电脑的网络服务。通常开发人员在进行本地开发工作时会使用 localhost 进行开发测试。

在大多数操作系统中,localhost 会被解析为 127.0.0.1。这是通过本地主机文件(hosts)实现的,该文件告诉计算机如何把主机名(如 localhost)翻译成 IP 地址。

Hosts

Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。

历史

在引入DNS(Domain Name System,域名系统)之前,网络中的主机是将容易记忆的域名映射到IP地址并将它保存在一个共享的静态文件hosts中,再由hosts文件来实现网络中域名的管理。最初Internet非常小,仅使用这个集中管理的文件就可以通过FTP为连入Internet的站点和主机提供域名的发布和下载。每个Internet站点将定期地更新其主机文件的副本,并且发布主机文件的更新版本来反映网络的变化。

但是,当Internet上的计算机迅速增加时,通过一个中心授权机构为所有Internet主机管理一个主机文件的工作将无法进行。文件会随着时间的推移而增大,这样按当前和更新的形式维持文件以及将文件分配至所有站点将变得非常困难,甚至无法完成,于是便产生了DNS服务器

工作原理

当浏览器要访问一个网站时,它首先需要将网站的域名解析成其对应的IP地址。这个过程是通过DNS服务器来完成的。然后,浏览器才能根据这个IP地址定位到网站并访问其数据。

根据操作系统的规定,在进行DNS请求之前,浏览器会先检查自己的Hosts文件中是否有这个域名和IP的映射关系。如果有,浏览器将直接访问这个IP地址所指定的网络位置;如果没有,才会向已知的DNS服务器发送域名解析请求。这意味着,在IP解析的优先级上,Hosts文件的解析优先级要高于DNS服务器。

存储位置

hosts文件在不同操作系统(甚至不同Windows版本)的位置都不大一样,

以下为hosts文件在不同系统中所处的目录

Windows XP/2000/Vista/7/8/8.1/10:C:\windows\system32\drivers\etc\

(XP系统无法使用bat批处理命令直接替换hosts,需手动替换后重新插拔网线或重启方使hosts生效)

(可更改\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath项修改host位置)

Windows 95/98/Me:%WinDir%\ (其实就是C:\WINDOWS)

Linux及其他类Unix操作系统:/etc/

Mac OS 9及更早的系统:System Folder: Preferences或System folder(文件格式可能与Windows和Linux所对应的文件不同)

Mac OS X:/private/etc(使用BSD风格的hosts文件)

OS/2及eComStation:"bootdrive":\mptn\etc\

Android:/system/etc/

Symbian第1/2版手机:C:\system\data\

Symbian第3版手机:C:\private\10000882\(能使用兼容AllFiles的文件浏览器访问。)

iPhone OS:/etc/(需要越狱)

iPad OS:/private/etc

webOS:/etc

文件内容

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhos

#127.0.0.1       activate.navicat.com
127.0.0.1 aaa.com  # 添加aaa.com映射到本机地址
# Added by Docker Desktop
192.168.56.54 host.docker.internal
192.168.56.54 gateway.docker.internal
# To allow the same kube context to work on the host and the container:
127.0.0.1 kubernetes.docker.internal
# End of section

尝试ping一下 aaa.com

具体作用

来看一下Hosts文件的工作方式以及它在具体使用中起哪些作用。

1、加快域名解析

对于要经常访问的网站,我们可以通过在Hosts中配置域名和IP的映射关系,提高域名解析速度。由于有了映射关系,当我们输入域名计算机就能很快解析出IP,而不用请求网络上的DNS服务器

2、方便局域网用户

在很多单位的局域网中,会有服务器提供给用户使用。但由于局域网中一般很少架设DNS服务器,访问这些服务器时,要输入难记的IP地址。这对不少人来说相当麻烦。可以分别给这些服务器取个容易记住的名字,然后在Hosts中建立IP映射,这样以后访问的时候,只要输入这个服务器的名字就行了。

3、屏蔽网站(域名重定向

有很多网站不经过用户同意就将各种各样的插件安装到你的计算机中,其中有些说不定就是木马或病毒。对于这些网站我们可以利用Hosts把该网站的域名映射到错误的IP或本地计算机的IP,这样就不用访问了。在WINDOWS系统中,约定 127.0.0.1 为本地计算机的IP地址, 0.0.0.0是错误的IP地址。

如果,我们在Hosts中,写入以下内容:

127.0.0.1要屏蔽的网站A的域名

0.0.0.0要屏蔽的网站B的域名

这样,计算机解析域名A和 B时,就解析到本机IP或错误的IP,达到了屏蔽网站A 和B的目的。

4、顺利连接系统

对于Lotus的服务器和一些数据库服务器,在访问时如果直接输入IP地址那是不能访问的,只能输入服务器名才能访问。那么我们配置好Hosts文件,这样输入服务器名就能顺利连接了。

5、虚拟域名

很多时候,网站建设者需要把”软环境“搭建好,再进行上传调试。但类似于邮件服务,则需要使用域名来辅助调试,这时就可以将本地 IP 地址与一个”虚拟域名“做地址指向,就可以达到要求的效果,且无需花费。如:

127.0.0.1 网站域名

之后在浏览器地址栏中输入对应的网站域名即可。


需要注意的是,Hosts文件配置的映射是静态的。一旦一个域名和IP地址在Hosts文件中建立了映射关系,如果在网络上的计算机IP地址发生了更改,用户需要及时更新Hosts文件中的对应映射,否则将不能正常访问。

因此,我们可以说 localhost 具有与回环地址 127.0.0.1 相同的功能。

尽管它们通常可以互换使用,但在技术上 localhost 是一个主机名,而 127.0.0.1 是一个具体 IP 地址。

127.0.0.1 介绍

127.0.0.1 是一个 IPv4 地址,它明确指向了计算机的网络接口的 IP 地址。在互联网协议(IP)标准中,这个地址是为回环通信保留的,这意味着发送到这个地址的所有通信都不会离开当前计算机,而是立即通过本地网络栈返回。

127.0.0.1 是分配给回环接口的回环 IP 地址。它通常用作本地主机的数字表示。当设备向 127.0.0.1 发送数据时,它会回环到当前设备,而无需通过网络,类似于 localhost 概念。举个例子,我们在命令提示符窗口中输入命令 ping 127.0.0.1 将与当前设备进行连接:

C:\Users>ping127.0.0.1

Pinging127.0.0.1with32bytesofdata:

Replyfrom127.0.0.1:bytes=32time<1msTTL=128

Replyfrom127.0.0.1:bytes=32time<1msTTL=128

Replyfrom127.0.0.1:bytes=32time<1msTTL=128

Replyfrom127.0.0.1:bytes=32time<1msTTL=128

Pingstatisticsfor127.0.0.1:

Packets:Sent=4,Received=4,Lost=0(0%loss),

Approximateroundtriptimesinmilli-seconds:

Minimum=0ms,Maximum=0ms,Average=0ms

另外,回环地址族不仅仅限于 127.0.0.1,它包括了从 127.0.0.0 到 127.255.255.255 的整个地址范围。而 localhost 通常只解析为 127.0.0.1。此外回环地址还包括 IPv6 中的 ::1 地址。当你使用 localhost 时,你的系统会根据配置和系统支持决定是使用 IPv4 还是 IPv6。

TCP/IP 模型

现在我们看看 localhost 和 127.0.0.1 如何与传输控制协议/互联网协议 (TCP/IP) 模型一起工作。TCP/IP 模型定义了 IP 网络中的通信标准。它由四个主要层组成,如下图所示:

发送方的通信是从上到下的,接收方的通信也是从上到下的。

发送到发送方这两个地址中任何一个的数据包将首先通过应用层和传输层。到达 Internet layer(网络层)后,一旦检测到目标地址为 127.0.0.1 或 localhost,数据包就会被发送回设备。这样的话,这个数据包的通信就不会离开当前计算机,被本地网络栈直接返回。

两者区别名称解析差异

  • localhost 是一个主机名,需要通过域名系统(DNS)解析或者查找本地的 hosts 文件来转换成 IP 地址。

  • 127.0.0.1 是一个 IPv4 地址,直接指向本地计算机的回环接口,不需要名称解析的过程。

性能考量

  • 使用 localhost 可能会有轻微的性能损失,因为它需要被解析成 IP 地址。虽然这通常是非常快的,但是在高性能要求的环境下,直接使用 IP 地址可以避免这种额外的解析时间。

  • 直接使用 127.0.0.1,因为省去了解析步骤,可以略微提高连接速度。

IPv6 支持IPv6地址介绍 - 知乎

  • 当使用 localhost 时,系统将根据其配置决定是返回 IPv4 地址 127.0.0.1 还是 IPv6 地址::1。

  • 直接使用 127.0.0.1 强制使用 IPv4 通信,不会使用 IPv6。

灵活性和配置

  • localhost 可以通过修改本地的 hosts 文件进行重新指向,有时用于测试或开发的目的,比如指向一个远程服务器或者本地虚拟机。

  • 使用 127.0.0.1 直接明确了通信必须在 IPv4 的回环接口上进行。

安全策略和访问控制

  • 有些情况下,安全设置可能区分处理 localhost 和 127.0.0.1。例如,某些应用程序可能只允许从 localhost 进行访问而不是任何回环地址。

  • 使用 127.0.0.1 可以更细粒度地控制哪些服务可以监听和接受这个地址的连接。

软件开发和测试

  • 开发者在测试软件时,可以通过 localhost 连接至本地的开发服务器,这样可以方便地通过编辑 hosts 文件来切换到其他测试环境。

  • 在某些开发框架或工具中,使用 localhost 可以允许开发者不特定于 IPv4 或 IPv6 的情况下进行通信,为迁移到 IPv6 提供了便利。

总结

虽然 localhost 和 127.0.0.1 在大多数情况下是可以互换使用的,并且它们都用于指向本地计算机,但它们背后的工作机制是不同的。

localhost 是一个更通用和灵活的概念,用于标识本地服务器,而 127.0.0.1 是一个精确的 IP 地址,它直接指向计算机的网络接口。在实际应用中我是更推荐大家使用 localhost 而不是 127.0.0.1 的。

  • 27
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JAVA技术开发员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值