Localhost
首先,localhost 是一个主机名,它指向用于网络操作的本地回环接口。当你在浏览器中输入 http://localhost
时,你告诉浏览器要连接到你的本地电脑的网络服务。通常开发人员在进行本地开发工作时会使用 localhost 进行开发测试。
在大多数操作系统中,localhost 会被解析为 127.0.0.1。这是通过本地主机文件(hosts)实现的,该文件告诉计算机如何把主机名(如 localhost)翻译成 IP 地址。
因此,我们可以说 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>ping 127.0.0.1
Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-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 支持
当使用 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 的。
返回到Discuz!,最后一句话就是:【↓↓↓ 数据库量越大两者区别越明显!】
Linux的服务器用:localhost
Windows服务器的用:127.0.0.1
即:$_config['db']['1']['dbhost'] = 'localhost';