Quelle est la répartition des chiffres dans la dernière partie d'une adresse IPv4?

9

J'ai un script de redirection fonctionnant sur un site Web que j'ai créé. Il envoie 1/3 des visiteurs sur le site A, 1/3 des visiteurs sur le site B et 1/3 sur le site C.

Il fonctionne en divisant la dernière partie de l'adresse IPv4 des utilisateurs (0-255) par 3, et ils sont redirigés vers le site A, B ou C en fonction du reste. Jusqu'à présent, le site A a accueilli 109 visiteurs, le site B en a accueilli 85 et le site C en a accueilli 101.

Ai-je raison de supposer que le dernier segment de l'adresse IPv4 est attribué complètement au hasard?

De plus, la distribution des nombres pour le dernier segment est-elle égale?

Adjam
la source
Qu'est-ce qui vous fait penser que le dernier segment est "attribué complètement au hasard"?
MrWhite
1
C'est une supposition. Je ne sais pas si cette supposition est correcte. Voilà le contenu de ma question.
Adjam
Pourquoi ne pas simplement faire un tournoi à la ronde?
Bigbio2002
@ Bigbio2002 Parce que les utilisateurs pourraient revenir. Je ne veux pas qu'un utilisateur soit envoyé à la bonne version, puis à la mauvaise version, car cela affectera le comportement de l'utilisateur.
Adjam

Réponses:

14

Les adresses IPv4 ne sont pas aussi maladroites et aléatoires que vous le supposeriez.

Premièrement, une adresse IPv4 est séparée en 4 octets, chacun allant de 0 à 255. Cependant, ce n'est pas entièrement le cas car 0 est un numéro réservé pour le réseau et 255 est réservé pour la diffusion, ce qui vous limite vraiment à 1-254 .

Deuxièmement, vous devez considérer que les adresses IPv4 sont attribuées en blocs aux organisations et aux FAI qui les subdivisent ensuite en fonction d'une adresse de sous-réseau qui délimite les bits de l'octet représentant le réseau et les bits représentant l'hôte individuel. Donc:

Network: 11.12.0.0
CIDR: 11.12.0.0/16
Subnet: 255.255.0.0
Hosts provided: 65534

Cela voudrait dire que vous pourriez avoir des adresses allant de 11.12.0.1 à 11.12.255.254. À cause de ce:

Three separate hosts, same network, but same last octet:
11.12.10.20
11.12.20.20
11.12.30.20

Cela signifie que vous ne pouvez pas toujours compter sur le dernier octet pour qu'il soit «aléatoire».

Troisièmement, le moyen d'attribution d'adresse IP n'est pas toujours aléatoire. La plupart des utilisateurs à domicile obtiendront une adresse IP publique attribuée par leur FAI via DHCP, où leur point de terminaison obtiendra une adresse choisie par un ordinateur (généralement séquentiellement, premier arrivé / premier servi à partir d'un pool disponible) sur laquelle ils détiennent un bail pour une période prédéterminée temps (généralement quelques jours) avant de se voir attribuer un autre numéro. Les grandes organisations (entreprises, gouvernement) auront souvent un ensemble d'adresses dont elles proviennent toujours et ces adresses sont statiques et ne changeront pas.

Pour répondre à votre question, compte tenu des informations ci-dessus:

1) Les adresses IP ne sont pas attribuées au hasard. Il existe généralement une sorte de méthode logique pour attribuer une adresse IP afin de permettre un routage correct et rapide du trafic sur un réseau et Internet.

2) La distribution du dernier octet d'une adresse IPv4 dépend d'un certain nombre de facteurs liés aux informations ci-dessus (et de l'humeur de l'administrateur du réseau, dans certains cas) et, par conséquent, différents. Vous ne pouvez pas compter uniquement sur le dernier octet pour fournir un caractère unique.

Come on IPv6!

Justin Pearce
la source
5

Le dernier octet est susceptible d'être biaisé vers l'extrémité inférieure, car les réseaux ont tendance à être numérotés à partir du bas. Un meilleur schéma serait de traiter l'adresse IP entière comme un entier non signé 32 bits et d'utiliser l' opération modulo pour obtenir le reste lors de la plongée selon le nombre de compartiments que vous souhaitez. Cela attribuerait chaque adresse (numérique) suivante à un compartiment différent (en faisant le tour lorsque le dernier compartiment est atteint).

Par exemple:

1.2.3.4 = 16909060
16909060 % 3 = 1

Ainsi, cela mettrait 1.2.3.4 dans le compartiment 1 (où les compartiments sont numérotés 0, 1 et 2). 1.2.3.5 irait dans le compartiment 2 et 1.2.3.6 irait dans le compartiment 0.

mgorven
la source