我一直看到0.0.0.1
Nginx 配置和 OpenResty 代码中使用了 IP 地址,但我不知道它是什么。
谷歌搜索结果显示这是一个有效且保留的地址,但我找不到如何使用它的线索。有人能帮我了解更多相关信息吗?
答案1
我认为您不能为主机分配任何 0.0.0.0/8 地址。
0.0.0.0/8 网络由 IANA 按照以下规定保留:RCF 5735。其“目前使用”的理由是:
"This" network
。
我确实找到了IANA IPv4 专用地址注册表页面解释了特殊地址的使用。本文档对 0.0.0.0/8 进行了更具体的说明,并指出它适用于"This host on this network"
一些重要的术语
来源
- 一个布尔值,指示当用作在两个设备之间传输的 IP 数据报的源地址时,分配的专用地址块中的地址是否有效。
目的地
- 一个布尔值,指示当用作在两个设备之间传输的 IP 数据报的目标地址时,分配的专用地址块中的地址是否有效。
可转发
- 一个布尔值,指示路由器是否可以转发 IP 数据报,该数据报的目标地址取自外部接口之间分配的专用地址块。
全球可达
- 一个布尔值,指示目标地址来自分配的专用地址块的 IP 数据报是否可以转发到指定的管理域之外。
协议保留
- 布尔值,表示专用地址块是否由 IP 本身保留。如果创建专用地址块的 RFC 要求所有兼容的 IP 实现在处理发往或来自地址块所含地址的数据包时以特殊方式运行,则此值为“TRUE”。
0.0.0.0/8 仅作为地址列出source
,并且是reserved-by-protocol
。它不是destination
、forwardable
或globally reachable
地址。
经过进一步挖掘,RCF 1122和RCF 1700两者都支持这一点。
RCF 1122 states a { 0, <Host-number> } address
此网络上的指定主机。不得发送该地址,除非作为初始化过程的一部分作为源地址,主机通过该初始化过程了解其完整 IP 地址。
RCF 1700 states a { 0, <Host-number> } address
此网络上的指定主机。只能用作源地址。
经过所有这些查找,我仍然不清楚 0.0.0.0/8 地址之一究竟如何使用。据我了解,在计算机获取 IP 地址之前,这些地址之一似乎以某种方式用作源地址。
我猜它也许可用于 ARP 或 DCHP DISCOVERY 请求。即便如此,根据我的经验,DHCP DISCOVERY 的源地址是 0.0.0.0/32
更新:我发现一个例子,其中 0.0.0.1 用于 ARP 请求阿尔卡特朗讯线卡其中它将 0.0.0.1 称为请求的发送者。
这通常用于RAPS(环路自动保护交换)卡、链路聚合/多机箱链路聚合或其他无源硬件。
答案2
在 DHCP 或其前身 BOOTP 出现之前,所有第一个八位字节为零的 IP 地址(表示为0/8
或0.0.0.0/8
或0.0.0.0
到0.255.255.255
)均被保留并指定用于潜在的设备自动配置。RFC 1122 第 3.2.1.3 节指定地址的使用0/8
如下:
此网络上的指定主机。不得发送,除非作为初始化过程的一部分作为源地址,主机通过该过程了解其完整 IP 地址
然而,这个范围之外的唯一实际使用的 IP 地址是0.0.0.0
,其余的 IP 地址一直保留但未被使用。
目前,人们正在努力回收 IPv4 地址空间中未使用、保留或利用不足的部分,这些部分被称为IPv4 单播扩展项目。他们的草案草案-schoen-intarea-单播-0-02涉及0/8
提议取消特殊地位(除外0.0.0.0/32
),并且还记录了该范围的三种已知用途:
- RFC 3338(IPv6 过渡机制)使用 0/8 地址作为合成地址来代表替代 IPv6 地址,但这种做法已被RFC 6535,表明该过渡机制应该切换到RFC 1918私有地址。
- RFC 7453(与 MPLS 相关的 SNMP MIB 定义)通过将 0/8 地址指定为本地标识符来加重其含义,与 IPv4 地址形成对比。在全球互联网上生产使用 0/8 之前,应更新此 MIB 以提供单独的本地标识符字段并弃用旧语义。
- RFC 6235和RFC 8932两者都提供了匿名化网络流数据集的机制,可以将地址映射到 0/8 以隐藏它们。实施者应考虑到未来的源地址可能已经位于此范围内,并且仍需要匿名化;不应仅仅因为 IPv4 地址位于 0/8 内就认为它已经匿名化。