跳转到内容

Localhost

维基百科,自由的百科全书

这是本页的一个历史版本,由XL-028留言 | 贡献2018年10月15日 (一) 12:16 (空格)编辑。这可能和当前版本存在着巨大的差异。

计算机网络中,localhost是一个主机名称,意为“本机”,“本地主机”。通过本地环回网络接口,它被用来访问本机运行的服务。本地环回网络会绕过任何本地网络接口硬件。

本地环回

本地环回机制可以用于在主机上运行的网络服务,而不需要物理网络接口,亦无需从通过可用网络连接访问该服务。例如,可以通过访问 URL http://localhost 从 Web 浏览器访问运行在本地的网站。

一般把本地主机解析为 IPv4 本地环回地址 127.0.0.1 或 IPv6 本地环回地址 [::1]。[1]

名称解析

IPv4 网络标准为本地环回保留了整个 127.0.0.0/8 地址块。这意味着发送到任何这些地址(127.0.0.1 到 127.255.255.255)的任何数据包都被循环回去。 地址 127.0.0.1 是 IPv4 环回的常用标准地址; 其余的地址并不是所有的操作系统都支持(多数人不知道它们的存在)。但是,它们可以用来在本地机器上设置多个服务器,让所有服务器都在相同的端口上侦听。 IPv6 标准仅为本地环回分配一个地址:[::1]。

本地主机名解析到一个或多个 IP 地址,一般是由操作系统中 hosts 文件中的几行配置的:

127.0.0.1    localhost
::1          localhost

该名称也可以由 DNS 服务器解析,但是它应该在本地被解析,而非被发送到远程服务器。

除了将本地主机映射到环回地址(127.0.0.1 和 ::1)之外,localhost 还可以映射到其他 IPv4 环回地址,还可以将其他名称或附加名称分配给任何回环地址。 hosts 或 DNS 中指定的环回地址范围之外的地址到本地主机的映射不能保证达到预期的效果,因为应用程序可能会在内部映射本地主机名称。

域名系统中,localhost 被留作顶级域名,最初被留出以避免与用于回送目的的主机名混淆。IETF 标准禁止域名注册商分配 localhost 名称。[2]

IETF 标准

名称 localhost 由 RFC 6761(特殊用途域名)保留,用于环回。[3]该域名在2013年2月达到了建议标准成熟度级别。该标准规定了一些特殊的考虑因素,规范其在域名解析系统中的使用:

  • localhost 的 IPv4 或 IPv6 地址查询必须始终解析为相应的环回地址,该地址在单独的标准中指定。
  • 应用可以自行解析环回地址,或者将他们交由本地解析器机制。
  • 当名称解析器收到 localhost 的地址(A 或 AAAA)查询时,它应该返回适当的环回地址,以及其他请求的记录类型的请求响应。不应将本地主机的查询转发到缓存名称服务器。
  • 为了避免使域名系统根服务器负担流量,缓存名称服务器不应请求本地主机的名称服务器记录,也不要向权威名称服务器转发解析。
  • DNS 注册商不能在顶级域 localhost 中委派域名。
  • 在上述规定的前提下,当权威名称服务器收到 'localhost' 查询请求时,应该适当处理。
  • IPv4 环回地址由 IETF 特殊用途 IPv4 地址标准(RFC 5735)在 IPv4 地址中保留空间,[4]可以追溯到 1986 年 11 月分配号码标准(RFC 990)。

IPv4 环回地址由 IETF 特殊用途 IPv4 地址标准(RFC 5735)在 IPv4 地址中保留空间,可以追溯到 1986 年 11 月分配号码标准(RFC 990)。

相比之下,IETF IPv6 寻址体系结构标准(RFC 4291)在IPv6地址空间内保留单个IPv6 环回地址 ::1。 该标准排除了将该地址分配给任何物理接口,以及在任何数据包中,将其用作发送到远程主机的源地址或目标地址的用途。任何这类被错误传输的数据包都不应该被路由转发,并且应该被接收它的所有路由器或主机丢弃。

数据包处理

发送到环回地址的任何数据包的处理都在 TCP/IP 协议栈的链路层中实现。这些数据包不会被传递到任何网络接口控制器(NIC)或硬件设备驱动程序,也不能出现在计算系统之外,也不能被任何路由器转发。这允许在没有任何硬件网络接口的情况下,进行软件测试和本地服务。 

环回数据包与其他任何通过 TCP/IP 协议栈的数据包仅通过寻址到的特殊IP地址进行区分。因此,最终接收到的服务将根据指定的目的地进行响应。例如,HTTP服务可以将发往127.0.0.99:80 和 127.0.0.100:80 的数据包路由到不同的 Web 服务器,或发送到返回不同网页的单一服务器。为了简化这种测试,可以将 hosts 文件配置为为每个地址提供合适的名称。

具有环回源地址或目标地址的数据包,在非环回接口上收到则必须被删除。这种数据包有时被称为火星包。和其他虚假数据包一样,它们可能是恶意的,它们带来的问题可以通过 bogon 滤波避免。[5]

特殊情况

MySQL 数据库的版本区分使用主机名 localhost 与使用地址 127.0.0.1 和 ::1。[6][7]当在应用程序的客户端连接器接口中使用 localhost 作为目标时,MySQL 应用程序编程接口使用 Unix 域套接字连接到数据库,而通过环回接口的 TCP 连接需要直接使用显式地址。

使用 127.0.0.0/8 网络地址时,一个值得注意的例外是,它们用在多协议标签交换(MPLS)跟踪路由错误检测中,它们的不可路由属性提供了一种方便的方法来避免向最终用户传送错误数据包。

另见

  • 私有网络
  • 保留的 IP 地址

参见