PJI11103: Endereçamento IPv4

De MediaWiki do Campus São José
Ir para: navegação, pesquisa

Próxima aula



Como visto em Redes de Computadores e Projeto 2, computadores e equipamentos na Internet (chamados de hosts) precisam ter um identificador único e que seja válido globalmente. Os endereços IP, definidos pelo protocolo da Internet (IP - Internet Protocol) são números de 32 bits que desempenham o papel de identificadores globais. Cada um desses endereços é comumente representado em uma notação decimal, com um número entre 0 e 255 para cada 8 bits. como mostrado na figura a seguir. Com isso, é possível em tese endereçar até hosts na Internet, o que equivale a pouco mais de 4 bilhões de endereços.

PJI3-Ip1.jpg
Um endereço IP apresentado em notação decimal e em binário

Configuração de endereços

O endereço IP de um host pode ser configurado de forma estática ou dinâmica. No primeiro caso, o usuário predefine o endereço IP no próprio equipamento. No segundo, o equipamento usa um protocolo especial de configuração para obter sua configuração de rede.


Um conjunto de informações são necessárias para que um host consiga efetivamente se comunicar em rede, as quais não se limitam ao endereço IP. Essas informações são:

  • Endereço IP e máscara de rede: um host precisa de um endereço para que possa se comunicar com outros hosts. A máscara de rede informa o tamanho da subrede IP em que ele se encontra (e ocm isso pode-se saber quais endereços IP fazem parte dessa subrede).
  • Rota default (padrão): para se comunicar com hosts de outras subredes, é preciso enviar os pacotes para um roteador que saiba encaminhá-los a seus destinos. O roteador default (ou padrão) é um roteador para quem se destinam todos esses pacotes. Tecnicamente ele corresponde à rota para o destino 0.0.0.0/0.
  • Endereço IP do servidor DNS: usuários costumam endereçar hosts e servidores por seus nomes de domínio, e não por seus endereços IP. Isso é muito mais fácil de memorizar do que os endereços numéricos. Nomes de domínio são análogos a nomes de assinantes em um catálogo telefônico. No entanto, as aplicações precisam dos endereços IP para se comunicarem. O servidor DNS faz a tradução de nome de domínio para endereço IP, e é usado pelas aplicações transparentemente (isso é, você não percebe que isso ocorre). Assim, as aplicações se comunicam com o servidor DNS para resolver nomes de domínio e obter seus respectivos endereços IP. O endereço desse servidor deve ser configurado em cada host, para que se possam traduzir nomes de domínio.

Configuração estática

A configuração estática envolve um usuário gravar a configuração de rede de forma persistente na memória do host. Cada tipo de equipamento apresenta um procedimento diferente para armazenar a configuração de rede estática. Por exemplo, em computadores com sistema operacional Linux da família Debian (tais como Debian, Ubuntu, Mint e muitos outros), a configuração de rede fica armazenada no arquivo /etc/network/interfaces:

iface eth0 inet static
  address 10.1.23.19
  netmask 255.255.255.0
  gateway 10.1.23.254


Em roteadores sem-fio TP-Link WDR 4300, essa configuração de rede pode ser gravada por meio de uma interface web para gerenciamento do equipamento:

PJI3-Tplink-lan.jpg
Menu Network->LAN da interface web do roteador sem-fio TP-Link WDR4300


E, em roteadores Cisco, a configuração estática é feita por meio de comandos na CLI (Command Line Interface), os quais ficam gravados na memória permanente do roteador.

router# configure terminal
router(config)# interface e0
router(config-if)# ip address 10.1.23.19 255.255.255.0
router(config-if)# exit
router(config)# ip route 0.0.0.0 0.0.0.0 10.1.23.254
router(config)# exit
router# write memory
router# write terminal
Building configuration...

Current configuration : 472 bytes
!
version 12.3
!
hostname Router
!
interface Ethernet0
 ip address 10.1.23.19 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 10.1.23.254

Configuração dinâmica

Um host pode obter suas informações de rede dinamicamente por meio do protocolo DHCP (Dynamic Host Configuration Protocol). Desta forma, não há necessidade de o usuário saber as informações de rede necessárias para configurar corretamente seu equipamento. Isso torna possível também centralizar e automatizar a distribuição de endereços de rede para hosts. Se alguma das informações precisar ser modificada (ex: o roteador default), basta alterá-las no serviço DHCP para que toda a rede seja eventualmente reconfigurada.

A maioria dos equipamentos de usuários vem de fábrica com configuração de rede dinâmica. Isso vale para computadores pessoais, em que os sistemas operacionais detectam as interfaces de rede e as configuram com DHCP, smartphones, tablets, câmeras IP, ATA e telefones IP, impressoras, e possivelmente outros equipamentos. Em computadores pessoais com sistemas operacionais Linux da família Debian, uma interface pode ser configurada dinamicamente se for declarada em /etc/network/interfaces desta forma:

iface eth0 inet dhcp


A configuração de interfaces com DHCP no arquivo /etc/network/interfaces não é o procedimento usual, ao menos não em versões desktop desses sistemas operacionais. Nesses casos, o mais comum é que tal configuração seja feita por um daemon chamado network-manager. Esse daemon implementa um serviço de configuração de rede automática para o computador, e tenta configurar automaticamente todas as interfaces de rede que não foram configuradas em /etc/network/interfaces.

Protocolo DHCP

DHCP (Dynamic Host Configuration Protocol) é um protocolo para obtenção automática de configuração de rede, usado por computadores que acessam fisicamente uma rede. Esses computadores são tipicamente máquinas de usuários, que podem usar a rede esporadicamente (ex: usuários ocm seus laptops, com acesso via rede cabeada ou sem-fio), ou mesmo computadores fixos da rede. O principal objetivo do DHCP é fornecer um endereço IP, a máscara de rede, o endereço IP do roteador default e um ou mais endereços de servidores DNS. Assim, um novo computador que acesse a rede pode obter essa configuração sem a intervenção do usuário.

Para esse serviço pode haver um ou mais servidores DHCP. Um computador que precise obter sua configuração de rede envia mensagens DHCPDISCOVER em broadcast para o port UDP 67. Um servidor DHCP, ao receber tais mensagens, responde com uma mensagem DHCPOFFER também em broadcast, contendo uma configuração de rede ofertada. O computador então envia novamente em broadcast uma mensagem DHCPREQUEST, requisitando o endereço IP ofertado pelo servidor. Finalmente, o servidor responde com uma mensagem DHCPACK, completando a configuração do computador cliente. Como a configuração tem um tempo de validade (chamado de lease time), o cliente deve periodicamente renová-la junto ao servidor DHCP, para poder continuar usando-a. O diagrama abaixo mostra simplificadamente esse comportamento:

Dhcp-diag.gif



Abaixo segue um diagrama de estados detalhado do DHCP, mostrando todas as possíveis transições do protocolo:

Dhcpfsm.png

O servidor DHCP identifica cada cliente pelo seu endereço MAC. Assim, o DHCP está fortemente relacionado a redes locais IEEE 802.3 (Ethernet) e IEEE 802.11 (WiFi).

Servidor DHCP

Em uma rede local em que hosts devem obter sua configuração de rede dinamicamente, deve haver ao menos um servidor DHCP. Esse serviço costuma estar disponibilizado em equipamentos de rede, tais como pontos de acesso sem-fio e roteadores. Por exemplo, o roteador sem-fio TP-Link WDR 4300 oferece esse serviço, que pode ser configurado e ativado por meio de sua interface de gerenciamento.

PJI3-Dhcp-tplink.jpg
Configuração do serviço DHCP na interface web do roteador TP-Link WDR4300


Podem existir mais de um servidor DHCP em uma mesma rede local, porém há que ter um cuidado. As faixas de endereços concedidas por diferentes servidores não podem se sobrepor. Assim, se um servidor DHCP oferece endereços entre 192.168.1.20 e 192.168.1.100, um outro servidor DHCP pode oferecer endereços entre 192.168.1.110 e 192.168.1.200, mas não entre 192.168.1.90 e 192.168.1.150.


Servidores DHCP como esse costumam ser limitados. Com eles se consegue tão somente definir a faixa de endereços IP a ser concedida, o tempo de concessão, o servidor DNS e o roteador default. Porém há muitas outras possibilidades no serviço DHCP, tais como:

  • Vincular um endereço IP a um host específico, com base em seu endereço MAC.
  • Informar o nome do domínio DNS e o nome do host
  • Informar os endereços de uma ou mais impressoras
  • Indicar um arquivo de boot a ser usado pelo host
  • ...e muitas outras opções !


O uso de um servidor DHCP completamente funcional demanda um programa especial a ser executado em um computador. O software ISC DHCP Server oferece todas as opções DHCP, além de ser altamente configurável. Ele pode ser instalado e executado em um computador com sistemas operacionais Linux, BSD, Solaris, entre outros da família Unix. Esse servidor DHCP é configurado por meio de um arquivo de configuração, cuja localização depende de como o software foi instalado. Em sistemas Ubuntu, em que o servidor DHCP pode ser instalado a partir de um pacote de software chamado isc-dhcp-server, esse arquivo está em /etc/dhcp/dhcpd.conf. Um exemplo simples desse arquivo está a seguir:

# tempos de concessão, em segundos
default-lease-time 600;
max-lease-time 7200;

# Algumas opções de uso comum
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.1;
option domain-name-servers 191.36.8.2, 191.36.8.3;
option domain-name "sj.ifsc.edu.br";

# subrede 192.168.1.0/24 com duas faixas de endereços a serem concedidos:
# 192.168.1.100 a 192.168.1.150
# 192.168.1.190 a 192.168.1.240

subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.100 192.168.2.150;
   range 192.168.1.190 192.168.2.240;
}

Atividades

Realizar estas atividades.

Subredes IP

Uma subrede IP é representada por um prefixo de rede e uma máscara. O prefixo são os N bits mais significativos comuns a todos os endereços IP contidos em uma subrede (lembre que um endereço IP tem 32 bits). A máscara informa quantos bits tem o prefixo. A combinação de prefixo de rede e máscara funciona da seguinte forma:

Imagine que exista uma subrede contendo os endereços de 192.168.2.0 até 192.168.2.255. Se representarmos esses endereços em binário, podemos ver que os 24 bits mais significativos são os mesmos para todos os endereços:


Pji-prefixo1.png


A máscara de rede tem a forma de um endereço IP, porém com bits 1 na parte correspondente ao prefixo, e 0 no resto. Assim, para o exemplo acima a máscara de rede é 255.255.255.0. Outra forma de representar a máscara é simplesmente informar o tamanho em bits do prefixo, e no exemplo a máscara seria 24. Juntando o prefixo e a máscara, a subrede pode ser representada de uma destas duas formas:

  • 192.168.2.0/255.255.255.0
  • 192.168.2.0/24


Agora imagine que o prefixo tenha 28 bits, como mostrado nesta figura:


Pji-prefixo2.png


Por ter um prefixo mais longo, o tamanho dessa subrede é menor. Isso significa que ela contém menos endereços IP, tanto que o primeiro endereço é 192.168.2.0 e o último é 192.168.2.15. Essa subrede poderia ser representada por:

  • 192.168.2.0/255.255.255.240
  • 192.168.2.0/28


Aproveitando esse exemplo, pode-se mostrar uma outra subrede que, apesar de não parecer, é diferente da anterior:


Pji-prefixo3.png


Essa outra subrede contém endereços entre 192.168.2.16 e 192.168.2.31. Essa subrede poderia ser representada por:

  • 192.168.2.16/255.255.255.240
  • 192.168.2.16/28

Encaminhamento IP

Todo host é capaz de realizar uma função da camada de rede chamada de encaminhamento IP (IP forwarding). O encaminhamento é feito quando um host recebe um datagrama IP, e precisa decidir o que fazer com ele. O destino do datagrama depende do endereço de destino contido em seu cabeçalho IP.

  1. Se o endereço IP for o do próprio host: o conteúdo do datagrama é desencapsulado e entregue à camada superior.
  2. Se o endereço IP NÃO for o do próprio host: a tabela de rotas do host é consultada para buscar uma rota que satisfaça o endereço de destino. Caso ela exista, o datagrama é transmitido para o próximo roteador indicado nessa rota.


Uma rota serve para informar como se chega a um determinado destino. Um destino pode ser um único endereço IP, ou uma subrede (que contém um conjunto de endereços IP). Para que um pacote IP chegue a um destino, deve-se transmiti-lo para o próximo roteador em direção a esse destino. Esse próximo roteador também deve conhecer uma rota para tal destino, repetindo o mesmo procedimento. Ao menos duas informações compõem cada rota:

  • O destino, que é expressado como uma subrede: Uma subrede é representada por um prefixo de rede e uma máscara.
  • O próximo roteador, expressado por um endereço IP: o endereço IP do próximo roteador (também chamado de gateway, que significa portal em inglês), o qual deve pertencer à mesma subrede do equipamento que o especifica em uma rota.


No caso em que o endereço de destino não for o do próprio host, esse endereço é comparado com cada rota existente na tabela de rotas. Rotas com máscaras de rede maiores são testadas primeiro (o tamanho de uma máscara é definido pela quantidade de bits 1 que ela possui), pois são rotas para subredes menores e, portanto, mais específicas. Se nenhuma rota servir, o datagrama é silenciosamente descartado.

A tabela de rotas a seguir foi obtida em um computador com sistema operacional Linux.

aluno@M1:~$ route -n
Tabela de Roteamento IP do Kernel
Destino         Roteador        MáscaraGen.    Opções Métrica Ref   Uso Iface
0.0.0.0         191.36.9.254    0.0.0.0         UG    0      0        0 enp0s25
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp0s25
191.36.9.0      0.0.0.0         255.255.255.0   U     0      0        0 enp0s25
192.168.2.64    191.36.9.1      255.255.255.192 U     0      0        0 enp0s25

Supondo que esse host tenha que encaminhar um datagrama com endereço de destino 8.8.8.8, a busca por uma rota adequada seria esta:

  1. Rota para 192.168.2.64/26: ao aplicar a máscara /26 (255.255.255.192) ao endereço de destino 8.8.8.8, obtêm-se o prefixo 8.8.8.0. Como ele é diferente de 192.168.2.64, esta rota não serve.
  2. Rota para 191.36.9.0/24: ao aplicar a máscara /24 ao endereço de destino 8.8.8.8, obtêm-se o prefixo 8.8.8.0. Como ele é diferente de 191.36.9.0, esta rota não serve.
  3. Rota para 169.254.0.0/16: ao aplicar a máscara /16 ao endereço de destino 8.8.8.8, obtêm-se o prefixo 8.8.0.0. Como ele é diferente de 169.254.0.0, esta rota não serve.
  4. Rota para 0.0.0.0/0: ao aplicar a máscara /0 ao endereço de destino 8.8.8.8, obtêm-se o prefixo 0.0.0.0. Como ele é igual a 0.0.0.0 (prefixo da rota), esta rota será usada.


Se outro datagrama tiver endereço de destino 191.36.9.140, a busca pela rota seria:

  1. Rota para 192.168.2.64/26: ao aplicar a máscara /26 ao endereço de destino 191.36.9.140, obtêm-se o prefixo 191.36.9.128. Como ele é diferente de 192.168.2.64, esta rota não serve.
  2. Rota para 191.36.9.0/24: ao aplicar a máscara /24 ao endereço de destino 191.36.9.140, obtêm-se o prefixo 191.36.9.0. Como ele é igual a 191.36.9.0 (prefixo da rota), esta rota será usada.

Roteamento estático

Cada host ligado a Internet possui uma tabela de rotas. É pelo conteúdo dessa tabela que ele sabe como transmitir os pacotes para cada destino. Em seu computador, você pode visualizar essa tabela da seguinte forma:

# Isto funciona em qualquer *nix que se preze ...
netstat -rn


Ao se configurar uma interface de rede, cria-se uma rota automática para a subrede diretamente acessível via aquela interface. Isto se chama roteamento mínimo. Por exemplo, se uma interface de rede foi configurada com o endereço IP 192.168.10.1/24, sua tabela de rotas pode se apresentar assim:

aluno@M1:~> ifconfig eth1 192.168.10.1 netmask 255.255.255.0
aluno@M1::~> netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask            Flags   MSS Window  irtt Iface
192.168.10.0     0.0.0.0         255.255.255.0     U         0 0          0 eth1
127.0.0.0        0.0.0.0         255.0.0.0         U         0 0          0 lo


Rotas arbitrárias podem ser adicionadas manualmente a essa tabela. Uma rota possui estas informações:

  • Subrede de destino: isso se compõe de um prefixo de rede e uma máscara
  • Próximo roteador: o endereço IP do próximo roteador (opcional)
  • Interface de rede: a interface de rede por onde o datagrama deve ser transmitido (opcional)
  • Métrica: um número que informa o custo da rota (opcional .. usado por protocolos de roteamento dinâmico)

Obs: ao menos próximo roteador ou interface de rede precisam ser especificados.


Em sistemas Linux, rotas estáticas podem ser criadas com o comando route. A seguir mostram-se alguns exemplos de criação de rotas:

  • Rota para uma subrede de destino através de um próximo roteador:
    # route add -net prefixo/mascara gw IP_roteador
    route add -net 192.168.10.0/24 gw 191.36.9.254
    
  • Rota para um host específico através de um próximo roteador:
    # route add -host IP_host gw IP_roteador
    route add -host 192.168.10.5 gw 191.36.9.100
    
  • Rota para um host específico através de uma interface de rede: nesse caso, imagine que exista uma subrede que contém o IP do host, porém esse host específico está conectado a outra interface de rede.
    # route add -host IP_host gw IP_roteador
    route add -host 192.168.10.5 dev eth1
    


A rota default, por ser corriqueira, pode ser criada com uma palavra-chave especial no comando route. Essa rota tem o seguinte significado: se o destino não estiver em minha própria subrede, e nenhuma outra rota específica existir para a subrede onde se encontra, então repasse o datagrama para o roteador indicado. O comando route pode ser usado assim:

# adiciona a rota default, que passa pelo roteador 192.168.10.100
route add default gw 192.168.10.100


Outra forma de adicionar essa rota é:

# este comando tem o mesmo efeito que o anterior ...
route add -net 0.0.0.0/0 gw 192.168.10.100


Em roteadores Cisco, os exemplos sobre rotas estáticas implicariam estes comandos:

  • Rota para uma subrede de destino através de um próximo roteador:
    ip route 192.0.10.0/24 191.36.9.254
    
  • Rota para um host específico através de um próximo roteador:
    ip route 192.168.10.5/32 191.36.9.100
    
  • Rota para um host específico através de uma interface de rede: nesse caso, imagine que exista uma subrede que contém o IP do host, porém esse host específico está conectado a outra interface de rede.
    ip route 192.168.10.5/32 ethernet 1
    


Finalmente, se for usado o roteador sem-fio TP-Link WDR4300, rotas estáticas podem ser adicionadas no menu Advanced Routing -> Static Routing List em sua interface de gerenciamento:

PJI3-Tplink-routes.png
Criação de uma rota estática na interface de gerenciamento do roteador TP-Link WDR4300

Atividades

Realizar estas atividades.

Roteamento dinâmico

Roteamento dinâmico é definido como a capacidade de roteamento automático por uma rede. No roteamento estático, como visto, as possibilidades de rota são definidas por meio de uma tabela de roteamento fixa definida manualmente. No entanto, no roteamento dinâmico as tabelas de roteamento são construídas automaticamente pelo sistema, e mantidas constantemente atualizadas devido a comunicação entre os roteadores participantes da rede. Sendo assim, uma rede que utilize algum protocolo de roteamento dinâmico é sensível a qualquer mudança de topologia da rede, sendo capaz de adaptar-se rapidamente a um novo padrão de rotas. Em outras palavras, um protocolo de roteamento dinâmico pode ser definido como uma maneira que um roteador fala com seus vizinhos a fim de compartilhar informações sobre rotas disponíveis na rede. A partir da capacidade de auto organização, o roteamento dinâmico deve ser capaz de procurar a melhor rota alternativa para um fluxo de dados, quando determinados roteadores se tornam inacessíveis ou estejam congestionados.

O roteamento dinâmico dentro de uma rede pertencente a uma organização é chamado de roteamento interno', e o roteamento entre redes de diferentes oragnizações é denominado roteamento externo. O roteamento externo acontece no núcleo da Internet, e envolve um número muito grande de roteadores e hosts.

Um dos protocolos clássicos de roteamento interno é o protocolo RIP. Por apresentar tempo convergência relativamente longo, o RIP se aplica a pequenas redes. Outro protocolo de roteamento interno se chama OSPF, o qual apresenta rápida convergência e é usado em redes maiores.

Protocolo RIP

O protocolo RIP (Routing Information Protocol) é um protocolo baseado na técnica vetor de distância, pois compartilha tabelas de distâncias entre roteadores vizinhos, para que cada roteador possa atualizar sua tabela de roteamento.

O protocolo RIP foi um dos primeiros protocolos de roteamento baseado em vetor de distância aplicado a uma grande variedade de sistemas. O RIP possui as seguintes características principais de funcionamento:

  1. O protocolo envia mensagens atualizadas sobre rotas a cada 30 segundos;
  2. O protocolo envia a tabela completa para os roteadores da rede a cada atualização;
  3. O protocolo utiliza uma métrica baseada em distância, medida por saltos ou hopcount;
  4. O RIP utiliza o algoritmo de Bellman-ford para determinar o melhor caminho para um determinado fluxo de dados;
  5. O RIP baseia-se no protocolo UDP e utiliza a porta 520;
  6. O RIP possui um hopcount máximo de 15 saltos, sendo assim qualquer rede com 16 ou mais saltos de distância é considerada inalcançável.

A lógica de funcionamento do RIP é baseada em roteadores ativos, configurados como roteadores que realizam comunicação das rotas aos demais, e roteadores passivos que não disseminam mensagens porém atualizam suas rotas quando recebem informações atualizadas.


Um roteador ativo mantém uma tabela de roteamento que possui os identificadores e IPs dos roteadores vizinhos, a rota de acesso, e um número inteiro que representa a distância do roteador até determinada rede. As tabelas são anunciadas para todos os roteadores da rede. O envio das tabelas de roteamento pelos roteadores acontece por broadcast em intervalos de tempo geralmente definidos para 30 segundos. Quando um nó recebe uma informação atualizada de determinado roteador vizinho, substitui sua tabela pela tabela atualizada. Para indicar a distância até uma determinada rede, o protocolo RIP utiliza uma métrica baseada em contagem de saltos, ou seja, quantos roteadores existem entre o roteador de origem e a rede de destino.



Rip.png

Exemplo RIP (De A para F)

Neste exemplo um determinado nó A deseja se comunicar com o nó E.
Inicialmente os roteadores possuem apenas suas próprias rotas definidas.


Partindo de A para Enlace Métrica
A Local 0


Neste exemplo, A inicia a comunicação enviando sua tabela. Quando recebem a mensagem de A, B e C se atualizam.

Partindo de B para Enlace Métrica
B Local 0
A A para B 1


Partindo de C para Enlace Métrica
C Local 0
A A para C 1


Agora B e C enviam suas tabelas atualizadas para A, E e D respectivamente. Logo A, E, D atualizam suas tabelas e enviam por broadcast para todos os roteadores.

Partindo de E para Enlace Métrica
E Local 0
C C para E 1
A C para E 2


Partindo de D para Enlace Métrica
D Local 0
B B para D 1
E D para E 1
A D para B 2


Partindo de A para Enlace Métrica
A Local 0
B A para B 1
C A para C 1
D A para B 2
E A para C 2


E envia sua tabela atualizada para F, que atualiza sua tabela.

Partindo de F para Enlace Métrica
F Local 0
E E para F 1
A E para F 3
B E para F 3
C E para F 2
D E para F 2


F atualiza sua tabela e envia para todos.


.
.
.


Quando A recebe a tabela atualizada de F, atualiza sua própria tabela. A seguir temos a tabela do A depois da atualização.

Partindo de A para Enlace Métrica
A Local 0
B A para B 1
C A para C 1
D A para B 2
E A para C 2
F A para C 3

Atividades

Realizar estas atividades.