arp

ARP(7)                    Manual do Programador Linux                   ARP(7)



NOME
       arp - módulo de kernel para ARP em Linux.

DESCRIÃÃO
       Este módulo de protocolo de kernel implementa o Protocolo de
       Resolução de Endereços (Address Resolution Protocol) definido na RFC
       826.  Ele é usado para converter o endereço de hardware da camada 2
       para endereços do protocolo IPv4 em redes diretamente conectadas.
       Normalmente o usuário não interage diretamente com este módulo,
       exceto para configurá-lo; em vez disso, ele provê um serviço para
       outros protocolos no kernel.

       Um processo de usuário pode receber pacotes ARP através do uso de
       sockets do tipo packet(7).  Há também um mecanisco de gerenciamento
       do cache ARP no espaço de usuário, através do uso de sockets do tipo
       netlink(7).  A tabela ARP também pode ser controlada via ioctl (2) ou
       qualquer socket do tipo PF_INET

       O módulo ARP matém um cache de mapeamento entre endereços de
       hardware e endereços de protocolo. O cache tem um tamanho limitado
       pois há uma "coleta de lixo" entre entradas mais antigas e usadas com
       menos freqüência. Entradas que são marcadas como permanentes nunca
       são apagadas pelo coletor de lixo. O cache pode ser manipulado
       diretamente pelo uso de ioctls, e seu comportamento pode ser ajustado
       pelos sysctls definidos abaixo.

       Quando não há feedback positiva para um mapeamento existente depois
       de um certo tempo (veja os sysctls abaixo), uma entrada de cache
       vizinha é considerada travada.  Para enviar dados para o destino
       novamente, o ARP primeiro tenta pedir ao daemon arp local um endereço
       MAC atualizado por app_solicit vezes.  Se falhar, e um endereço MAC
       antigo é conhecido, um teste de unicast é enviado ucast_solicit
       vezes. Se falhar também, ele fará um broadcast de um novo pedido de
       ARP na rede. Pedidos são enviados apenas quando há dado enfileirado
       para envio.

       O Linux acrescentará automaticamete uma entrada não permanente de arp
       proxy quando receber um pedido de um endereço para encaminhamento, e o
       arp proxy é habilitado na interface de recepção. Quando houver uma
       rota rejeitada para o destino, nenhuma entrada de arp proxy é
       acrescentada.


IOCTLS
       Esses ioctls são disponÃveis em todos os sockets PF_INET Eles pegam um
       ponteiro para um struct arpreq como parâmetro.

       struct arpreq
       {
           struct sockaddr arp_pa;      /* endereço de protocolo */
           struct sockaddr arp_ha;      /* endereço de hardware */
           int             arp_flags;   /* flags */
           struct sockaddr arp_netmask; /* máscara de rede do endereço de protocolo */
           char            arp_dev[16];
       };

       SIOCSARP, SIOCDARP e SIOCGARP respectivamente seta, deleta e obtém um
       mapeamento ARP.  Setar e deletar mapas ARP são operações
       privilegiadas e só podem ser realizadas por um processo com a
       capabilidade CAP_NET_ADMIN ou com um UID efetivo igual a 0.

       arp_pa deve ser um socket AF_INET e arp_ha deve ter o mesmo tipo que o
       dispositivo especificado em arp_dev.  arp_dev é uma string terminada
       em zero que nomeia um dispositivo.


       ┌───────────────────────────────────────────┐
       │                arp_flags                  │
       ├────────────────┬──────────────────────────┤
       │flag            │ significado              │
       ├────────────────┼──────────────────────────┤
       │ATF_COM         │ Busca completada         │
       ├────────────────┼──────────────────────────┤
       │ATF_PERM        │ Mantém entrada          │
       ├────────────────┼──────────────────────────┤
       │ATF_PUBL        │ Publica entrada          │
       ├────────────────┼──────────────────────────┤
       │ATF_USETRAILERS │ Trailers requeridos      │
       ├────────────────┼──────────────────────────┤
       │ATF_NETMASK     │ Usa uma máscara de rede │
       ├────────────────┼──────────────────────────┤
       │ATF_DONTPUB     │ Não responde            │
       └────────────────┴──────────────────────────┘

       Se o flag ATF_NETMASK é selecionado, então arp_netmask deveria ser
       válido.  O Linux 2.2 não suporta entradas entradas ARP de rede proxy,
       então deveria ser setado para 0xffffffff, ou 0 para remover uma
       entrada de proxy arp existente.  ATF_USETRAILERS é obsoleto e não
       deveria ser usado.


SYSCTLS
       O ARP suporta uma interface de sysctl para configurar parâmetros em
       uma base global ou por interface.  Os sysctls podem ser acessados por
       leitura ou escrita dos arquivos /proc/sys/net/ipv4/neigh/*/* ou com a
       interface sysctl(2) /proc/sys/net/ipv4/neigh/.  A configuração no
       diretório `default' é usada por todos os dispositivos recém-criados.
       A menos que se especifique o contrário, sysctls relacionados a tempo
       são especificados em segundos.

       anycast_delay
              O número máximo de jiffies para atraso antes de uma resposta a
              uma mensagem de solicitação de vizinhança IPv6.  Suporte a
              anycast ainda não foi implementado.  O padrão é 1 segundo.

       app_solicit
              O número máximo de testes para envio ao daemon ARP do espaço
              de usuário, via netlink, antes de voltar aos testes de
              multicast (veja mcast_solicit).  O padrão é 0.

       base_reachable_time
              Uma vez que um vizinho foi encontrado, a entrada é considerada
              válida pelo menos por um valor aleatório entre
              base_reachable_time/2 e 3*base_reachable_time/2.  Uma
              validação da entrada será estendida se ele receber feedback
              positivo de protocolos de nÃvel mais alto.  O padrão é de 30
              segundos.

       delay_first_probe_time
              Atraso antes do primeiro teste, depois que ele decidiu que um
              vizinho está travado.  O padrão é de 5 segundos.

       gc_interval
              Quão freqüentemente o coletor de lixo para entradas vizinhas
              deveria tentar rodar.  O padrão é de 30 segundos.

       gc_stale_time
              Determina a freqüência da checagem por entradas de vizinhos
              travados.  Quando uma entrada de vizinho é considerada travada,
              é resolvido novamente antes de enviar dados para ele.  O
              padrão é de 60 segundos.

       gc_thresh1
              O número mÃnimo de entradas a serem mantidas no cache ARP.  O
              coletor de lixo não rodará se houver menos do que este número
              de entradas no cache.  O padrão é de 128.

       gc_thresh2
              O número máximo flexÃvel de entradas a serem mantidas no cache
              ARP. O coletor de lixo permitirá que o número de entradas
              exceda este número por 5 segundos antes que a coleta seja
              realizada.  O padrão é de 512.

       gc_thresh3
              O número máximo rÃgido de entradas a serem mantidas no cache
              ARP. O coletor de lixo sempre rodará se houver mais que este
              número de entradas no cache.  O padrão é de 1024.

       locktime
              O número mÃnimo de jiffies a manter uma entrada ARP no cache.
              Isto previne o esmagamento do cache ARP se houver mais que um
              mapeamento potencial (geralmente devido a desconfiguração de
              rede).  O padrão é de 1 segundo.

       mcast_solicit
              O número máximo de tentativas para resolver um endereço por
              multicast/broadcast antes de marcar a entrada como não
              alcançável.  O padrão é de 3.

       proxy_delay
              Quando é recebido um pedido ARP de um endereço proxy-ARP
              conhecido, atrasa até proxy_delay jiffies antes de responder.
              Isto é usado para prevenir flooding (enxurrada) na rede em
              alguns casos.  O padrão é de 0.8 segundos.

       proxy_qlen
              O número máximo de pacotes que podem ser enfileirados em
              endereços proxy-ARP.  O padrão é de 64.

       retrans_time
              O número de jiffies de atraso antes de se retransmitir um
              pedido.  O padrão é de 1 segundo.

       ucast_solicit
              O número máximo de tentativas de enviar testes de unicast
              antes de perguntar ao daemon ARP (veja app_solicit).  O padrão
              é 3.

       unres_qlen
              O número máximo de pacotes que podem ser enfileirados para
              cada endereço não resolvido por outras camadas da rede.  O
              padrão é de 3.


PROBLEMAS
       Algumas configurações de temporização são especÃficos em jiffies,
       que são relacionados com a arquitetura. No Alpha, um jiffy é 1/1024
       segundo, em muitas outras arquiteturas é 1/100s.

       Não há maneira de sinalizar feedback positivo a partir do espaço do
       usuário. Isto significa que protocolos orientados a conexão
       implementados no espaço de usuário gerarão um tráfego ARP
       excessivo, porque ndisc retestará regularmente o endereço MAC.  O
       mesmo problema se aplica para a implementação do NFS no kernel.

       Esta página de manual busca tanto a funcionalidade especÃfica para
       IPv4 quanto a compartilhada entre IPv4 e IPv6.


VERSÃES
       O struct arpreq mudou no Linux 2.0 para incluir o membro arp_dev e os
       números de ioctl mudaram ao mesmo tempo.  O suporte aos ioctls antigos
       foi tirado do Linux 2.2.

       O suporte a entradas de arp proxy para redes (máscara de rede
       diferente de 0xffffffff) foi eliminado no Linux 2.2. Ele é substituÃdo
       pela configuração automática pelo kernel do arp proxy para todos os
       hosts alcancáveis em outras interfaces (quando o repasse e o arp proxy
       estiverem habilitados para a interface).




VEJA TAMBÃM
       ip(7)

       RFC826 para uma descrição do ARP.
       RFC2461 para uma descrição da descoberta de vizinhos IPv6 e os
       algoritmos-base usados.

TRADUZIDO POR LDP-BR em 21/08/2000.
       Rubens de Jesus Nogueira <darkseid99@usa.net> (tradução) André L.
       Fassone Canova <lonelywolf@blv.com.br> (revisão)



Página do Manual do Linux         3/06/1999                            ARP(7)