Protocolo de resolução de
endereços: ARP
Introdução,
cache
ARP, formato
do pacote ARP, exemplos de ARP
em acção,
proxy
ARP, ARP
Endereço físico
Os endereços IP fazem apenas sentido no protocolo
IP;
Ligação de dados (nível 2) - esquema de
endereçamento independente da camada de rede;
Mesmo cabo pode ser partilhado por protocolos de
rede diferentes
Envio de uma trama de uma rede local para outra
Em que interface deve ser enviada a trama - endereço físico Nível 2 nunca utiliza o endereço IP do datagrama.
ARP –
Address Resolution
Protocol
Mapeamento entre os endereços IP em qualquer tipo de
endereços utilizados pela camada de ligação lógica
RARP - mapeamento inverso Mapeamento dinâmico
Não é da responsabilidade do utilizador ou do administrador
Possível ARP estático
Não é necessário estar sempre a fazer o ARP;
Sempre que o IP é mudado, esta entrada na tabela ARP fica
inválida.
Ligações ponto-a-ponto não utilizam ARP
Exemplo – FTP
1 - Aplicação, o cliente de FTP, determina o endereço IP do terminal (função gethostbyname) - DNS; 2 - Cliente FTP pede à camada TCP paraestabelecer uma ligação com esse endereço IP;
3 - TCP envia a mensagem
de pedido de ligação para o utilizador remoto, enviando o datagrama IP para o
Exemplo – FTP
4 - Onde quer que se
encontre o utilizador
destino, o datagrama IP é enviado para um terminal ou router numa rede local directamente ligada à de origem;
5 - Se a rede for Ethernet, o
terminal origem converte o endereço IP no endereço físico Ethernet (ARP);
6 - ARP envia uma trama
Ethernet, ARP request, para todos os terminais da rede;
Exemplo – FTP
7 - Ao receber a mensagem,
o terminal destino
reconhece o seu endereço IP, e envia um ARP reply, contendo o endereço IP e o seu endereço físico.
8 - A mensagem ARP reply é
recebida no terminal origem;
9 - O datagrama IP pode ser
enviado para o terminal destino.
Cache ARP e comando ARP
Cache
ARP
Contém mapeamentos efectuados mais recentemente;
Tempo normal de expiração de uma entrada - 20 minutos.
bsdi % arp –a
sun (140.252.13.33) at 8:0:20:3:f6:42 svr4 (140.252.13.34) at 0:0:c0:c2:9b:26
Pacote ARP
Ethernet
End. destino End. origem Tipo trama Tipo hard. Tipo prot. Tamanho end. hard. Tamanho end. prot.Op.End. eth. origem End. IP origem End. eth. destino End. IP destino
Cabeçalho Ethernet ARP Request/Reply (28 bytes)
Tipo de endereço hardware 1 - ARP Request 2 - ARP Reply 3 - RARP Request 4 - RARP Reply
Terminal recebe um ARP Request a si direccionado
Preenche campo de endereço de hardware, troca os endereços origem com os endereços destino, e coloca o campo op. a 2.
Exemplos ARP (1)
bsdi % arp –a Verifica que a cache ARP se encontra vazia
bsdi % telnet svr4 discard Liga-se ao servidor de discard
Trying 140.252.13.34... Connected to svr4. Escape character is '^]'. ^] telnet> quit Connection closed. Saída no tcdump 1 0.0 0:0:c0:6f:2d:40 ff:ff:ff:ff:ff:ff arp 60: arp who-has svr4 tell bsdi
2 0.002174 (0.0022) 0:0:c0:c2:9b:26 0:0:c0:6f:2d:40 arp 60: arp reply svr4 is-at 0:0:c0:c2:9b:26
Exemplos ARP (2) – Pedido ARP
para um terminal não existente
bsdi % date ; telnet 140.252.13.36 ; date Sat Jan 30 06:46:33 MST 1993
Trying 140.252.13.36...
telnet: Unable to connect to remote host: Connection timed out
Sat Jan 30 06:47:49 MST 1993 76 seg depois da primeira data
bsdi % arp –a Verifica a cache ARP
? (140.252.13.36) at (incomplete)
Saída no tcdump
1 0.0 arp who-has 140.252.13.36 tell bsdi
2 5.50909 (5.50909) arp who-has 140.252.13.36 tell bsdi
Proxy
ARP
Router
responde a pedidos ARP por um
terminal
Router
- agente
proxy
para o terminal
destino, retransmitindo-lhe pacotes vindos de
outros terminais
Processo transparente para terminais de
origem
Pensam que quem enviou a resposta ARP foi o
terminal destino
Proxy
ARP
gemini % arp -a
netb (140.252.1.183) at 0:80:ad:3:6a:80 sun (140.252.1.29) at 0:80:ad:3:6a:80
Elementos da rede de cima com tabelas de encaminhamento com entradas para a rede de baixo;
Router envia datagramas para o seu
Necessidade do
proxy
ARP
Esconder duas redes físicas uma da outra que
tenham um
router
no meio a funcionar como agente
de
proxy
Duas redes físicas podem usar o mesmo identificador
de rede
Agente
proxy
responde a pedidos ARP numa rede
para um terminal noutra rede
Quando redes não suportam a criação de sub-redes,
sempre que corram uma implementação antiga de
TCP/IP.
ARP gratuito
Envio de pedido ARP para obter o seu
próprio endereço IP
Detecta duplicação de endereços
Outros terminais actualizam a sua
cache
de ARP
Saída no tcdump
1
0.0
0:0:c0:6f:2d:40 ff:ff:ff:ff:ff:ff arp 60
Protocolo de resolução
inversa: RARP
Formato do pacote RARP,
exemplos de RARP, características
especiais dos servidores de RARP.
RARP (
Reverse
ARP)
Arranque de sistema com disco local - obtém
endereço IP de um ficheiro de configuração que se
encontra no disco;
Sistema sem disco (um terminal X, uma impressora)
necessita de uma outra forma de obter o endereço IP
Sistema sem disco lê o endereço físico
Envia pedido RARP (broadcast para a rede) a pedir o seu
endereço IP
Implementação algo complicada;
Formato de um pacote ARP idêntico ao de um RARP:
Tipo de trama é 0x8035;
Campo op = 3 para pedido RARP e op = 4 para resposta
RARP – Exemplos (1)
Forçar o sun a fazer bootstrap da rede em vez do seu disco
local;
Correr servidor RARP e TCPDump no bsdi;
Assim que sun recebe o endereço IP, envia um TFTP
read-request (RRQ) para o ficheiro 8CFCOD21.SUN4C:
8CFCOD21 = 140.252.13.33;
SUN4C indica o tipo de sistema que está a ser bootstrapped.
Saída no tcdump
1 0.0 8:0:20:3:f6:42 ff:ff:ff:ff:ff:ff
rarp 60: rarp who-is 8:0:20:3:f6:42 tell 8:0:20:3:f6:42
2 0.13 (0.13) 0:0:c0:6f:2d:40 8:0:20:3:f6:42 rarp 42:
rarp reply 8:0:20:3:f6:42 at sun (140.252.13.33)
3 0.14 (0.01) 8:0:20:3:f6:42 0:0:c0:6f:2d:40 ip 65:
RARP – Exemplos (2)
Se não existir nenhum servidor de RARP na rede;
1 0.0 8:0:20:3:f6:42 ff:ff:ff:ff:ff:ff rarp 60:
rarp who-is 8:0:20:3:f6:42 tell 8:0:20:3;f6:42 2 6.55 ( 6.55) 8:0:20:3:f6:42 ff:ff:ff:ff:ff:ff rarp 60:
rarp who-is 8:0:20:3:f6:42 tell 8:0:20:3:f6:42 3 15.52 ( 8.97) 8:0:20:3:f6:42 ff:ff:ff:ff:ff:ff rarp 60:
rarp who-is 8:0:20:3:f6:42 tell 8:0:20:3:f6:42 4 29.32 (13.80) 8:0:20:3:f6:42 ff:ff:ff;ff:ff:ff rarp 60:
rarp who-is 8:0:20:3:f6:42 tell 8:0:20:3:f6:42 5 52.78 (23.46) 8:0:20:3:f6:42 ff:ff:ff:ff:ff:ff rarp 60:
rarp who-is 8:0:20:3:f6:42 tell 8:0:20:3:f6:42 6 95.58 (42.80) 8:0:20:3:f6:42 ff:ff:ff:ff:ff:ff rarp 60:
rarp who-is 8:0:20:3:f6:42 tell 8:0;20:3:f6:42 7 100.92 ( 5.34) 8:0:20:3:f6:42 ff:ff:ff:ff:ff:ff rarp 60:
rarp who-is 8:0:20:3;f6:42 tell 8:0:20:3:f6:42 8 107.47 ( 6.55) 8:0:20:3:f6:42 ff:ff:ff:ff:ff:ff rarp 60:
rarp who-is 8:0:20:3:f6:42 tell 8:0:20:3:f6:42 9 116.44 ( 8.97) 8:0:20:3:f6:42 ff:ff:ff:ff:ff:ff rarp 60:
rarp who-is 8:0:20:3:f6:42 tell 8:0:20:3:f6:42 10 130.24 (13.80) 8:0:20:3:f6:42 ff:ff:ff:ff:ff:ff rarp 60:
rarp who-is 8:0:20:3:f6:42 tell 8:0:20:3:f6:42 11 153.70 (23.46) 8:0:20:3:f6:42 ff:ff:ff:ff:ff:ff rarp 60:
rarp who-is 8:0:20:3:f6:42 tell 8:0:20:3:f6:42 12 196.49 (42.79) 8:0:20:3:f6:42 ff:ff:ff:ff:ff:ff rarp 60:
rarp who-is 8:0;20:3:f6:42 tell 8:0:20:3:f6:42
•Frequência de retransmissões; •Quando o timeout atinge um determinado limite (superior a 42.8 segundos), é feito o reset para 5.34 segundos.
Projecto de um servidor RARP
Dependente do sistema;
ARP é muito simples
Responder com endereços físicos é simples e faz parte da
implementação do kernel TCP/IP;
Servidores RARP como processos de utilizadores
Servidor fornece um mapeamento entre o endereço físico e um
endereço IP para vários terminais (todos os sistemas sem disco na rede);
Este mapeamento encontra-se num ficheiro de disco;
Os kernels não lêm os ficheiros de disco;
Um servidor de RARP funciona como um processo de utilizador,
e não faz parte de uma implementação do kernel TCP/IP.
Pedidos RARP são transmitidos como tramas Ethernet
(0x8035);
Um servidor RARP tem de ter uma forma de enviar e receber
Projecto de um servidor RARP
Vários servidores RARP por rede
Pedidos RARP enviados como
broadcasts
ao nível
físico;
Não são encaminhados por
routers
;
São necessários vários servidores RARP numa
única rede;
Aumento do número de utilizadores:
Aumento do tráfego da rede – todos os servidores RARP
enviam uma resposta RARP por cada pedido RARP;
Possibilidade de resposta ao mesmo tempo – aumento
Aula prática 5
Erro
Bind: port already in use
ao reiniciar um servidor
TCP
Em que estado está(ão) a(s) ligação(ões) que usa(m) a
porta desse servidor? (Sugestão: use netstat -ant)
Estado TIME_WAIT
Pág. 40 do livro das práticas
Por que razão este erro não ocorre quando se reinicia o
servidor sem que nenhum cliente o tenha contactado?
Porque não se entra neste estado?
função setsockopt() com opção SO_REUSEADDR
Antes da chamada a bind()
int setsockopt(int s, int level, int optname, const void *optval,
socklen_t optlen)
setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on,
Aula prática 5
Cliente e um servidor de
daytime
usando o protocolo
UDP
Cliente tem que enviar um pacote (ainda que vazio) ao
servidor para este conhecer o seu endereço e lhe poder responder. Com o protocolo TCP isto não é necessário. Porquê?
int sendto(int s, const void *msg, size_t len, int flags, const
struct sockaddr *to, socklen_t tolen)
int recvfrom(int s, void *buf, size_t len, int flags, struct
Aula prática 5
Cliente – em vez de utilizar a função
connect
Contacta o servidor com uma mensagem vazia Recebe informação que servidor lhe envia
Servidor – em vez de utilizar a função
accept
Recebe mensagem vazia do cliente, vê qual o seu endereço Envia informação de daytime, ou outra que faça parte do
seu serviço