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 AF_INET.

The ARP module maintains a cache of mappings between hardware addresses and protocol addresses. The cache has a limited size so old and less frequently used entries are garbage-collected. Entries which are marked as permanent are never deleted by the garbage-collector. The cache can be directly manipulated by the use of ioctls and its behavior can be tuned by the /proc interfaces described below.

When there is no positive feedback for an existing mapping after some time (see the /proc interfaces below), a neighbor cache entry is considered stale. Positive feedback can be gotten from a higher layer; for example, from a successful TCP ACK. Other protocols can signal forward progress using the MSG_CONFIRM flag to sendmsg(2). When there is no forward progress, ARP tries to reprobe. It first tries to ask a local arp daemon app_solicit times for an updated MAC address. If that fails and an old MAC address is known, a unicast probe is sent ucast_solicit times. If that fails too, it will broadcast a new ARP request to the network. Requests are sent only when there is data queued for sending.

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
Three ioctls are available on all AF_INET sockets. They take a pointer to a struct arpreq as their argument.

    struct arpreq {
        struct sockaddr arp_pa;      /* protocol address */
        struct sockaddr arp_ha;      /* hardware address */
        int             arp_flags;   /* flags */
        struct sockaddr arp_netmask; /* netmask of protocol address */
        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 must be an AF_INET address and arp_ha must have the same type as the device which is specified in arp_dev. arp_dev is a zero-terminated string which names a device.
    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 sinalizador ATF_NETMASK for 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.

  Interfaces /proc
ARP supports a range of /proc interfaces to configure parameters on a global or per-interface basis. The interfaces can be accessed by reading or writing the /proc/sys/net/ipv4/neigh/*/* files. Each interface in the system has its own directory in /proc/sys/net/ipv4/neigh/. The setting in the "default" directory is used for all newly created devices. Unless otherwise specified, time-related interfaces are specified in seconds.

anycast_delay (desde o Linux 2.2)
    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 (desde o Linux 2.2)
    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 (desde o Linux 2.2)
    Once a neighbor has been found, the entry is considered to be valid for at least a random value between base_reachable_time/2 and 3*base_reachable_time/2. An entry's validity will be extended if it receives positive feedback from higher level protocols. Defaults to 30 seconds. This file is now obsolete in favor of base_reachable_time_ms.

base_reachable_time_ms (desde o Linux 2.6.12)
    As for base_reachable_time, but measures time in milliseconds. Defaults to 30000 milliseconds.

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

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

gc_stale_time (desde o Linux 2.2)
    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 (desde o Linux 2.2)
    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 (desde o Linux 2.2)
    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 (desde o Linux 2.2)
    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 (desde o Linux 2.2)
    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 (desde o Linux 2.2)
    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 (desde o Linux 2.2)
    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 (desde o Linux 2.2)
    O número máximo de pacotes que podem ser enfileirados em endereços proxy-ARP. O padrão é de 64.

retrans_time (desde o Linux 2.2)
    The number of jiffies to delay before retransmitting a request. Defaults to 1 second. This file is now obsolete in favor of retrans_time_ms.

retrans_time_ms (desde o Linux 2.6.12)
    O número de milissegundos de atraso antes de se retransmitir um pedido. O padrão é de 1000 milissegundos.

ucast_solicit (desde o Linux 2.2)
    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 (desde o Linux 2.2)
    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.

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).

As interfaces neigh/* não existiam antes do Linux 2.2.

BUGS
Some timer settings are specified in jiffies, which is architecture- and kernel version-dependent; see time(7).

Não há maneira de sinalizar m retorno 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.

This man page mashes together functionality that is IPv4-specific with functionality that is shared between IPv4 and IPv6.

VEJA TAMBÉM
capabilities(7), ip(7), arpd(8)

RFC 826 for a description of ARP. RFC 2461 for a description of IPv6 neighbor discovery and the base algorithms used. Linux 2.2+ IPv4 ARP uses the IPv6 algorithms when applicable.

TRADUÇÃO
A tradução para português brasileiro desta página man foi criada por Rubens de Jesus Nogueira <darkseid99@usa.net> e André Luiz Fassone <lonely_wolf@ig.com.br>

Esta tradução é uma documentação livre; leia a Licença Pública Geral GNU Versão 3 (https://www.gnu.org/licenses/gpl-3.0.html) ou posterior para as condições de direitos autorais. Nenhuma responsabilidade é aceita.

Se você encontrar algum erro na tradução desta página de manual, envie um e-mail para a lista de discussão de tradutores (debian-l10n-portuguese@lists.debian.org).