Sockets 127.0.0.1和localhost之间有什么区别
假设在Sockets 127.0.0.1和localhost之间有什么区别,sockets,networking,dns,localhost,Sockets,Networking,Dns,Localhost,假设在../hosts中定义了以下内容: 127.0.0.1 localhost 如果有的话,使用127.0.0.1和localhost作为服务器名称之间的实际区别是什么,特别是当点击正在侦听连接的本地运行的进程时 没有什么不同。一个比另一个更容易记住。通常,定义一个与IP地址关联的名称。您不必为127.0.0.1指定localhost,您可以指定任何您想要的名称。好吧,最可能的区别是您仍然需要在某个地方实际查找localhost 如果使用127.0.0.1,则(智能)软件将直接将其转换为IP
../hosts
中定义了以下内容:
127.0.0.1 localhost
如果有的话,使用
127.0.0.1
和localhost
作为服务器名称之间的实际区别是什么,特别是当点击正在侦听连接的本地运行的进程时 没有什么不同。一个比另一个更容易记住。通常,定义一个与IP地址关联的名称。您不必为127.0.0.1指定localhost,您可以指定任何您想要的名称。好吧,最可能的区别是您仍然需要在某个地方实际查找localhost
如果使用127.0.0.1
,则(智能)软件将直接将其转换为IP地址并使用它。gethostbyname
的一些实现将检测点格式(可能是等效的IPv6格式),而根本不进行查找
否则,必须解析名称。而且不能保证您的hosts
文件实际上会用于该解析(首先,或者根本不会),因此localhost
可能会成为一个完全不同的IP地址
我的意思是,在某些系统上,可以绕过本地主机
文件。该文件在Linux(和许多其他Unice)上控制此操作。
在现代计算机系统上,localhost作为主机名转换为127.0.0.0/8(环回)网络块中的IPv4地址,通常为127.0.0.1,或IPv6中的::1
唯一的区别是,它将在DNS中查找localhost
解析为的系统。这个查找非常非常快。例如,要访问stackoverflow.com
,您可以在地址栏中键入该地址(或使用指向此处的bookmarklet)。不管怎样,你都是通过主机名来的localhost
提供了类似的功能。好的,通过IP的速度更快
基本上,当您按服务器名调用时,它会转换为原始IP
但是要记住一个IP是很困难的,因为这个原因域名被创建了
我个人使用
http://localhost
而不是http://127.0.0.1
或http://username
一些应用程序会特别处理“localhost”。mysql客户端将localhost视为连接到本地unix域套接字的请求,而不是使用tcp连接到127.0.0.1上的服务器。这可能更快,并且可能位于不同的身份验证区域
我不知道还有其他应用程序对localhost的处理方式与127.0.0.1不同,但可能有一些不同。主要区别在于,可以通过Unix域套接字进行连接,如下所述:您可以说
localhost
与协议无关,IPv4和IPv6都可以工作。另一个不同之处是大多数浏览器将localhost
视为安全源,而127.0.0.1
不视为安全源。主要区别是可以通过Unix域套接字进行连接,如这里所述:/etc/nsswitch.conf
选择如果nss正在运行,是否首先使用主机或DNS进行主机查找。@DonViegues这是特定于MySQL的,我认为是糟糕的设计。它将看到本地主机,并尝试使用unix套接字而不是使用IP连接,但对于127.0.0.1,它只使用IP。@Armannordookhani AFAIK如果您通过SSH连接到远程主机,然后从那里连接到MySQL(就像连接MySQL服务器的SSH隧道),则必须使用127.0.0.1,因为整个过程都是通过TC/IP进行的。但是,如果在同一台计算机上运行的两个进程想要连接,localhost(unixsocket)会更快/具有lees开销。谢谢@DonViegues是的,你是对的,unix套接字的开销比TCP/IP少。我只是想提一下,这种行为是MySQL特有的,而不是操作系统或网络级别的行为。localhost更快,它不使用TCP/IP@Don维埃格-你所说的与本文中的其他答案相矛盾。你能详细说明一下吗?是的,我将复制并粘贴我的其他评论:主要区别在于可以通过Unix域套接字进行连接,如下所述:@DonViegues,它是MySQL特有的,它以一种方式处理localhost
。其他应用程序可能仍然会查找localhost
。这其实很重要。localhost可以解析为IPv6地址,而127.0.0.1不能。在仅限IPv6的系统上使用localhost可以工作,而127.0.0.1将无法工作,因为IPv4不可用。在我的Windows10系统上,DNS查找非常非常慢,大约1100毫秒。所以我切换到127.0.0.1