O cache ARP existe de uma forma ou de outra em cada host que se comunica via IP sobre Ethernet. O cache contém o mapeamento entre o endereço IP e o endereço Ethernet Media Access Control (MAC). Se você mudar um adaptador Ethernet em um host chamado SERVER-1 ou substituir o SERVER-1 por hardware mais novo / mais rápido, todos os hosts no segmento Ethernet local que se comunicam com o SERVER-1 precisarão de seu cache ARP atualizado. O SERVER-1 pode enviar um pacote ARP gratuito que deve atualizar todos os hosts, mas como é Ethernet, existe a possibilidade de que o pacote ARP seja corrompido ou simplesmente descartado para que você não possa confiar nele.
As entradas do cache ARP na pilha STCP no OpenVOS têm uma duração de 10 minutos, ou seja, após 10 minutos elas são automaticamente apagadas e serão adicionadas de volta na próxima vez que um pacote precisar ser enviado. Quando você exibe o cache ARP, ele mostra o tempo restante para cada entrada. Portanto, o pior cenário é que, depois de alterar o SERVER-1, levará 10 minutos para que o antigo (incorreto) mapeamento expire e um novo (correto) mapeamento seja adicionado. Durante esse tempo, a comunicação com o SERVER-1 não será possível.
Você pode apagar uma determinada entrada com o comando arp -delete. A Figura 1 mostra uma instância do comando arp exibindo o endereço MAC e o tempo de vida seguido pelo comando arp -delete para excluir a entrada e outra instância do comando arp mostrando que não há mais uma entrada no cache.
arp 192.168.50.5 Endereço Internet Endereço MAC Tipo Vida 192.168.50.5 00-04-96-1F-67-0C temp 6 min pronto 14:01:30 arp -delete 192.168.50.5 Mapeamento para 192.168.50.5 apagado pronto 14:01:39 arp 192.168.50.5 arp: sem mapeamento para 192.168.50.5 pronto 14:01:44 |
Figura 1 - Comandos "arp" e "arp -delete". |
A antiga pilha TCP_OS tinha um comando arp -flush que apagava todas as entradas no cache ARP. Se você tiver mais de uma entrada para excluir, pode ser mais fácil (menos digitação) simplesmente excluir todas elas. Como as entradas são automaticamente adicionadas, pois são necessárias, o único lado negativo disto é alguns pacotes extras na rede e algum atraso extra (enquanto o cache ARP está sendo repovoado) no envio do primeiro pacote. Do ponto de vista do digitador, não há nenhum lado para baixo.
A pilha STCP não tem uma opção de descarga
---------------------------------- arp --------------------------------- hostname: -tudo: não -rede: -delete: não -set: não mac_addr: |
Figura 2 - Formulário de comando STCP arp |
Por isso escrevi uma macro curta (figura 3) para fazer isso. A macro redireciona a saída do arp -all para um arquivo no diretório do processo, depois analisa o arquivo para extrair os endereços IP e chama arp -delete com cada endereço. Quando completar algumas das entradas já estarão de volta, mas todas elas terão sido atualizadas com o mapeamento atual.
& arp_flush.cm começa aqui & & Versão 1.00 11-04-17 & [email protected] & & Este roteiro limpa o cache arp, apagando individualmente cada entrada. & No momento em que for feito, algumas entradas estarão de volta. & & & Este software é fornecido "COMO ESTÁ", SEM QUALQUER GARANTIA OU E QUALQUER SUPORTE DE QUALQUER TIPO. O AUTOR DESCULA ESPECIFICAMENTE QUALQUER REVOGAÇÃO IMPLÍCITA E GARANTIAS DE COMERCIABILIDADE OU ADEQUAÇÃO PARA QUALQUER FINALIDADE ESPECÍFICA. & Esta isenção de responsabilidade aplica-se, apesar de quaisquer representações verbais de qualquer e bondoso fornecido pelo autor ou por qualquer outra pessoa. & &set_string FILE (process_dir)>arp_list attach_default_output &FILE& arp -tudo detach_default_output & LINHA 2 &label novamente &set LINE (calc &LINE& + 1) &set_string IP (substrato (conteúdo &FILE&& &LINE& -hold) 1 16) &if (end_of_file &FILE&) = 1 &then &return &if (comprimento X&IP&) = 1 &then &return arp -delete &IP& &goto novamente & & arp_flush.cm termina aqui |
Figura 3 - macro de comando arp_flush |
A Figura 4 mostra uma instância do comando arp -all para ver o que está no cache arp e depois uma execução da macro arp_flush seguida por outra instância de arp -all, observe que todas as vidas no segundo arp -all são de 10 minutos. Eu removi muitas das linhas do primeiro arp -all e arp_flush output para reduzir o espaço necessário.
arp -tudo Endereço Internet Endereço MAC Tipo Vida 10.10.1.200 00-90-E8-1F-4B-EA temp 8 mins 192.168.50.1 00-04-96-19-0B-20 temp 10 mins 192.168.50.4 00-04-96-35-3F-B5 temp 1 mins 192.168.50.2 00-04-96-20-C7-EC temp 4 mins 192.168.50.19 00-0C-29-6B-CA-AE temp 6 mins 192.168.50.21 00-23-54-79-C5-81 temp 7 mins . . . . . 192.168.51.252 00-50-56-BB-4D-8C temp 5 mins 192.168.51.253 00-0C-29-86-AD-CC temp 3 mins pronto 13:46:14 arp_flush Mapeamento para 10.10.1.200 apagado Mapeamento para 192.168.50.1 apagado Mapeamento para 192.168.50.4 apagado Mapeamento para 192.168.50.2 apagado Mapeamento para 192.168.50.19 apagado Mapeamento para 192.168.50.21 apagado . . . . . . . Mapeamento para 192.168.51.252 apagado Mapeamento para 192.168.51.253 apagado pronto 13:46:23 arp -tudo Endereço Internet Endereço MAC Tipo Vida 192.168.50.2 00-04-96-20-C7-EC temp 10 mins 192.168.51.4 00-04-FC-01-02-3E temp 10 mins 192.168.51.11 00-00-A8-80-80-4A temp 10 mins 192.168.51.49 00-50-56-46-08-2C temp 10 mins 192.168.51.50 00-23-54-52-18-6E temp 10 mins 192.168.51.76 00-23-54-52-1B-F5 temp 10 mins 192.168.51.100 00-0C-29-A9-85-44 temp 10 mins 192.168.51.128 00-00-A8-43-52-22 temp 10 mins 192.168.51.158 00-26-B9-BC-B7-37 temp 10 mins 192.168.51.180 5C-26-0A-06-BD-29 temp 10 mins 192.168.51.203 00-00-A8-C0-86-A1 temp 10 mins pronto 13:46:27 |
Figura 4 - Execução da macro de comando arp_flush |