最近在Windows开放端口给外部访问的过程中遇到了关闭防火墙之后端口依然不可以访问的问题。
经过排查是代码绑定了 127.0.0.1
导致,而当你不绑定 127.0.0.1
时,系统默认绑定 0.0.0.0
。下面介绍下 换回地址及任何地址的相关知识。
环回地址 127.0.0.1
IPv4 网络标准将整个 127.0.0.0/8 地址块订为保留地址,供本地环回使用,整个地址块内有超过1600万个IP地址。所以,发送到这些地址(127.0.0.1 到 127.255.255.255)的所有数据包都会返回本机。 地址 127.0.0.1 是 IPv4 环回的常用标准地址; 其余地址并不是所有的操作系统都支持(多数人也不知道有这些地址)。但是,使用127.0.0.1/8内的不同地址,就可以在本机上设置侦听相同端口的多个服务器。 IPv6 标准只分配了一个本地环回地址:[::1]。
要将本地主机名localhost解析到一个或多个 IP 地址,一般是通过在操作系统的 hosts 文件中添加以下代码实现的:
127.0.0.1 localhost |
本地主机名也可以由 DNS 服务器解析,但这一主机名的解析请求,应在本地处理,而非发送到远程服务器。此地址块中的任何地址都将环回到本地主机中。此地址块中的任何地址都绝不会出现在任何网络中。
环回地址:所有发往该类地址的数据包都应该被 loop back。任何发往环回地址的数据包,其处理都在 TCP/IP 协议叠的链路层中实现的。这些数据包不会交由网卡(NIC)或者设备驱动程序处理,既不应在计算机系统以外出现,也不可经路由器转发。
环回地址主要用来做回环测试,通过使用ping 127.0.0.1 测试某台机器上的网络设备,操作系统或者TCP/IP实现是否工作正常。
任何地址 0.0.0.0
0.0.0.0 不能ping通。0.0.0.0就是任何地址IP_ADDR_ANY,任何地址的意思就是包括环回地址。
任何地址IP_ADDR_ANY的意思也就是,不管主机有多少个网口,多少个IP,如果监听本机的0.0.0.0上的端口,就等于监听机器上的所有IP端口。数据报的目的地址只要是机器上的一个IP地址,就能被接受。
总结
- 对于只进行单机测试,一般只需要监听 127.0.0.1
- 如果需要外部访问,需要监听0.0.0.0(一般默认都是0.0.0.0)