IP地址0.0.0.0和127.0.0.1有什么区别?

我知道127.0.0.1〜127.255.255.254是大多数现代操作系统的环回IP地址,这些IP地址可以用来指我们自己的电脑。

但是什么是0.0.0.0? 它似乎也是指本地计算机,那有什么区别

而且,能否为我解释下面的IP连接:

netstat -an输出的截图

    唯一的不是说“所有地址都应该有访问权限” – 这是在你的防火墙和/或服务器软件和/或其他安全层(如tcpwrappers)中完成的。

    在本文中,0.0.0.0表示“本地机器上的所有IP地址”(实际上可能是“本地机器上的所有IPv4地址”)。 所以,如果你的web服务器有两个IP地址192.168.1.1和10.1.2.1,并且你允许apache这样的web服务器守护进程在0.0.0.0上监听,那么这两个IP都是可以访问的。 但仅限于可以联系这些IP和Web端口的内容。

    请注意,在不同的上下文(路由)0.0.0.0通常意味着默认路由(到“互联网的其余部分,除了本地networking中的路由等”的路由)。

    当服务在0.0.0.0上侦听时,这意味着服务正在侦听所有configuration的networking接口,当在127.0.0.1上侦听时,服务仅绑定到回送接口(仅在本地机器上可用)

    IP地址0.0.0.0可以有非常不同的含义,具体取决于它使用的位置。

    • 它不是一个有效的地址给予一个实际的networking接口,以及任何其他地址在0.0.0.0/8子网(即任何地址从0.开始)。
    • 它不能被用作任何IP数据包的源地址,除非这种情况发生在计算机仍然不知道自己的IP地址并且试图获取一个(经典示例:DHCP)时。
    • 如果在路由表中使用,则标识默认网关; 到0.0.0.0的路由是默认路由,也就是当目的地址没有更多特定路由时使用的路由。
    • 最后,当在netstat命令的输出(这是你所要求的)的输出中看到时,这意味着给定的套接字正在监听计算机具有的所有可用的IP地址; 当一台计算机有多个IP地址时,一个套接字只能绑定到一个特定的地址和端口对,或者一个端口和所有的地址; 如果您在那里看到IP地址,则意味着套接字只在该端口和该特定地址上进行侦听; 如果您看到0.0.0.0 ,则意味着它正在侦听机器所有地址上的端口,包括环回1( 127.0.0.1 )。

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

    0.0.0.0:

    从RFC1122 ,第3.1.2.3节:

    我们现在总结A类,B类和C类IP地址的重要特殊情况,使用下列符号表示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. 

    就这样,“这个networking上的这个主机”……正如Lee B的回答所说,这意味着你的主机上所有可用的IP地址。 在0.0.0.0上托pipe服务将在每个可寻址接口上自动托pipe该服务。

    127.0.0.1:

    从RFC5735 :

    127.0.0.0/8 – 该块被分配用作互联网主机回送地址。 由更高级别的协议发送到该块内任何地址的数据报循环回到主机内部。 这通常只使用127.0.0.1/32进行环回。 如[RFC1122]第3.2.1.3节所述,整个127.0.0.0/8块中的地址不会合法地出现在任何地方的任何networking上。

    0.0.0.0和回送地址127.0.0.1之间的区别在于,回送地址被devise成允许主机本身内的全functionIP接口,而不pipenetworking设置的其余部分(如果有的话)是什么样的。 任何发送到回环设备的stream量都会立即收到。 环绕networking并不是指“你的主机”,而更像是你的主机上有一个微型网段,设备,进程和套接字,可以打开和连接。

    简而言之,在0.0.0.0上进行监听意味着从任何有networking访问权限的计算机,例如从这台计算机,从本地networking或互联网进行监听,而在127.0.0.1上监听意味着只能从这台计算机