Como funciona a sub-rede IPv4?


439

Esta é uma pergunta canônica sobre sub-redes IPv4.

Palavras-chave:

Como funciona a sub-rede e como você o faz manualmente ou na sua cabeça? Alguém pode explicar conceitualmente e com vários exemplos? O Server Fault recebe muitas perguntas sobre tarefas de sub-rede, para que possamos usar uma resposta para apontá-las para o próprio Server Fault.

  • Se eu tenho uma rede, como faço para descobrir como dividi-la?
  • Se eu receber uma máscara de rede, como sei qual é o alcance da rede?
  • Às vezes, há uma barra seguida de um número, qual é esse número?
  • Às vezes, existe uma máscara de sub-rede, mas também uma máscara curinga, elas parecem a mesma coisa, mas são diferentes?
  • Alguém mencionou algo sobre saber binário para isso?

Esta resposta em duas partes explica tudo o que você queria saber sobre o cálculo do endereço IPv4 e muito mais.
Ron Maupin

Respostas:


648

Existem sub-redes IP para permitir que os roteadores escolham destinos apropriados para pacotes. Você pode usar sub-redes IP para interromper redes maiores por razões lógicas (firewall, etc.) ou necessidade física (domínios de transmissão menores, etc.).

Simplificando, os roteadores IP usam suas sub-redes IP para tomar decisões de roteamento. Entenda como essas decisões funcionam e você pode entender como planejar sub-redes IP.

Contando até 1

Se você já é fluente em notação binária (base 2), pode pular esta seção.

Para aqueles que sobraram: Que vergonha por não serem fluentes em notação binária!

Sim-- isso pode ser um pouco duro. É muito, muito fácil aprender a contar em binário e aprender atalhos para converter binário em decimal e vice-versa. Você realmente deve saber como fazê-lo.

Contar em binário é tão simples, porque você só precisa saber como contar até 1!

Pense no "odômetro" de um carro, exceto que, diferentemente do odômetro tradicional, cada dígito pode contar até 1 a 0. Quando o carro sai da fábrica, o odômetro indica "00000000".

Quando você dirige sua primeira milha, o odômetro indica "00000001". Por enquanto, tudo bem.

Quando você percorre a segunda milha, o primeiro dígito do odômetro volta para "0" (já que o valor máximo é "1") e o segundo dígito do odômetro passa para "1", fazendo com que o odômetro seja lido " 00000010 ". Parece o número 10 em notação decimal, mas na verdade é 2 (o número de milhas que você dirigiu o carro até agora) em notação binária.

Quando você percorre a terceira milha, o odômetro lê "00000011", pois o primeiro dígito do odômetro gira novamente. O número "11", em notação binária, é o mesmo que o número decimal 3.

Por fim, quando você dirige sua quarta milha, os dois dígitos (que estavam lendo "1" no final da terceira milha) passam para a posição zero e o terceiro dígito rola para a posição "1", fornecendo-nos " 00000100 ". Essa é a representação binária do número decimal 4.

Você pode memorizar tudo isso, se quiser, mas realmente só precisa entender como o pequeno odômetro "rola" à medida que o número contado aumenta. É exatamente o mesmo que a operação de um odômetro decimal tradicional, exceto que cada dígito pode ser apenas "0" ou "1" em nosso "odômetro binário" fictício.

Para converter um número decimal em binário, você pode rolar o odômetro para frente, marca por marca, contando em voz alta até que você o tenha rolado um número de vezes igual ao número decimal que deseja converter em binário. O que quer que seja exibido no odômetro, depois de todo esse processo de repetição e rotação, seria a representação binária do número decimal que você contou.

Como você entende como o odômetro avança, também entenderá como ele retrocede. Para converter um número binário exibido no odômetro de volta em decimal, você pode reverter o odômetro um tique por vez, contando em voz alta até o odômetro exibir "00000000". Quando toda a contagem e rolagem é feita, o último número que você diz em voz alta é a representação decimal do número binário com o qual o odômetro começou.

Converter valores entre binário e decimal dessa maneira seria muito tedioso. Você poderia fazer isso, mas não seria muito eficiente. É mais fácil aprender um pouco de algoritmo para fazê-lo mais rapidamente.

Uma rápida observação: cada dígito em um número binário é conhecido como "bit". Isso é "b" de "binário" e "it" de "dígito". Um bit é um dígito binário.

Converter um número binário como, por exemplo, "1101011" em decimal, é um processo simples, com um pequeno algoritmo útil.

Comece contando o número de bits no número binário. Nesse caso, existem 7. Faça 7 divisões em uma folha de papel (em sua mente, em um arquivo de texto, etc.) e comece a preenchê-las da direita para a esquerda. No slot mais à direita, digite o número "1", porque sempre começaremos com "1". No próximo slot à esquerda, digite o dobro do valor no slot à direita (então, "2" no próximo, "4" no próximo) e continue até que todos os slots estejam cheios. (Você acabará memorizando esses números, que são os poderes de 2, à medida que faz isso cada vez mais. Estou bem até 131.072 na minha cabeça, mas geralmente preciso de uma calculadora ou papel depois disso).

Portanto, você deve ter o seguinte em seu papel em seus pequenos espaços.

 64    |    32    |    16    |    8    |    4    |    2    |    1    |

Transcreva os bits do número binário abaixo dos slots, da seguinte maneira:

 64    |    32    |    16    |    8    |    4    |    2    |    1    |
  1          1          0         1         0         1         1

Agora, adicione alguns símbolos e calcule a resposta para o problema:

 64    |    32    |    16    |    8    |    4    |    2    |    1    |
x 1        x 1        x 0       x 1       x 0       x 1       x 1
---        ---        ---       ---       ---       ---       ---
       +          +          +         +         +         +         =

Fazendo toda a matemática, você deve inventar:

 64    |    32    |    16    |    8    |    4    |    2    |    1    |
x 1        x 1        x 0       x 1       x 0       x 1       x 1
---        ---        ---       ---       ---       ---       ---
 64    +    32    +     0    +    8    +    0    +    2    +    1    =   107

Isso mesmo. "1101011" em decimal é 107. São apenas etapas simples e matemática fácil.

Converter decimal em binário é igualmente fácil e é o mesmo algoritmo básico, executado ao contrário.

Digamos que queremos converter o número 218 em binário. Começando à direita de uma folha de papel, escreva o número "1". À esquerda, dobre esse valor (portanto, "2") e continue movendo-se para a esquerda do papel, dobrando o último valor. Se o número que você está prestes a escrever for maior que o número que está sendo convertido, pare de escrever. caso contrário, continue dobrando o número anterior e escrevendo. (Converter um número grande, como 34.157.216.092, em binário usando esse algoritmo pode ser um pouco tedioso, mas certamente é possível.)

Então, você deve ter em seu papel:

 128    |    64    |    32    |    16    |    8    |    4    |    2    |    1    |

Você parou de escrever números em 128 porque duplicar 128, o que lhe daria 256, seria maior que o número que está sendo convertido (218).

Começando pelo número mais à esquerda, escreva "218" acima dele (128) e pergunte a si mesmo: "O 218 é maior que ou igual a 128?" Se a resposta for sim, escreva um "1" abaixo de "128". Acima de "64", escreva o resultado de 218 menos 128 (90).

Observando "64", pergunte-se: "90 é maior ou igual a 64?" É assim, então você deve escrever um "1" abaixo de "64", subtrair 64 de 90 e escrever acima de "32" (26).

Ao chegar a "32", porém, você acha que 32 não é maior ou igual a 26. Nesse caso, escreva um "0" abaixo de "32", copie o número (26) de cima de 32 "para cima" 16 "e continue fazendo a mesma pergunta com o restante dos números.

Quando terminar, você deve ter:

 218         90         26         26        10         2         2         0
 128    |    64    |    32    |    16    |    8    |    4    |    2    |    1    |
   1          1          0          1         1         0         1         0

Os números no topo são apenas notas usadas em computação e não significam muito para nós. Na parte inferior, no entanto, você vê um número binário "11011010". Com certeza, 218, convertido em binário, é "11011010".

Seguindo estes procedimentos muito simples, você pode converter binário em decimal e vice-versa sem uma calculadora. A matemática é muito simples e as regras podem ser memorizadas com um pouco de prática.

Divisão de endereços

Pense no roteamento IP como entrega de pizza.

Quando você é solicitado a entregar uma pizza à "123 Main Street", é muito claro para você, como humano, que deseja ir ao prédio com o número "123" na rua chamada "Main Street". É fácil saber que você precisa ir para os 100 quarteirões da Main Street porque o número do prédio está entre 100 e 199 e a maioria dos quarteirões da cidade está numerada em centenas. Você "apenas sabe" como dividir o endereço.

Os roteadores entregam pacotes, não pizza. O trabalho deles é o mesmo de um motorista de pizza: para chegar a carga (pacotes) o mais próximo possível do destino. Um roteador está conectado a duas ou mais sub-redes IP (para ser útil). Um roteador deve examinar os endereços IP de destino dos pacotes e dividir esses endereços nos componentes "nome da rua" e "número da construção", como o driver da pizza, para tomar decisões sobre a entrega.

Cada computador (ou "host") em uma rede IP é configurado com um endereço IP e uma máscara de sub-rede exclusivos. Esse endereço IP pode ser dividido em um componente "número da construção" (como "123" no exemplo acima) chamado de "ID do host" e um componente "nome da rua" (como "Rua principal" no exemplo acima) chamado "ID de rede". Para nossos olhos humanos, é fácil ver onde o número do prédio e o nome da rua estão em "123 Main Street", mas é mais difícil ver essa divisão em "10.13.216.41 com uma máscara de sub-rede 255.255.192.0".

Os roteadores IP "apenas sabem" como dividir os endereços IP nessas partes componentes para tomar decisões de roteamento. Desde que a compreensão de como os pacotes IP são roteados depende da compreensão desse processo, também precisamos saber como quebrar os endereços IP. Felizmente, extrair o ID do host e o ID da rede de um endereço IP e máscara de sub-rede é realmente muito fácil.

Comece escrevendo o endereço IP em binário (use uma calculadora se ainda não aprendeu a fazer isso em sua mente, mas tome nota de como fazê-lo - é muito, muito fácil e impressiona o sexo oposto em festas):

      10.      13.     216.      41
00001010.00001101.11011000.00101001

Escreva também a máscara de sub-rede em binário:

     255.     255.     192.       0
11111111.11111111.11000000.00000000

Escrito lado a lado, você pode ver que o ponto na máscara de sub-rede em que os "1s" param "se alinha" até um ponto no endereço IP. Esse é o ponto em que o ID da rede e o ID do host se dividem. Então, neste caso:

      10.      13.     216.      41
00001010.00001101.11011000.00101001 - IP address
11111111.11111111.11000000.00000000 - subnet mask
00001010.00001101.11000000.00000000 - Portion of IP address covered by 1's in subnet mask, remaining bits set to 0
00000000.00000000.00011000.00101001 - Portion of IP address covered by 0's in subnet mask, remaining bits set to 0

Os roteadores usam a máscara de sub-rede para "mascarar" os bits cobertos por 1 no endereço IP (substituindo os bits que não são "mascarados" pelos 0) para extrair o ID da rede:

      10.      13.     192.       0
00001010.00001101.11000000.00000000 - Network ID

Da mesma forma, usando a máscara de sub-rede para "mascarar" os bits cobertos pelos zeros no endereço IP (substituindo os bits que não são "mascarados" pelos zeros novamente), um roteador pode extrair o ID do host:

       0.       0.      24.      41
00000000.00000000.00011000.00101001 - Portion of IP address covered by 0's in subnet mask, remaining bits set to 0

Não é tão fácil para nossos olhos humanos ver o "intervalo" entre o ID da rede e o ID do host, pois é entre o "número da construção" e o "nome da rua" nos endereços físicos durante a entrega da pizza, mas o efeito final é o mesmo.

Agora que você pode dividir os endereços IP e as máscaras de sub-rede em IDs de host e de rede, pode rotear IP como um roteador.

Mais terminologia

Você verá máscaras de sub-rede escritas em toda a Internet e no restante desta resposta como (IP / número). Essa notação é conhecida como "CIDR (Classless Inter-Domain Routing"). "255.255.255.0" é composto de 24 bits de 1 no início e é mais rápido escrever isso como "/ 24" do que como "255.255.255.0". Para converter um número CIDR (como "/ 16") em uma máscara de sub-rede decimal pontilhada, basta escrever esse número de 1s, dividi-lo em grupos de 8 bits e convertê-lo em decimal. (Um "/ 16" é "255.255.0.0", por exemplo.)

Nos "velhos tempos", as máscaras de sub-rede não eram especificadas, mas eram derivadas observando determinados bits do endereço IP. Um endereço IP começando com 0 - 127, por exemplo, tinha uma máscara de sub-rede implícita 255.0.0.0 (chamada de endereço IP "classe A").

Essas máscaras de sub-rede implícitas não são usadas hoje e eu não recomendo mais aprender sobre elas, a menos que você tenha a infelicidade de lidar com equipamentos muito antigos ou protocolos antigos (como o RIPv1) que não oferecem suporte a endereços IP sem classe. Não vou mencionar mais essas "classes" de endereços, porque hoje é inaplicável e pode ser confuso.

Alguns dispositivos usam uma notação chamada "máscaras curinga". Uma "máscara curinga" nada mais é do que uma máscara de sub-rede com todos os 0 onde deveria haver 1 e 1 onde havia 0. A "máscara curinga" de a / 26 é:

 11111111.11111111.11111111.11000000 - /26 subnet mask
 00000000.00000000.00000000.00111111 - /26 "wildcard mask"

Normalmente, você vê "máscaras curinga" usadas para corresponder às IDs do host nas listas de controle de acesso ou nas regras de firewall. Não vamos discuti-los mais aqui.

Como um roteador funciona

Como eu disse antes, os roteadores IP têm um trabalho semelhante ao de um motorista de entrega de pizza, pois precisam levar sua carga (pacotes) ao seu destino. Quando apresentado com um pacote vinculado ao endereço 192.168.10.2, um roteador IP precisa determinar qual de suas interfaces de rede melhor aproximará esse pacote do seu destino.

Digamos que você seja um roteador IP e tenha interfaces conectadas a você numeradas:

  • Ethernet0 - 192.168.20.1, máscara de sub-rede / 24
  • Ethernet1 - 192.168.10.1, máscara de sub-rede / 24

Se você receber um pacote para entregar com um endereço de destino "192.168.10.2", é muito fácil dizer (com seus olhos humanos) que o pacote deve ser enviado pela interface Ethernet1, porque o endereço da interface Ethernet1 corresponde ao destino do pacote endereço. Todos os computadores conectados à interface Ethernet1 terão endereços IP começando com "192.168.10.", Porque o ID da rede do endereço IP atribuído à sua interface Ethernet1 é "192.168.10.0".

Para um roteador, esse processo de seleção de rota é realizado através da construção de uma tabela de roteamento e da consulta da tabela sempre que um pacote deve ser entregue. Uma tabela de roteamento contém o ID da rede e os nomes da interface de destino. Você já sabe como obter um ID de rede a partir de um endereço IP e máscara de sub-rede, portanto está no caminho de criar uma tabela de roteamento. Aqui está nossa tabela de roteamento para este roteador:

  • ID de rede: 192.168.20.0 (11000000.10101000.00010100.00000000) - máscara de sub-rede de 24 bits - Interface Ethernet
  • ID de rede: 192.168.10.0 (11000000.10101000.00001010.00000000) - máscara de sub-rede de 24 bits - Interface Ethernet1

Para nosso pacote de entrada com destino para "192.168.10.2", precisamos converter apenas o endereço desse pacote em binário (como humanos - o roteador o obtém como binário fora do fio, para começar) e tentar correspondê-lo a cada endereço em nosso roteamento tabela (até o número de bits na máscara de sub-rede) até correspondermos a uma entrada.

  • Destino do pacote de entrada: 11000000.10101000.00001010.00000010

Comparando isso com as entradas em nossa tabela de roteamento:

11000000.10101000.00001010.00000010 - Destination address for packet
11000000.10101000.00010100.00000000 - Interface Ethernet0
!!!!!!!!.!!!!!!!!.!!!????!.xxxxxxxx - ! indicates matched digits, ? indicates no match, x indicates not checked (beyond subnet mask)

11000000.10101000.00001010.00000010 - Destination address for packet
11000000.10101000.00001010.00000000 - Interface Ethernet1, 24 bit subnet mask
!!!!!!!!.!!!!!!!!.!!!!!!!!.xxxxxxxx - ! indicates matched digits, ? indicates no match, x indicates not checked (beyond subnet mask)

A entrada para Ethernet0 corresponde aos primeiros 19 bits, mas pára de corresponder. Isso significa que não é a interface de destino adequada. Você pode ver que a interface Ethernet1 corresponde a 24 bits do endereço de destino. Ah ha! O pacote está vinculado à interface Ethernet1.

Em um roteador da vida real, a tabela de roteamento é classificada de maneira que as máscaras de sub-rede mais longas sejam verificadas primeiro por correspondências (ou seja, as rotas mais específicas) e numericamente, para que, assim que uma correspondência for encontrada, o pacote possa ser roteado. e nenhuma tentativa de correspondência adicional é necessária (o que significa que 192.168.10.0 seria listado primeiro e 192.168.20.0 nunca teria sido verificado). Aqui, estamos simplificando um pouco. Estruturas e algoritmos sofisticados de dados produzem roteadores IP mais rápidos, mas algoritmos simples produzem os mesmos resultados.

Rotas estáticas

Até o momento, falamos sobre nosso roteador hipotético como tendo redes diretamente conectadas a ele. Obviamente, não é assim que o mundo realmente funciona. Na analogia da condução da pizza, às vezes o motorista não pode entrar mais no prédio do que na recepção e precisa entregar a pizza a outra pessoa para entrega ao destinatário final (suspenda sua descrença e aceite comigo enquanto Eu estendo minha analogia, por favor).

Vamos começar chamando nosso roteador dos exemplos anteriores "Roteador A". Você já conhece a tabela de roteamento do RouterA como:

  • ID de rede: 192.168.20.0 (11000000.10101000.00010100.00000000) - máscara de sub-rede / 24 - Interface RouterA-Ethernet0
  • ID de rede: 192.168.10.0 (11000000.10101000.00001010.00000000) - máscara de sub-rede / 24 - Interface RouterA-Ethernet1

Suponha que haja outro roteador, "Roteador B", com os endereços IP 192.168.10.254/24 e 192.168.30.1/24 atribuídos às suas interfaces Ethernet0 e Ethernet1. Possui a seguinte tabela de roteamento:

  • ID de rede: 192.168.10.0 (11000000.10101000.00001010.00000000) - máscara de sub-rede / 24 - Interface RouterB-Ethernet0
  • ID de rede: 192.168.30.0 (11000000.10101000.00011110.00000000) - máscara de sub-rede / 24 - Interface RouterB-Ethernet1

Na bela arte ASCII, a rede fica assim:

               Interface                      Interface
               Ethernet1                      Ethernet1
               192.168.10.1/24                192.168.30.254/24
     __________  V                  __________  V
    |          | V                 |          | V
----| ROUTER A |------- /// -------| ROUTER B |----
  ^ |__________|                 ^ |__________|
  ^                              ^
Interface                      Interface
Ethernet0                      Ethernet0
192.168.20.1/24                192.168.10.254/24

Você pode ver que o roteador B sabe como "acessar" uma rede, 192.168.30.0/24, sobre o qual o roteador A não sabe nada.

Suponha que um PC com o endereço IP 192.168.20.13 conectado à rede conectada à interface Ethernet0 do roteador A envie um pacote ao roteador A para entrega. Nosso pacote hipotético é destinado ao endereço IP 192.168.30.46, que é um dispositivo conectado à rede conectado à interface Ethernet1 do roteador B.

Com a tabela de roteamento mostrada acima, nenhuma entrada na tabela de roteamento do roteador A corresponde ao destino 192.168.30.46; portanto, o roteador A retornará o pacote ao PC remetente com a mensagem "Rede de destino inacessível".

Para tornar o roteador A "ciente" da existência da rede 192.168.30.0/24, adicionamos a seguinte entrada à tabela de roteamento no roteador A:

  • ID da rede: 192.168.30.0 (11000000.10101000.00011110.00000000) - máscara de sub-rede / 24 - acessível via 192.168.10.254

Dessa maneira, o roteador A possui uma entrada na tabela de roteamento que corresponde ao destino 192.168.30.46 do nosso pacote de exemplo. Essa entrada da tabela de roteamento diz efetivamente "Se você receber um pacote vinculado para 192.168.30.0/24, envie-o para 192.168.10.254 porque ele sabe como lidar com isso". Essa é a ação análoga de "entregar a pizza na recepção" que eu mencionei anteriormente - passando o pacote para outra pessoa que sabe como chegar mais perto de seu destino.

Adicionar uma entrada a uma tabela de roteamento "manualmente" é conhecido como adicionar uma "rota estática".

Se o roteador B quiser entregar pacotes à rede 255.255.255.0 da máscara de sub-rede 192.168.20.0, ele também precisará de uma entrada em sua tabela de roteamento:

  • ID da rede: 192.168.20.0 (11000000.10101000.00010100.00000000) - máscara de sub-rede / 24 - Acessível via: 192.168.10.1 (endereço IP do roteador A na rede 192.168.10.0)

Isso criaria um caminho para entrega entre a rede 192.168.30.0/24 e a rede 192.168.20.0/24 na rede 192.168.10.0/24 entre esses roteadores.

Você sempre quer ter certeza de que os roteadores dos dois lados de uma "rede intersticial" tenham uma entrada na tabela de roteamento para a rede "remota". Se roteador B em nosso exemplo não tem uma entrada na tabela de roteamento para a rede "extremo" 192.168.20.0/24 anexado ao roteador A nossa pacote hipotética do PC em 192.168.20.13 iria chegar ao dispositivo de destino no 192.168.30.46, mas qualquer resposta que 192.168.30.46 tentasse enviar de volta seria retornada pelo roteador B como "Rede de destino inacessível". A comunicação unidirecional geralmente não é desejável. Sempre pense em tráfego fluindo nas duas direções ao pensar em comunicação em redes de computadores.

Você pode obter muitas milhas de rotas estáticas. Protocolos de roteamento dinâmico como EIGRP, RIP, etc., na verdade nada mais são do que uma maneira de os roteadores trocarem informações de roteamento entre si que poderiam, de fato, ser configuradas com rotas estáticas. Uma grande vantagem do uso de protocolos de roteamento dinâmico sobre rotas estáticas, no entanto, é que os protocolos de roteamento dinâmico podem alterar dinamicamente a tabela de roteamento com base nas condições da rede (utilização da largura de banda, uma interface "inativa" etc.) e, como tal, usando uma interface dinâmica. o protocolo de roteamento pode resultar em uma configuração que "roteie" falhas ou gargalos na infraestrutura de rede. ( Porém, os protocolos de roteamento dinâmico estão MUITO FORA do escopo desta resposta.)

Você não pode chegar lá a partir daqui

No caso do nosso exemplo Roteador A, o que acontece quando um pacote vinculado para "172.16.31.92" chega?

Observando a tabela de roteamento do roteador A, nem a interface de destino nem a rota estática correspondem aos primeiros 24 bits de 172.18.31.92 (que é 10101100.00010000.00011111.01011100, BTW).

Como já sabemos, o roteador A retornaria o pacote ao remetente por meio de uma mensagem "Rede de destino inacessível".

Digamos que haja outro roteador (roteador C) localizado no endereço "192.168.20.254". O roteador C tem uma conexão com a Internet!

                              Interface                      Interface                      Interface
                              Ethernet1                      Ethernet1                      Ethernet1
                              192.168.20.254/24              192.168.10.1/24                192.168.30.254/24
                    __________  V                  __________  V                  __________  V
((  heap o  ))     |          | V                 |          | V                 |          | V
(( internet )) ----| ROUTER C |------- /// -------| ROUTER A |------- /// -------| ROUTER B |----
((   w00t!  ))   ^ |__________|                 ^ |__________|                 ^ |__________|
                 ^                              ^                              ^
               Interface                      Interface                      Interface
               Ethernet0                      Ethernet0                      Ethernet0
               10.35.1.1/30                   192.168.20.1/24                192.168.10.254/24

Seria bom se o roteador A pudesse rotear pacotes que não correspondam a nenhuma interface local até o roteador C, para que o roteador C possa enviá-los à Internet. Digite a rota "gateway padrão".

Adicione uma entrada no final da nossa tabela de roteamento desta forma:

  • Identificação de rede: 0.0.0.0 (00000000.00000000.00000000.00000000) - máscara de sub-rede / 0 - Roteador de destino: 192.168.20.254

Quando tentamos corresponder "172.16.31.92" a cada entrada na tabela de roteamento, acabamos atingindo essa nova entrada. É um pouco desconcertante, a princípio. Estamos procurando combinar zero bits do endereço de destino com ... espere ... o que? Correspondência de zero bits? Portanto, não estamos procurando uma partida. Essa entrada da tabela de roteamento está dizendo basicamente: "Se você chegar aqui, em vez de desistir da entrega, envie o pacote para o roteador em 192.168.20.254 e deixe-o lidar com isso".

192.168.20.254 é um destino que NÃO sabe como entregar um pacote para. Quando confrontado com um pacote vinculado a um destino para o qual não temos entrada específica na tabela de roteamento, essa entrada "gateway padrão" sempre corresponderá (já que corresponde a zero bits do endereço de destino) e nos fornece um local de "último recurso" que podemos envie pacotes para entrega. Às vezes, você ouvirá o gateway padrão chamado "gateway de último recurso".

Para que uma rota de gateway padrão seja efetiva, ela deve se referir a um roteador acessível através das outras entradas da tabela de roteamento. Se você tentou especificar um gateway padrão 192.168.50.254 no roteador A, por exemplo, a entrega para esse gateway padrão falharia. 192.168.50.254 não é um endereço que o roteador A saiba como entregar pacotes para usar qualquer uma das outras rotas em sua tabela de roteamento; portanto, esse endereço seria ineficaz como gateway padrão. Isso pode ser afirmado de forma concisa: O gateway padrão deve ser definido para um endereço já alcançável usando outra rota na tabela de roteamento.

Os roteadores reais geralmente armazenam o gateway padrão como a última rota em sua tabela de roteamento, de forma que ele corresponda aos pacotes depois que eles falharam em corresponder a todas as outras entradas da tabela.

Planejamento urbano e roteamento IP

A divisão de uma sub-rede IP em sub-redes IP menores é como um planejamento urbano. No planejamento urbano, o zoneamento é usado para se adaptar às características naturais da paisagem (rios, lagos, etc.), para influenciar os fluxos de tráfego entre diferentes partes da cidade e para segregar diferentes tipos de uso da terra (industrial, residencial, etc.) . A sub-rede IP é realmente a mesma.

Há três razões principais pelas quais você criaria uma sub-rede em uma rede:

  • Você pode se comunicar através de diferentes mídias de comunicação diferentes. Se você tiver uma conexão WAN T1 entre dois prédios, os roteadores IP poderão ser colocados nas extremidades dessas conexões para facilitar a comunicação através do T1. As redes em cada extremidade (e possivelmente a rede "intersticial" no próprio T1) seriam atribuídas a sub-redes IP exclusivas, para que os roteadores possam tomar decisões sobre qual tráfego deve ser enviado através da linha T1.

  • Em uma rede Ethernet, você pode usar sub-redes para limitar a quantidade de tráfego de broadcast em uma determinada parte da rede. Os protocolos da camada de aplicativo usam o recurso de transmissão da Ethernet para fins muito úteis. À medida que você recebe mais e mais hosts na mesma rede Ethernet, a porcentagem de tráfego de transmissão no fio (ou ar, na Ethernet sem fio) pode aumentar a tal ponto que cria problemas para a entrega de tráfego de não transmissão. (Antigamente, o tráfego de broadcast podia sobrecarregar a CPU dos hosts, forçando-os a examinar cada pacote de broadcast. Isso é menos provável hoje.) O tráfego excessivo na Ethernet comutada também pode vir na forma de "inundação de quadros para destinos desconhecidos". Essa condição é causada pelo fato de um comutador Ethernet não poder acompanhar todos os destinos na rede e é o motivo pelo qual as redes Ethernet comutadas não podem ser dimensionadas para um número infinito de hosts. O efeito da inundação de quadros para destinos desconhecidos é semelhante ao efeito do excesso de tráfego de broadcast, para fins de sub-rede.

  • Você pode querer "policiar" os tipos de tráfego que fluem entre diferentes grupos de hosts. Talvez você tenha dispositivos de servidor de impressão e deseje apenas computadores servidores de filas de impressão autorizados para enviar trabalhos para eles. Ao limitar o tráfego permitido ao fluxo para o dispositivo do servidor de impressão, os usuários da sub-rede não podem configurar seus PCs para conversar diretamente com os dispositivos do servidor de impressão para contornar a contabilidade de impressão. Você pode colocar os dispositivos do servidor de impressão em uma sub-rede e criar uma regra no roteador ou firewall anexado a essa sub-rede para controlar a lista de hosts com permissão para enviar tráfego para os dispositivos do servidor de impressão. Normalmente, os roteadores e os firewalls podem tomar decisões sobre como entregar um pacote com base nos endereços de origem e destino do pacote. Os firewalls são tipicamente uma subespécie de roteador com uma personalidade obsessiva. Eles podem estar muito, muito preocupados com a carga útil dos pacotes, enquanto os roteadores geralmente ignoram as cargas úteis e apenas entregam os pacotes.)

Ao planejar uma cidade, você pode planejar como as ruas se cruzam entre si e usar ruas de curva única, unidirecional e sem saída para influenciar os fluxos de tráfego. Você pode querer que a Main Street tenha 30 quarteirões, com cada bloco tendo até 99 prédios cada. É muito fácil planejar a numeração das ruas, de modo que cada quarteirão da Main Street tenha um intervalo de números de ruas aumentando em 100 para cada quarteirão. É muito fácil saber qual deve ser o "número inicial" em cada bloco subseqüente.

No planejamento de sub-redes IP, você se preocupa em criar o número certo de sub-redes (ruas) com o número certo de IDs de host disponíveis (números de construção) e usar roteadores para conectar as sub-redes entre si (interseções). As regras sobre os endereços de origem e destino permitidos especificados nos roteadores podem controlar ainda mais o fluxo de tráfego. Os firewalls podem agir como policiais obsessivos de trânsito.

Para os fins desta resposta, construir nossas sub-redes é nossa única grande preocupação. Em vez de trabalhar em decimal, como faria com o planejamento urbano, você trabalha em binário para descrever os limites de cada sub-rede.

Continua em: Como funciona a sub-rede IPv4?

(Sim ... atingimos o tamanho máximo de uma resposta (30000 caracteres).)


13
@ Joseph: É uma palestra que já fiz muitas vezes para meu próprio bem. > smile <Vou olhar para a sua seção binária. Detesto ensinar sobre matemática (que é realmente o que é entender binário - contando na base 2) porque não sou muito bom nisso.
Evan Anderson

2
Meu único problema com a quebra da resposta é que é preciso entender por que existe sub-rede (roteamento IP) antes que se possa entender como efetivamente dividir uma rede IP em sub-redes. Eu nunca encontrei uma boa maneira de discutir um tópico isoladamente. (Realmente, projetando uma rede IP com VLSM vem naturalmente e "faz sentido" depois de entender roteamento IP ...)
Evan Anderson

28
Não termine.
31413 Joseph Kern

3
+1 para o cargo mais abrangente já visto em serverfault
Scott Lundberg

3
Votado se apenas para a metáfora do odômetro. Agora eu sei explicar como o binário funciona para as pessoas.
Phuzion

142

Continua de: Como funciona a sub-rede IPv4?

Seu provedor de serviços de Internet fornece a faixa de identificação da rede 192.168.40.0/24 (11000000.10101000.00101000.00000000). Você sabe que gostaria de usar um dispositivo de firewall / roteador para limitar a comunicação entre diferentes partes da sua rede (servidores, computadores clientes, equipamentos de rede) e, como tal, gostaria de dividir essas várias partes da sua rede nas sub-redes IP (nas quais o dispositivo firewall / roteador pode rotear entre elas).

Você tem:

  • 12 computadores servidores, mas você pode obter até 50% mais
  • 9 interruptores
  • 97 computadores clientes, mas você pode obter mais

Qual é uma boa maneira de dividir 192.168.40.0/24 nessas partes?

Pensando em potências iguais a dois e trabalhando com o maior número possível de dispositivos, você pode criar:

  • 18 computadores servidores - O próximo maior poder de dois é 32
  • 9 interruptores - a próxima maior potência de dois é 16
  • 97 computadores clientes - O próximo maior poder de dois é 128

Em uma determinada sub-rede IP, há dois endereços reservados que não podem ser usados ​​como endereços IP de dispositivo válidos - o endereço com todos os zeros na parte do ID do host e o endereço com todos os zeros na parte do ID do host. Como tal, para qualquer sub-rede IP especificada, o número de endereços de host disponíveis é dois na potência de 32 menos o número de bits na máscara de sub-rede, menos 2. Portanto, no caso de 192.168.40.0/24, pode ver que a máscara de sub-rede possui 24 bits. Isso deixa 8 bits disponíveis para os IDs do host. Sabemos que 2 a 8 de potência é 256 - o que significa que 256 combinações possíveis de bits se encaixam em um slot de 8 bits de largura. Como as combinações "11111111" e "00000000" desses 8 bits não são permitidas para IDs de host, isso nos deixa com 254 hosts possíveis que podem ser atribuídos na rede 192.168.40.0/24.

Desses 254 hosts, parece que podemos encaixar os computadores clientes, comutadores e servidores nesse espaço, certo? Vamos tentar.

Você tem 8 bits de máscara de sub-rede para "brincar" (os 8 bits restantes do endereço IP 192.168.40.0/24 não são cobertos pela máscara de sub-rede fornecida pelo seu ISP). Temos que descobrir uma maneira de usar esses 8 bits para criar uma série de IDs de rede exclusivas que podem acomodar os dispositivos acima.

Comece com a maior rede - os computadores clientes. Você sabe que a próxima potência maior de dois do número de dispositivos possíveis é 128. O número 128, em binário, é "10000000". Felizmente para nós, isso se encaixa no slot de 8 bits que temos de graça (caso contrário, isso seria uma indicação de que nossa sub-rede inicial é muito pequena para acomodar todos os nossos dispositivos).

Vamos pegar nosso ID de rede, conforme fornecido pelo nosso ISP, e adicionar um único pedaço de máscara de sub-rede, dividindo-o em duas redes:

11000000.10101000.00101000.00000000 - 192.168.40.0 network ID
11111111.11111111.11111111.00000000 - Old subnet mask (/24)

11000000.10101000.00101000.00000000 - 192.168.40.0 network ID
11111111.11111111.11111111.10000000 - New subnet mask (/25)

11000000.10101000.00101000.10000000 - 192.168.40.128 network ID
11111111.11111111.11111111.10000000 - New subnet mask (/25)

Observe isso até que faça sentido. Aumentamos a máscara de sub-rede em um bit de comprimento, fazendo com que o ID da rede cubra um bit que teria sido usado para o ID do host. Como esse bit pode ser zero ou um, dividimos efetivamente nossa rede 192.168.40.0 em duas redes. O primeiro endereço IP válido na rede 192.168.40.0/25 será o primeiro ID do host com um "1" no bit mais à direita:

11000000.10101000.00101000.00000001 - 192.168.40.1 - First valid host in the 192.168.40.0/25 network

O primeiro host válido na rede 192.168.40.128 também será o primeiro ID do host com um "1 'no bit mais à direita:

11000000.10101000.00101000.10000001 - 192.168.40.129 - First valid host in the 192.168.40.128/25 network

O último host válido em cada rede será o ID do host com todos os bits, exceto o bit mais à direita definido como "1":

11000000.10101000.00101000.01111110 - 192.168.40.126 - Last valid host in the 192.168.40.0/25 network
11000000.10101000.00101000.11111110 - 192.168.40.254 - Last valid host in the 192.168.40.128/25 network

Dessa forma, criamos uma rede grande o suficiente para acomodar nossos computadores clientes e uma segunda rede que podemos aplicar o mesmo princípio para quebrar em redes ainda menores. Vamos fazer uma anotação:

  • Computadores clientes - 192.168.40.0/25 - IPs válidos: 192.168.40.1 - 192.168.40.126

Agora, para quebrar a segunda rede de nossos servidores e comutadores, fazemos o mesmo.

Temos 12 computadores servidores, mas podemos comprar até 6 mais. Vamos planejar o 18, que nos deixa a próxima potência mais alta de 2 como 32. Em binário, 32 é "100000", com 6 bits de comprimento. Temos 7 bits de máscara de sub-rede restantes em 192.168.40.128/25, portanto, temos bits suficientes para continuar "tocando". Adicionar mais um pouco de máscara de sub-rede nos dá mais duas redes:

11000000.10101000.00101000.10000000 - 192.168.40.128 network ID
11111111.11111111.11111111.10000000 - Old subnet mask (/25)

11000000.10101000.00101000.10000000 - 192.168.40.128 network ID
11111111.11111111.11111111.11000000 - New subnet mask (/26)
11000000.10101000.00101000.10000001 - 192.168.40.129 - First valid host in the 192.168.40.128/26 network
11000000.10101000.00101000.10111110 - 192.168.40.190 - Last valid host in the 192.168.40.128/26 network

11000000.10101000.00101000.11000000 - 192.168.40.192 network ID
11111111.11111111.11111111.11000000 - New subnet mask (/26)
11000000.10101000.00101000.11000001 - 192.168.40.193 - First valid host in the 192.168.40.192/26 network
11000000.10101000.00101000.11111110 - 192.168.40.254 - Last valid host in the 192.168.40.192/26 network

Então, agora dividimos 192.168.40.128/25 em mais duas redes, cada uma com 26 bits de máscara de sub-rede ou um total de 62 possíveis IDs de host - 2 ^ (32 - 26) - 2.

Isso significa que ambas as redes têm endereços suficientes para nossos servidores e switches! Vamos fazer anotações:

  • Servidores - 192.168.40.128/26 - IPs válidos: 192.168.40.129 - 192.168.40.190
  • Switches - 192.168.40.192/26 - IPs válidos: 192.168.40.193 - 192.168.40.254

Essa técnica é chamada mascaramento de sub-rede de comprimento variável (VLSM) e, se aplicada corretamente, faz com que os "roteadores principais" tenham tabelas de roteamento menores (por meio de um processo chamado "resumo da rota"). No caso de nosso ISP neste exemplo, eles podem não ter consciência de como sub-redemos 192.168.40.0/24. Se o roteador deles tiver um pacote vinculado para 192.168.40.206 (um de nossos comutadores), eles precisam saber apenas transmiti-lo ao roteador (já que 192.168.40.206 corresponde à identificação de rede e à máscara de sub-rede 192.168.40.0/24 na tabela de roteamento do roteador ) e nosso roteador o levará ao destino. Isso mantém nossas rotas de sub-rede fora de suas tabelas de roteamento. (Estou simplificando aqui, mas você entendeu.)

Você pode planejar redes muito grandes geograficamente da mesma maneira. Desde que você faça o "planejamento urbano" correto antecipadamente (antecipando o número de hosts em cada sub-rede com alguma precisão e olho no futuro), você poderá criar uma grande hierarquia de roteamento que, nos roteadores principais, "resumirá "para um número muito pequeno de rotas. Como vimos acima, quanto mais rotas estiverem na tabela de roteamento de um roteador, mais lento ele realiza seu trabalho. Projetar uma rede IP com VLSM e manter pequenas as tabelas de roteamento é uma coisa boa (tm).

O irrealismo dos exemplos

O mundo ficcional nesta resposta é, obviamente, ficcional. Normalmente, você pode criar sub-redes na Ethernet comutada moderna com mais hosts que 254 (dependendo do perfil de tráfego). Como foi apontado nos comentários, o uso de redes / 24 entre roteadores não é consistente com o Real Life (tm). Faz exemplos fofos, mas é um desperdício de espaço de endereço. Normalmente, uma rede / 30 ou a / 31 (consulte http://www.faqs.org/rfcs/rfc3021.html para obter detalhes sobre como o / 31 funciona - eles estão além do escopo desta resposta, com certeza). links estritamente ponto a ponto entre dois roteadores.


Pequeno erro: o código logo após "O último host válido ..." volta a chamá-lo de "o primeiro host válido". Presumo que ainda deva dizer "último".
precisa

@ JoeCool1986 - Boa captura.
Evan Anderson

2
Vou aprovar esta resposta para garantir que duas respostas sejam mantidas em ordem.
L46kok

Na parte em que você cria duas sub-redes a partir de 192.168.40.128 e cria um ID de rede 192.168.40.192, de onde veio o 192?
user6607

@ user6607 As sub-redes são contadas ao contrário (sem intervalos). Por exemplo, a primeira sub 0- rede é representada como 00000000. A segunda sub-rede é 128assim 10000000e a terceira sub 192- rede é representada como 11000000, etc. Continue contando para trás para encontrar novas sub-redes.
Joseph Kern

76

Sub-rede

A sub-rede não é difícil, mas pode ser intimidadora. Então, vamos começar com o passo mais simples possível. Aprendendo a contar em binário.

Binário

Binário é um sistema de contagem de base 2. Consistindo em apenas dois números (1 e 0). A contagem prossegue dessa maneira.

1 = 001 ( 0 + 0 + 1 = 1)
2 = 010 ( 0 + 2 + 0 = 2)
3 = 011 ( 0 + 2 + 1 = 3)
4 = 100 ( 4 + 0 + 0 = 4)
5 = 101 ( 4 + 0 + 1 = 5)

Portanto, se você imaginar que cada 1 é um espaço reservado para um valor (todos os valores binários são potências de dois)

1     1     1     1     1 = 31
16  + 8  +  4  +  2  +  1 = 31

Então ... 100000 = 32. E 10000000 = 128. AND 11111111 = 255.

Quando digo: "Tenho uma máscara de sub-rede 255.255.255.0", quero dizer realmente: "Tenho uma máscara de sub-rede 11111111.11111111.11111111.00000000". Usamos sub-redes como uma mão curta.

Os períodos no endereço separam a cada 8 dígitos binários (um octeto). É por isso que o IPv4 é conhecido como um espaço de endereço de 32 bits (8 * 4).

Por que sub-rede?

Os endereços IPv4 (192.168.1.1) estão em falta. A sub-rede nos fornece uma maneira de aumentar a quantidade de redes (ou hosts) disponíveis. Isso ocorre por razões administrativas e técnicas.

Cada endereço IP é dividido em duas partes separadas, a rede e o host. Por padrão, um endereço de classe C (192.168.1.1) usa os três primeiros octetos (192.168.1) para a parte da rede do endereço. e o 4º octeto (.1) como parte do host.

Por padrão, um endereço IP e uma máscara de sub-rede para um endereço de Classe C são parecidos com este

IP     192.168.1.1 
Subnet 255.255.255.0

Em binário como este

IP     11000000.10101000.00000001.00000001
Subnet 11111111.11111111.11111111.00000000

Veja o exemplo binário novamente. Observe como eu disse que os três primeiros octetos são usados ​​para a rede? Observe como a parte da rede é unificada? Isso é tudo o que é sub-rede. Vamos expandir.

Dado que tenho um único octeto para minha parte do host (no exemplo acima). Só posso ter 256 hosts (256 é o valor máximo de um octeto, contando de 0). Mas há outro pequeno truque: você precisa subtrair 2 endereços de host dos disponíveis (atualmente 256). O primeiro endereço no intervalo será para a rede (192.168.1.0) e o último endereço no intervalo será a transmissão (192.168.1.255). Então você realmente tem 254 endereços disponíveis para hosts em uma rede.

Um estudo de caso

Digamos que eu lhe dei o seguinte pedaço de papel.

Create 4 networks with 192.168.1.0/24.

Vamos dar uma olhada nisso. O / 24 é chamado de notação CIDR. Em vez de referenciar o 255.255.255.0, apenas referenciamos os bits que precisamos para a rede. Nesse caso, precisamos de 24 bits (3 * 8) de um endereço de 32 bits. Escrevendo isso em binário

11111111.11111111.11111111.00000000 = 255.255.255.0
8bits   + 8bits  + 8bits  + 0bits   = 24bits

Em seguida, sabemos que precisamos descobrir quantas sub-redes precisamos. Parece 4. Como precisamos criar mais redes (atualmente só temos uma), vamos inverter alguns bits

11111111.11111111.11111111.00000000 = 255.255.255.0   = 1 Network OR /24
11111111.11111111.11111111.10000000 = 255.255.255.128 = 2 Networks OR /25
11111111.11111111.11111111.11000000 = 255.255.255.192 = 4 Networks (remember powers of 2!) OR /26

Agora que decidimos um / 26, vamos começar a alocar hosts. Um pouco de matemática simples:

32(bits) - 26(bits) = 6(bits) for host addresses.

Temos 6 bits para alocar em cada rede para hosts. Lembrando que precisamos subtrair 2 para cada rede.

h = host bits    
2^h - 2 = hosts available

2^6 - 2 = 62 hosts 

Finally we have 62 hosts in 4 networks, 192.168.1.0/26

Agora precisamos descobrir para onde os hosts vão. De volta ao binário!

11111111.11111111.11111111.00,000000 [the comma is the new network/hosts division]

Begin to calculate:

11000000.10101000.00000001.00,000000 = 192.168.1.0 [First IP = Network Adress]
11000000.10101000.00000001.00,000001 = 192.168.1.1 [First Host IP]
11000000.10101000.00000001.00,000010 = 192.168.1.2 [Second Host IP]
11000000.10101000.00000001.00,000011 = 192.168.1.3 [Third Host IP]

And so on ... until ...

11000000.10101000.00000001.00,111110 = 192.168.1.62 [Sixty Second Host IP]
11000000.10101000.00000001.00,111111 = 192.168.1.63 [Last IP = Broadcast Address]

So ... On to the NEXT network ....

11000000.10101000.00000001.01,000000 = 192.168.1.64 [First IP = Network Address]
11000000.10101000.00000001.01,000001 = 192.168.1.65 [First Host IP]
11000000.10101000.00000001.01,000010 = 192.168.1.66 [Second Host IP]

And so on ... until ...

11000000.10101000.00000001.01,111110 = 192.168.1.126 [Sixty Second Host IP]
11000000.10101000.00000001.01,111111 = 192.168.1.127 [Last IP = Broadcast Address]

So ... On to the NEXT network ....

11000000.10101000.00000001.10,000000 = 192.168.1.128 [First IP = Network Address]
11000000.10101000.00000001.10,000001 = 192.168.1.129 [First Host IP]

Etc ...

Dessa forma, você pode calcular toda a sub-rede.

Curingas Uma máscara de curinga é uma máscara de sub-rede invertida.

11111111.11111111.11111111.11000000 = 255.255.255.192 [Subnet]
00000000.00000000.00000000.00111111 = 0.0.0.63 [Wild Card]

Mais distante

Google para os termos 'super-compensação' e 'VLSM (máscara de sub-rede de comprimento variável)', para tópicos mais avançados.

Agora vejo que demorei muito a responder ... suspiro


1
"Dado que eu tenho um único octeto para minha parte do host (no exemplo acima). SOMENTE posso ter 255 hosts (255 é o valor máximo de um octeto). Mas há outro pequeno truque: você precisa subtrair 2 endereços de host disponíveis (atualmente 255) O primeiro endereço no intervalo será para a rede (192.168.1.0) e o último endereço no intervalo será a transmissão (192.168.1.255). Portanto, você realmente tem 253 endereços disponíveis para hosts em uma rede. "... Isso está incorreto.
joeqwerty

1
Existem 256 valores possíveis para o octeto: 0 a 255, para um total de 256. 256 -2 (endereços de rede e broadcast) = 254 endereços possíveis de host.
joeqwerty

Opa Obrigado! :-) Por um lado, não tenho ideia de como consegui esse feito em particular.
Joseph Kern

1
-1 Desculpe, mas não existem "Classes" desde a RFC 1519 em 1993, ninguém deveria estar falando sobre elas fora de um contexto histórico. Eles são confusos e causam muitos equívocos.
Chris S

Chris, você provavelmente está certo, mas as aulas ainda eram ministradas no início dos anos 2000 no CCNA e na maioria dos cursos de graduação.
Joseph Kern

34

Uma breve lição de história: originalmente, os endereços IPv4 unicast foram divididos em 3 classes, cada uma com um comprimento de máscara 'padrão' associado (chamada de máscara de sub-rede classful)

  • Classe A: qualquer coisa no intervalo 1.0.0.0 -> 127.255.255.255. Máscara de sub-rede classful de 255.0.0.0 (/ 8 na notação CIDR)
  • Classe B: qualquer coisa no intervalo 128.0.0.0 -> 191.255.255.255. Máscara de sub-rede classful de 255.255.0.0 (/ 16 na notação CIDR)
  • Classe C: qualquer coisa no intervalo 192.0.0.0 -> 223.255.255.255. Máscara de sub-rede com classe de 255.255.255.0 (/ 24 na notação CIDR)

A idéia era que organizações de tamanhos diferentes pudessem receber uma classe diferente de endereço IP, para fazer uso eficiente do espaço de endereço IP.

No entanto, à medida que as redes IP cresceram, ficou claro que essa abordagem apresentava problemas. Para citar apenas três:

Em um mundo de classe, todas as sub-redes tinham que ter uma máscara de / 8, / 16 ou / 24. Isso significava que a menor sub-rede que podia ser configurada era a / 24, que permitia 254 endereços de host (0,0 e 0,255 sendo reservados como os endereços de rede e transmissão, respectivamente). Isso foi tremendamente inútil, principalmente em links ponto a ponto com apenas dois roteadores conectados a eles.

Mesmo após o relaxamento dessa restrição, os protocolos de roteamento anteriores (por exemplo, RIPv1 ) não anunciaram o comprimento da máscara associado a um prefixo IP. Na ausência de uma máscara específica, ela usaria a máscara de uma interface diretamente conectada na mesma rede de classe ou voltaria a usar a máscara de classe. Por exemplo, se você quisesse usar a rede 172.16.0.0 para links entre roteadores com máscaras / 30, todas as sub-redes de 172.16.0.0 a 172.16.255.255 teriam que ter uma máscara / 30 (16384 sub-redes, cada uma com 2 IPs utilizáveis )

As tabelas de roteamento dos roteadores da Internet começaram a ocupar cada vez mais memória; isso foi / é conhecido como "explosão da tabela de roteamento". Se um provedor tivesse 16 redes / 24 contíguas, por exemplo, precisaria anunciar todos os 16 prefixos, em vez de um único resumo que abrangesse todo o intervalo.

Dois refinamentos relacionados nos permitiram ir além das limitações acima.

  1. Máscaras de sub-rede de comprimento variável (VLSM)
  2. CIDR (roteamento entre domínios sem classe)

VLSM refere-se à capacidade de um protocolo de roteamento para suportar diferentes máscaras de sub-rede dentro da mesma rede de classe. Por exemplo:

192.168.1.0/24

Pode ser dividido em:

192.168.1.0/25
192.168.1.128/26
192.168.1.192/27
192.168.1.224/27

O que permitiu um uso muito mais eficiente do espaço de endereço; as sub-redes podem ser dimensionadas corretamente para o número de hosts / roteadores que seriam anexados a elas.

O CIDR pega o VLSM e o estende para o outro lado; além de dividir uma única rede de classe em sub-redes menores, o CIDR permite a agregação de várias redes de classe em um único resumo. Por exemplo, as seguintes redes de classe B (/ 16):

172.16.0.0/16
172.17.0.0/16
172.18.0.0/16
172.19.0.0/16

Pode ser agregado / resumido com um único prefixo:

172.16.0.0/14

Em termos de sub-rede: uma máscara de sub-rede tem 32 bits. O comprimento da máscara indica quantos bits identificam a parte da rede do endereço. Por exemplo:

10.1.1.0/24
  • A máscara de sub-rede classful é / 8
  • A máscara de sub-rede real é / 24
  • 16 bits (24-8) foram "emprestados" para o uso de sub-redes.

Isso significa que, supondo que toda a rede 10.0.0.0/8 esteja com sub-rede em / 24s, haverá 65536 (2 ^ 16) sub-redes dentro desse intervalo. (Isso pressupõe que a plataforma que você está usando suporta números de sub-rede de 0 e 255. Consulte sub-rede IP da Cisco zero).

Restam 8 bits na 'parte do host' do endereço. Isso significa que existem 256 endereços IP disponíveis (2 ^ 8), dos quais 2 são reservados (10.1.1.0 é o endereço de rede, 10.1.1.255 é o endereço de broadcast direcionado à sub-rede). Isso deixa 254 endereços IP utilizáveis ​​nesta sub-rede. ((2 ^ 8) - 2)


4
Na verdade, havia 5 aulas.
Dbnett

5
É verdade, mas precisamos realmente entrar no endereçamento de classe E reservado e multicast para uma pergunta de "introdução à sub-rede"? :)
Murali Suriar

2
Você trouxe a história para uma pergunta introdutória ... Então a deixou incompleta. Não tenho certeza qual é pior.
Chris S

7

Intervalos de rede: as redes são sempre referenciadas por 2 números: um para determinar a rede e outro para determinar qual computador (ou host) está nessa rede. Como cada endereço de nertwork tem 32 bits, os dois números devem caber nesses 32 bits.

A numeração da rede é importante, pois é isso que a ICANN distribui quando você solicita um intervalo de IP da rede. Se não o tivéssemos, ninguém seria capaz de dizer a diferença entre minha rede e a AT & Ts. Portanto, embora esses números devam ser únicos, ninguém mais deseja atribuir números aos hosts que estão na minha rede. Daí a divisão - a primeira parte é gerenciada pelo pessoal da rede, a segunda parte é toda minha para dar às máquinas que eu quiser.

O número da rede não é fixo em um determinado número de bits - por exemplo, se eu tivesse apenas 200 máquinas para me gerenciar, ficaria perfeitamente feliz com um número de rede que usava 24 bits, deixando-me apenas 8 bits para mim. - o suficiente para até 255 hosts. Como o número da rede usa 24 bits, podemos ter muitos deles, o que significa que muitas pessoas podem ter suas próprias redes.

No passado, isso era chamado de rede de classe C. (a classe B usou 16 bits para o número da rede e a classe A usou 8 bits, portanto, existem apenas algumas redes da classe A).

Atualmente, essa convenção de nomes ficou fora de moda. Foi substituído pelo conceito chamado CIDR. O CIDR coloca explicitamente o número de bits para seus hosts após a barra. Portanto, meu exemplo acima (a classe C) agora é chamado de CIDR / 24.

Isso nos dá um pouco mais de flexibilidade; antes, se eu tivesse 300 hosts para gerenciar, precisaria de uma rede classe B! Agora, posso obter um / 23 CIDR, então tenho 9 bits para mim e 23 bits para o número da rede. A ICANN pode não ter esse tipo de rede, mas se eu tenho uma interna ou estou alugando uma rede parcial de um ISP, isso facilita o gerenciamento - especialmente porque todos os clientes podem receber um / 29 (deixando-me. 3 bits ou no máximo 8 máquinas), o que permite que mais pessoas tenham sua própria fatia dos endereços IP disponíveis. Até obtermos o IPv6, isso é muito importante.


No entanto ... enquanto eu sei que um / 24 CIDR é o equivalente à antiga rede de Classe C, e um / 16 é de classe B e a / 8 é de classe A ... Ainda estou perplexo tentando calcular um / 22 em minha cabeça. Felizmente, existem ferramentas que fazem isso por mim :)

No entanto - se você sabe que um / 24 é 8 bits para hosts (e 24 bits para rede), eu sei que um / 23 me fornece um bit extra que dobra o número de hosts.


-1 Desculpe, mas mencionar classes fora de uma referência "histórica" ​​é inapropriado atualmente. Eles não "saíram de moda", foram oficialmente reprovados pela RFC 1519 em 1993. Eles são confusos como todo mundo e causam muitos equívocos.
Chris S

Algumas implementações de protocolos de roteamento dinâmico são resumidas em limites de classe, portanto, ainda é útil conhecê-los.
Ben

5

Vou colocar e responder algumas perguntas relacionadas ao longo do caminho:

  • Por que você vê com 255.255.255.0tanta frequência?
  • Por que 192.168.0.1?
  • Por que 127.0.0.1?

Por que números tão estranhos - 255, 192, 168, 127?


8 + 8 + 8 + decimal pontilhado de 8 bits

Endereços da Internet como 194.60.38.10 usam notação decimal com pontos para dividir 32 bits em 8 + 8 + 8 + 8 bits. Decimal pontilhado significa converter cada número em binário e preenchê-lo à esquerda com 0's.

Por exemplo .60.→ 60 = 32 + 16 + 8 + 4 → 111100.00111100..

Portanto, 194.60.38.10 é decimal com pontos para o endereço 4 × 8 = 32 bits 11000010.00111100.00100110.00001010, desde 38 → 100110, 10 → 1010e assim por diante. 194 requer todos os 8 bits; o resto é acolchoado.

acolchoado

Depois de pensar em 255, 192 e 127 em binário de 8 bits, você poderá entender mais facilmente por que certos números decimais são tão comuns:

  • 255 = 11111111
  • 192 = 11000000
  • 127 = _1111111
  • 128 = 10000000

Esses números decimais representam blocos visualmente convenientes de 8 bits, como ■■■■■■■■, ■ □□□□□□ e □ ■■■■■■■. Portanto, você nunca viu 256 = 2⁹ por causa do limite de 8 bits e 127 = 128−1 = 2⁸-1 é a inversão de bits de uma potência de dois - e a potência de dois está 10………00000em binário.

  • 168 = 10101000

Máscaras de sub-rede: o que é meu é meu + O que é seu é seu

As máscaras de sub-rede dividem cada endereço da Internet de 32 bits em uma identificação de rede e uma identificação de host. Enquanto os endereços da Internet podem ter qualquer combinação de 1 e 0, as máscaras de sub-rede começam com apenas 1 e terminam com apenas 0.

■■□□□□■□|□□■■■■□□|□□■□□■■□|□□□□■□■□ IP
■■■■■■■■|■■■■■■■■|■■■■■■■■|□□□□□□□□ subnet

Escurecer os primeiros 8 + 8 + 8 = 24 bits e apagar os 8 bits finais é uma maneira de dividir o IP ■■ □□□□ ■ □ | □□ ■■■■ □□ | □□ ■ □□ ■ ■ □ | □□□□ ■ □ ■ □ em duas partes:

■■□□□□■□|□□■■■■□□|□□■□□■■□          network
                             □□□□■□■□ host

Se o proprietário da sub-rede (por exemplo, OmniCorp ) quisesse mais IPs internos, poderia comprar mais (por exemplo, 8 + 8 = 16 bits) do lado direito da rede, assim:

■■□□□□■□|□□■■■■□□|□□■□□■■□|□□□□■□■□ IP
■■■■■■■■|■■■■■■■■|□□□□□□□□|□□□□□□□□ subnet
■■□□□□■□ □□■■■■□□                    network
                   □□■□□■■□ □□□□■□■□ host

Claramente, há uma troca no espaço de endereço de 32 bits = 2³² = 4.294.967.296 da opção: se você comprar mais IDs de rede (lado esquerdo), sua rede interna terá mais IDs de host (lado direito) para atribuir.

Pessoas baratas, portanto, têm uma máscara de sub-rede de

255.255.255.0 = ■■■■■■■■ | ■■■■■■■■ | ■■■■■■■■ | □□□□□□□□.

Pessoas ainda mais baratas têm

255.255.255.128 = ■■■■■■■■ | ■■■■■■■■ | ■■■■■■■ | ■■■■■■■■ | ■ □□□□□□□

ou 255.255.255.192 = ■■■■■■■■ ■■■■■■■■ ■■■■■■■■ ■■■■■■■■ ■ ■ □□□□□□.

De acordo com o folclore, na verdade não era Roger Miller, mas um administrador de sistemas humilde com uma máscara 255.255.255.254 que originalmente escreveu King of the Road , substituindo "Não tenho uma grande sub-rede" por "Não tenho cigarros ”.

Eu fumo meus cigarros até a ponta

(Por que as máscaras dos humildes são preenchidas com números tão altos? Porque, como o narrador de Miller, as máscaras de sub-rede contam todas as coisas que você não possui.)


O que significa a barra final após um IP? (por exemplo, 194.60.38.10/24)

Como as máscaras de sub-rede (que dividem "deles" dos "nossos") sempre começam com 1as e, como odiamos resumir potências de dois ainda mais do que odiamos figurar potências de dois em primeiro lugar, alguém inventou CIDR (a barra após um IP).

194.60.38.10/24 significa "a sub-máscara tem 24, e o resto são zeros", então

■■■■■■■■ | ■■■■■■■■ ■■■■■■■■ | □□□□□□□□ com 8 + 8 + 8 bits pertencentes a "eles" e 8 bits pertencente a "nós".

Invertendo o hino do vagabundo acima,

  • /31 é o compositor
  • /24é de classe média ( 255.255.255.0= ■■■■■■■■ | ■■■■■■■■ | ■■■■■■■■ | □□□□□□□□
  • /16 é rico ■■■■■■■■ | ■■■■■■■■ | □□□□□□□□ | □□□□□□□□
  • /8 é super rico ■■■■■■■■ | □□□□□□□□ | □□□□□□□□ | □□□□□□□□
  • /1ou /0seria a IANA ou algo assim.





† Use bc -l; obase=10; 60por exemplo.


Que relação com a resposta as figuras contêm? É apenas para se concentrar na resposta? :)
simhumileco

4

Embora o acima esteja correto (desculpe, TL; DR), o cálculo de sub-redes ainda causa muitos administradores de rede em sofrimento. Na verdade, existe uma maneira muito fácil de fazer o cálculo de sub-rede, você pode fazer a maior parte disso na sua cabeça e há muito pouco que precisa memorizar. Para a maioria dos aplicativos, nem é necessário entender a representação binária, embora seja útil para um entendimento completo das sub-redes. Aqui vou discutir apenas o IPv4; O IPv6 está fora do escopo desta discussão.

Lembre-se disso:

Há três coisas importantes a serem lembradas: todas as sub-redes são baseadas em potências de duas e existem dois números-chave: 256 e 32. Mais sobre isso mais tarde.

Primeiro, vamos olhar para uma tabela contendo potências de 2:

2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
2^7 = 128
2^8 = 256

Calcular potências de 2 é fácil: cada aumento inteiro na potência duplica o resultado. 1 + 1 = 2, 2 + 2 = 4, 4 + 4 = 8, 8 + 8 = 16 e assim por diante. O número total de endereços em uma sub-rede deve ser sempre uma potência de 2 .

Como cada octeto de uma sub-rede IPv4 chega a 256, 256 é um número muito importante e forma a base para o restante da matemática.

Dimensionando a sub-rede

Começaremos com uma pergunta fácil: "quantos endereços em uma sub-rede se a máscara for 255.255.255.248?" Vamos ignorar os três primeiros octetos por enquanto e ver o último. Aqui está como é fácil: subtrair 248 de 256. 256 menos 248 é igual a 8. Há 8 endereços disponíveis (incluindo os endereços de rede e transmissão). O inverso também funciona: "se eu quiser ter uma sub-rede com 16 endereços, qual será a máscara de sub-rede?" 256 menos 16 é igual a 240. A máscara de sub-rede será 255.255.255.248.

Agora, se queremos expandir para além de 256 endereços (historicamente, uma "classe C"), fica um pouco mais complicado: se nosso último octeto for 0 e nosso terceiro octeto for, digamos, 240, (255.255.240.0), fazemos as contas no terceiro octeto e descobrimos que haveriam 16 endereços. Portanto, multiplicamos 16 por 256 (o número de endereços no último octeto) para obter 4.096. Se os dois últimos octetos forem 0, (por exemplo, 255.240.0.0), obteremos o resultado da subtração do segundo octeto (diremos que são 16 novamente), multiplicaremos 256 (endereços no terceiro octeto), multiplicaremos novamente por 256 (endereços no último octeto) para obter 1.048.576 endereços. Fácil assim! (OK, então o inverso é um pouco mais difícil. Se quisermos uma sub-rede com 1.048.576 endereços, teremos que dividir esse número por 256 algumas vezes para obter um número que podemos subtrair de 256.)

Endereço de rede

Agora que sabemos como calcular a máscara de sub-rede, como podemos descobrir qual é o endereço de rede? Isso é fácil: é sempre um múltiplo do número de endereços em nossa sub-rede. Portanto, se tivermos 16 endereços em nossa sub-rede, os possíveis endereços de rede serão 0, 16, 32, 48, 64 e assim por diante até 240. (Observe que 0 é um múltiplo válido de qualquer número, como qualquer número multiplicado por 0 é igual a 0.)

E, é claro, o endereço de transmissão será o último endereço no escopo. Portanto, se tivermos 16 endereços em nossa sub-rede e escolhermos um endereço de rede 10.3.54.64, o endereço de broadcast será (64 + 16-1 = 79) 10.3.54.79.

Notação CIDR

Então, e a notação CIDR? Como traduzir isso de e para uma máscara de sub-rede no estilo IPv4?

Lembra dos nossos poderes de dois? Bem, agora temos outro número de chave para lembrar, além de 256: 32. Lembre-se de que a notação CIDR descreve o número de bits significativos no endereço IPv4 e há 32 bits em um endereço IPv4, 8 para cada octeto. Portanto, se tivermos uma máscara de sub-rede 255.255.255.240, serão 16 endereços. Se olharmos para a nossa tabela "potências de 2" acima, veremos que 16 é de duas a quarta potência (2 ^ 4). Portanto, subtraímos esse número de potência - 4 - de 32 e obtemos 28. Nossa notação CIDR para uma máscara de sub-rede 255.255.255.240, nossa notação CIDR é / 28.

E se recebermos um CIDR de / 28, subtraímos (28) de 32 para obter 4; aumente 2 para esse (quarto) poder (2 ^ 4) para obter 16; subtraia isso (16) de 256 para obter 240; ou 255.255.255.240.


obrigado. Mas ainda estou confuso sobre como o PC usa a máscara de sub-rede. Quando um aplicativo em um PC deseja enviar dados, ele os encapsula em um pacote. A máscara de sub-rede determina como um pacote é encapsulado? Por exemplo, se o PC quisesse enviar um pacote na rede local, usaria um quadro ethernet en.wikipedia.org/wiki/Ethernet_frame e, se quisesse fora da rede, usaria um pacote tcp en.wikipedia.org/wiki / ... ?
aquagremlin

Basicamente, eu não sei como um pc determina para onde enviar seus dados. A rede ethernet é como um ônibus - vai para todo lugar. A saída de um pacote pela tomada Ethernet de um PC é um evento genérico - portanto, o próprio pacote precisa determinar quem responde a ele. Um pacote destinado a ser capturado por um dispositivo local (switch ou outro PC na LAN) deve parecer diferente de um pacote que será coletado por um roteador.
Aquagremlin 21/05

Isso acontece em uma camada abaixo do TCP. Cada dispositivo possui um endereço de hardware (MAC) associado a um endereço IP na tabela ARP de cada dispositivo. Isso é construído através da descoberta. Quando um pacote é destinado a um host na rede local, é marcado com o MAC para o dispositivo de destino. Quando um pacote é destinado a um host remoto, ele é marcado com o MAC do roteador na rede local. À medida que passa pelo roteador, o MAC é removido e, em seguida, marcado com o MAC do roteador do próximo salto. A sub-rede apenas define o escopo da rede local. (Essa é a simples <500 versão personagem.)
Jonathan J

2

Eu também acho que, pelo menos, deve haver uma menção aos NATs, porque eles são usados ​​com tanta frequência em redes modernas no lugar de Sub-redes, devido à exaustão de endereços IPv4, entre outras coisas. (Além disso, quando eu estava aprendendo sobre sub-redes, fiquei muito confuso sobre como a sub-rede se relaciona com as redes criadas pelos roteadores WiFi).

NAT (tradução de endereços de rede) é uma técnica (geralmente) usada para criar redes privadas mapeando um espaço de endereço (IP: porta) para outro. Principalmente, isso é usado para criar uma rede privada de vários IPs privados atrás de um endereço público, por exemplo, em roteadores Wifi, por organizações (como uma universidade ou uma corporação) ou, às vezes, por ISPs.

A conversão de endereço real é feita de forma transparente em nós compatíveis com NAT, geralmente roteadores. Pode ser de várias formas, Cone completo, Endereço restrito, Porta restrita etc. ou uma mistura deles, que determina como as conexões através do nó podem ser iniciadas.

Detalhes completos podem ser encontrados na Wikipedia , mas, por exemplo, considere um roteador Wifi com 2 dispositivos conectados a ele. O IP público do roteador é 10.9.20.21/24, e o IP dos dispositivos (IPs privados) são A: 192.168.0.2, B: 192.168.0.3e o do roteador R: 192.168.0.1. Portanto, se Adesejar conectar-se ao servidor S: 10.9.24.5/24(que está de fato em uma sub-rede diferente, escreva o roteador aqui):

  1. A envia um pacote IP para R(que seria o gateway padrão) com o IP de origem 192.168.0.2, a porta src (por exemplo) 14567e o IP de destino: 10.9.24.5(embora a porta seja realmente uma parte do cabeçalho TCP).
  2. O roteador (que é compatível com NAT) mapeia a porta 14567para o dispositivo Ae altera a fonte no pacote IP para 10.9.20.21(que é o IP público do roteador). Isso contrasta com as sub-redes descritas acima, onde os pacotes IP nunca são realmente alterados .
  3. Srecebe a série de pacotes TCP (com src IP:, 10.9.20.21src Port:) 14567e envia pacotes de resposta com esses valores nos campos de destino.
  4. Rverifica a porta de destino, que é 14567e encaminha o pacote para A.
  5. A recebe o pacote de resposta.

Na situação acima, se Btentasse abrir uma conexão na mesma porta de origem ( 14567), ela seria mapeada para uma porta diferente por R(e a porta no pacote de saída mudaria) antes de enviar para S. Ou seja, também haveria tradução de portas em vez de apenas IP.

Duas coisas a serem observadas aqui:

  1. Devido a essa conversão de endereço, muitas vezes não é possível iniciar uma conexão com dispositivos na rede privada sem usar algumas técnicas especiais.
  2. A restrição no total de conexões TCP do mesmo dispositivo para um servidor (65536 = 2 ^ 16) agora se aplica coletivamente a todos os dispositivos atrás do NAT, no formato NAT usado acima.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.