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 中: 127.0.0.1 localhost

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

然后再去 ping localhost,提示就变成了 PING localhost (192.168.206.1) 56(84) bytes of data.

2: 127.0.0.1

首先我们要先知道一个概念,凡是以 127 开头的 IP 地址,都是回环地址(Loop back address),其所在的回环接口一般被理解为虚拟网卡,并不是真正的路由器接口。 所谓的回环地址,通俗的讲,就是我们在主机上发送给 127 开头的 IP 地址的数据包会被发送的主机自己接收,根本传不出去,外部设备也无法通过回环地址访问到本机。

小说明:正常的数据包会从 IP 层进入链路层,然后发送到网络上;而给回环地址发送数据包,数据包会直接被发送主机的 IP 层获取,后面就没有链路层他们啥事了。 而 127.0.0.1 作为{127}集合中的一员,当然也是个回环地址。只不过 127.0.0.1 经常被默认配置为 localhost 的 IP 地址。 一般会通过 ping 127.0.0.1 来测试某台机器上的网络设备是否工作正常。

3: 0.0.0.0

首先,0.0.0.0 是不能被 ping 通的。在服务器中,0.0.0.0 并不是一个真实的的 IP 地址,它表示本机中所有的 IPV4 地址。监听 0.0.0.0 的端口,就是监听本机中所有 IP 的端口。

4: 本机 IP

确切地说,“本机地址”并不是一个规范的名词。通常情况下,指的是“本机物理网卡所绑定的网络协议地址”。由于目前常用网络协议只剩下了 IPV4,IPX/Apple Tak 消失了,IPV6 还没普及,所以通常仅指 IP 地址甚至 ipv4 地址。一般情况下,并不会把 127.0.0.1 当作本机地址——因为没必要特别说明,大家都知道。 本机地址是与具体的网络接口绑定的。比如以太网卡、无线网卡或者 PPP/PPPoE 拨号网络的虚拟网卡,想要正常工作都要绑定一个地址,否则其他设备就不知道如何访问它。 ● localhost 是个域名,不是地址,它可以被配置为任意的 IP 地址,不过通常情况下都指向 127.0.0.1(ipv4)和 ::1 ● 整个 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 接口上的地址,如果服务端套接字绑定在它上面,你的客户端程序就只能在本机访问