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 "Gratuito, comando 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 kernel informado dos endereços IP em cada extremo da ligação.
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 para estabelecer 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 endereço destino;
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
Comando arp
Pacote ARP Ethernet End. destino End. origem Tipo trama Tipo hard. Tipo prot. Tamanho Tamanho eth. End. IP Op.End. end. hard. end. prot. origem origem End. eth. End. IP destino 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. Terminal também coloca o endereço origem físico e IP na sua cache ARP.
Exemplo ARP Request
Exemplo ARP Reply
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? (140.252.13.36) at (incomplete) Verifica a cache ARP 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 3 29.509745 (24.0007) arp who-has 140.252.13.36 tell bsdi
Proxy ARP Route 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 destino através do sun.
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 Saída no tcdump 1 0.0 0:0:c0:6f:2d:40 ff:ff:ff:ff:ff:ff arp 60 arp who-has 140.252.13.35 tell 140.252.13.35 Detecta duplicação de endereços Outros terminais actualizam a sua cache de ARP
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.
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; 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: >sun.26999 > bsdi.tftp: 23 RRQ "8CFCOD21.SUN4C" Assim que sun recebe o endereço IP, envia um TFTP readrequest (RRQ) para o ficheiro 8CFCOD21.SUN4C: 8CFCOD21 = 140.252.13.33; SUN4C indica o tipo de sistema que está a ser bootstrapped.
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 tramas Ethernet deste tipo dependente do sistema.
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 de colisões na Ethernet.
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() intsetsockopt(ints, intlevel, intoptname, const void *optval, socklen_t optlen) setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(int))
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 sockaddr *from, socklen_t *fromlen)
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 Entrega deste trabalho na aula da semana de 10 de Novembro Ver livro das aulas práticas