arp --delete tidak menghapus entri; hanya menandai entri sebagai "tidak lengkap"

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

Setelah --deletesaya harapkan tidak ada entri untuk 10.10.7.30. Tanpa diduga, entri tetap dan ditandai <incomplete>.

Menggunakan Ubuntu 10.04 .

JamesThomasMoon1979
sumber

Jawaban:

10

Entri akan dihapus, bersabarlah.

(Jika Anda ingin jawaban sesingkat mungkin: tidak lengkap == dihapus)

Katakanlah "hapus" adalah kata yang salah untuk tindakan. Apa yang sebenarnya terjadi di sini adalah bahwa entri secara manual diatur ke status "permintaan terkirim, tidak ada jawaban" (sehingga proses ARP "tidak lengkap") seolah-olah mesin tersebut benar-benar tidak dapat dijangkau.

Sekarang, entri akan segera dihapus sepenuhnya kecuali jika mendapat respons ARP baru yang valid untuk sementara waktu. Dalam hal itu, entri akan ditambahkan kembali, meskipun jika dihapus alih-alih ditandai sebagai tidak lengkap. Jadi tidak ada pro atau kontra yang sebenarnya untuk perilaku ini.

Tetapi perlu diingat bahwa kita berbicara tentang cache. Menghapus barang dari cache itu sulit dan mahal. Cara ini lebih efisien untuk membatalkan entri dan menunggu jika akan diganti sebelum akhirnya dihapus. Tetapi untuk sistem itu sama sekali tidak ada perbedaan jika entri hilang dari daftar atau hanya ditandai tidak lengkap.

Karma Fusebox
sumber
Dan tidak ada cara untuk benar-benar menghapusnya sehingga kebutuhan selanjutnya untuk mengetahui tujuan akan memicu permintaan ARP "baru"?
Skaperen
1
Tapi itulah yang terjadi di sini. Jika ada yang mencari entri yang ditandai "tidak lengkap" permintaan ARP baru dikirim. Jika dijawab, entri diperbarui dan tidak lagi "tidak lengkap". Jika tidak ada jawaban kembali, entri akan dihapus dari daftar setelah beberapa waktu. (Itu sebabnya saya pikir itu cukup berguna untuk "- menghapus" entri secara manual. Jika mesin hidup, entri akan di-refresh. Jika itu benar-benar hilang, lalu mengapa "- menghapus" entri secara manual?)
Karma Fusebox
... terlintas dalam pikiran saya bahwa Anda mungkin ingin "mengubah" alamat ARP untuk alamat IP. Dalam kasus khusus ini, Anda dapat "--hapus" secara manual dan meminta ARP berikutnya mengembalikan alamat baru. Tetapi untuk skenario ini, tidak masalah sama sekali jika entri dihapus dari daftar atau ditandai "tidak lengkap". Untuk teknologi yang terlibat, itu sama.
Karma Fusebox
@KarmaFusebox apakah Anda tahu di mana cache ini ada? Apakah itu dalam memori proses? Jika demikian, proses apa? atau apakah dikelola oleh kernel? Dalam file di disk? di tempat lain?
JamesThomasMoon1979
@KarmaFusebox Menghapus entri masuk akal jika entri juga ditambahkan secara manual (dan karena itu memiliki set bendera permanen)
cha5
7

Hanya untuk melengkapi semua jawaban lain, saya menemukan tautan ini sangat berguna .

Dalam beberapa kasus menggunakan iplebih tepat, seperti perintah:

# ip -s -s neigh flush all

Hasil mungkin tergantung pada kernel linux Anda.

Saulo Gomes
sumber
Ini bekerja dengan baik untuk saya. Siapa pun yang mengalami masalah dengan respons lain harus mencobanya.
jackgu1988
3

Terlepas dari jawaban-jawaban bagus lainnya, perlu disebutkan bahwa adalah mungkin untuk sepenuhnya mengubah cache arp dengan menghapusnya. Salah satu cara yang kurang menyakitkan adalah:

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

Ini harus menghapus semua entri, baik itu dalam keadaan apa pun.

Metode alternatif termasuk menumbangkan dan menaikkan antarmuka dan cara-cara serupa untuk membuat arp cache sepenuhnya dihapus dan diciptakan kembali.

menyeringai
sumber
1
Ini jawaban yang benar. Saya membutuhkan ini. Tidak hanya menandai beberapa entri untuk "tidak lengkap" atau "belum tercapai untuk sementara waktu". Terima kasih.
John Hamilton
0

Saya tahu ini bisa terdengar jelas, tetapi, bagi mereka yang tidak terbiasa bekerja dengan shell, ini adalah saran saya:

Berawal dari jawaban @KarmaFusebox, mengapa tidak langsung menangkap hasilnya ...? :

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

Ini akan menunjukkan kepada Anda hanya entri cache yang ada / aktif.
Saya pikir itu terus menjadi perintah yang sesuai dengan POSIX . Dan itu adalah metode skrip , jika itu yang Anda butuhkan.

Sopalajo de Arrierez
sumber
Saya mencari penjelasan yang masuk akal tentang mengapa arpberperilaku seperti ini. Tampaknya aneh. Intinya, dapatkah arpterpaksa menghapus <incomplete>entri?
JamesThomasMoon1979
Nah, @ JamesThomasMoon1979, saya lebih suka mengatakan bahwa, pada sistem yang tampaknya tidak berperilaku seperti ini (yaitu: konsol Windows), mereka sebenarnya. Satu-satunya perbedaan adalah mereka tidak menampilkan incompleteentri pada perintah daftar cache arp.
Sopalajo de Arrierez