As sub-redes são sempre 1s contíguas? [duplicado]

25

Eu entendo a premissa básica por trás de máscaras de sub-rede, como 255.255.255.0. Mas todos os exemplos de sub-rede que eu vi foram (da esquerda para a direita) 1s contíguos (bits HI). Por exemplo, 255.255.0.0( /16) se traduz nos seguintes octetos:

11111111 . 11111111 . 00000000 . 00000000

Eu acredito que esses bits devem ser contíguos, porque todo o ponto de sub-redes é a identificação de host derive e varia de IDs de dispositivos disponíveis. Mas me faz pensar: você pode ter uma máscara de sub-rede de, digamos 255.17.255.0, ou:

11111111 . 00010001 . 11111111 . 00000000
  • Isso aconteceria alguma vez? Ou é impossível existir sub-redes sem 1s contíguos? Se sim, por quê?
  • Caso contrário, se é possível fazer isso, por que você faria (alguns exemplos concretos)?
DirtyMikeAndTheBoys
fonte
@MSalters Só para você saber, o comentário automático foi alterado para dizer "Possível duplicata de ..." para que você não precise mais inserir manualmente o comentário. ;-)
Chris Jester-Young
Resposta curta: sim, você está certo.
Oct

Respostas:

18

A seção 3.1 no RFC mostra as máscaras permitidas no roteamento entre domínios sem classe. Os bits devem ser contíguos para que o roteamento funcione corretamente.

Além disso, ao pensar logicamente, não faria sentido ter máscaras de rede aleatórias estranhas.

Sami Kuhmonen
fonte
28

Sim, a maneira mais fácil de pensar é que as máscaras de sub-rede são sempre 1s no início. Se um indicador de tamanho de sub-rede não tiver 1s no início da representação binária, eu diria que o indicador de tamanho de sub-rede não é uma "máscara de sub-rede" adequada, usando padrões modernos.

A RFC 1219 afirma que a RFC 950 anterior permite bits não contíguos. De fato, a RFC 950 página 15 (seção 3) tem claramente um exemplo que “ilustra bits de sub-rede não contíguos". No entanto, não há como converter essas sub-redes em notação CIDR. A notação no estilo CIDR é o que o IPv6 usou (em menos desde a RFC 1884 página 7 , primeira frase da seção 2.4), portanto, bits não contíguos nunca foram amplamente suportados por redes IPv6 O método da RFC 1219 especifica que “bits de sub-rede (máscara = 1) são atribuídos a partir do bit mais significativo para o mínimo ". (A seção 3.1 da RFC 4632 , mencionada pela resposta de Sami, aponta para um padrão oficial que discute a notação CIDR.)

A página 2 da RFC 1878 mostra a notação "máscara de sub-rede" padrão para todas as sub-redes IPv4, exceto a /0.

No entanto, vou elaborar um pouco a resposta de Sami, analisando o "porquê" (com um exemplo concreto, como a pergunta pedia) ...

Alguns equipamentos Cisco de nível profissional suportam algo chamado "máscara curinga", que inverte os bits. Portanto, uma sub-rede normal pode ser representada por algo chamado 00000000.00000000.00000000.11111111.

Com as máscaras curinga da Cisco, não havia uma regra de que todos os zeros tivessem que ir primeiro. Então você poderia usar 00000000.00000000.00000000.11111110.

Isso acabaria criando um grupo que continha todos os endereços IP com número par.

Isso era realmente importante de se saber, porque o treinamento da Cisco o cobria e, portanto, o processo de exame das certificações profissionais da Cisco poderia perguntar sobre isso.

No entanto, acho que foi principalmente inútil. Em vez de dividir uma rede pela metade usando endereços pares ou ímpares, você pode dividir uma rede pela metade usando endereços com números baixos e endereços com números altos, criando sub-redes normais com a metade do tamanho.

Máscaras curinga com bits não contíguos não eram muito úteis e poderiam ser mais difíceis de trabalhar. O ponto do bit de máscara de sub-rede definido como 1 é dizer que o bit ajuda a identificar em qual sub-rede um dispositivo está. Não há motivo convincente para que esses bits sejam espalhados pelo endereço, em vez de apenas agrupá-los no início do endereço. . O resultado foi que o suporte a esses tipos de máscaras era uma complexidade adicional, sem muitos benefícios substanciais.

Eu acho que a Cisco finalmente concordou que não há sentido em máscaras de sub-rede não tradicionais, porque elas acabaram com o suporte para "máscaras curinga". Os firewalls Pix mais antigos suportam "máscaras curinga", mas as unidades ASA mais recentes usam "máscaras de sub-rede" padrão .

Eu nem tentaria criar uma rede com "bits de sub-rede" não contíguos na máscara, porque muitos softwares seguiriam as tendências / padrões mais recentes e rejeitariam esse design de rede. Mesmo se eu estivesse usando um software mais antigo, provavelmente desejaria que minha rede pudesse ser facilmente modificada para poder usar um software mais novo sem precisar redesenhar a rede. Portanto, “bits de sub-rede” contíguos são o único caminho a percorrer.

Se você fizer a pergunta em um teste, eu ficaria confiante em dizer que todos os 1s precisam estar no início do endereço. É isso que qualquer testador sensato gostaria que a maioria dos alunos aprendesse hoje em dia.

TOOGAM
fonte
+1 - A única vez em que vi máscaras curinga usadas sem todos os 1s no final são máscaras inseridas incorretamente.
Mark Henderson
2

A RFC 950 diz no capítulo 2.2:

 To support subnets, it is necessary to store one more 32-bit
  quantity, called my_ip_mask.  This is a bit-mask with bits set in
  the fields corresponding to the IP network number, and additional
  bits set corresponding to the subnet number field.

 The code then becomes:

   IF bitwise_and(dg.ip_dest, my_ip_mask)
                               = bitwise_and(my_ip_addr, my_ip_mask)
         THEN
             send_dg_locally(dg, dg.ip_dest)
         ELSE
             send_dg_locally(dg,
                    gateway_to(bitwise_and(dg.ip_dest, my_ip_mask)))

portanto, a proposta era sobre uma operação de bit simples que não se importa com bits contíguos.

Em 1985, a CPU e a memória eram muito mais limitadas, portanto, qualquer operação mais complexa simplesmente não cabia no tempo.

Isso se torna ainda mais explícito no capítulo 3:

e que na rede esteja em uso um campo de sub-rede de 3 bits (01011000), ou seja, a máscara de endereço é 255.255.255.88.

No entanto, esses RFCs parecem estar desatualizados. No Windows 7 SP1, por exemplo, não é possível definir uma máscara de sub-rede:

Máscara de sub-rede contígua necessária no Windows 7

Mesmo no Windows XP SP2, isso não era mais possível:

Máscara de sub-rede Windows XP SP2

O clone do Windows 98 ReactOS, no entanto, permite definir a máscara de rede "estranha":

Máscara de sub-rede ReactOS

Thomas Weller
fonte
1

Concordo com a resposta de @Sami Kuhmonen:

A seção 3.1 no RFC mostra as máscaras permitidas no roteamento entre domínios sem classe. Os bits devem ser contíguos para que o roteamento funcione corretamente. Além disso, ao pensar logicamente, não faria sentido ter máscaras de rede aleatórias estranhas.

No entanto, mesmo que não seja desejado ou permitido, ainda é possível definir uma máscara de sub-rede de 1s não consecutivos. O motivo por trás disso:
O ID da rede e o ID do host são calculados a partir do endereço IP e da máscara de sub-rede usando as operações binárias AND e XOR. Tudo o resto é irrelevante.

Eu testei isso anos atrás no Win 2000, ele funciona. Ambos os computadores tinham uma máscara 255.160.0.0. Eles estavam em uma LAN sem roteador, por isso não posso falar sobre o comportamento do roteador (normalmente você pode definir a máscara do roteador apenas na interface da web, que a rejeitará).
Você também não pode inserir uma máscara de sub-rede 'inválida' no campo correspondente das configurações de rede; a GUI se recusa a aceitá-lo. Mas você pode trapacear, alterando-o diretamente no registro. Depois, reinicie ou desative + ative a NIC para que as alterações sejam ativadas.
O objetivo de tudo isso: hum, provavelmente nenhum.

Tobias Knauss
fonte
Obrigado por compartilhar, mas isso não se qualifica como uma resposta independente. Deve ser um comentário sobre a resposta de Sami Kuhmonen.
precisa saber é
2
Tempo demais para um comentário ... Também não espero que seja marcado como a resposta.
Tobias Knauss
@agtoever: Depois de editar e adicionar mais detalhes, acho que agora se qualifica como resposta independente, porque possui muitas informações que não fazem parte de outras respostas.
precisa saber é o seguinte
"Funciona em uma implementação" não é uma boa resposta. E não é apenas "funciona em um sistema operacional", não, você aparentemente testou um PC em particular com (principalmente) uma rede. Isso significa que você não verificou se o código de roteamento de sub-rede no Windows 2000 realmente funciona e é exatamente aí que as IDs de rede são necessárias. Você poderia rotear entre duas 255.160.0.0redes não adjacentes ?
MSalters
@MSalters Funciona em uma implementação ainda significa que funciona. Não afirmei falar por todo o sistema operacional possível de configurações. Além disso, o que você acha de como os pacotes passam de um PC para outro? O computador precisa conhecer a rota. Portanto, ele deve calcular se o computador de destino está na mesma sub-rede (envie o pacote diretamente) ou distante (consulte uma rota no gateway configurado). // Não, acho que não poderia fazer esse roteamento, porque essas máscaras de sub-rede não foram feitas para serem usadas. Eu demonstrei um caso em que funcionou, mas sem sub-rede diferente. Talvez que as obras, também, quem sabe ...
Tobias Knauss