arp --delete nie usuwa wpisu; jedynie oznacza wpis jako „niekompletny”


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

Po --deletenie spodziewałem się wpisu dla 10.10.7.30. Nieoczekiwanie pozycja pozostaje i jest oznaczona <incomplete>.

Korzystanie z Ubuntu 10.04 .

Odpowiedzi:


10

Wpis zostanie usunięty, po prostu bądź cierpliwy.

(Jeśli chcesz najkrótszą możliwą odpowiedź: niekompletna == usunięta)

Powiedzmy, że „usuń” to niewłaściwe słowo dla akcji. Naprawdę dzieje się tak, że wpis jest ręcznie ustawiany na stan „wysłane zapytanie, brak odpowiedzi” (a zatem „niekompletny” proces ARP), tak jakby maszyna była naprawdę nieosiągalna.

Teraz wpis zostanie wkrótce całkowicie usunięty, chyba że w międzyczasie otrzyma nową prawidłową odpowiedź ARP. W takim przypadku wpis i tak zostałby ponownie dodany, nawet jeśli zostałby usunięty zamiast oznaczony jako niekompletny. Więc nie ma rzeczywistych zalet ani wad tego zachowania.

Pamiętaj jednak, że mówimy o pamięci podręcznej. Usuwanie rzeczy z pamięci podręcznej jest trudne i kosztowne. Znacznie wydajniej jest unieważnić wpis i poczekać, aż zostanie zastąpiony, zanim zostanie ostatecznie usunięty. Ale dla systemu nie ma żadnej różnicy, czy wpis zniknął z listy, czy został oznaczony jako niekompletny.


I nie ma sposobu, aby go naprawdę usunąć, aby kolejna potrzeba poznania miejsca docelowego wywołała „nowe” zapytanie ARP?
Skaperen

1
Ale dokładnie tak jest w tym przypadku. Jeśli cokolwiek wyszukuje pozycję oznaczoną jako „niekompletna”, wysyłane jest nowe żądanie ARP. Jeśli zostanie udzielona odpowiedź, wpis zostanie zaktualizowany i nie będzie już „niekompletny”. Jeśli odpowiedź nie zostanie zwrócona, wpis zostanie usunięty z listy po pewnym czasie. (Dlatego uważam, że całkiem bezużyteczne jest ręczne „- usunięcie” wpisu. Jeśli maszyna żyje, wpis zostanie odświeżony. Jeśli naprawdę zniknie, to dlaczego „- usunąć” wpis ręcznie mimo to?)
Karma Fusebox

... przychodzi mi do głowy, że możesz chcieć „zmienić” adres ARP dla adresu IP. W tym szczególnym przypadku możesz „- usunąć” ręcznie, a następne żądanie ARP zwróci nowy adres. Ale w tym scenariuszu w ogóle nie ma znaczenia, czy pozycja zostanie widocznie usunięta z listy lub oznaczona jako „niekompletna”. W przypadku zastosowanej technologii jest tak samo.
Karma Fusebox

@KarmaFusebox czy wiesz, gdzie istnieje ta pamięć podręczna? Czy jest w pamięci procesu? Jeśli tak, to który proces? czy jest utrzymywany przez jądro? W pliku na dysku? gdzie indziej?
JamesThomasMoon1979

@KarmaFusebox Usunięcie wpisu ma sens, jeśli wpisy zostały również dodane ręcznie (i dlatego ustawiono stałą flagę)
cha5on

7

Dla uzupełnienia wszystkich innych odpowiedzi ten link był bardzo przydatny .

W niektórych przypadkach użycie ipjest bardziej odpowiednie, na przykład polecenie:

# ip -s -s neigh flush all

Wyniki mogą zależeć od jądra systemu Linux.


To działało idealnie dla mnie. Każdy, kto ma problem z innymi odpowiedziami, powinien spróbować.
jackgu1988

3

Oprócz innych dobrych odpowiedzi warto wspomnieć, że można całkowicie ożywić pamięć podręczną arp, usuwając ją. Jednym z mniej bolesnych sposobów jest:

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

To powinno usunąć wszystkie wpisy, niezależnie od tego, czy są w jakimkolwiek stanie.

Alternatywne metody obejmują obniżanie i zwiększanie interfejsu oraz podobne sposoby całkowitego usunięcia i ponownego utworzenia pamięci podręcznej arp.


1
To jest poprawna odpowiedź. Potrzebowałem dokładnie tego. Nie tylko oznaczanie jakiegoś wpisu jako „niekompletny” lub „od jakiegoś czasu nie było osiągane”. Dziękuję Ci.
John Hamilton

0

Wiem, że to może brzmieć oczywisto, ale dla tych, którzy nie byli przyzwyczajeni do pracy z powłoką, to moja propozycja:

Zaczynając od odpowiedzi @KarmaFusebox, dlaczego nie po prostu grep wyniki ...? :

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

Wyświetli tylko istniejące / aktywne wpisy w pamięci podręcznej.
Myślę, że wciąż jest to polecenie zgodne z POSIX . I jest to metoda skryptowa , jeśli tego potrzebujesz.


Szukam rozsądnego wyjaśnienia, dlaczego tak się arpzachowuje. Wydaje się to dziwne. Stycznie, może arpbyć zmuszony do usunięcia <incomplete>wpisów?
JamesThomasMoon1979

Cóż, @ JamesThomasMoon1979, wolałbym raczej powiedzieć, że na systemach, które wydają się nie zachowywać w ten sposób (np. Na konsoli Windows), tak naprawdę są. Jedyną różnicą jest to, że nie pokazują incompletewpisów w poleceniu listy pamięci podręcznej arp.
Sopalajo de Arrierez
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.