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

时间:2019-04-07 07:31:18

标签: ip-address ipv6 ipv4 reserved-ip-addresses

我正在开发用Node.js编写的分布式应用程序,其中面向公众的服务器会不时通过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地址。到目前为止,效果很好。

现在,其中一台非面向公众的服务器也能够发送消息,但是它并不能通过HTTP传输。相反,它通过消息队列发送消息(在我的情况下为RabbitMQ,但这与此处无关)。面向公众的服务器使用此队列作为消息的第二个传入通道。

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

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

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

现在的问题是:IPv4中的等效项是什么?是0.0.0.0吗?我可以将此地址用于我的目的,还是在网络上在语义上有不同的含义?

1 个答案:

答案 0 :(得分:2)

我认为为此目的使用IPv4地址0.0.0.0完全可以。

0.0.0.0/8的{​​{3}}引用了IANA reservation,其描述为“此网络上的主机”,与应用程序中的用法非常匹配。

另外,RFC 1122,例如尚无地址的主机将其作为DHCP协议中的源地址,或作为服务器进程的通配符地址,表示“在所有本地IPv4源地址上运行”。

可以找到一个address 0.0.0.0 has various similar uses问题:“ 127.0.0.1和0.0.0.0有什么区别?”在超级用户上。