127.0.0.1 和 0.0.0.0 有什么区别?

已发表: 2022-01-29

我们大多数人都听说过“127.0.0.1 和 0.0.0.0”,但可能没有过多考虑它们,但如果两者实际上似乎都指向同一个位置,那么两者之间的实际区别是什么? 今天的超级用户问答帖子有助于为困惑的读者澄清问题。

今天的问答环节由 SuperUser 提供——Stack Exchange 的一个分支,一个由社区驱动的问答网站分组。

照片由凯特·加德纳 (Flickr) 提供。

问题

超级用户 Sagnik Sarkar 想知道 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 有什么区别呢?

127.0.0.1 和 0.0.0.0 有什么区别?

答案

超级用户贡献者 DavidPostill 为我们提供了答案:

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) 地址,也称为localhost 。 该地址用于与最终用户使用的同一台机器或计算机建立 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 保留、环回和私有地址

有关更多信息,请参阅询问 Ubuntu问题:什么是环回设备以及如何使用它?

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 数据包时。
  • 当通过 DHCP 的地址请求失败时,主机分配给自己的地址,前提是主机的 IP 堆栈支持这一点。 这种用法已被现代操作系统中的 APIPA 机制所取代。
  • 一种完全指定任何 IPv4 主机的方法。 指定默认路由时以这种方式使用它。
  • 一种明确指定目标不可用的方法。 来源: 127.0.0.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 中的参数,并进入请求状态。 客户端可能会收到多个 DHCPOFFER 消息,每个 DHCP 服务器收到一个原始 DHCPDISCOVER 消息。 客户端选择一个 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 命令配置最后的网关


有什么要补充的吗? 在评论中关闭声音。 想要阅读其他精通技术的 Stack Exchange 用户的更多答案? 在此处查看完整的讨论主题。