127.0.0.1、localhost、0.0.0.0的关系

    作者:匿名更新于: 2021-10-21 12:52:24

      我们在进行环境搭建时,可能会遇到3个熟悉的老朋友,那就是127.0.0.1、localhost、0.0.0.0,有时候,我们不管访问哪一个,它们都可以帮助我们进入相同页面。

      但是,其实它们是不同的,这需要我们加以区分和了解他们。

      接下来,我们就来谈谈这三个。

      127.0.0.1和localhost和0.0.0.0

      我们第一次使用nginx的时候,发现用这几个IP,都可以正常访问nginx网页。曾经以为几个IP是一样的,只是叫法不同。  

     

      但是,它们之间本质上还是有一些不同。

      在了解之前,我们需要清楚的是,localhost并非IP,而是一个域名,而仅仅是一种形式而已。(比如www.baidu.com)

      因此,使用localhost默认情况下与使用127.0.0.1没有什么区别。

      第二个是0.0.0.0,如果你想要执行ping0.0.0.0,会显示失败的结果,这是因为IPV4中表示的是无效的目标地址。

      $ ping 0.0.0.0

      PING 0.0.0.0 (0.0.0.0): 56 data bytes

      ping: sendto: No route to host

      ping: sendto: No route to host

      但它还是很有用处的,回想下,我们启动服务器的时候,一般会listen一个IP和端口,等待客户端的连接。

      如果此时listen的是本机的0.0.0.0,那么它表示本机上的所有IPV4地址。

      /* Address to accept any incoming messages. */

      #define INADDR_ANY ((unsigned long int) 0x00000000) /* 0.0.0.0 */

      来举个例子,我们拿127.0.0.1和192.168.31.6为例,它都是本机的IPV4地址,如果监听0.0.0.0,则可以使用以上两个地址访问该服务器。

      当然,在客户端connect时不能使用0.0.0.0。你必须指定要连接的服务器IP。

      总结

      1.我们这里可以总结一下,对于127.0.0.1和localhost来说,一个是回环地址,另一个是域名,所以,一般情况下,我们可以把这两者等同起来,它们并没有什么区别。

      2.ping 回环地址和 ping 本机地址,是一样的,走的是lo0 "假网卡",都会经过网络层和数据链路层等逻辑,最后在快要出网卡前狠狠拐了个弯,将数据插入到一个链表后就软中断通知 ksoftirqd 来进行收数据的逻辑,压根就不出网络。所以断网了也能 ping 通回环地址。

      3.如果服务器listen的是0.0.0.0,那么你使用127.0.0.1和本机地址都可以访问到服务。

      最后

      我们通过理解这三者的概念,可以帮助我们在具体实践中进一步的区分,并在某些场景下,我们需要搞清楚它们的概念,从而为我们具体实践做进一步的铺垫。

        >>>>>>点击进入计算专题

课课家教育

未登录