127.0.0.1和localhost有什么区别

Boh*_*ian 136 sockets dns networking localhost

假设以下内容定义如下.../hosts:

127.0.0.1 localhost
Run Code Online (Sandbox Code Playgroud)

如果有的话,使用127.0.0.1localhost作为服务器名称之间的实际差异是什么,特别是当遇到正在侦听连接的本地运行的进程时?

pax*_*blo 112

那么,最有可能的区别是,你还要做一个实际查找localhost地方.

如果您使用127.0.0.1,那么(智能)软件将直接将其转换为IP地址并使用它.一些实现gethostbyname将检测点状格式(并且可能是等效的IPv6格式)并且根本不进行查找.

否则,必须解析名称.并且无法保证您的hosts文件实际上将用于该分辨率(首先或根本),因此localhost可能会成为完全不同的 IP地址.

我的意思是,在某些系统上,hosts可以绕过本地文件.该host.conf文件在Linux(和许多其他Unices)上控制它.

  • 主要区别在于可以通过Unix Domain Socket建立连接,如下所述:http://stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1 (6认同)
  • @DonViegues 是的,你是对的,unix 套接字的开销比 TCP/IP 少。我只是想提一下,这种行为是 MySQL 特有的,而不是操作系统或网络级别的行为。 (3认同)
  • @DonViegues 这是 MySQL 特有的,在我看来是糟糕的设计。它将看到 localhost 并尝试使用 unix-socket 而不是使用 IP 连接,但对于 127.0.0.1 它只使用 IP。 (2认同)

Rya*_*igg 32

维基百科很好地总结了这一点:

在现代计算机系统上,localhost作为主机名转换为127.0.0.0/8(环回)网络块中的IPv4地址,通常为127.0.0.1,或者在IPv6中为:: 1.

唯一的区别是它会在DNS中查找系统localhost解析的内容.这种查找非常非常快.例如,要stackoverflow.com输入您的地址栏(或使用指向此处的书签).无论哪种方式,你都通过主机名来到这里.localhost提供类似的功能.

  • 这实际上很重要.localhost可以解析为IPv6地址,而127.0.0.1则不能.在仅IPv6系统上使用localhost可以正常工作,而127.0.0.1则不会,因为IPv4不可用. (7认同)

Way*_*ker 29

一些应用程序将特别对待"localhost".mysql客户端将localhost视为连接到本地unix域套接字的请求,而不是使用tcp连接到127.0.0.1上的服务器.这可能更快,并且可能位于不同的身份验证区域中.

我不知道其他应用程序处理localhost与127.0.0.1不同,但可能有一些.


The*_*ask 8

嗯,通过IP更快.

基本上,当您通过服务器名称呼叫时,它将转换为原始IP.

但是记住IP很难,因此创建了域名.

我个人用http://localhost而不是http://127.0.0.1http://username.

  • @DonViegues特定于MySQL,它以[特殊方式]处理`localhost`(https://en.wikipedia.org/wiki/Localhost#Special_cases).其他应用程序可能仍会查找`localhost`. (4认同)