我正在开发用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
吗?我可以将此地址用于我的目的,还是在网络上在语义上有不同的含义?
答案 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有什么区别?”在超级用户上。