在当今的计算机网络中,localhost 是一个重要的主机名称,指的是当前使用的计算机。这个名称是保留给回送的用途,主要用来访问运行在主机上的网络服务。通过回送网络接口进行访问,可以绕过任何本地的网络接口硬体,这使得回送机制成为一种方便的地方法来运行本地服务。
回送机制可用于在不需要物理网络接口的情况下运行网络服务。
例如,可以通过浏览器输入网址 http://localhost
来访问本地安装的网站的主页。根据IPv4的网络标准,整个地址块 127.0.0.0/8
(超过1600万个地址) 被保留用于回送目的。这意味着向这些地址发送的任何封包都会被回送。地址 127.0.0.1
是IPv4回送流量的标准地址,而其余的地址并不是所有操作系统都支持。然而,它们可以用于在主机上设置多个伺服器应用程式,所有这些应用程式都可以聆听相同的端口号。
在IPv6的地址架构中,只有一个地址被分配给回送,即 ::1
。这个标准禁止将该地址分配给任何物理接口,也不允许其作为发送或接收封包的源或目的地址。这保证了回送地址的合适使用,并防止了不必要的路由问题。
通常情况下,localhost 名称解析为IPv4回送地址 127.0.0.1
和IPv6回送地址 ::1
。这种解析通常是通过操作系统的 hosts 文件配置的,内容为:
127.0.0.1 localhost
::1 localhost
这个名称也可以通过域名系统(DNS)伺服器解析,但在使用该名称时有一些特殊考虑。 IPv4或IPv6地址查询名称 localhost 必须始终解析到相应的回送地址。当名称解析器收到一个地址查询(A或AAAA查询)时,它应该返回适当的回送地址,并对任何其他请求的记录类型给出否定的响应。
查询localhost时,应该避免向缓存的名称伺服器发送请求,以免对域名系统根伺服器造成流量负担。
在域名系统中,名称 .localhost
被保留为一个顶级域名,最初是为了避免与主机名称 localhost 之间的混淆。域名注册商被禁止将顶级 .localhost
域中的域名分配给任何用户。
早在1981年,网络地址块 127.0.0.0/8
被标记为「保留」状态,以避免其被分配为一般用途的类A IP网络。这个块在1986年被正式指定用于回送目的。到1994年、2002年、2010年以及2013年,这一用途被确认为特殊用途的IPv4地址块。此外,1995年开始定义的IPv6回送地址 ::1
的用途和定义自那时起至今并未改变。
处理发送到回送地址的任何封包是在TCP/IP堆栈的链路层中实现的。这些封包不会被传递给任何网络接口控制器(NIC)或硬体设备驱动程序,也不应该出现在计算系统之外,或被任何路由器路由。这允许即使在没有任何硬体网络接口的情况下也能进行软体测试和本地服务。
回送封包与其他封包的区别仅在于它们的特殊IP地址。
虽然127.0.0.0/8
地址的使用有其例外,但它们在多协议标签交换(MPLS)的traceroute 错误检测中却被利用,这一特性使其成为避免将故障封包传送到最终用户的一个方便手段。
在各种网络专案设计中,了解回送地址的特殊性不仅对于开发而言至关重要,也对于系统管理和安全设置有着深远的影响。你是否想过,这些看似普遍的地址,是否还隐藏着更多不为人知的秘密呢?