arp --delete не удаляет запись; просто помечает запись как «незавершенную»

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

После того, как --deleteя не ожидал вход для 10.10.7.30. Неожиданно запись остается и помечается <incomplete>.

Использование Ubuntu 10.04 .

JamesThomasMoon1979
источник

Ответы:

10

Запись будет удалена, просто наберитесь терпения.

(Если вы хотите самый короткий ответ: неполный == удален)

Допустим, «удалить» - это неправильное слово для действия. Здесь действительно происходит то, что запись вручную устанавливается в состояние «запрос отправлен, ответа нет» (то есть «неполный» процесс ARP), как если бы машина была действительно недоступна.

Теперь запись будет полностью удалена в ближайшее время, если она не получит новый действительный ответ ARP. В этом случае запись будет повторно добавлена ​​в любом случае, даже если она была удалена, а не помечена как незавершенная. Так что нет фактического за или против этого поведения.

Но имейте в виду, что мы говорим о кеше. Удаление вещей из кешей сложно и дорого. Гораздо эффективнее сделать запись недействительной и подождать, если она будет заменена, прежде чем она будет окончательно удалена Но для системы совершенно не имеет значения, пропала ли запись из списка или просто помечена как неполная.

Карма Fusebox
источник
И нет никакого способа действительно удалить это так, чтобы последующая потребность знать место назначения вызвала бы "новый" запрос ARP?
Skaperen
1
Но именно так и здесь. Если что-то ищет запись, помеченную как «незавершенная», отправляется новый ARP-запрос. Если получен ответ, запись обновляется и больше не является «неполной». Если ответ не возвращается, запись удаляется из списка через некоторое время. (Вот почему я думаю, что довольно «бесполезно» - «удалять» запись вручную. Если машина жива, запись будет обновлена. Если она действительно исчезла, тогда зачем «- удалять» запись вручную в любом случае?)
Карма Fusebox
... мне приходит в голову, что вы можете "изменить" ARP-адрес для IP-адреса. В этом особом случае вы можете вручную выполнить «--delete», и следующий запрос ARP вернет новый адрес. Но для этого сценария совершенно не имеет значения, будет ли запись явно удалена из списка или помечена как «незавершенная». Для задействованных технологий это то же самое.
Карма Fusebox
@KarmaFusebox вы знаете, где этот кеш существует? Это в памяти процесса? Если да, то какой процесс? или оно поддерживается ядром? В файле на диске? в другом месте?
JamesThomasMoon1979
@KarmaFusebox Удаление записи имеет смысл, если записи также были добавлены вручную (и, следовательно, установлен постоянный флаг)
cha5on
7

Просто чтобы дополнить все остальные ответы, я нашел эту ссылку очень полезной .

В некоторых случаях использование ipболее целесообразно, например, команда:

# ip -s -s neigh flush all

Результаты могут зависеть от вашего ядра Linux.

Сауло Гомес
источник
Это отлично сработало для меня. Любой, кто испытывает проблемы с другими ответами, должен попробовать это.
jackgu1988
3

Помимо других хороших ответов стоит упомянуть, что можно полностью предсказать кеш arp, удалив его. Одним из менее болезненных способов является:

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

Это должно удалить все записи, будь они в любом состоянии.

Альтернативные методы включают в себя выключение интерфейса и аналогичные способы полного удаления и повторного создания кэша arp.

усмешка
источник
1
Это правильный ответ. Мне нужно было именно это. Не просто пометка какой-либо записи как «неполная» или «не была достигнута некоторое время». Спасибо.
Джон Гамильтон
0

Я знаю, это может показаться очевидным, но для тех, кто не привык работать с оболочкой, это мое предложение:

Начиная с ответа @KarmaFusebox, почему бы просто не получить результаты ...? :

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

Он покажет вам только существующие / активные записи кэша.
Я думаю, что это продолжает быть POSIX-совместимой командой. И это метод сценариев , если это то, что вам нужно.

Сопалахо де Арриерес
источник
Я ищу разумное объяснение, почему так arpсебя ведет. Это кажется странным. Тангенциально, может arpбыть вынужден удалить <incomplete>записи?
JamesThomasMoon1979
Ну, @ JamesThomasMoon1979, я бы скорее сказал, что в системах, которые, кажется, не ведут себя таким образом (например, консоль Windows), они действительно есть. Разница лишь в том, что они не показывают incompleteзаписи в команде arp cache list.
Сопалайо де Арриерес