IPv4 APIPA 是不确定的吗?

Tar*_*aro 5 ipv4 apipa

链接本地地址的日语维基百科文章页面提到链接本地地址的创建几乎总是不确定的(\xe9\x9d\x9e\xe6\xb1\xba\xe5\xae\x9a\xe8\xab\x96\xe7\ x9a\x84(日语)。相应的英文页面不包含等效的语句。

\n

我的问题是 APIPA 是如何实现的以及候选地址是如何选择(或计算)的。\n这真的是一个不确定性算法吗?

\n

use*_*686 3

RFC 3927是关于如何实现它的规范。它有一个第 2.1 节。链路本地地址选择指定了 PRNG 的使用,并建议每次都使用相同的初始值(例如 MAC 地址)来播种 PRNG。

\n

PRNG 是确定性的 \xe2\x80\x93,它们唯一的随机性来源来自外部种子;使用相同的种子重新初始化相同的 PRNG 将始终给出相同的输出序列(因此是伪随机的)。因此,任何使用 MAC 地址作为 PRNG 种子的 APIPA 实现也应该确定性地生成 IPv4 地址。

\n
   The pseudo-random number generation algorithm MUST be chosen so that\n   different hosts do not generate the same sequence of numbers.  If the\n   host has access to persistent information that is different for each\n   host, such as its IEEE 802 MAC address, then the pseudo-random number\n   generator SHOULD be seeded using a value derived from this\n   information.  This means that even without using any other persistent\n   storage, a host will usually select the same IPv4 Link-Local address\n   each time it is booted, which can be convenient for debugging and\n   other operational reasons.  Seeding the pseudo-random number\n
Run Code Online (Sandbox Code Playgroud)\n

除非通过实验测试,否则不可能知道是否所有 APIPA 实现都遵循这一建议(其中许多实现,例如 Windows 中的实现,都是闭源的)。如果我没记错的话,Linux 上的 Avahi 是兼容的。

\n

作为一个不同的例子,我似乎记得 Ubiquiti\'s airOS 固件使用的实现在设备文档中特别指出,直接使用设备的最后两个 MAC 八位字节作为初始 APIPA 地址(有点不合规,但但仍然是确定性的)。

\n

  • PRNG 与其种子一样具有确定性。对于给定的输入种子,任何 PRNG 每次都会返回相同的输出序列。 (3认同)
  • 例如,甚至许多 CSPRNG 只是哈希算法或对称密码,其本质上是确定性的 - 它们只能通过首先从其他地方收集足够随机的输入种子(即“熵集合”或“种子”)来实现“随机”过程)。但出于某些目的使用具有可预测种子的 PRNG 并不罕见,就像在本例中一样,只要使用相同的 MAC 地址作为种子,它就会生成相同的数字。 (2认同)
  • 另一个例子;许多程序生成的游戏,如《我的世界》或《异星工厂》。世界的“种子”是 PRNG 种子。 (2认同)