Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 127.0.0.1和localhost之间有什么区别_Sockets_Networking_Dns_Localhost - Fatal编程技术网

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