得之我幸 失之我命

when someone abandons you,it is him that gets loss because he lost someone who truly loves him but you just lost one who doesn’t love you.

localhost 127.0.0.1 本机 IP 的区别

  • 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.* 网段的计算机才能访问你的服务端程序。

1.localhost

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

1
2
3
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost

而在 Linux 中,其定义位于 /etc/hosts 中:

1
127.0.0.1 localhost

注意这个值是可修改的,比如把它改成

1
192.068.206.1 localhost

然后再去 ping localhost,提示就变成了

1
ping localhost (192.168.206.1) 56(84) bytes of data.

当然一般人不会这么做

2.127.0.0.1

127.0.0.1 这个地址通常分配给 loopback 接口。loopback 是一个特殊的网络接口(可理解成虚拟网卡),用于本机中各个应用之间的网络交互。只要操作系统的网络组件是正常的,loopback 就能工作。Windows 中看不到这个接口,Linux中这个接口叫 lo:

1
2
3
4
5
6
7
$ 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接口的默认地址只是一个惯例,比如下面这样:

1
2
3
4
5
6
7
$ 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 的软件挂掉。

3.本机地址

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

.