Redes de computadores – Camada de Rede

No artigo anterior, a informação que o internet explorer queria enviar para o google foi processada pela camada de transporte.  A camada de transporte fez o seu serviço (adicionou seus cabeçalhos), e agora a informação precisa ser enviada ao destinatário – coisa que a camada de transporte não sabe fazer – Fazer com que os dados circulem pela rede é tarefa da camada de rede, e é sobre ela que falarei neste artigo.

A camada de aplicação quer enviar os dados para um destino, e não se importa como isto será feito.

A camada de transporte não se importa em como a informação chegará ao destino, por quais caminhos irá passar, etc.

A camada de rede é a responsável por identificar, de forma lógica, cada computador conectado direta ou indiretamente na rede.

Computadores conectados diretamente a rede são aqueles em que estão conectados de forma que possam ser alcançados diretamente pela camada de enlace (tema do próximo artigo), computadores conectados indiretamente são aqueles que não são alcançáveis diretamente pela camada de enlace.

Para facilitar a compreensão, entenda que computadores alcançáveis diretamente são aqueles que estão conectados na mesma hub ou swich, enquanto os computadores não alcançáveis diretamente, por não estarem conectados na mesma hub/switch, necessitam que a informação seja repassada por um ou mais roteadores até chegar ao destino. (Antes que alguém comente: Esta definição não é uma definição 100% correta, mas serve para simplificar o conceito).

Na pratica, uma “rede” é composta de uma ou mais subredes – a identificação de qual rede uma máquina pertence, além da identificação do próprio computador, é feita pela camada de rede.

Na internet (e em 99% das redes), o protocolo usado é o IP.

IP é a abreviatura de “Internet Protocol”, todo mundo já deve ter ouvido falar dela. Salvo citação contraria, a IP usada neste artigo é a IPv4, que ainda é a mais comumente usada (ela será substituída pela IPv6 em alguns anos ).

A camada de rede possui as seguintes informações:

Endereço de IP do computador.
Mascara de subrede da IP do computador.

Ao enviar o pacote, o protocolo faz as seguintes perguntas:

O destinatário pertence a minha rede? Se sim, peço para a camada de enlace enviar diretamente ao destinatário. Se não peço para que envie ao roteador.

Ao receber um pacote, ela faz esta analise:

Eu sou eu sou o destinatário do pacote? Se não, descarto o pacote, se sim, encaminho ele para a camada de transporte.

Bom, como funciona?

Cada computador tem um endereço de IP definido manualmente ou automaticamente (através de um servidor DHCP, que é responsável por atribuir endereços de IP aos computadores).DHCP é a abreviatura de Dynamic Host Configuration Protocol. Resumidamente, é um servidor que distribui IPs pela rede.

Cada computador conhece a mascara de subrede da rede em que ele esta conectado (também definido manualmente ou pelo DHCP).

Então, todo o endereço de IP cujo um conjunto de bits determinado pela mascara seja igual aos da IP do computador, pertencem a mesma rede. O primeiro endereço deste conjunto representa o endereço da rede, e o ultimo endereço do conjunto informa que o destinatário é todos os computadores da rede . Complicou? Parece complicado, mas é simples – Vamos entender o que é IP:

O endereço de IP é um valor de 32bits. Normalmente representamos a IP atraves de uma combinação de 4 valores entre 0 e 255, por exemplo: 10.2.4.5, 200.154.37.5, 34.55.44.33, são todas IPs. A mascara de subrede também é um valor de 32bits, porém, é formada por um conjunto consecutivos de valores 1 seguido de 0, por exemplo, o valor binário: 11111111 11110000 00000000 00000000 é uma mascara de subrede (mascara 255.240.0.0). Observe que para a mascara ser válida, tem que ser uma seqüencia de 1 seguida por 0: 11011111 11110000 00000000 00000000 não é uma mascara válida.

Como este conjunto funciona?

Por exemplo: Um computador com a IP 10.5.7.6 com mascara de subrede 255.255.255.0 deseja enviar uma informação para o computador com a IP 10.5.2.9. O destinatário pertence ou não a mesma subrede?

Vamos converter estes valores para binário:

10.5.7.6 é o mesmo que 00001010.00000101.00000111.00000110 em binario (separei com um . os grupos de 8 dígitos para facilitar a identificação de cada numero)

A mascara 255.255.255.0 é o mesmo que 11111111.11111111.11111111.00000000

10.5.2.9 é o mesmo que 00001010.00001001.00000010.00001001

Então, 10.5.2.9 pertence a subrede?

Se realizarmos a operação AND entre 10.5.7.6 e a mascara, obteremos o numero que identifica a rede:

00001010.00000101.00000111.00000110 AND 11111111.11111111.11111111.00000000 = 00001010.00000101.00000111.00000000

Logo, o numero da rede é 00001010.00001001.00000111.00000000, o mesmo que 10.5.7.0

Vamos verificar se 10.5.2.9 pertence à rede:

00001010.00000101.00000010.00001001 AND 11111111.11111111.11111111.00000000 = 00001010.00000101.00000010.00000000

O numero da rede informado é 00001010.00001001.00000010.00000000, o mesmo que 10.5.2.0.

Caso os 2 valores de rede sejam iguais, a IP pertence a mesma rede, caso sejam diferentes, a IP pertence a outra rede. Para nós, humanos, é ´so olhar “Ah, é igual, ou não é igual”, mas computadores fazem mais um procedimento: Todos sabem XOR de alguma coisa com ela mesmo é sempre zero (A XOR A = 0), sendo assim, o sistema faz o seguinte teste:

se: Rede da minha IP XOR Rede da IP de Destino = 0, então a ip de destino pertence a minha rede, se não, pertence a outra rede. Logo:

00001010.00000101.00000111.00000000 (10.5.7.0) XOR 00001010.00000101.00000010.00000000 (10.5.2.0)= 00000000.00000000.00000101.00000000 (0.0.5.0).

O resultado é diferente de zero, então, a IP de destino não pertence a minha rede.

Lembra que eu escrevi que: O primeiro endereço representa a rede, e o ultimo informa que o pacote de dados deve ser enviado para toda a rede? Como descobrir quais são estes endereços? Simples:

Para a rede 10.5.7.0 com mascara 255.255.255.0:

Qualquer IP com 00001010.00000101.00000111.xxxxxxxx pertence a esta rede (xxxx que dizer qualquer valor). Se trocarmos o xxxx por zeros: 00001010.00000101.00000111.00000000, teremos o valor 10.5.7.0, que representa a rede. Porém se trocarmos o xxxx por 1, teremos 00001010.00000101.00000111.11111111, ou, 10.5.7.255, que informa que o pacote deve ser recebido por todos os computadores da rede.

Como os bits com 1 da mascara são sempre contíguos, uma forma simples de representar rede é usando a convenção IP/numero de bits da mascara, por exemplo: A rede 10.5.2.0 com mascara 255.255.255.0, pode ser representada por rede 10.5.2.0/24.

Um erro muito comum, especialmente para o iniciante, é o de “enxergar em decimal”. No caso do exemplo, a mascara que eu usei cria uma rede com IPs facilmente identificáveis: No caso de 10.5.2.0/24, tudo o que estiver entre 10.5.2.0 e 10.5.2.255 pertence a rede 10.5.2.0/24 – repare que o valor “bate” certinho com o octeto🙂 Esta abordagem funciona somente para mascaras de 8, 16 ou 24 bits. Para outras, isto não funciona: Para mostrar como isto esta errado, vamos fazer um exercício:

Para um computador com IP 10.20.5.3 e mascara de subrede 255.248.0.0, responda:

Qual o endereço de rede que ele pertence?

Quais o endereço de broadcast (que indica que o pacote deve ser enviado para todos os computadores) desta rede?

A IP 10.21.7.3 pertence a mesma rede que este computador?

Vamos resolver este exercício:

Qual a rede?

10.20.5.3 é, em binário, 00001010.00010100.00000101.00000011

255.248.0.0 é, em binário: 11111111.11111000.00000000.00000000

então, a rede é:

00001010.00010100.00000101.00000011 AND 11111111.11111000.00000000.00000000 = 00001010.00010000.00000000.00000000 (10.16.0.0 mascara 255.248.0.0, ou, 10.16.0.0/13)

O valor da rede é 10.16.0.0/13

a IP 10.21.7.3 pertence a mesma rede ou nao?

10.21.7.3 é, em binário: 00001010.000010101.00000111.00000011.

comparando com a mascara de IP:

00001010.00010101.00000111.00000011 AND 11111111.11111000.00000000.00000000 = 00001010.00010000.00000000.00000000 (10.16.0.0 mascara 255.248.0.0, ou, 10.16.0.0/13)

Comparando as duas redes:

00001010.00010000.00000000.00000000 XOR 00001010.00010000.00000000.00000000 = 00000000.00000000.00000000.00000000 (0.0.0.0)

Como o resultado é zero, então 10.21.7.3 pertence a mesma rede de 10.20.5.3

Qual o endereço de BroadCast?

para a rede 10.16.0.0/13

00001010.00010000.00000000.00000000 (os bits que identificam a rede estão em negrito)

para obter o valor do BroadCast, basta transformar todos os bits que identificam os computadores da rede (os bits que não estão em negrito) em um 1, ficando desta forma:

00001010.00010111.11111111.11111111, ou, 10.23.255.255

Portanto, a rede 10.16.0.0/13 possui o intervalo de IP compreendido entre 10.16.0.0 e 10.23.255.255.

Atente que, como o primeiro endereço de IP representa a propria rede, e o ultimo endereço serve para enviar um pacote para toda a rede, os computadores podem usar os endereços compreendidos entre 10.16.0.1 e 10.16.255.254.

Atente ao fato de que não é possível a existência de mascaras /32 e /31: A /32 permite a existência de um único endereço de IP, a /31 permite somente 2 endereços de IP (o primeiro e o ultimo… rede e broadcast), sendo assim, o numero máximo é /30, que permite 4 endereço de ip (o primeiro, representando a rede, em seguida tem 2 ips para computadores e o ultimo representa broadcast). Bom, na realidade, a mascara /32 possui um significado: A “rede” é composta de um único computador, e todo o trafego (exceto se o pc enviar dados para ele mesmo) deve ser encaminhado para outra rede. Isto é usado em conexões como a da sua casa, aonde você possui uma única IP com a internet. A rede desta IP possui mascara /32, garantindo que todo o trafego vá para a internet.

Ja sabemos o que é a IP e como os computadores reconhecem o que pertence a sua propria rede ou não. Mas… e como os dados conseguem transitar entre várias redes até chegar ao destino correto?

Os roteadores são equipamentos responsáveis por esta tarefa.
Um roteador pode ser um hardware construído para isto, ou um computador configurado para isto.
O roteador pode estar conectado a várias redes e a vários roteadores, e possui uma tabela contendo as redes que ele consegue alcançar diretamente.
Esta tabela também pode conter endereços de roteadores conectados diretamente ao roteador capazes de encaminhar pacotes para redes especificas (algo como: “Se o pacote for para a rede X, encaminha para o roteador A, mas se for para a rede Y, encaminha para o roteador B…), e também pode conter o endereço de um roteador para qual o roteador deve encaminhar todos os pacotes que ele não conhece uma rota adequada (algo como: “Não sei para quem devo enviar este pacote, então mando para o roteador C que ele saber para onde encaminhar) – este é chamado de rota padrão (ou gateway padrão, default gateway…).

Imagine que o computador com a IP 10.1.1.5 mascara 255.255.255.0 (rede 10.1.1.0/24) queira enviar uma informação para o computador de IP 10.10.3.6 mascara 255.255.255.0. (rede 10.10.3.0/24). Como o destinatário não pertence a mesma rede do remetente, e o remetente não conhece nenhum roteador capaz de encaminhar este pacote, então ele solicita que a camada de enlace encaminhe o pacote o roteador padrão, que chamarei de roteador A.

O roteador A sabe que:

Esta conectado diretamente na rede 10.1.1.0/24 e na rede 10.1.2.0/24
Pacotes destinados para 10.1.0.0/16 devem ser encaminhados para o roteador B.
Pacotes destinados para 10.10.0.0/16 devem ser encaminhados para o roteador C.
Pacotes destinados a destinos que ele desconhece deve ser encaminhado para o roteador D.

Quando o roteador recebe o pacote, ele verifica que o destino é 10.10.3.6, que não pertence a nenhuma rede conectada diretamente. Ele verifica que 10.10.3.6 pertence a rede 10.10.0.0/16, e então encaminha para o roteador C.

O roteador C sabe que:
Esta conectado somente e outros roteadores (não há nenhuma rede conectada nele)
Pacotes destinados para 10.10.1.0/20 devem ser encaminhados ao roteador Q
Pacotes destinados a destino que ele desconhece deve ser encaminhados para o roteador W

Quando o roteador C recebe o pacote destinado para 10.10.3.6, ele verifica que 10.10.3.6 pertence a rede 10.10.1.0/20, e encaminha para o roteador Q, responsável por esta rota

O roteador Q sabe que:
Esta conectado diretamente as redes 10.10.1.0/24, 10.10.2.0/24, 10.10.3.0/2, 10.10.4.0/24
Pacotes destinados a outras redes devem ser encaminhados para o roteador I.

O roteador Q, ao receber o pacote destinado à 10.10.3.6, verifica que 10.10.3.6 pertence a rede 10.10.3.0/24 que ele esta conectado diretamente, e então entrega o pacote para a máquina de de destino, 10.10.3.6.

Observe um detalhe: O caminho de 10.1.1.5 até 10.10.3.6 passou pelos roteadores A, C e Q. Mas isso não quer dizer que o caminho de 10.10.3.6 até 10.1.1.5 deve ser, obrigatoriamente, reverso (Q, C, A) – ou seja – as rotam de “ida e vinda” podem ser diferentes. Se 10.10.3.6 responder para 10.1.1.5, o roteador Q receberá o pacote, e encaminhará para o roteador I, que irá re-encaminhar para outro roteador, e o pacote vai circulando até chegar ao roteador A, para ser entregue à 10.1.1.5.

Como o 10.1.1.5 envia os dados para uma máquina fora de sua rede mas faz com que ele passe para o roteador que esta em sua rede? O proximo artigo – camada de enlace – explicará🙂

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: