Esta é uma pergunta canônica sobre sub-redes IPv4.
Relacionado:
Como funciona a sub-rede e como você faz isso manualmente ou na sua cabeça? Alguém pode explicar conceitualmente e com vários exemplos? O Server Fault recebe muitas perguntas de lição de casa sobre sub-redes, então podemos usar uma resposta para apontá-los para o próprio Server Fault.
- Se eu tiver uma rede, como descubro como dividi-la?
- Se eu receber uma máscara de rede, como saberei qual é o intervalo de rede para ela?
- Às vezes há uma barra seguida de um número, qual é esse número?
- Às vezes há 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?
As sub-redes IP existem para permitir que os roteadores escolham os destinos apropriados para os pacotes. Você pode usar sub-redes IP para dividir redes maiores por motivos lógicos (firewall, etc.) ou necessidade física (domínios de broadcast menores, etc).
Simplificando, porém, os roteadores IP usam suas sub-redes IP para tomar decisões de roteamento. Entenda como essas decisões funcionam e você poderá 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 ficaram: Que vergonha por não ser fluente 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 contar até 1!
Pense no "odômetro" de um carro, exceto que, ao contrário de um hodômetro tradicional, cada dígito só pode contar até 1 a partir de 0. Quando o carro é novo da fábrica, o hodômetro lê "00000000".
Quando você dirige sua primeira milha o hodômetro lê "00000001". Até agora tudo bem.
Quando você percorreu sua segunda milha, o primeiro dígito do hodômetro volta para "0" (já que seu valor máximo é "1") e o segundo dígito do hodômetro volta para "1", fazendo o odômetro ler " 00000010". Parece o número 10 em notação decimal, mas na verdade é 2 (o número de milhas que você dirigiu até agora) em notação binária.
Quando você percorreu a terceira milha, o hodômetro mostra "00000011", já que o primeiro dígito do hodômetro gira novamente. O número "11", em notação binária, é o mesmo que o número decimal 3.
Finalmente, quando você dirigiu sua quarta milha, ambos os dígitos (que estavam lendo "1" no final da terceira milha) voltam para a posição zero, e o terceiro dígito sobe para a posição "1", dando-nos " 00000100". Essa é a representação binária do número decimal 4.
Você pode memorizar tudo isso se quiser, mas só precisa entender como o pequeno odômetro "rola" à medida que o número que está contando aumenta. É exatamente o mesmo que a operação de um odômetro decimal tradicional, exceto que cada dígito só pode ser "0" ou "1" em nosso "odômetro binário" fictício.
Para converter um número decimal em binário, você pode rolar o hodômetro para frente, tique por tique, contando em voz alta até rolar um número de vezes igual ao número decimal que deseja converter para binário. O que quer que seja exibido no hodômetro depois de toda essa contagem e rolagem seria a representação binária do número decimal que você contou.
Como você entende como o hodômetro rola para frente, também entenderá como ele rola para trás. Para converter um número binário exibido no odômetro de volta para decimal, você pode rolar o odômetro para trás um tique por vez, contando em voz alta até que o odômetro leia "00000000". Quando toda essa contagem e rolagem estiver concluída, o último número que você disser em voz alta será a representação decimal do número binário com o qual o hodômetro começou.
Converter valores entre binários e decimais dessa maneira seria muito tedioso. Você poderia fazer isso, mas não seria muito eficiente. É mais fácil aprender um pequeno algoritmo para fazê-lo mais rápido.
Um aparte rápido: Cada dígito em um número binário é conhecido como um "bit". Isso é "b" de "binário" e "it" de "dígito". Um pouco é um b nary escavá -lo .
Converter um número binário como, digamos, "1101011" para decimal é um processo simples com um pequeno algoritmo útil.
Comece contando o número de bits no número binário. Neste caso, são 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", pois sempre começaremos com "1". No próximo slot à esquerda digite o dobro do valor no slot à direita (portanto, "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 as potências de 2, à medida que fizer isso cada vez mais. Estou bem até 131.072 na minha cabeça, mas geralmente preciso de uma calculadora ou papel depois disso).
Então, você deve ter o seguinte em seu papel em seus pequenos slots.
Transcreva os bits do número binário abaixo dos slots, assim:
Agora, adicione alguns símbolos e calcule a resposta para o problema:
Fazendo todas as contas, você deve chegar a:
Isso é tudo. "1101011" em decimal é 107. São apenas passos simples e matemática fácil.
Converter decimal em binário é tão fácil e é o mesmo algoritmo básico, executado ao contrário.
Digamos que queremos converter o número 218 para binário. Começando à direita de uma folha de papel, escreva o número "1". À esquerda, dobre esse valor (portanto, "2") e continue se movendo 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:
Você parou de escrever números em 128 porque dobrar 128, o que lhe daria 256, seria maior do que o número sendo convertido (218).
Começando pelo número mais à esquerda, escreva "218" acima dele (128) e pergunte a si mesmo: "218 é maior ou igual a 128?" Se a resposta for sim, risque um "1" abaixo de "128". Acima de "64", escreva o resultado de 218 menos 128 (90).
Olhando para "64", pergunte-se: "90 é maior ou igual a 64?" É, então você escreveria um "1" abaixo de "64", então subtrairia 64 de 90 e escreveria isso acima de "32" (26).
Quando você chegar a "32", no entanto, descobrirá que 32 não é maior ou igual a 26. Nesse caso, escreva um "0" abaixo de "32", copie o número (26) de acima de 32" para acima " 16" e continue fazendo a mesma pergunta com o restante dos números.
Quando estiver tudo pronto, você deve ter:
Os números no topo são apenas notas usadas na computação e não significam muito para nós. Na parte inferior, porém, 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 para 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 na "123 Main Street", fica muito claro para você, como humano, que deseja ir ao prédio numerado "123" na rua chamada "Main Street". É fácil saber que você precisa ir ao quarteirão 100 da Main Street porque o número do prédio está entre 100 e 199 e a maioria dos quarteirões da cidade são numerados em centenas. Você "simplesmente sabe" como dividir o endereço.
Os roteadores entregam pacotes, não pizza. Seu trabalho é o mesmo de um motorista de pizza: levar a carga (pacotes) o mais próximo possível do destino. Um roteador é 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 de destino em seus componentes "nome da rua" e "número do prédio", assim como o motorista de 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 de "número do prédio" (como "123" no exemplo acima) chamado de "ID do host" e um componente de "nome da rua" (como "Rua principal" no exemplo acima) chamado de "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 de 255.255.192.0".
Os roteadores IP "simplesmente sabem" como dividir os endereços IP nessas partes componentes para tomar decisões de roteamento. Como entender como os pacotes IP são roteados depende da compreensão desse processo, também precisamos saber como dividir 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 você ainda não aprendeu a fazer isso em sua cabeça, mas anote como fazê-lo - é muito, muito fácil e impressiona o sexo oposto em partidos):
Escreva a máscara de sub-rede em binário também:
Escrito lado a lado, você pode ver que o ponto na máscara de sub-rede onde os "1s" param "se alinham" a 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:
Os roteadores usam a máscara de sub-rede para "mascarar" os bits cobertos por 1s no endereço IP (substituindo os bits que não estão "mascarados" por 0s) para extrair o ID da rede:
Da mesma forma, usando a máscara de sub-rede para "mascarar" os bits cobertos por 0s no endereço IP (substituindo os bits que não estão "mascarados" por 0s novamente) um roteador pode extrair o ID do host:
Não é tão fácil para nossos olhos humanos ver a "interrupção" entre o ID da rede e o ID do host como é entre o "número do prédio" e o "nome da rua" em endereços físicos durante a entrega de pizza, mas o efeito final é o mesmo.
Agora que você pode dividir endereços IP e máscaras de sub-rede em IDs de host e IDs de rede, você pode rotear IP exatamente como um roteador faz.
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 notação "Classless Inter-Domain Routing" (CIDR). "255.255.255.0" é composto de 24 bits de 1s 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 com pontos, 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 "antigos tempos", as máscaras de sub-rede não eram especificadas, mas sim derivadas da observação de certos 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 de 255.0.0.0 (chamado 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 aprender mais sobre elas, a menos que você tenha a infelicidade de lidar com equipamentos muito antigos ou protocolos antigos (como RIPv1) que não suportam endereçamento IP sem classes. Não vou mencionar mais essas "classes" de endereços porque não é aplicável hoje 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 0s onde haveria 1s e 1s onde haveria 0s. A "máscara curinga" de um /26 é:
Normalmente, você vê "máscaras curinga" usadas para corresponder a IDs de host em listas de controle de acesso ou regras de firewall. Não vamos discuti-los mais aqui.
Como funciona um roteador
Como eu disse antes, os roteadores IP têm um trabalho semelhante ao de um entregador de pizza, pois precisam levar sua carga (pacotes) ao seu destino. Quando apresentado a um pacote vinculado ao endereço 192.168.10.2, um roteador IP precisa determinar qual de suas interfaces de rede fará com que esse pacote se aproxime melhor de seu destino.
Digamos que você seja um roteador IP e tenha interfaces conectadas a você numeradas:
Se você receber um pacote para entregar com um endereço de destino "192.168.10.2", é bem fácil dizer (com seus olhos humanos) que o pacote deve ser enviado pela interface Ethernet1, pois o endereço da interface Ethernet1 corresponde ao destino do pacote Morada. Todos os computadores conectados à interface Ethernet1 terão endereços IP começando com "192.168.10.", porque o ID de rede do endereço IP atribuído à sua interface Ethernet1 é "192.168.10.0".
Para um roteador, esse processo de seleção de rota é feito construindo uma tabela de roteamento e consultando a tabela cada vez 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 de um endereço IP e uma máscara de sub-rede, então está no caminho certo para construir uma tabela de roteamento. Aqui está nossa tabela de roteamento para este roteador:
Para nosso pacote de entrada vinculado a "192.168.10.2", precisamos apenas converter 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 combiná-lo com cada endereço em nosso roteamento tabela (até o número de bits na máscara de sub-rede) até encontrarmos uma entrada.
Comparando isso com as entradas em nossa tabela de roteamento:
A entrada para Ethernet0 corresponde aos primeiros 19 bits, mas depois para 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, há! O pacote está vinculado à interface Ethernet1.
Em um roteador da vida real, a tabela de roteamento é classificada de tal maneira que as máscaras de sub-rede mais longas são verificadas para correspondências primeiro (ou seja, as rotas mais específicas) e numericamente para que, assim que uma correspondência seja encontrada, o pacote possa ser roteado e nenhuma outra tentativa de correspondência é necessária (o que significa que 192.168.10.0 seria listado primeiro e 192.168.20.0 nunca seria verificado). Aqui, estamos simplificando isso um pouco. Estruturas de dados e algoritmos sofisticados tornam os roteadores IP mais rápidos, mas algoritmos simples produzirão os mesmos resultados.
Rotas estáticas
Até este ponto, falamos sobre nosso roteador hipotético como tendo redes conectadas diretamente a ele. Isso não é, obviamente, como o mundo realmente funciona. Na analogia do motorista da pizza, às vezes o motorista não tem permissão para entrar no prédio além da recepção, e tem que entregar a pizza para outra pessoa para entrega ao destinatário final (suspenda sua descrença e tenha paciência comigo enquanto Eu estico minha analogia, por favor).
Vamos começar chamando nosso roteador dos exemplos anteriores de "Roteador A". Você já conhece a tabela de roteamento do RouterA como:
Suponha que haja outro roteador, "Router 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:
Em uma bela arte ASCII, a rede se parece com isso:
Você pode ver que o roteador B sabe como "chegar" a uma rede, 192.168.30.0/24, sobre a 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, então o Roteador A retornará o pacote ao PC remetente com a mensagem "Rede de destino inacessível".
Para tornar o roteador A "consciente" da existência da rede 192.168.30.0/24, adicionamos a seguinte entrada à tabela de roteamento no roteador A:
Dessa forma, o roteador A tem 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 efetivamente diz "Se você receber um pacote vinculado a 192.168.30.0/24, envie-o para 192.168.10.254 porque ele sabe como lidar com isso". Esta é a ação análoga "entregar a pizza na recepção" que mencionei anteriormente - passar o pacote para outra pessoa que saiba como aproximá-lo 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 para a 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:
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 em ambos os lados dessa "rede intersticial" tenham uma entrada na tabela de roteamento para a rede "extrema". Se o roteador B em nosso exemplo não tivesse uma entrada na tabela de roteamento para a rede "distante" 192.168.20.0/24 anexada ao roteador A, nosso pacote hipotético do PC em 192.168.20.13 chegaria ao dispositivo de destino em 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. Certifique-se sempre de pensar no tráfego fluindo em ambas as direções quando pensar em comunicação em redes de computadores.
Você pode obter muita milhagem de rotas estáticas. Protocolos de roteamento dinâmico como EIGRP, RIP, etc, não são nada mais do que uma maneira de os roteadores trocarem informações de roteamento entre si que poderiam, de fato, ser configurados com rotas estáticas. Uma grande vantagem de usar protocolos de roteamento dinâmico sobre rotas estáticas, porém, é que os protocolos de roteamento dinâmico podem alterar dinamicamente a tabela de roteamento com base nas condições da rede (utilização de largura de banda, uma interface "desativando", etc.) protocolo de roteamento pode resultar em uma configuração que "encaminhe" falhas ou gargalos na infraestrutura de rede. (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 a "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.00010010.00011111.01011100, a propósito).
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 (Router C) no endereço "192.168.20.254". O roteador C tem uma conexão com a Internet!
Seria bom se o roteador A pudesse rotear pacotes que não correspondam a nenhuma interface local até o roteador C, de modo que o roteador C pudesse enviá-los para a Internet. Digite a rota "gateway padrão".
Adicione uma entrada no final da nossa tabela de roteamento como esta:
When we attempt to match "172.16.31.92" to each entry in the routing table we end up hitting this new entry. It's a bit perplexing, at first. We're looking to match zero bits of the destination address with... wait... what? Matching zero bits? So, we're not looking for a match at all. This routing table entry is saying, basically, "If you get here, rather than giving up on delivery, send the packet on to the router at 192.168.20.254 and let him handle it".
192.168.20.254 is a destination we DO know how to deliver a packet to. When confronted with a packet bound for a destination for which we have no specific routing table entry this "default gateway" entry will always match (since it matches zero bits of the destination address) and gives us a "last resort" place that we can send packets for delivery. You'll sometimes hear the default gateway called the "gateway of last resort."
In order for a default gateway route to be effective it must refer to a router that is reachable using the other entries in the routing table. If you tried to specify a default gateway of 192.168.50.254 in Router A, for example, delivery to such a default gateway would fail. 192.168.50.254 isn't an address that Router A knows how to deliver packets to using any of the other routes in its routing table, so such an address would be ineffective as a default gateway. This can be stated concisely: The default gateway must be set to an address already reachable by using another route in the routing table.
Real routers typically store the default gateway as the last route in their routing table such that it matches packets after they've failed to match all other entries in the table.
Urban Planning and IP Routing
Breaking up a IP subnet into smaller IP subnets is like urban planning. In urban planning, zoning is used to adapt to natural features of the landscape (rivers, lakes, etc), to influence traffic flows between different parts of the city, and to segregate different types of land-use (industrial, residential, etc). IP subnetting is really much the same.
There are three main reasons why you would subnet a network:
You may want to communicate across different unlike communication media. If you have a T1 WAN connection between two buildings IP routers could be placed on the ends of these connections to facilitate communication across the T1. The networks on each end (and possibly the "interstitial" network on the T1 itself) would be assigned to unique IP subnets so that the routers can make decisions about which traffic should be sent across the T1 line.
In an Ethernet network, you might use subnetting to limit the amount of broadcast traffic in a given portion of the network. Application-layer protocols use the broadcast capability of Ethernet for very useful purposes. As you get more and more hosts packed into the same Ethernet network, though, the percentage of broadcast traffic on the wire (or air, in wireless Ethernet) can increase to such a point as to create problems for delivery of non-broadcast traffic. (In the olden days, broadcast traffic could overwhelm the CPU of hosts by forcing them to examine each broadcast packet. That's less likely today.) Excessive traffic on switched Ethernet can also come in form of "flooding of frames to unknown destinations". This condition is caused by an Ethernet switch being unable to keep track of every destination on the network and is the reason why switched Ethernet networks can't scale to an infinite number of hosts. The effect of flooding of frames to unknown destinations is similar to the the effect of excess broadcast traffic, for the purposes of subnetting.
You may want to "police" the types of traffic flowing between different groups of hosts. Perhaps you have print server devices and you only want authorized print queuing server computers to send jobs to them. By limiting the traffic allowed to flow to the print server device subnet users can't configure their PCs to talk directly to the print server devices to bypass print accounting. You might put the print server devices into a subnet all to themselves and create a rule in the router or firewall attached to that subnet to control the list of hosts permitted to send traffic to the print server devices. (Both routers and firewalls can typically make decisions about how or whether to deliver a packet based on the source and destination addresses of the packet. Firewalls are typically a sub-species of router with an obsessive personality. They can be very, very concerned about the payload of packets, whereas routers typically disregard payloads and just deliver the packets.)
In planning a city, you can plan how streets intersect with each other, and can use turn-only, one-way, and dead-end streets to influence traffic flows. You might want Main Street to be 30 blocks long, with each block having up to 99 buildings each. It's pretty easy to plan your street numbering such that each block in Main Street has a range of street numbers increasing by 100 for each block. It's very easy to know what the "starting number" in each subsequent block should be.
In planning IP subnets, you're concerned with building the right number of subnets (streets) with the right number of available host ID's (building numbers), and using routers to connect the subnets to each other (intersections). Rules about allowed source and destination addresses specified in the routers can further control the flow of traffic. Firewalls can act like obsessive traffic cops.
For the purposes of this answer, building our subnets is our only major concern. Instead of working in decimal, as you would with urban planning, you work in binary to describe the bounds of each subnet.
Continued on: How does IPv4 Subnetting Work?
(Yes ... we reached the maximum size of an answer (30000 characters).)
Continued from: How does IPv4 Subnetting Work?
Your ISP gives you the range the network ID 192.168.40.0/24 (11000000.10101000.00101000.00000000). You know that you'd like to use a firewall / router device to limit communication between different parts of your network (servers, client computers, network equipment) and, as such,you'd like to break these various parts of your network up into IP subnets (which the firewall / router device can then route between).
You have:
What's a good way to break up 192.168.40.0/24 into these pieces?
Thinking in even powers of two, and working with the larger numbers of possible devices, you can come up with:
In a given IP subnet, there are two addresses reserved that can't be used as valid device IP addresses-- the address with all zeros in the host ID portion and the address with all ones in the host ID portion. As such, for any given IP subnet, the number of host addresses available is two to the power of the quantity of 32 minus the number of bits in the subnet mask, minus 2. So, in the case of 192.168.40.0/24 we can see that the subnet mask has 24 bits. That leaves 8 bits available for host IDs. We know that 2 to the 8th power is 256-- meaning that 256 possible combinations of bits fit into a slot 8 bits wide. Since the "11111111" and "00000000" combinations of those 8 bits aren't allowable for host IDs, that leaves us with 254 possible hosts that can be assigned in the 192.168.40.0/24 network.
Of those 254 hosts, it looks like we can fit the client computers, switches, and server computers into that space, right? Let's try.
You have 8 bits of subnet mask to "play with" (the remaining 8 bits of the IP address 192.168.40.0/24 not covered by the subnet mask provided by your ISP). We have to work out a way to use those 8 bits to create a number of unique network IDs that can accommodate the devices above.
Start with the largest network - the client computers. You know that the next larger power of two from the number of possible devices is 128. The number 128, in binary, is "10000000". Fortunately for us, that fits into the 8 bit slot we have free (if it didn't, that would be an indication that our starting subnet is too small to accommodate all our devices).
Let's take our network ID, as provided by our ISP, and add a single bit of subnet mask to it, breaking it up into two networks:
Look over that until it makes sense. We increased the subnet mask by one bit in length, causing the network ID to cover one bit that would have been used for host ID. Since that one bit can be either zero or one, we've effectively split our 192.168.40.0 network into two networks. The first valid IP address in the 192.168.40.0/25 network will be the first host ID with a "1" in the right-most bit:
The first valid host in the 192.168.40.128 network will, likewise, be the first host ID with a "1' in the right-most bit:
The last valid host in each network will be the host ID with every bit except the right-most bit set to "1":
So, in this way, we've created a network large enough to hold our client computers, and a second network that we can then apply the same principle to break down into yet smaller networks. Let's make a note:
Now, to break down the second network for our servers and switches, we do the same thing.
We have 12 server computers, but we might buy up to 6 more. Let's plan on 18, which leaves us the next highest power of 2 as 32. In binary, 32 is "100000", which is 6 bits long. We have 7 bits of subnet mask left in 192.168.40.128/25, so we have enough bits to continue "playing". Adding one more bit of subnet mask gives us two more networks:
So, now we've broken up 192.168.40.128/25 into two more networks, each of which has 26 bits of subnet mask, or a total of 62 possible host IDs-- 2 ^ (32 - 26) - 2.
That means that both of those networks have enough addresses for our servers and switches! Let's make notes:
This technique is called variable-length subnet masking (VLSM) and, if properly applied, causes "core routers" to have smaller routing tables (through a process called "route summarization"). In the case of our ISP in this example, they can be totally unaware of how we've subnetted 192.168.40.0/24. If their router has a packet bound for 192.168.40.206 (one of our switches), they need only know to pass it to our router (since 192.168.40.206 matches the network id and subnet mask 192.168.40.0/24 in their router's routing table) and our router will get it to the destination. This keeps our subnet routes out of their routing tables. (I'm simplifying here, but you get the idea.)
You can plan very geographically large networks in this same way. As long as you do the right "urban planning" up front (anticipating the number of hosts in each sub-network with some accuracy and an eye to the future) you can create a large routing hierarchy that, at the core routers, "summarizes" to a very small number of routes. As we saw above, the more routes that are in a router's routing table the slower it performs its job. Designing an IP network with VLSM and keeping routing tables small is a Good Thing(tm).
The Unrealism of Examples
The fictional world in this answer is, obviously, fictional. Typically you can make subnets on modern switched Ethernet with more hosts than 254 (traffic profile dependent). As has been pointed out in comments, using /24 networks between routers isn't consistent with Real Life(tm). It makes for cute examples, but is a waste of address space. Typically, a /30 or a /31 (see http://www.faqs.org/rfcs/rfc3021.html for details on how /31's work-- they are beyond the scope of this answer for sure) network is used on links that are strictly point-to-point between two routers.
Sub-netting
Sub-netting is not difficult but it can be intimidating. So let's start with the simplest possible step. Learning to count in binary.
Binary
Binary is a base 2 counting system. Consisting of only two numbers (1 and 0). Counting proceeds in this manner.
So if you just imagine that each 1 is a place holder for a value (all binary values are powers of two)
So... 100000 = 32. And 10000000 = 128. AND 11111111 = 255.
When I say, "I have a subnet mask of 255.255.255.0", I really mean, "I have a subnet mask of 11111111.11111111.11111111.00000000." We use subnets as a short hand.
The periods in the address, separate every 8 binary digits (an octet). This is why IPv4 is known as a 32bit (8*4) address space.
Why Subnet?
IPv4 addresses (192.168.1.1) are in short supply. Sub-netting gives us a way to increase the amount of available networks (or hosts). This is for administrative reasons and technical reasons.
Each IP address is broken into two separate portions, the network and the host. By default a Class C address (192.168.1.1) uses the first 3 octets (192.168.1) for the network portion of the address. and the 4th octet (.1) as the host portion.
By default an ip address and subnet mask for a Class C adress looks like this
In binary like this
Look at the binary example again. Notice how I said the first three octets are used for the network? Notice how the network portion is all ones? That's all sub-netting is. Let's expand.
Given that I have a single octet for my host portion (in the above example). I can ONLY ever have 256 hosts (256 is the max value of an octet, counting from 0). But there's another small trick: you need to subtract 2 host addresses from the available ones (currently 256). The first address in the range will be for the network (192.168.1.0) and the last address in the range will be the broadcast (192.168.1.255). So you really have 254 available addresses for hosts in one network.
A Case Study
Let's say I gave you the the following piece of paper.
Let's take a look at this. The /24 is called CIDR notation. Rather than referencing the 255.255.255.0 we just reference the bits we need for the network. In this case we need 24bits (3*8) from a 32bit address. Writing this out in binary
Next we know we need figure out how many subnets we need. Looks like 4. Since we need to create more networks (currently we only have one) lets flip some bits
Now that we've decided on a /26 let's start allocating hosts. A little simple math:
We have 6bits to allocate in each network for hosts. Remembering that we need to subtract 2 for each network.
Now we need to figure out where the hosts go. Back to the binary!
In this way you can calculate the entire subnet.
Wild Cards A wild card mask is an inverted subnet mask.
Further
Google for the terms 'super-netting', and 'VLSM (variable length subnet mask)', for more advanced topics.
I can see now that I took too long in responding ... sigh
A brief history lesson: originally, unicast IPv4 addresses were divided into 3 classes, each with an associated 'default' mask length (called the classful subnet mask)
The idea was that different sized organisations could be allocated a different class of IP address, to make efficient use of IP address space.
However, as IP networks grew, it became clear that this approach had its problems. To name but three:
In a classful world, all subnets had to have a mask of /8, /16, or /24. This meant that the smallest subnet that could be configured was a /24, which allowed for 254 host addresses (.0 and .255 being reserved as the the network and broadcast addresses, respectively). This was tremendously wasteful, particularly on point-to-point links with only two routers attached to them.
Even after this restriction was relaxed, earlier routing protocols (e.g. RIPv1) did not advertise the mask length associated with an IP prefix. In the absence of a specific mask, it would use either the mask of a directly connected interface in the same classful network, or fall back to using the classful mask. For example, if you wanted to use the network 172.16.0.0 for inter-router links with /30 masks, all subnets from 172.16.0.0 - 172.16.255.255 would have to have a /30 mask (16384 subnets, each with 2 useable IPs).
The routing tables of internet routers began to take up more and more memory; this was/is known as the 'routing table explosion'. If a provider had 16 contiguous /24 networks, for example, they would need to advertise all 16 prefixes, rather than a single summary that covered the entire range.
Two related refinements allowed us to move beyond the above limitations.
VLSM refers to the ability of a routing protocol to support different subnet masks within the same classful network. For example:
Could be split into:
Which allowed for much more efficient use of address space; subnets could be sized correctly for the number of hosts/routers that would be attached to them.
CIDR takes VLSM and extends it the other way; in addition to splitting a single classful network into smaller subnets, CIDR allows for the aggregation of multiple classful networks into a single summary. For example, the following Class B (/16) networks:
Can be aggregate/summarised with a single prefix:
In terms of subnetting: a subnet mask is 32 bits long. The mask length denotes how many bits identify the network portion of the address. For example:
This means that, assuming the entire 10.0.0.0/8 network is subnetted into /24s, that there will be 65536 (2 ^ 16) subnets within this range. (This is assuming that the platform you are using supports subnet numbers of 0 and 255. See Cisco's ip subnet-zero).
There are 8 bits remaining in the 'host portion' of the address. This means there are 256 available IP addresses (2 ^ 8), of which 2 are reserved (10.1.1.0 is the network address, 10.1.1.255 is the subnet directed broadcast address). This leaves 254 usable IP addresses on this subnet. ((2^8) - 2)
I’ll pose and answer a few related questions along the way:
255.255.255.0
so often?192.168.0.1
?127.0.0.1
?Why such weird numbers — 255, 192, 168, 127?
8+8+8+8-bit dotted decimal
Internet addresses like 194.60.38.10 use dotted-decimal notation to split 32 bits up into 8+8+8+8 bits. Dotted-decimal means converting† each number to binary then left-padding it with
0
’s.For example
.60.
→ 60=32+16+8+4 →111100
→.00111100.
.So 194.60.38.10 is dotted-decimal for the 4×8=32-bit address
11000010.00111100.00100110.00001010
, since 38 →100110
, 10 →1010
, and so on. 194 requires all 8 bits; the rest are padded.Once you think about 255, 192, and 127 in 8-bit binary, you can more easily understand why certain decimal numbers are so common:
11111111
11000000
_1111111
10000000
These decimal numbers happen to represent visually convenient 8-bit blocks like ■■■■■■■■, ■□□□□□□□, and □■■■■■■■. So you’ve never seen 256=2⁹ because of the 8-bit limit, and 127=128−1=2⁸−1 is the bit-flip of a power-of-two—and powers-of-two are
10………00000
’s in binary.10101000
Subnet masks: What’s mine is mine + What’s yours is yours
Subnet masks then break each 32-bit internet address up into a network ID and a host ID. Whereas internet addresses can have any mixture of 1’s and 0’s, subnet masks begin with only 1’s and end with only 0’s.
Blacking out the first 8+8+8=24 bits and whiting out the final 8 bits is a way of splitting the IP ■■□□□□■□|□□■■■■□□|□□■□□■■□|□□□□■□■□ into two pieces:
If the subnetwork owner (say OmniCorp) wanted more internal IP’s, they could buy up more (say 8+8=16 bits) of the righthand side of the network, like this:
Clearly there is a tradeoff within the 32-bit = 2³² = 4,294,967,296-option address space: if you buy up more network ID’s (lefthand side) your internal network has more host ID’s (righthand side) to assign.
Cheap people therefore have a subnet mask of
255.255.255.0 = ■■■■■■■■|■■■■■■■■|■■■■■■■■|□□□□□□□□.
Even cheaper people have
255.255.255.128 = ■■■■■■■■|■■■■■■■■|■■■■■■■■|■□□□□□□□
or 255.255.255.192 = ■■■■■■■■|■■■■■■■■|■■■■■■■■|■■□□□□□□.
According to folklore, it wasn’t actually Roger Miller, but a lowly sysadmin with a 255.255.255.254 mask who originally wrote King of the Road, substituting “I ain’t got a large subnet” for “I ain’t got no cigarettes”.
(Why are the masks of the lowly filled with such high numbers? Because, like Miller’s narrator, subnet masks count all the things you don’t have.)
What does the trailing slash after an IP mean? (eg, 194.60.38.10/24)
Since subnet masks (which divide “theirs” from “ours”) always begin with
1
’s, and since we hate summing up powers-of-two even more than we hate figuring the powers-of-two in the first place, someone invented CIDR (the slash after an IP).194.60.38.10/24 means "the submask has 24 ones, then the rest are zeroes", so
■■■■■■■■|■■■■■■■■|■■■■■■■■|□□□□□□□□ with 8+8+8 bits belonging to “them” and 8 bits belonging to “us”.
Reversing the hobo’s anthem above,
/31
is the songwriter/24
is middle-class (255.255.255.0
= ■■■■■■■■|■■■■■■■■|■■■■■■■■|□□□□□□□□/16
is rich ■■■■■■■■|■■■■■■■■|□□□□□□□□|□□□□□□□□/8
is super rich ■■■■■■■■|□□□□□□□□|□□□□□□□□|□□□□□□□□/1
or/0
would be the IANA or something.† Use
bc -l; obase=10; 60
for example.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 rede tem 32 bits, ambos os 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 tivéssemos isso, ninguém seria capaz de dizer a diferença entre minha rede e a AT&Ts. Portanto, embora esses números devam ser exclusivos, 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 a qualquer máquina que eu quiser.
O número de rede não é fixado em um determinado número de bits - por exemplo, se eu tivesse apenas 200 máquinas para gerenciar, ficaria perfeitamente feliz com um número de rede que usasse 24 bits, deixando-me apenas 8 bits para mim - o que é suficiente para até 255 hosts. Como o número de rede usa 24 bits, podemos ter muitos deles, o que significa que muitas pessoas podem ter suas próprias redes.
No passado, isso era referido como uma rede de classe C. (a classe B usava 16 bits para o número da rede e a classe A usava 8 bits, portanto, existem apenas algumas redes de classe A).
Hoje em dia, essa convenção de nomenclatura caiu fora de moda. Foi substituído pelo conceito chamado CIDR. 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 CIDR /23, 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 tiver uma interna ou estiver alugando uma rede parcial de um ISP, isso facilitará o gerenciamento - especialmente porque todos os clientes podem receber um /29 (me deixando . .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é chegarmos ao IPv6, isso é muito importante.
No entanto... enquanto eu sei que um /24 CIDR é o equivalente da antiga rede Classe C, e um /16 é uma classe B e um /8 é uma classe A... eu ainda estou perplexo tentando calcular um /22 em minha cabeça. Felizmente existem ferramentas que fazem isso para mim :)
No entanto - se você sabe que um /24 é 8 bits para hosts (e 24 bits para rede), então eu sei que um /23 me dá um bit extra que dobra o número de hosts.
While the above is correct (sorry, TL;DR), calculating subnets still causes many network administrators a lot of grief. There actually is a very easy way to do subnet calculation, you can do most of it in your head, and there is very little you have to memorize. For most applications, it's not even necessary to understand the binary representation, though it is helpful for a complete understanding of subnetting. Here I will only discuss IPv4; IPv6 is outside of the scope of this discussion.
Remember this:
There are three key things to remember: all subnets are based on powers of two, and there are two key numbers: 256 and 32. More on that later.
First, lets look at a table containing powers of 2:
Calculating powers of 2 is easy: each integer increase in the power doubles the result. 1+1=2, 2+2=4, 4+4=8, 8+8=16, and so on. The total number of addresses in a subnet must always be a power of 2.
Since each octet of an IPv4 subnet goes up to 256, 256 is a very important number and forms the basis for the rest of the math.
Sizing the subnet
We'll start with an easy question: "how many addresses in a subnet if the mask is 255.255.255.248?" We will ignore the first three octets for now and look at the last. Here is how easy it is: subtract 248 from 256. 256 minus 248 equals 8. There are 8 addresses available (including the network and broadcast addresses). The reverse also works: "if I want to have a subnet with 16 addresses, what will the subnet mask be?" 256 minus 16 equals 240. The subnet mask will be 255.255.255.240.
Now if we want to expand beyond 256 addresses (historically, a "class C"), it gets only a tiny bit more complicated: if our last octet is 0 and our third octet is, say, 240, (255.255.240.0) then we do the math on the third octet and find that there would be 16 addresses. So we multiply 16 by 256 (the number of addresses in the last octet) to get 4,096. If both the last two octets are 0, (ex. 255.240.0.0) then we take the subtraction result from the second octet (we'll say it's 16 again), multiply but 256 (addresses in the third octet), multiply again by 256 (addresses in the last octet) to get 1,048,576 addresses. Easy as that! (OK, so the reverse is a little more difficult. If we want a subnet with 1,048,576 addresses, we'll have to divide that number by 256 a couple of times to get a number we can subtract from 256.)
Network address
Now that we know how to calculate the subnet mask, how do we figure out what the network address is? That's easy: it's always a multiple of the number of addresses in our subnet. So if we have 16 addresses in our subnet, the possible network addresses will be 0, 16, 32, 48, 64, and so on up to 240. (Note that 0 is a valid multiple of any number, as any number multiplied by 0 equals 0.)
And, of course, the broadcast address will be the last address in the scope. So if we have 16 address in our subnet, and we've chosen a network address of 10.3.54.64, the broadcast address will be (64+16-1=79) 10.3.54.79.
CIDR Notation
So how about CIDR notation? How do translate that to and from an IPv4-style subnet mask?
Remember our powers of two? Well, now we have another key number to remember besides 256: 32. Remember, CIDR notation describes the number of significant bits in the IPv4 address, and there are 32 bits in an IPv4 address, 8 for each octet. So if we have a subnet mask of 255.255.255.240, that is 16 addresses. If we look at our "powers of 2" table above, we see that 16 is two to the fourth power (2^4). So we subtract that power number -- 4 -- from 32 and get 28. Our CIDR notation for a subnet mask of 255.255.255.240, our CIDR notation is /28.
And if we are given a CIDR of /28, we subtract that (28) from 32 to get 4; raise 2 to that (4th) power (2^4) to get 16; then subtract that (16) from 256 to get 240; or 255.255.255.240.
I also feel that there should atleast be a mention of NATs, because they are used so commonly in modern networks in place of Subnets, because of IPv4 address exhaustion,among other things. (Also, when I was first learning about subnets, I was very confused as to how subnetting relates to the networks created by WiFi routers).
NAT (network address translation) is a technique (commonly) used to create private networks by mapping one address space (IP:Port) to another. Majorly, this is used to create a private network of multiple private IPs behind one public address, for example, in Wifi routers, by organizations(like a university or a corporation), or sometimes by ISPs.
The actual address translation is done transparently in NAT capable nodes, usually routers. It may be of many forms, Full Cone, Address Restricted, Port restricted etc. or a mixture of these, which dictates how the connections across the node may be initiated.
Full details can be found on Wikipedia, but for example consider a Wifi router with 2 devices connected to it. The public IP of the router is
10.9.20.21/24
, and the IP of the devices(Private IPs) areA: 192.168.0.2
,B: 192.168.0.3
and that of the router isR: 192.168.0.1
. Thus ifA
wants to connect to serverS: 10.9.24.5/24
, (which is actually on a different subnet w.r.t the router here):R
(which would be the default gateway) with the source IP192.168.0.2
, src port (say)14567
, and destination IP:10.9.24.5
(Although port is actually a part of the TCP header).14567
to deviceA
and changes the source on the IP packet to10.9.20.21
(which is the public IP of the router). This is in contrast to subnetting described above, where the IP packets are actually never changed.S
recieves the series of TCP packets(with src IP:10.9.20.21
, src Port:14567
) and send response packets with those values in the destination fields.R
checks the destination port, which is14567
and forwards the packet toA
.A
receives the response packet.In the above situation, if
B
tried to open a connection on the same source port (14567
), it would be mapped to a different port byR
(and the port in the outgoing packet changed) before sending toS
. That is, there would also be port translation instead of just IP.Two things to note here: