127.0.0.1和0.0.0.0有什么区别?


233

我知道127.0.0.1指向localhost,而0.0.0.0也指向(如果我输入错了,请更正我)。那么,127.0.0.1和0.0.0.0有什么区别?


1
您可能对此Chrome Bug跟踪器讨论中有关如何处理0.0.0.0地址输入的内容感兴趣。
杰里米·班克斯

6
在大多数服务器配置中,0.0.0.0表示监听所有地址!这将使您的服务器在Internet上可用。如果您在没有任何安全性的情况下对某些本地服务器执行此操作(那只是在本地主机上监听,对吗?),这很不好。不要那样做!
2015年

56
从字面上回答您的问题,区别是2130706433
Shaz 2015年

2
@桅杆噢,您是设置完全不安全的系统的人之一,因为防火墙可以修复所有问题?通常,可以使用shodan.io找到该系统:3这种思维方式的下一个层次是“我们完全可以使用5年以上的WordPress安装,我们有了WAF”。我不建议任何人走这条路!
2015年

2
@Shaz我想表达您的意见,但由于目前是42岁,所以我无法让自己去做...
Jenny D

Answers:


220

127.0.0.1和0.0.0.0有什么区别?

  • 127.0.0.1 是回送地址(也称为localhost)。

  • 0.0.0.0 是不可路由的元地址,用于指定无效,未知或不适用的目标(无特定地址的占位符)。

    在路由条目的上下文中,它通常表示默认路由。

    在服务器的上下文中,0.0.0.0表示“本地计算机上的所有IPv4地址”。如果主机有两个IP地址192.168.1.1和10.1.2.1,并且主机上运行的服务器侦听0.0.0.0,则这两个IP都可以访问。


什么是IP地址127.0.0.1?

127.0.0.1是回送Internet协议(IP)地址,也称为“本地主机”。该地址用于建立与最终用户所使用的同一台计算机或计算机的IP连接。

对于使用:: 1的含义支持IPv6寻址的计算机,定义了相同的约定。最常见的做法是使用地址127.0.0.1建立连接。但是,使用的IP地址范围为127 。*将以相同或相似的方式起作用。环回结构使具有联网能力的计算机或设备能够验证或建立计算机上的IP堆栈。

来源:127.0.0.1 –它的用途是什么,为什么重要?


特殊地址

A类网络号127被分配了“回送”功能,也就是说,由更高级别的协议发送到网络127地址的数据报应在主机内部回送。“发送到”网络127地址的数据报不应出现在任何地方的任何网络上。

资料来源:网络号码


如果是整个A类,那么最后三个八位位组的其他任意值的意义是什么?

回送范围的目的是测试主机上的TCP / IP协议实现。由于较低的层是短路的,因此发送到回送地址可以有效地测试较高的层(IP或更高),而不会在较低的层出现问题。127.0.0.1是最常用于测试目的的地址。

来源:IP保留,回送和专用地址

有关更多信息,请参见https://askubuntu.com。问题什么是回送设备,如何使用?为什么是环回地址127.0.0.1从到127.255.255.254?


什么是IP地址0.0.0.0?

“ 0.0.0.0”是有效的地址语法。因此,只要期望使用传统的点分十进制表示法的IP地址,它就应解析为有效。一旦解析并转换为可行的数字形式,则其值确定接下来将发生什么。

全零值确实具有特殊含义。因此它是“有效的”,但其含义可能不适用于特定情况(因此被视为无效)。它基本上是“没有特定地址”的占位符。对于诸如网络连接的地址绑定之类的事情,结果可能是为该连接分配了适当的接口地址。如果使用它来配置接口,则可以从接口中删除地址。取决于使用的上下文来确定“没有特定地址”的实际作用。

在路由条目的上下文中,通常表示默认路由。这是由于更多的地址掩码(选择要比较的位)而发生的。掩码“ 0.0.0.0”不会选择任何位,因此比较将始终成功。因此,当配置了这样的路由时,总是有地方可以发送数据包(如果配置了有效的目的地)。

在某些情况下,仅“ 0”也将起作用并具有相同的效果。但这不能保证。“ 0.0.0.0”格式是说“无特定地址”(在IPv6中为“ :: 0”或仅是“ ::”)的标准方式。

来源:IP地址0.0.0.0是什么意思


在Internet协议版本4中,地址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通常表示默认路由,即通向Internet“其余部分”而不是本地网络中某处的路由。

用途包括:

  • 尚未分配地址的主机称其为自己的地址。例如在使用DHCP时发送初始DHCPDISCOVER数据包时。
  • 如果主机的IP堆栈支持通过DHCP的地址请求失败,则主机为自己分配的地址。在现代操作系统中,此用法已被APIPA机制取代。
  • 一种指定“根本没有IPv4主机”的方法。在指定默认路由时以这种方式使用它。
  • 一种明确指定目标不可用的方法。1个
  • 一种指定“根本没有IPv4地址”的方法。在配置服务器时(即,绑定侦听套接字时)以这种方式使用它。TCP程序员将其称为INADDR_ANY。(bind(2)绑定到地址,而不是接口。)

在IPv6中,全零地址写为“ ::”。

来源:0.0.0.0


DHCP发现/请求

客户端第一次启动时,据说它处于初始化状态,并通过用户数据报协议(UDP)端口67(BootP服务器)在其本地物理子网上发送DHCPDISCOVER消息。由于客户端无法知道其所属的子网,因此DHCPDISCOVER是广播的所有子网(目标IP地址为255.255.255.255),源IP地址为0.0.0.0。源IP地址是0.0.0.0,因为客户端没有配置的IP地址。如果此本地子网上存在DHCP服务器,并且该DHCP服务器已配置并正常运行,则DHCP服务器将听到广播并以DHCPOFFER消息进行响应。如果本地子网上不存在DHCP服务器,则此本地子网上必须有DHCP / BootP中继代理,才能将DHCPDISCOVER消息转发到包含DHCP服务器的子网。

此中继代理可以是专用主机(例如,Microsoft Windows Server),也可以是路由器(例如,配置有接口级IP帮助程序语句的Cisco路由器)。

...

客户端收到DHCPOFFER后,它将以DHCPREQUEST消息响应,指示其打算接受DHCPOFFER中的参数,并进入请求状态。客户端可能会收到多条DHCPOFFER消息,每个收到原始DHCPDISCOVER消息的DHCP服务器都会收到一条消息。客户端选择一个DHCPOFFER并仅响应该DHCP服务器,从而隐式拒绝所有其他DHCPOFFER消息。客户端通过使用DHCP服务器的IP地址填充“服务器标识符”选项字段来标识选定的服务器。DHCPREQUEST也是广播,因此所有发送DHCPOFFER的DHCP服务器都将看到DHCPREQUEST,并且每个服务器都将知道其DHCPOFFER是被接受还是被拒绝。客户端所需的任何其他配置选项将包含在DHCPREQUEST消息的选项字段中。即使为客户端提供了IP地址,它也会发送带有源IP地址0.0.0.0的DHCPREQUEST消息。目前,客户端尚未收到确认可以使用IP地址的验证。

...

在客户端和DHCP服务器驻留在同一子网上的客户端获取DHCP地址的客户端-服务器对话

在此处输入图片说明

来源:了解和排除Catalyst Switch或企业网络中的DHCP故障


默认路线

本文档说明了如何配置默认路由或万不得已的网关。这些IP命令用于:

  • ip default-gateway

  • ip默认网络

  • 和IP路由0.0.0.0 0.0.0.0

IP路由0.0.0.0 0.0.0.0

创建到网络0.0.0.0的静态路由0.0.0.0是在路由器上设置万不得已的网关的另一种方法。与ip default-network命令一样,使用到0.0.0.0的静态路由不依赖于任何路由协议。但是,必须在路由器上启用IP路由。

注意:IGRP无法理解到0.0.0.0的路由。因此,它不能传播使用ip route 0.0.0.0 0.0.0.0命令创建的默认路由。使用ip default-network命令使IGRP传播默认路由。

来源:使用IP命令配置不得已的网关


3
在服务器的上下文中,0.0.0.0表示“本地计算机上的所有IPv4地址”。如果主机有两个IP地址192.168.1.1和10.1.2.1,并且主机上运行的服务器侦听0.0.0.0,则这两个IP都可以访问。-为我做到了
Rafael Eyng

112

她们不一样。

127.0.0.1 是127/8网络的一部分,该网络保留并指向同一台计算机。

0.0.0.0 是一个特殊的IP地址,具体取决于上下文。

在Internet协议版本4中,地址0.0.0.0是一个不可路由的元地址,用于指定无效,未知或不适用的目标。给原本无效的数据赋予特殊含义是带内信令的一种应用。

当您查看netstat并看到本地地址侦听为0.0.0.0时,您可能会将0.0.0.0误认为127.0.0.1,但这是使用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通常表示默认路由,即通向Internet“其余部分”而不是本地网络中某处的路由。

https://zh.wikipedia.org/wiki/0.0.0.0


0.0.0.0有时也表示广播,这意味着对网络上的所有计算机。
詹姆斯·默兹

8
@KronoS我以为广播是类似的东西255.255.255.255(或更实际192.168.1.255的说是本地网络的东西)
Nick T

1
@NickT嗯,您是正确的A special definition exists for the IP broadcast address 255.255.255.255. It is the broadcast address of the zero network or 0.0.0.0, which in Internet Protocol standards stands for this network, i.e. the local network. Transmission to this address is limited by definition, in that it is never forwarded by the routers connecting the local network to other networks.
James Mertz

@KronoS您使广播地址与回送混淆。环回是0.0.0.0,如上所述,它监听所有本地地址。广播(以一种简单的方式)是要“广播”到该网络中所有地址的255个网络。
Desorder

这是不完整的-许多操作系统实际上允许您连接到 0.0.0.0,然后将其表现为回送地址。
grawity

16

127.0.0.1是本地计算机的地址之一,但是任何地址127.xyz也是计算机的另一个地址(称为“回送地址”),除了127.0.0.0(回送子网)和127.255.255.255(广播的地址)回送子网)。

127.xyz的意思是“这里”。

0.0.0.0完全不同:0.0.0.0不是任何东西的地址,它是小丑,就像*在shell中一样。

您不能将数据发送到0.0.0.0,也不能主动打开与0.0.0.0的TCP连接,因为那里什么也没有。0.0.0.0甚至不是一个不可到达或不可路由的地址,在需要该地址的情况下它毫无意义

您可以在可以选择提供地址的情况下使用小丑0.0.0.0,表示我不在乎

例如,当您主动打开与某个TCP服务器的TCP连接(通过被动TCP打开创建TCP服务器)时,您需要指定TCP服务器的地址(IP和端口号),并且可以选择选择本地地址。(因为您的套接字不是服务器套接字,所以没有人可以打开与它的连接,并且连接一侧的地址通常不是很重要。)

bind系统调用是用来选择一个TCP套接字的本地地址。传递给的数据bind实际上是一组约束:IP地址约束,TCP端口约束。常用的文本表示法是IP:port。0.0.0.0:0表示可以接受任何IP和任何端口,这是空约束。0.0.0.0:20表示本地端口必须为20,任何IP都是可接受的(0.0.0.0:20用于使FTP服务器在活动模式下进行数据连接)。

如果未选择,则TCP / IP子系统将使用路由表根据目标地址为您的TCP连接端选择地址:本地TCP套接字地址将是与相应路由相关的本地地址到目标地址。

我之前曾提到外壳“元字符” *,但是结合元字符与诸如*foo*(任何包含“ foo”的文件名)之类的字符的功能并不具有IP地址限制,它全有还是全无:一个IP地址被视为可接受或所有地址均可接受。逻辑并不能决定它必须是这样。您可以使用更丰富的约束语言来扩展接口。

精确:

句子127.xyz的意思是“这里”并不意味着所有这些地址都相同。它们实际上代表本地“计算机”内部,本地IP堆栈内部的不同“位置”(套接字地址)。

备注:具有虚拟化(仿真,硬件虚拟化,半虚拟化,随便可以想到...)的计算机都具有多个独立的IP堆栈。


当我在浏览器中输入以127(例如127.16.23.42)开头的随机地址时,它没有连接到本地主机。
whoKnows 2015年

@whoKnows当然。本地主机是127.0.0.1,不是127.16.23.42。
curiousguy

我懂了。因此127.0.0.1表示本地主机,但是127.xyz 可能表示本地计算机(如果以这种方式设置)?
whoKnows 2015年

2
@whoKnows编号:127.xyz属于任何xy z的计算机。“ localhost”只是127.0.0.1的名称,因此请忘记“ localhost”。使用和相关程序的-n-d标志netstat来显示数字地址,而不是名称。127.0.0.1和127.16.23.42是不同的IP地址。因此127.0.0.1:80和127.16.23.42:80代表不同的TCP端点地址,一个地址处的Web服务器无法在另一个地址处找到。
curiousguy 2015年

6

通常,您使用bind-address 0.0.0.0允许来自外部网络和源的连接。许多服务器(例如MySQL)通常绑定到127.0.0.1,仅允许回送连接,要求管理员将其更改为0.0.0.0以启用外部连接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.