Provided by: manpages-pt_20040726-4_all bug

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)