localhost、127.0.0.1 和 本机IP 三者的区别?

localhost、127.0.0.1 和 本机IP 三者的区别?

排名第一的答案还没说的太完整。

首先 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拨号网络的虚拟网卡,想要正常工作都要绑定一个地址,否则其他设备就不知道如何访问它。

————最后总结一下区别————