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 用户的更多答案? 在此处查看完整的讨论主题。