我正在研究用Node.js编写的分布式应用程序,其中面向公众的服务器不时通过HTTP从客户端接收消息。收到后,消息将转换为以下JSON结构:
{
"message": {
// The actual message's content
},
"metadata": {
"client": {
"ip": "192.168.0.1",
"user": {
"token": {
"sub": "[email protected]"
}
}
}
}
}
由于每个连接都使用OpenID Connect进行身份验证,因此我将客户端发送的令牌添加到元数据部分,以及发送消息的客户端的IP地址。到目前为止,这很有效。
现在,其中一个非面向公众的服务器也能够发送消息,但它没有通过HTTP线路。相反,它通过消息队列发送消息(在我的案例中是RabbitMQ,但这与此无关)。面向公众的服务器使用此队列作为消息的第二个传入通道。
我希望消息具有相同的结构,无论它们是通过HTTP从客户端接收还是通过内部服务器的队列接收。内部服务器有一个令牌,所以这不是问题。当然它可以使用自己的IP地址作为源,但这并没有多大意义。
我想要实现的是提供一个正式的IP地址,但基本上说我是占位符,不要把我当作真实的。
我在IPv6看到有地址块::
的地址::/128
,维基百科称之为unspecified address
。实际上,这几乎听起来像我在寻找,但我不需要它作为IPv6,而是作为IPv4。
现在的问题是:IPv4中的这个相当于什么?是0.0.0.0
?我是否可以将此地址用于我的目的,或者这在网络中具有语义上不同的含义?
我认为将IPv4地址0.0.0.0
用于此目的是完全没问题的。
块IANA reservation的0.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之间有什么区别?”在超级用户身上。