• 【转自知乎】:localhost、127.0.0.1 和 本机IP 三者的区别?


    作者:知乎用户
    链接:https://www.zhihu.com/question/23940717/answer/26230963
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    首先 localhost 是一个域名,在过去它指向 127.0.0.1 这个IP地址。在操作系统支持 ipv6 后,它同时还指向ipv6 的地址 [::1]
    在 Windows 中,这个域名是预定义的,从 hosts 文件中可以看出:
       #  localhost name resolution is handled within DNS itself.
       #    127.0.0.1         localhost
       #     ::1              localhost

    而在 Linux 中,其定义位于 /etc/hosts 中:
      127.0.0.1     localhost
    注意这个值是可修改的,比如我把它改成
      192.068.206.1     localhost
    然后再去 ping localhost,提示就变成了
      PING localhost (192.168.206.1) 56(84) bytes of data.
    当然一般人不会像我这么蛋疼。


    ————分割线—说完localhost再说127.0.0.1————
    127.0.0.1 这个地址通常分配给 loopback 接口。loopback 是一个特殊的网络接口(可理解成虚拟网卡),用于本机中各个应用之间的网络交互。只要操作系统的网络组件是正常的,loopback 就能工作。Windows 中看不到这个接口,Linux中这个接口叫 lo:
      #ifconfig
      eth0   Link encap:Ethernet hwaddr 00:00:00:00:00:00
                 inet addr :192.168.0.1 Bcase:192.168.0.255 Mask:255.255.255.0
                  ......
      lo        Link encap:Local Loopback
                 inetaddr: 127.0.0.1 Mask: 255.0.0.0
                   ......

    可以看出 lo 接口的地址是 127.0.0.1。事实上整个 127.* 网段都算能够使用,比如你 ping 127.0.0.2 也是通的。
    但是使用127.0.0.1作为loopback接口的默认地址只是一个惯例,比如下面这样:
      #ifconfig lo  192.168.128.1
      #ping  localhost               #糟糕,ping不通了
      #ping  192.128.128.1     # 可以通
      #ifconfig  lo
      lo          Link encap:Local Loopback
                    inetaddr: 192.168.128.1 Mask: 255.255.255.0
                    ......

    当然,一般人更不会像我这样蛋疼。如果随便改这些配置,可能导致很多只认 127.0.0.1 的软件挂掉。

    ————分割线—说完127.0.0.1再说本机地址————
    确切地说,“本机地址”并不是一个规范的名词。通常情况下,指的是“本机物理网卡所绑定的网络协议地址”。由于目前常用网络协议只剩下了IPV4,IPX/Apple Tak消失了,IPV6还没普及,所以通常仅指IP地址甚至ipv4地址。一般情况下,并不会把 127.0.0.1当作本机地址——因为没必要特别说明,大家都知道。
    本机地址是与具体的网络接口绑定的。比如以太网卡、无线网卡或者PPP/PPPoE拨号网络的虚拟网卡,想要正常工作都要绑定一个地址,否则其他设备就不知道如何访问它。

    ————最后总结一下区别————
    • localhost 是个域名,不是地址,它可以被配置为任意的 IP 地址,不过通常情况下都指向 127.0.0.1(ipv4)和 [::1](ipv6)
    • 整个127.* 网段通常被用作 loopback 网络接口的默认地址,按惯例通常设置为 127.0.0.1。这个地址在其他计算机上不能访问,就算你想访问,访问的也是自己,因为每台带有TCP/IP协议栈的设备基本上都有 localhost/127.0.0.1。
    • 本机地址通常指的是绑定在物理或虚拟网络接口上的IP地址,可供其他设备访问到。
    • 最后,从开发度来看
      • localhost是个域名,性质跟 “www.baidu.com” 差不多。不能直接绑定套接字,必须先gethostbyname转成IP才能绑定。
      • 127.0.0.1 是绑定在 loopback 接口上的地址,如果服务端套接字绑定在它上面,你的客户端程序就只能在本机访问。
      • 如果主机中存在多个网卡,分别连接不同的物理网络,比如 192.168.0.1/255.255.255.0 和 192.168.1.1/255.255.255.0,那么当你的服务端套接字绑到 192.168.0.1 这个地址上时,位于 192.168.1.* 网段的其他计算机是无法连接的,只有位于192.168.0.* 网段的计算机才能访问你的服务端程序。
  • 相关阅读:
    JS小技巧总汇
    [转贴]聪明人如何拯救你的职业困
    Button按钮多行显示的实现方法
    事件和委托
    支持~
    关于递归
    Android 资源的国际化
    Android 文件的浏览(类似于FileDialog的功能)
    Android 开发TCP、UdP客户端
    Android 为什么现在google不让结束整个程序,只让结束单个Activity(转)
  • 原文地址:https://www.cnblogs.com/JasonLGJnote/p/7833081.html
Copyright © 2020-2023  润新知