The pseudo-random number generation algorithm MUST be chosen so that
different hosts do not generate the same sequence of numbers. If the
host has access to persistent information that is different for each
host, such as its IEEE 802 MAC address, then the pseudo-random number
generator SHOULD be seeded using a value derived from this
information. This means that even without using any other persistent
storage, a host will usually select the same IPv4 Link-Local address
each time it is booted, which can be convenient for debugging and
other operational reasons. Seeding the pseudo-random number
除非通过实验测试它们,否则不可能知道是否所有 APIPA 实现都遵循此建议(其中许多实现是封闭源代码的,例如 Windows 中的实现)。如果我没记错的话,Linux 上的 Avahi 是兼容的。
作为一个不同的例子,我似乎记得 Ubiquiti 的 airOS 固件使用的实现在设备文档中特别提到直接使用设备的最后两个 MAC 八位字节作为初始 APIPA 地址(有点不合规但仍然是确定性的)。
注意通常在那里。PRNG 用于生成一系列 IP 地址,设备从该序列中选择第一个未被其他设备声明的地址。这意味着结果是路径相关的。即使所有设备都确定性地播种它们的 PRNG,在发生冲突的情况下,结果取决于不同设备联机和声明地址的顺序。如果您关闭所有内容,然后以与上次不同的顺序再次启动,结果可能会有所不同。即使只是改变两个设备的相对顺序也可能会产生连锁反应,导致任意数量的设备接收到不同的地址(尽管从统计学上讲这不太可能,除非您在同一网段上有数千台设备)。
但是,如果我们认为网络由一组具有各种种子(我们可能不知道其中一些种子)的设备组成,这些设备在不可预测的时间加入和离开网络,那么我们得出的结论是,我们不能确定地预测任何设备在未来任何时间的地址。我们只能在分配时通过对网络进行普查来弄清楚。从这个意义上说,自动 IP 分配是不确定的,因为它取决于不确定的外部因素(比如人们带着手机和笔记本电脑进出大楼)。
RFC 3927是关于如何实现它的规范。它有一个2.1 节。链路本地地址选择指定 PRNG 的使用,并建议每次都使用相同的初始值(例如 MAC 地址)为 PRNG 播种。
PRNG 是确定性的——它们唯一的随机性来源来自外部种子;用相同的种子重新初始化相同的 PRNG 将始终给出相同的输出序列(因此是伪随机的)。因此,任何使用 MAC 地址作为其 PRNG 种子的 APIPA 实现也应该确定性地生成 IPv4 地址。
除非通过实验测试它们,否则不可能知道是否所有 APIPA 实现都遵循此建议(其中许多实现是封闭源代码的,例如 Windows 中的实现)。如果我没记错的话,Linux 上的 Avahi 是兼容的。
作为一个不同的例子,我似乎记得 Ubiquiti 的 airOS 固件使用的实现在设备文档中特别提到直接使用设备的最后两个 MAC 八位字节作为初始 APIPA 地址(有点不合规但仍然是确定性的)。
来自RFC 3927:
注意通常在那里。PRNG 用于生成一系列 IP 地址,设备从该序列中选择第一个未被其他设备声明的地址。这意味着结果是路径相关的。即使所有设备都确定性地播种它们的 PRNG,在发生冲突的情况下,结果取决于不同设备联机和声明地址的顺序。如果您关闭所有内容,然后以与上次不同的顺序再次启动,结果可能会有所不同。即使只是改变两个设备的相对顺序也可能会产生连锁反应,导致任意数量的设备接收到不同的地址(尽管从统计学上讲这不太可能,除非您在同一网段上有数千台设备)。
那么这是确定性的还是非确定性的?这完全取决于您对系统的看法。狭义的观点是算法是确定性的——每次给定相同的输入(即相同的种子和同一组当前在线的网络对等点),它都会做出相同的选择。
但是,如果我们认为网络由一组具有各种种子(我们可能不知道其中一些种子)的设备组成,这些设备在不可预测的时间加入和离开网络,那么我们得出的结论是,我们不能确定地预测任何设备在未来任何时间的地址。我们只能在分配时通过对网络进行普查来弄清楚。从这个意义上说,自动 IP 分配是不确定的,因为它取决于不确定的外部因素(比如人们带着手机和笔记本电脑进出大楼)。