Qual é a distribuição uniforme de dígitos na última parte de um endereço IPv4?

9

Eu tenho um script de redirecionamento operando em um site que eu criei. Ele envia 1/3 dos visitantes ao site A, 1/3 dos visitantes ao site B e 1/3 ao site C.

Ele funciona dividindo a última parte do endereço IPv4 dos usuários (0-255) por 3 e eles são redirecionados para o site A, B ou C, dependendo do restante. Até agora, o site A teve 109 visitantes, o site B teve 85 e o site C teve 101.

Estou correto ao supor que o último segmento do endereço IPv4 seja atribuído completamente aleatoriamente?

Além disso, a distribuição de números para o último segmento é igual?

Adjam
fonte
O que faz você pensar que o último segmento é "atribuído completamente aleatoriamente"?
MrWhite
1
É um palpite. Não tenho certeza se esse palpite está correto. Esse é o conteúdo da minha pergunta.
Adjam
Por que não fazer round robin?
BigBo2002
@ Bigbio2002 Porque os usuários podem voltar. Não quero que um usuário seja enviado para a versão boa e, em seguida, para a versão ruim, pois isso afetará o comportamento do usuário.
Adjam

Respostas:

14

Os endereços IPv4 não são tão desajeitados e aleatórios quanto você imagina.

Primeiro, um endereço IPv4 é separado em 4 octetos, cada um variando de 0 a 255. No entanto, esse não é o caso, pois 0 é um número reservado para a rede e 255 é reservado para transmissão, o que realmente o limita a 1-254 .

Em segundo lugar, você deve considerar que os endereços IPv4 são atribuídos em blocos a organizações e ISPs que os subdividem com base em um endereço de sub-rede que define quais bits no octeto representam a rede e quais bits representam o host individual. Assim:

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

Isso significa que você pode ter endereços que variam de 11.12.0.1 a 11.12.255.254. Por causa disso:

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

Isso significa que você nem sempre pode contar com o último octeto para ser 'aleatório'.

Em terceiro lugar, os meios de atribuição de endereços IP nem sempre são aleatórios. A maioria dos usuários domésticos obterá um endereço IP público atribuído por seu ISP via DHCP, onde seu ponto final obterá um endereço escolhido por um computador (geralmente sequencialmente, o primeiro a chegar / primeiro a ser servido a partir de um pool disponível) no qual eles mantêm uma concessão por um período predeterminado. tempo (geralmente alguns dias) antes de receberem outro número. As grandes organizações (empresas, governo) geralmente têm um conjunto de endereços de onde sempre vêm e esses endereços são estáticos e não mudam.

Para responder sua pergunta, dadas as informações acima:

1) Os endereços IP não são atribuídos aleatoriamente. Geralmente, existe algum tipo de método lógico para atribuir endereços IP endereçados para permitir o roteamento correto e oportuno do tráfego através de uma rede e da Internet.

2) A distribuição do último octeto de um endereço IPv4 depende de vários fatores relacionados às informações acima (e do humor do administrador da rede, em alguns casos) e, portanto, não é igual. Você não pode confiar apenas no último octeto para fornecer 'exclusividade'.

Come on IPv6!

Justin Pearce
fonte
5

É provável que o último octeto seja inclinado para a extremidade inferior, porque as redes tendem a ser numeradas de baixo para cima. Um esquema melhor seria tratar o endereço IP inteiro como um inteiro não assinado de 32 bits e usar a operação de módulo para obter o restante ao mergulhar pelo número de buckets que você deseja. Isso atribuiria cada endereço subsequente (numericamente) a um depósito diferente (contornando quando o último depósito for atingido).

Por exemplo:

1.2.3.4 = 16909060
16909060 % 3 = 1

Portanto, isso colocaria 1.2.3.4 no balde 1 (onde os baldes são numerados 0, 1 e 2). 1.2.3.5 entraria no balde 2 e 1.2.3.6 entraria no balde 0.

mgorven
fonte