127.0.0.1 和 0.0.0.0 有什么区别?

127.0.0.1 和 0.0.0.0 有什么区别?

我理解 127.0.0.1 指向localhost,0.0.0.0 也是如此(如果我错了请纠正我)。那么,127.0.0.1 和 0.0.0.0 之间有什么区别?

答案1

127.0.0.1 和 0.0.0.0 有什么区别?

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

  • 0.0.0.0通常用作不可路由的元地址,用于指定无效、未知或不适用的目标(无特定地址占位符)。然而,这是非标准的,可能与RFC 1122

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

在服务器上下文中,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 连接。

对于支持 IPv6 寻址的计算机,使用 ::1 内涵定义了相同的约定。使用地址 127.0.0.1 建立连接是最常见的做法;但是,可以使用 127 范围内的任何 IP 地址。.* 将以相同或类似的方式运行。环回构造使能够联网的计算机或设备能够验证或建立机器上的 IP 堆栈。

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


特殊地址

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

来源:网络号码


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

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

来源:IP 保留地址、环回地址和私有地址

有关详细信息,请参阅https://askubuntu.com问题什么是环回设备以及如何使用它?为什么环回 IP 地址从 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 通常表示默认路由,即通向互联网“其余部分”而不是本地网络某处的路由。

用途包括:

  • 主机在尚未分配地址时声称属于自己的地址。例如,在使用 DHCP 时发送初始 DHCPDISCOVER 数据包时。
  • 当通过 DHCP 发出的地址请求失败时,主机会分配给自己的地址(前提是主机的 IP 堆栈支持此功能)。在现代操作系统中,此用法已被 APIPA 机制取代。
  • 指定“任何 IPv4 主机”的一种方法。在指定默认路由时使用此方法。
  • 明确指定目标不可用的方法。
  • 一种指定“任何 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 地址,因此源 IP 地址为 0.0.0.0。如果此本地子网上存在 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 交换机或企业网络中的 DHCP 故障


默认路由

本文档介绍如何配置默认路由或最后选用网关。这些 IP 命令用于:

  • ip 默认网关

  • 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 命令配置最后手段网关

答案2

他们不一样。

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 通常表示默认路由,即通向互联网“其余部分”而不是本地网络某处的路由。

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

答案3

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

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

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

您无法向 0.0.0.0 发送数据或主动打开与 0.0.0.0 的 TCP 连接,因为那里什么都没有;0.0.0.0 甚至不是一个无法访问或不可路由的地址,在需要地址的上下文中它是没有意义的

你可以在可以选择提供地址的情况下使用 joker 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 都是可以接受的(符合要求的 FTP 服务器在主动模式下使用 0.0.0.0:20 进行数据连接)。

TCP/IP 子系统将为 TCP 连接您这边选择地址如果您不选择一个,则使用基于目标地址的路由表:本地 TCP 套接字地址将是与目标地址对应的路由关联的本地地址。

我之前提到过 shell “元字符” *,但将元字符与字符*foo*(如任何包含“foo”的文件名)相结合的能力并不存在于 IP 地址限制中,要么全部接受,要么全部不接受:要么单个 IP 地址被视为可接受,要么所有地址都可接受。逻辑确实如此不是规定必须这样。你可以用更丰富的约束语言来扩展接口。

精确:

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

备注:具有虚拟化(仿真、硬件虚拟化、半虚拟化,无论您能想到的……)的计算机具有多个独立的 IP 堆栈。

答案4

以上帖子中已经澄清了该主题,但需要补充的是 - 这个 0.0.0.0 特殊地址通常仅当您引用服务器端的代码时才有用。

如果您在客户端(例如在浏览器中),当您输入 0.0.0.0 地址时它不会执行任何操作(您将收到站点无法访问类型的错误消息)

从服务器的角度来看,当您编写某个(服务器端)应用程序并希望它监听端口 8000(例如)时。现在,如果您的系统有多个物理 NIC(为了简单起见,我们在这里不讨论虚拟机接口)并且您希望您的应用程序在所有这些 IP 地址上监听端口 8000,那么您可以在服务器端代码中将地址指定为 0.0.0.0(前提是您使用的框架支持它)。基本上,0.0.0.0 表示“监听所有网络接口”。偶尔(很少)代码可能需要根据流量通过的接口而表现不同,因此在这种情况下需要注意这一点。

相关内容