arp --delete ne supprime pas une entrée; marque simplement l'entrée comme «incomplète»

10
$ sudo arp -avn
? (10.10.7.30) at 00:cc:cc:bb:dd:86 [ether] on eth0
...

$ sudo arp --delete 10.10.7.30

$ sudo arp -avn
? (10.10.7.30) at <incomplete> [ether] on eth0

Après --deleteje ne m'attendais à aucune entrée pour 10.10.7.30. De façon inattendue, l'entrée reste et est marquée <incomplete>.

Utilisation d' Ubuntu 10.04 .

JamesThomasMoon1979
la source

Réponses:

10

L'entrée sera supprimée, soyez patient.

(Si vous voulez la réponse la plus courte possible: incomplète == supprimée)

Disons que "supprimer" n'est pas le bon mot pour l'action. Ce qui se passe vraiment ici, c'est que l'entrée est définie manuellement sur l'état "demande envoyée, pas de réponse" (donc processus ARP "incomplet") comme si la machine était vraiment inaccessible.

Maintenant, l'entrée sera complètement supprimée bientôt, sauf si elle obtient une nouvelle réponse ARP valide dans l'intervalle. Dans ce cas, l'entrée serait de toute façon rajoutée même si elle était supprimée au lieu d'être marquée comme incomplète. Il n'y a donc pas de véritable pour ou contre ce comportement.

Mais gardez à l'esprit que nous parlons d'un cache. Supprimer des éléments des caches est difficile et coûteux. Il est beaucoup plus efficace d'invalider une entrée et d'attendre qu'elle soit remplacée avant d'être finalement supprimée. Mais pour le système, il n'y a aucune différence si l'entrée est supprimée de la liste ou simplement marquée comme incomplète.

Karma Fusebox
la source
Et il n'y a aucun moyen de vraiment le supprimer afin qu'un besoin ultérieur de connaître la destination déclenche une "nouvelle" requête ARP?
Skaperen
1
Mais c'est exactement le cas ici. Si quelque chose recherche une entrée marquée "incomplète", une nouvelle demande ARP est envoyée. En cas de réponse, l'entrée est mise à jour et n'est plus "incomplète". Si aucune réponse ne revient, l'entrée est supprimée de la liste après un certain temps. (C'est pourquoi je pense qu'il est assez inutile de "- supprimer" une entrée manuellement. Si la machine vit, l'entrée sera rafraîchie. Si elle a vraiment disparu, alors pourquoi "- supprimer" l'entrée manuellement de toute façon?)
Karma Fusebox
... il me vient à l'esprit que vous voudrez peut-être "changer" l'adresse ARP pour une adresse IP. Dans ce cas particulier, vous pouvez "- supprimer" manuellement et demander à la prochaine requête ARP de renvoyer la nouvelle adresse. Mais pour ce scénario, peu importe que l'entrée soit visiblement supprimée de la liste ou marquée "incomplète". Pour la technologie impliquée, c'est la même chose.
Karma Fusebox
@KarmaFusebox savez-vous où ce cache existe? Est-ce en mémoire de process? Si oui, quel processus? ou est-il maintenu par le noyau? Dans un fichier sur disque? autre part?
JamesThomasMoon1979
@KarmaFusebox La suppression d'une entrée est logique si les entrées ont également été ajoutées manuellement (et ont donc le drapeau permanent défini)
cha5on
7

Pour compléter toutes les autres réponses, j'ai trouvé ce lien très utile .

Dans certains cas, l'utilisation ipest plus appropriée, comme la commande:

# ip -s -s neigh flush all

Les résultats peuvent dépendre de votre noyau Linux.

Saulo Gomes
la source
Cela a parfaitement fonctionné pour moi. Quiconque éprouve des difficultés avec d'autres réponses devrait l'essayer.
jackgu1988
3

Mis à part les autres bonnes réponses, il convient de mentionner qu'il est possible d'effacer complètement le cache d'arp en le supprimant. L'une des façons les moins douloureuses est:

ip link set arp off dev eth0 ; ip link set arp on dev eth0

Cela devrait supprimer toutes les entrées, qu'elles soient dans n'importe quel état.

Les méthodes alternatives incluent l'arrêt et l'augmentation de l'interface et des moyens similaires pour rendre le cache arp complètement supprimé et recréé.

sourire
la source
1
Ceci est la bonne réponse. J'avais besoin exactement de ça. Non seulement marquer une entrée pour "incomplète" ou "n'a pas été atteinte depuis un certain temps". Je vous remercie.
John Hamilton
0

Je sais que cela peut sembler évident, mais, pour ceux qui n'ont pas l'habitude de travailler avec le shell, voici ma suggestion:

A partir de la réponse de @KarmaFusebox, pourquoi ne pas simplement saluer les résultats ...? :

arp -a | grep "incomplet" -i -v

Il ne vous montrera que les entrées de cache existantes / actives.
Je pense que cela continue d'être une commande compatible POSIX . Et c'est une méthode scriptable , si c'est ce dont vous avez besoin.

Sopalajo de Arrierez
la source
Je cherche une explication raisonnable de pourquoi arpse comporte de cette façon. Cela semble particulier. Tangentiellement, pourrait arpêtre contraint de supprimer les <incomplete>entrées?
JamesThomasMoon1979
Eh bien, @ JamesThomasMoon1979, je dirais plutôt que, sur les systèmes qui semblent ne pas se comporter de cette façon (c'est-à-dire: console Windows), ils le sont vraiment. La seule différence est qu'ils n'affichent pas les incompleteentrées de la commande arp cache list.
Sopalajo de Arrierez