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の使用。

回答:


10

エントリは削除されます。しばらくお待ちください。

(可能な限り短い答えが必要な場合:不完全==削除)

「削除」がアクションの間違った言葉だとしましょう。ここで実際に起こっていることは、マシンが実際に到達不能であるかのように、エントリが手動で「リクエスト送信済み、応答なし」(したがって「不完全な」ARPプロセス)の状態に設定されていることです。

さて、その間に新しい有効なARP応答を受信しない限り、エントリはすぐに完全に削除されます。その場合、不完全とマークされる代わりに削除されても、エントリはとにかく再追加されます。そのため、この動作に対する賛否両論はありません。

ただし、ここではキャッシュについて説明していることに注意してください。キャッシュからの削除は困難でコストがかかります。エントリを無効にし、置き換えられるまで待ってから最終的に削除する方が効率的です。しかし、システムの場合、エントリがリストから削除されたか、単に不完全とマークされても、まったく違いはありません。


そして、それを実際に削除して、宛先を知る必要があるために「新しい」ARPクエリがトリガーされるようにする方法はありませんか?
Skaperen 2013

1
しかし、まさにそれがここに当てはまります。「不完全」とマークされたエントリを検索すると、新しいARP要求が送信されます。回答された場合、エントリは更新され、「不完全」ではなくなります。回答が返されない場合は、しばらくしてからエントリがリストから削除されます。(だからこそ、手動でエントリを「--delete」するのはかなり役に立たないと思います。マシンが稼働している場合は、エントリが更新されます。本当になくなった場合は、なぜとにかく手動でエントリを「--delete」するのですか?)
Karma Fusebox

... ARPアドレスをIPアドレスに「変更」したいと思うかもしれません。この特別なケースでは、手動で「--delete」して、次のARPリクエストで新しいアドレスを返すことができます。しかし、このシナリオでは、エントリがリストから目に見えて削除されているか、「不完全」とマークされているかはまったく問題ではありません。関係する技術については、同じです。
Karma Fusebox、2013

@KarmaFuseboxこのキャッシュがどこにあるか知っていますか?プロセスメモリにありますか?もしそうなら、どのプロセスですか?またはそれはカーネルによって維持されますか?ディスク上のファイル?他に?
JamesThomasMoon1979

@KarmaFuseboxエントリを手動で追加した場合(したがって永続的なフラグが設定されている場合)、エントリを削除しても意味があります
cha5on

7

他のすべての回答を補足するために、このリンクは非常に役立ちました

ip次のコマンドのように、使用する方が適切な場合があります。

# ip -s -s neigh flush all

結果はLinuxカーネルによって異なる場合があります。


これは私にとっては完璧に機能しました。他の応答で問題を抱えている人は、それを試してみてください。
jackgu1988

3

他の細かい答えとは別に、arpキャッシュを削除することで完全に消去することが可能であることは言及する価値があります。それほど痛くない方法の1つは、次のとおりです。

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

これにより、どのような状態であっても、すべてのエントリが削除されます。

代替方法には、インターフェースのダウンとアップ、およびarpキャッシュを完全に削除して再作成する同様の方法が含まれます。


1
これが正解です。私はまさにこれを必要としていました。一部のエントリを「不完全」または「しばらくの間到達していない」とマークするだけではありません。ありがとうございました。
John Hamilton、

0

これは明白に聞こえるかもしれませんが、シェルでの作業に慣れていない人のために、これは私の提案です:

@KarmaFuseboxの答えから始めて、単に結果をgrepしないのはなぜですか...?:

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

既存/アクティブなキャッシュエントリのみが表示されます。POSIX準拠のコマンド
であり続けると思います。それが必要な場合は、スクリプト可能なメソッドです。


私はなぜarpこのように振る舞うのかについての合理的な説明を探しています。奇妙に思えます。接線arp的に、<incomplete>エントリを削除することを余儀なくされる可能性がありますか?
JamesThomasMoon1979

まあ、@ JamesThomasMoon1979、私はむしろ、このように動作していないように見えるシステム(つまり、Windowsコンソール)では実際に動作していると言います。唯一の違いはincomplete、arp cache listコマンドのエントリを表示しないことです。
Sopalajo de Arrierez 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.