在这种情况下,0.0.0.0 表示“本地计算机上的所有 IP 地址”(实际上可能是“本地计算机上的所有 IPv4 地址”)。因此,如果您的网络服务器机器有两个 IP 地址,192.168.1.1 和 10.1.2.1,并且您允许像 apache 这样的网络服务器守护进程在 0.0.0.0 上侦听,那么这两个 IP 地址都可以访问它。但仅限于可以联系这些 IP 地址和 Web 端口的对象。
最后,当在netstat命令的输出中看到时(这是您所要求的),这意味着给定的套接字正在侦听计算机拥有的所有可用 IP 地址;当一台计算机有多个 IP 地址时,一个套接字只能绑定到一个特定的地址和端口对,或者绑定到一个端口和所有地址;如果您在那里看到 IP 地址,则表示套接字仅在该端口和该特定地址上侦听;如果您看到0.0.0.0,则表示它正在侦听机器所有地址上的该端口,包括环回一 ( 127.0.0.1)。
{ <Network-number>, <Host-number> }
or
{ <Network-number>, <Subnet-number>, <Host-number> }
...
(a) { 0, 0 }
This host on this network. MUST NOT be sent, except as
a source address as part of an initialization procedure
by which the host learns its own IP address.
唯一的问题是您并不是说“所有地址都应该具有访问权限”——这是在您的防火墙和/或服务器软件和/或其他安全层(如 tcpwrappers)中完成的。
在这种情况下,0.0.0.0 表示“本地计算机上的所有 IP 地址”(实际上可能是“本地计算机上的所有 IPv4 地址”)。因此,如果您的网络服务器机器有两个 IP 地址,192.168.1.1 和 10.1.2.1,并且您允许像 apache 这样的网络服务器守护进程在 0.0.0.0 上侦听,那么这两个 IP 地址都可以访问它。但仅限于可以联系这些 IP 地址和 Web 端口的对象。
请注意,在不同的上下文(路由)中,0.0.0.0 通常表示默认路由(到“其余”互联网的路由,除了本地网络中的路由等)。
当服务在 0.0.0.0 上侦听时,这意味着该服务正在侦听所有配置的网络接口,当在 127.0.0.1 上侦听时,服务仅绑定到环回接口(仅在本地计算机上可用)
IP 地址
0.0.0.0
可能具有非常不同的含义,具体取决于它的使用位置。0.
。netstat
命令的输出中看到时(这是您所要求的),这意味着给定的套接字正在侦听计算机拥有的所有可用 IP 地址;当一台计算机有多个 IP 地址时,一个套接字只能绑定到一个特定的地址和端口对,或者绑定到一个端口和所有地址;如果您在那里看到 IP 地址,则表示套接字仅在该端口和该特定地址上侦听;如果您看到0.0.0.0
,则表示它正在侦听机器所有地址上的该端口,包括环回一 (127.0.0.1
)。Lee B 的回答是正确的,但如果您有兴趣,这里有一些相关的 RFC。
0.0.0.0:
来自RFC1122,第 3.1.2.3 节:
就是这样,“这个网络上的这个主机”......正如Lee B的回答所说,这会转化为您主机上的所有可用IP地址。在 0.0.0.0 上托管服务将自动在每个可寻址接口上托管该服务。
127.0.0.1:
来自RFC5735:
0.0.0.0 和环回地址 127.0.0.1 之间的区别在于,环回地址旨在允许主机本身内的功能齐全的 IP 接口,而不管网络设置的其余部分(如果有的话)是什么样子。发送到环回设备的任何流量都会立即在其上接收。环回网络“引用”您自己的主机并没有太多……更像是您的主机中有一个迷你网段,设备、进程和套接字可以打开和连接。
简单来说:在 0.0.0.0 上侦听意味着从可以通过网络访问这台计算机的任何地方进行侦听,例如,从这台计算机、本地网络或 Internet 上侦听,而在 127.0.0.1 上侦听意味着只从这台计算机上侦听