如何表示未指定的 IPv4 地址?

How to represent an unspecified IPv4 address?

我正在开发一个用 Node.js 编写的分布式应用程序,其中面向 public 的服务器不时通过 HTTP 从客户端接收消息。收到后,消息将变成以下 JSON 结构:

{
  "message": {
    // The actual message's content
  },
  "metadata": {
    "client": {
      "ip": "192.168.0.1",
      "user": {
        "token": {
          "sub": "jane.doe@example.com"
        }
      }
    }
  }
}

由于每个连接都使用 OpenID Connect 进行身份验证,因此我将客户端发送的令牌以及发送消息的客户端的 IP 地址添加到元数据部分。到目前为止,效果很好。

现在,其中一个不面向 public 的服务器也能够发送消息,但它不会为此通过 HTTP 线路。相反,它通过消息队列发送消息(在我的例子中是 RabbitMQ,但这与这里无关)。 public 面向服务器使用此队列作为消息的第二个传入通道。

我希望消息具有相同的结构,无论它们是通过 HTTP 从客户端接收的还是通过队列从内部服务器接收的。内部服务器有令牌,所以这不是问题。当然它可以使用自己的 IP 地址作为来源,但这并没有太大意义。

我想实现的是提供一个形式上正确的IP地址,但基本上是说我是一个占位符,不要以为我是真的.

我看到 IPv6 中有来自地址块 ::/128 的地址 ::,维基百科称之为 unspecified address。实际上,这听起来很像我正在寻找的东西,但我不需要它作为 IPv6,而是作为 IPv4。

现在的问题是:这在 IPv4 中的等价物是什么?是0.0.0.0吗?我可以将这个地址用于我的目的吗,或者这在网络中有不同的语义含义吗?

我认为为此目的使用 IPv4 地址 0.0.0.0 完全没问题。

IANA reservation for the block 0.0.0.0/8 cites RFC 1122 带有描述“此网络上的此主机”,与您的应用程序中的使用非常匹配。

此外,address 0.0.0.0 has various similar uses,例如作为 DHCP 协议中还没有地址的主机的源地址,或作为服务器进程的通配符地址,意思是“运行 在所有本地 IPv4 源地址上。”

A more detailed answer 可以找到问题“127.0.0.1 和 0.0.0.0 之间有什么区别?”在超级用户上。