Apesar do IP ser um protocolo robusto a implementação de alguns de seus conceitos, na prática, se mostrou sujeita a certas deficiências. Uma delas é determinada pela característica que define que todos os hosts pertencentes a uma mesma rede devem ter, no endereço IP, o mesmo número de rede. A vantagem dessa característica é que todos os hosts de uma mesma rede podem se comunicar sem necessidade de roteamento de pacotes, pois a rede é vista como um único segmento.
Assim, podemos deduzir que o tráfego de uma rede é restrito ao segmento que compartilha o mesmo endereço de rede. Redes com diferentes números de rede não compartilham tráfego entre si diretamente, sendo necessário roteamento de pacotes. A princípio, essa característica é uma vantagem, principalmente se estamos falando de uma LAN com poucos hosts situados na mesma sala ou andar.
Entretanto, quando uma rede (um único segmento) começa a ter dezenas de hosts, e estes hosts estão distribuídos por diversas salas e andares de um prédio (ou até por mais de um prédio), percebemos que administrar todos esses hosts pode ser um problema sério. Existem limitações técnicas relativas ao cabeamento (tamanho máximo do segmento), limitações de projeto do IP (número máximo de hosts por rede) e o fato de que administrar as necessidades de dezenas de usuários não é uma tarefa trivial.
Em função disto, surgiu a necessidade de dividir uma rede também de acordo com a sua topologia física. Levando em consideração tanto os fatores técnicos quanto os de ordem administrativa. Isolar o tráfego das diferentes redes, de cada departamento, é um modo de evitar o congestionamento no barramento e facilitar a administração da rede.
Todavia, dividir uma rede implica em usar um endereçamento IP diferente para cada novo segmento. Portanto, como sabemos, endereços IP são recursos escassos e conseguir uma nova faixa de endereços está fora de cogitação. Diante deste fato, surge o conceito de subredes, criado exatamente para contornar as limitações impostas pelo IP às redes de grande porte. Para facilitar o entendimento sobre como dividir uma rede, vamos pensar em termos de uma faixa de endereços IP de uma típica rede classe C. Todavia, o raciocínio é válido para qualquer das classes.
Os 256 endereços disponíveis, por exemplo, na faixa entre 192.168.0.0 e 192.168.0.255 são suficientes para alocar 254 hosts em uma única LAN. Agora imagine uma empresa que possua quatro departamentos distintos e localizados fisicamente em andares diferentes de um prédio comercial. Criar uma única rede para toda a empresa, ainda que possa ser tecnicamente possível, é administrativamente inviável. A administração de uma rede de grande porte exige sua subdivisão em redes menores. Para efeito de entendimento do conceito de subredes, vamos idealizar que cada departamento possui exatamente 50 hosts.
Deste modo, será preciso acomodar esses 50 hosts de cada departamento em uma faixa de endereços IP contínua e diferente da faixa de endereços dos demais departamentos. Isolando, deste modo, o tráfego entre os departamentos e permitindo, nos casos em que houver necessidade, que alguns hosts acessem recursos de outros departamentos através dos roteadores que interligam cada um dos segmentos entre si.
Levando em consideração que um endereço IP é um número formado por 32 bits, e que, neste caso, uma parte destes bits (24 bits) representa a rede (192.168.0) enquanto outra parte (8 bits) representa hosts nessa rede (0-255), imaginemos a seguinte solução usada para criar subredes:
Os três primeiros octetos são usados para representar a rede e o quarto octeto representa os hosts nessa rede, na notação simplificada { <rede>, <host> }. Todavia, tomando alguns bits (de mais alta ordem) do byte usado na representação dos hosts, podemos ter uma notação simplificada do tipo { <rede>, <subrede>, <host> }. Ainda assim teremos condição de representar um certo número de hosts com os bits restantes. Deste modo, podemos subdividir uma rede (de qualquer classe) usando esse conceito de subrede. Basta tomar bits da parte reservada aos hots para representar subredes.
Neste exemplo, precisamos apenas tomar dois bits (dos oito) usados originalmente para representar hosts, e ainda teremos seis bits restantes para fazer essa função. Com 6 bits é possível representar 64 endereços (pois 2 elevado a 6 é igual a 64). Subtraindo os endereços especiais usados para atribuir o número da rede e de broadcast direto, ainda teremos 62 endereços IP, por faixa, úteis para representar hosts.
Essa divisão é suficiente para abrigar os 50 hosts de cada segmento em uma faixa contínua de endereços IP e ainda sobram endereços para uma possível expansão. São formadas então quatro faixas de endereços que são agora chamadas de subredes. A divisão de uma rede classe C em quatro segmentos, indicados por um par de endereços limitadores. Esses limitadores são os endereços especiais da rede e de broadcast de cada uma das quatro subredes: