我知道127.0.0.1〜127.255.255.254是大多数现代操作系统的环回IP地址,这些IP地址可用于引用我们自己的计算机。

0.0.0.0是什么?看来它也指本地计算机,所以有什么区别?

而且,您能为我解释以下IP连接吗:


/>

评论

也请看一下这个问题,因为它提供了有关0.0.0.0是(和不是)0.0.0.0的详细信息:serverfault.com/questions/228629/…

现代操作系统将使用:: 1作为回送地址。

#1 楼

唯一的是,您并不是说“所有地址都应该具有访问权限”,而是在防火墙和/或服务器软件和/或其他安全层(例如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通常表示默认路由(到“其余”的路由除了本地网络中的路由等)。

评论


因此,您的意思是当Webserver的套接字侦听0.0.0.0时,其套接字已绑定到任何可用地址吗?

–onmyway133
13年7月17日在3:02

0.0.0.0表示仅在带有前缀/ 0(或网络掩码0.0.0.0)的情况下使用的默认路由

– minmaxavg
2015年12月11日12:28



需要注意的是:如果某个进程在0.0.0.0上进行侦听,则所有机器的网络接口的IP地址(包括环回接口的当前配置地址)都可以访问该进程。但是,如果该进程仅侦听回送地址的端口,例如127.0.0.1,然后只能通过完全针对127.0.0.1:来从同一台计算机访问该进程。试试这个python工具玩!

–Gab是好人
16-12-12在18:04



#2 楼

当服务在0.0.0.0上侦听时,这意味着该服务在所有配置的网络接口上侦听,而在127.0.0.1上侦听时,该服务仅绑定到环回接口(仅在本地计算机上可用)

#3 楼

IP地址0.0.0.0的含义可能完全不同,具体取决于使用位置。


它不是有效的地址,不能与0.0中的任何其他地址一起提供给实际的网络接口。 .0.0 / 8子网(即以0.开头的任何地址)。
它不能用作任何IP数据包上的源地址,除非在计算机仍不知道其自身IP地址且尝试获取一个(典型示例:DHCP)。
如果在路由表中使用,它将标识默认网关;到0.0.0.0的路由是默认路由,即当没有更特定的路由可用于目标地址时使用的路由。
最后,当在netstat命令的输出中看到时(这是您要求的) for),表示给定的套接字正在监听计算机拥有的所有可用IP地址;当一台计算机具有多个IP地址时,套接字只能绑定到特定的地址和端口对,或者绑定到端口和所有地址;如果您在此处看到IP地址,则表示套接字仅在该端口和该特定地址上侦听;如果看到0.0.0.0,则表明它正在侦听计算机所有地址上的该端口,包括回送端口(127.0.0.1)。


评论


如果卷曲0.0.0.0是什么意思? curl实际上是通过可用接口联系并发送请求吗?如何知道哪个接口是正确的?我了解服务器如何在所有接口上进行侦听,但是客户端请求所有接口的机制是什么,例如当我执行curl 0.0.0.0或curl [::]时。

– CMCDragonkai
2014年6月11日,9:05

操作系统很可能会阻止您执行此操作,因为从网络角度来看,这不仅仅具有道理。在Windows系统上尝试ping 0.0.0.0会导致错误消息。

–马西莫
2014年6月11日下午13:01

curl 0.0.0.0导致在Arch Linux上拒绝连接。另一方面,ping 0.0.0.0似乎是ping 127.0.0.1的别名,可以正常工作。

–马特西亚斯·布劳恩(Matthias Braun)
17年8月11日在9:53

@MatthiasBraun拒绝连接可能是因为curl默认情况下尝试连接到端口80 / tcp。尝试使用nmap -sV localhost查找打开的端口,然后查找例如631 / tcp:curl 0.0.0.0:631。

– Pablo A
18年3月2日在16:00

#4 楼

Lee B的答案是正确的,但是如果您有兴趣的话,这里有一些相关的RFC。


来自RFC1122,第3.1.2.3节:


现在,我们使用IP的以下表示法来概括A,B,
和C类IP地址的重要特殊情况:

            { <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.



就这样,“此网络上的此主机” ...作为Lee B的回答指出,这将转换为主机上所有可用的IP地址。在0.0.0.0上托管服务将自动在每个可寻址接口上托管该服务。

127.0.0.1:

来自RFC5735:


127.0.0.0/8-该块被分配用作Internet主机回送地址。由高层协议发送到该块内任意位置的地址的数据报将在主机内部循环。通常仅使用127.0.0.1/32进行环回即可实现。如[RFC1122]第3.2.1.3节中所述,整个127.0.0.0/8块中的地址不会合法出现在任何地方的任何网络上。


0.0.0.0与环回地址127.0.0.1的意思是,环回地址旨在允许主机本身内具有完全功能的IP接口,而不管其余网络设置(如果有)是什么样子。发送到回送设备的所有流量将立即在其上接收。环回网络不是指的是您自己的主机,而是更多,更像您的主机中有一个微型网段,可以连接设备,进程和套接字,并可以打开和连接。

#5 楼

简单来说:在0.0.0.0上进行侦听意味着可以从可以访问此计算机的任何位置进行侦听,例如从该计算机,本地网络或Internet进行侦听,而在127.0.0.1上进行侦听意味着仅从该计算机上进行侦听