【问题标题】:How to represent an unspecified IPv4 address?如何表示未指定的 IPv4 地址?
【发布时间】:2019-08-28 14:41:02
【问题描述】:

我正在开发一个用 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吗?我是否可以将此地址用于我的目的,或者这在网络中是否具有不同的语义含义?

【问题讨论】:

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


    【解决方案1】:

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

    IANA reservation0.0.0.0/8 引用 RFC 1122 并带有描述“此网络上的此主机”,这与您的应用程序中的使用非常匹配。

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

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

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 2011-06-24
      • 1970-01-01
      • 2011-10-03
      • 2013-05-13
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 2022-02-22
      相关资源
      最近更新 更多