乐趣区

监听不同ip地址的差异

IP 类型
IP 地址一共分为 A~E5 类,它们分类的依据是其 net-id 所占的字节长度以及网络号前几位。

A 类地址:网络号占 1 个字节。网络号的第一位固定为 0。
B 类地址:网络号占 2 个字节。网络号的前两位固定为 10。
C 类地址:网络号占 3 个字节。网络号的前三位固定位 110。
D 类地址:前四位是 1110,用于多播 (multicast),即一对多通信。
E 类地址:前四位是 1111,保留为以后使用。

特殊地址

127.0.0.1:回环地址。该地址指电脑本身,主要预留测试本机的 TCP/IP 协议是否正常。只要使用这个地址发送数据,则数据包不会出现在网络传输过程中。
10.x.x.x、172.16.x.x~172.31.x.x、192.168.x.x:这些地址被用做内网中。用做私网地址,这些地址不与外网相连。
255.255.255.255:广播地址

0.0.0.0:这个 IP 地址在 IP 数据报中只能用作源 IP 地址

IPV4 中,0.0.0.0 地址被用于表示一个无效的,未知的或者不可用的目标。
在服务器中,0.0.0.0 指的是本机上的所有 IPV4 地址,如果一个主机有两个 IP 地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是 0.0.0.0, 那么通过两个 ip 地址都能够访问该服务。
在路由中,0.0.0.0 表示的是默认路由,即当路由表中没有找到完全匹配的路由的时候所对应的路由。

localhost: 只是一个域名,可以代表任何 IP 地址。在 /etc/hosts 文件下默认配置了 127.0.0.1

后端监听 ip 地址的三种主要的方式

监听到 127.0.0.1
监听到 0.0.0.0
监听到主机内网 ip

监听 127.0.0.1

本机通过 127.0.0.1 访问成功,网络接口为 loopback
本机通过局域网 IP 192.168.0.113 访问失败,网络接口为 loopback
同一局域网下的外部主句通过局域网 IP 192.168.0.112 访问失败,网络接口 -et1

因此,在实际应用中,我们在服务端监听 ip 地址的时候不要绑定到 127.0.0.1,如果绑定到了 127.0.0.1,会导致我们的应用只能在本地 127.0.0.1 访问,其他人无法通过其他任何方式进行访问
监听 0.0.0.0

本机通过 127.0.0.1 访问成功,网络接口为 loopback
本机通过局域网 IP 192.168.0.113 访问成功,网络接口为 loopback
同一局域网下的外部主句通过局域网 IP 192.168.0.112 访问成功,网络接口 -et1

比如我有一台服务器,一个外网 A, 一个内网 B,如果我绑定的端口指定了 0.0.0.0,那么通过内网地址或外网地址都可以访问我的应用。
监听主机内网 ip 192.168.0.113

本机通过 127.0.0.1 访问失败,网络接口为 loopback
本机通过局域网 IP 192.168.0.113 访问成功,网络接口为 loopback
同一局域网下的外部主句通过局域网 IP 192.168.0.112 访问成功,网络接口 -et1

总结
在实际应用中,最好的监听 ip 地址方式为:监听到 0.0.0.0,nodejs demo 如下:
var http = require(‘http’);
http.createServer(function (req, res) {
res.writeHead(200, {‘Content-Type’: ‘text/plain’});
res.end(‘Hello World’);
}).listen(5500, ‘0.0.0.0’);
或者 nodejs 也可以不监听指定的 ip,也可
var http = require(‘http’);
http.createServer(function (req, res) {
res.writeHead(200, {‘Content-Type’: ‘text/plain’});
res.end(‘Hello World’);
}).listen(5500);

退出移动版