我最近非常惊讶地发现0.0.0.0 是一个有效的 IP 地址,并且实际上具有定义的“含义”和用途。
IANA 分配 0.0.0.0/32表示“此网络上的主机”,如RFC 1122 第 3.2.1.3 节所定义。虽然 RFC 1122 规定不得将其作为网络上的目的地在 IP 数据包中发送,但它没有定义如何在主机内部解释该地址。
除了... RFC 1122 将其命名为“此网络上的此主机”,暗示与“localhost”的含义非常相似。
在 Linux 上,尝试连接到 0.0.0.0 会导致连接到 localhost(假设有东西正在侦听)。这似乎与 RFC 1122 名称一致。但是我没有看到它在标准中定义(我什至不确定哪个标准会涵盖它,因为它是操作系统内部的)。
所以我的问题是:Linux对connect()0.0.0.0的解释与其他操作系统一致吗?它们在众所周知的操作系统内核(Windows / UNIX / ...)中是否有任何显着的例外。
我对此特别感兴趣,因为 DNS 服务器“错误地”使用 0.0.0.0 作为黑洞,导致与本地主机的虚假连接。
不,一个很容易检查的操作系统是 Windows,它将 0.0.0.0 视为无效的连接地址。(Windows 通常对地址有效性非常严格,例如,您也不能在 Windows 上使用 240.0.0.0/4。)
(另一方面,大多数 BSD 可能会像 Linux 一样处理这个问题,因为 Linux 源代码实际上指出 Linux 的行为是为了模仿 BSD。)
| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |