127.0.0.1 和 0.0.0.0 有什么区别?

Sag*_*kar 303 networking ip-address localhost ipv4

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

Dav*_*ill 276

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 建立连接是最常见的做法;但是,使用 127. 范围内的任何 IP 地址.* 将以相同或相似的方式运行。环回结构为能够联网的计算机或设备提供了在机器上验证或建立 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 通常表示默认路由,即通向互联网“其余部分”而不是本地网络某处的路由。

用途包括:

  • 主机在尚未分配地址时声明为自己的地址。比如在使用DHCP时发送初始的DHCPDISCOVER数据包。
  • 当通过 DHCP 请求地址失败时主机分配给自己的地址,前提是主机的 IP 堆栈支持此操作。这种用法已被现代操作系统中的 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 服务器将听到广播并以 DHCPOFFER 消息响应。如果本地子网上不存在 DHCP 服务器,则该本地子网上必须有 DHCP/BootP 中继代理将 DHCPDISCOVER 消息转发到包含 DHCP 服务器的子网。

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

...

客户端收到 DHCPOFFER 后,以 DHCPREQUEST 消息响应,表明其意图接受 DHCPOFFER 中的参数,并进入 Requesting 状态。客户端可能会收到多个 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 命令配置最后的网关

  • _在服务器上下文中,0.0.0.0 表示“本地机器上的所有 IPv4 地址”。如果主机有两个 IP 地址,192.168.1.1 和 10.1.2.1,并且主机上运行的服务器侦听 0.0.0.0,则可以在这两个 IP 上访问它。_ - 为我做到了 (9认同)

小智 120

她们不一样。

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

  • @KronoS 我认为广播类似于`255.255.255.255`(或者更现实地类似于本地网络的`192.168.1.255`) (8认同)

cur*_*guy 17

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 套接字地址将是与相应路由关联的本地地址到目的地址。

我之前提到过 shell "meta-character" *,但是将元字符与字符*foo*(包含“foo”的任何文件名)组合在一起的能力不存在 IP 地址约束,要么全有要么全无:要么是单个 IP 地址被视为可接受或所有地址均可接受。逻辑并没有规定它必须是这样。您可以使用更丰富的约束语言扩展接口。

精确:

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

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

  • @whoKnows 否:**127.xyz 对于任何 xy z 都属于这台计算机。**“localhost”只是 127.0.0.1 的名称,所以忘记“localhost”。使用 `netstat` 和相关程序的 `-n` 或 `-d` 标志来显示数字地址,而不是名称。**127.0.0.1 和 127.16.23.42 不是同一个 IP 地址。** 所以 127.0.0.1:80 和 127.16.23.42:80 代表不同的 TCP 端点地址,一个地址的网络服务器在另一个地址找不到。 (3认同)

小智 7

通常,您使用绑定地址 0.0.0.0 来允许来自外部网络和来源的连接。许多像 MySQL 这样的服务器通常绑定到 127.0.0.1 只允许环回连接,需要管理员将其更改为 0.0.0.0 以启用外部连接。