IPv4 地址最后一部分的数字分布如何均匀?

Adj*_*jam 10 ip ip-address

我有一个在我创建的网站上运行的重定向脚本。它将 1/3 的访问者发送到站点 A,将 1/3 的访问者发送到站点 B,将 1/3 的访问者发送到站点 C。

它的工作原理是将用户 IPv4 地址 (0-255) 的最后一部分除以 3,然后根据余数将它们重定向到站点 A、B 或 C。到目前为止,站点 A 有 109 位访问者,站点 B 有 85 位访问者,站点 C 有 101 位访问者。

假设 IPv4 地址的最后一段是完全随机分配的,我是否正确?

另外,最后一段的数字分布是否相等?

小智 15

IPv4 地址并不像您想象的那样笨拙和随机。

首先,一个 IPv4 地址被分成 4 个八位字节,每个八位字节的范围从 0 到 255。然而,情况并非完全如此,因为 0 是网络的保留号码,而 255 是为广播保留的,这实际上将您限制在 1-254 .

其次,您必须考虑将 IPv4 地址分块分配给组织和 ISP,然后他们根据子网地址对它们进行细分,该地址描述了八位字节中哪些位代表网络以及哪些位代表单个主机。所以:

Network: 11.12.0.0
CIDR: 11.12.0.0/16
Subnet: 255.255.0.0
Hosts provided: 65534
Run Code Online (Sandbox Code Playgroud)

这意味着您可以拥有从 11.12.0.1 到 11.12.255.254 的地址。因为这:

Three separate hosts, same network, but same last octet:
11.12.10.20
11.12.20.20
11.12.30.20
Run Code Online (Sandbox Code Playgroud)

这意味着您不能总是指望最后一个八位字节是“随机的”。

第三,IP地址分配的方式并不总是随机的。大多数家庭用户将通过 DHCP 获得其 ISP 分配的公共 IP 地址,他们的端点将获得由计算机选择的地址(通常按顺序,从可用池中先来/先服务),并在该地址上持有预定的租约在他们被分配另一个号码之前的时间(通常是几天)。大型组织(企业、政府)通常会有一组它们总是来自的地址,这些地址是静态的,不会改变。

要回答您的问题,请提供上述信息:

1)IP地址不是随机分配的。通常有某种逻辑方法来分配 IP 地址,以允许正确和及时地路由网络和 Internet 上的流量。

2) IPv4 地址的最后一个八位字节的分布取决于与上述信息相关的许多因素(在某些情况下还取决于网络管理员的情绪),因此并不相等。您不能仅依靠最后一个八位字节来提供“唯一性”。

Come on IPv6!


mgo*_*ven 6

最后一个八位字节可能偏向低端,因为网络往往从底部开始编号。更好的方案是将整个 IP 地址视为 32 位无符号整数,并在按您想要的桶数进行潜水时使用模运算获得余数。这会将每个后续(数字)地址分配给不同的存储桶(到达最后一个存储桶时回绕)。

例如:

1.2.3.4 = 16909060
16909060 % 3 = 1
Run Code Online (Sandbox Code Playgroud)

因此,这会将 1.2.3.4 放入存储桶 1(其中存储桶编号为 0、1 和 2)。1.2.3.5 将进入桶 2,而 1.2.3.6 将进入桶 0。