之前用 nginx 的时候,发现用这几个 IP,都能正常访问到 nginx 的欢迎网页。一度认为这几个 IP 都是一样的。




但本质上还是有些区别的。
首先 localhost 就不叫 IP,它是一个域名,就跟 "baidu.com",是一个形式的东西,只不过默认会把它解析为 127.0.0.1 ,当然这可以在 /etc/hosts 文件下进行修改。
所以默认情况下,使用 localhost 跟使用 127.0.0.1 确实是没区别的。
其次就是 0.0.0.0,执行 ping 0.0.0.0 ,是会失败的,因为它在IPV4中表示的是无效的目标地址。
1 2 3 4 | $ 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 地址。
1 2 | /* 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。
总结

-
127.0.0.1是回环地址。localhost是域名,但默认等于127.0.0.1。 -
ping回环地址和ping本机地址,是一样的,走的是lo0 “假网卡”,都会经过网络层和数据链路层等逻辑,最后在快要出网卡前狠狠拐了个弯, 将数据插入到一个链表后就软中断通知 ksoftirqd 来进行收数据的逻辑,压根就不出网络。所以断网了也能ping通回环地址。 -
如果服务器
listen的是0.0.0.0,那么此时用127.0.0.1和本机地址都可以访问到服务。



















