arp --delete không xóa một mục; chỉ đơn thuần đánh dấu mục nhập là không hoàn chỉnh


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

Sau khi --deletetôi dự kiến ​​không có mục nhập cho 10.10.7.30. Thật bất ngờ, mục vẫn còn và được đánh dấu <incomplete>.

Sử dụng Ubuntu 10.04 .

Câu trả lời:


10

Các mục sẽ được gỡ bỏ, chỉ cần kiên nhẫn.

(Nếu bạn muốn câu trả lời ngắn nhất có thể: không đầy đủ == đã xóa)

Hãy nói "xóa" là từ sai cho hành động. Điều thực sự xảy ra ở đây là mục nhập được đặt thủ công ở trạng thái "yêu cầu được gửi, không có câu trả lời" (do đó quá trình ARP "không đầy đủ") như thể máy sẽ thực sự không thể truy cập được.

Bây giờ, mục nhập sẽ được xóa hoàn toàn sớm trừ khi nhận được phản hồi ARP hợp lệ mới trong thời gian này. Trong trường hợp đó, mục nhập sẽ được thêm lại bằng mọi cách ngay cả khi nó bị xóa thay vì được đánh dấu là không đầy đủ. Vì vậy, không có pro hoặc con thực tế cho hành vi này.

Nhưng hãy nhớ rằng chúng ta đang nói về bộ đệm. Xóa mọi thứ khỏi bộ nhớ cache là khó khăn và tốn kém. Đó là cách hiệu quả hơn để vô hiệu hóa một mục và chờ đợi nếu nó được thay thế trước khi cuối cùng nó được gỡ bỏ. Nhưng đối với hệ thống thì hoàn toàn không có gì khác biệt nếu mục nhập bị loại khỏi danh sách hoặc chỉ được đánh dấu là không đầy đủ.


Và không có cách nào để thực sự xóa nó để một nhu cầu tiếp theo cần biết đích sẽ kích hoạt truy vấn ARP "mới"?
Skaperen

1
Nhưng chính xác đó là trường hợp ở đây. Nếu bất cứ điều gì tìm kiếm một mục được đánh dấu "không đầy đủ", một yêu cầu ARP mới sẽ được gửi. Nếu nó được trả lời, mục nhập được cập nhật và không còn "không đầy đủ". Nếu không có câu trả lời trả về, mục nhập sẽ bị xóa khỏi danh sách sau một thời gian. (Đó là lý do tại sao tôi nghĩ rằng nó khá vô dụng khi "- xóa" mục nhập thủ công. Nếu máy hoạt động, mục nhập sẽ được làm mới. Nếu nó thực sự biến mất, thì tại sao "- xóa" mục nhập bằng mọi cách?)
Karma Fusebox

... Tôi nghĩ rằng bạn có thể muốn "thay đổi" địa chỉ ARP thành địa chỉ IP. Trong trường hợp đặc biệt này, bạn có thể "- xóa" thủ công và yêu cầu ARP tiếp theo trả về địa chỉ mới. Nhưng đối với kịch bản này, hoàn toàn không có vấn đề gì nếu mục nhập bị xóa khỏi danh sách hoặc được đánh dấu là "không đầy đủ". Đối với công nghệ liên quan, nó là như nhau.
Karma Fusebox

@KarmaFusebox bạn có biết bộ đệm này tồn tại ở đâu không? Có phải trong bộ nhớ quá trình? Nếu vậy, quá trình nào? hoặc nó được duy trì bởi kernel? Trong một tập tin trên đĩa? ở nơi nào khác?
JamesThomasMoon1979

@KarmaFusebox Xóa một mục có ý nghĩa nếu các mục cũng được thêm thủ công (và do đó có cờ cố định)
cha5on

7

Chỉ để bổ sung cho tất cả các câu trả lời khác, tôi thấy liên kết này rất hữu ích .

Trong một số trường hợp sử dụng iplà phù hợp hơn, như lệnh:

# ip -s -s neigh flush all

Kết quả có thể phụ thuộc vào nhân linux của bạn.


Điều này làm việc hoàn hảo cho tôi. Bất cứ ai gặp rắc rối với các phản ứng khác nên thử nó.
jackgu1988

3

Ngoài các câu trả lời tốt khác, điều đáng nói là có thể hoàn toàn kiểm tra bộ đệm arp bằng cách xóa nó. Một trong những cách ít đau đớn hơn là:

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

Điều này sẽ loại bỏ tất cả các mục, dù chúng ở trạng thái nào.

Các phương pháp thay thế bao gồm hạ thấp và nâng cấp giao diện và các cách tương tự để làm cho bộ đệm arp được loại bỏ hoàn toàn và được tạo lại.


1
Đây là câu trả lời chính xác. Tôi cần chính xác điều này. Không chỉ đánh dấu một số mục cho "không đầy đủ" hoặc "chưa đạt được trong một thời gian". Cảm ơn bạn.
John Hamilton

0

Tôi biết điều này nghe có vẻ rõ ràng, nhưng, đối với những người không sử dụng để làm việc với trình bao, đây là gợi ý của tôi:

Bắt đầu từ câu trả lời của @KarmaFusebox, tại sao không chỉ đơn giản là grep kết quả ...? :

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

Nó sẽ chỉ hiển thị cho bạn các mục lưu trữ hiện có / hoạt động.
Tôi nghĩ rằng nó tiếp tục là một lệnh tuân thủ POSIX . Và nó là một phương thức script , nếu đó là những gì bạn cần.


Tôi đang tìm kiếm một lời giải thích hợp lý về lý do tại sao arphành xử theo cách này. Có vẻ kỳ dị. Tiếp theo, có arpthể bị buộc phải loại bỏ các <incomplete>mục?
JamesThomasMoon1979

Chà, @ JamesThomasMoon1979, tôi muốn nói rằng, trên các hệ thống dường như không hoạt động theo cách này (ví dụ: bảng điều khiển Windows), chúng thực sự là như vậy. Sự khác biệt duy nhất là chúng không hiển thị incompletecác mục trên lệnh danh sách bộ đệm arp.
Sopalajo de Arrierez
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.