Linux ARP老化機制/探測機制/ip neigh使用

文章目錄

    • 1. ARP狀態機
      • 1.1 ARP狀態類型
      • 1.2 狀態轉換圖
    • 2. 超時時間與參數
      • 2.1 主要超時參數
        • 2.1.1 基礎時間參數
        • 2.1.2 探測相關參數
        • 2.1.3 垃圾回收參數
    • 3. 主機發送ARP報文的時機
      • 3.1 發送數據包時發現ARP緩存中沒有目標IP的MAC地址
      • 3.2 ARP條目進入STALE狀態后需要發送數據
      • 3.3 定期維護ARP緩存
      • 3.4 處理ARP沖突
      • 3.5 響應ARP請求
    • 4. 狀態轉換詳解
      • 4.1 REACHABLE狀態
      • 4.2 STALE狀態
      • 4.3 DELAY狀態
      • 4.4 PROBE狀態
      • 4.5 INCOMPLETE狀態
    • 5. 垃圾回收機制
      • 5.1 觸發條件
      • 5.2 清理策略
    • 6. 參數調優建議
      • 6.1 高可用性網絡
      • 6.2 動態網絡環境
      • 6.3 大規模網絡
    • 7. 監控和調試
      • 7.1 查看ARP表
      • 7.2 ip neigh命令詳細使用方法
        • 7.2.1 基本語法
        • 7.2.2 查看操作
        • 7.2.3 添加和修改操作
        • 7.2.4 刪除操作
        • 7.2.5 常用參數說明
      • 7.3 查看統計信息
      • 7.4 實時監控
    • 8. 常見問題和解決方案
      • 8.1 ARP表項頻繁變化
      • 8.2 ARP請求失敗
      • 8.3 ARP表溢出

1. ARP狀態機

Linux內核中ARP表項具有多種狀態,這些狀態會根據網絡通信情況和時間進行轉換。ARP狀態主要包括:

1.1 ARP狀態類型

  • NUD_INCOMPLETE: 地址解析中,正在解析硬件地址但尚未收到回復
  • NUD_REACHABLE: 可達狀態,已確認鄰居可達
  • NUD_STALE: 陳舊狀態,之前可達但已超過可達時間
  • NUD_DELAY: 延遲狀態,臨時狀態,在進入PROBE前等待上層確認
  • NUD_PROBE: 探測狀態,正在主動探測鄰居是否仍然可達
  • NUD_FAILED: 失敗狀態,多次嘗試后仍無法解析或確認鄰居
  • NUD_NOARP: 無需ARP狀態,如本地回環地址或點對點鏈路
  • NUD_PERMANENT: 永久狀態,靜態ARP條目,不會超時

1.2 狀態轉換圖

CREATE
RECV
多次請求無響應
AGED(超時)
UPDATE
USED(有數據發送)
長時間未使用(垃圾回收)
超時
收到響應
多次探測無響應
垃圾回收
直接探測
INCOMPLETE
REACHABLE
FAILED
STALE
DELAY
PROBE

2. 超時時間與參數

2.1 主要超時參數

Linux ARP老化機制涉及多個可配置參數,這些參數控制著ARP條目的狀態轉換和超時行為。

2.1.1 基礎時間參數
  • base_reachable_time_ms: 基礎可達時間(毫秒)

    • 默認值:30000ms(30秒)
    • 作用:ARP條目保持REACHABLE狀態的時間
    • 路徑:/proc/sys/net/ipv4/neigh/*/base_reachable_time_ms
  • gc_stale_time: 垃圾回收陳舊時間(秒)

    • 默認值:60秒
    • 作用:ARP條目在未被使用后變為STALE狀態的時間
    • 路徑:/proc/sys/net/ipv4/neigh/*/gc_stale_time
  • retrans_time_ms: 重傳時間(毫秒)

    • 默認值:1000ms(1秒)
    • 作用:ARP請求重傳的間隔時間
    • 路徑:/proc/sys/net/ipv4/neigh/*/retrans_time_ms
2.1.2 探測相關參數
  • ucast_solicit: 單播探測次數

    • 默認值:3次
    • 作用:在PROBE狀態下發送單播ARP請求的次數
    • 路徑:/proc/sys/net/ipv4/neigh/*/ucast_solicit
  • mcast_solicit: 組播探測次數

    • 默認值:3次
    • 作用:在INCOMPLETE狀態下發送組播ARP請求的次數
    • 路徑:/proc/sys/net/ipv4/neigh/*/mcast_solicit
  • anycast_delay: 任播延遲(毫秒)

    • 默認值:1000ms(1秒)
    • 作用:任播地址的延遲探測時間
    • 路徑:/proc/sys/net/ipv4/neigh/*/anycast_delay
  • proxy_delay: 代理ARP延遲(毫秒)

    • 默認值:800ms
    • 作用:代理ARP回復前的延遲時間
    • 路徑:/proc/sys/net/ipv4/neigh/*/proxy_delay
2.1.3 垃圾回收參數
  • gc_thresh1: 垃圾回收閾值1

    • 默認值:128
    • 作用:ARP表項數量低于此值時不會進行垃圾回收
  • gc_thresh2: 垃圾回收閾值2

    • 默認值:512
    • 作用:ARP表項數量超過此值時開始進行垃圾回收
  • gc_thresh3: 垃圾回收閾值3

    • 默認值:1024
    • 作用:ARP表項數量上限,超過時強制清理

這些參數的路徑通常在:

  • /proc/sys/net/ipv4/neigh/*/ (*代表具體網絡接口如eth0,default代表默認值)
  • /proc/sys/net/ipv6/neigh/*/ (IPv6鄰居發現參數)

3. 主機發送ARP報文的時機

主機在以下幾種情況下會發送ARP報文:

3.1 發送數據包時發現ARP緩存中沒有目標IP的MAC地址

當主機需要向同一局域網內的另一個IP地址發送數據包時,如果ARP緩存中沒有該IP對應的MAC地址,主機將發送ARP請求報文來解析目標MAC地址。

過程如下:

  1. 檢查ARP緩存表中是否存在目標IP的條目
  2. 如果不存在或狀態為FAILED,則創建INCOMPLETE狀態的條目
  3. 發送ARP請求廣播報文
  4. 等待ARP響應,收到響應后更新ARP緩存并進入REACHABLE狀態

3.2 ARP條目進入STALE狀態后需要發送數據

當ARP條目處于STALE狀態且主機需要向該目標發送數據時,會觸發ARP解析過程:

  1. ARP條目從STALE狀態進入DELAY狀態
  2. 在DELAY狀態等待短暫時間,期望上層協議提供確認
  3. 如果未收到確認,則進入PROBE狀態
  4. 發送單播ARP請求探測目標是否仍然可達
  5. 收到響應后返回REACHABLE狀態

3.3 定期維護ARP緩存

系統會定期檢查ARP表項的狀態,并在必要時發送ARP請求來驗證鄰居的可達性:

  1. 當條目接近或超過base_reachable_time_ms設置的時間時
  2. 系統可能會主動發送ARP請求來確認鄰居仍然可達
  3. 這有助于在網絡拓撲發生變化時及時更新ARP表

3.4 處理ARP沖突

當主機檢測到IP地址沖突時,可能會發送ARP報文來解決沖突:

  1. 收到ARP請求或響應中包含與自己IP相同的地址
  2. 主動發送ARP請求或響應聲明自己的IP和MAC地址
  3. 這種機制有助于檢測和解決IP地址沖突

3.5 響應ARP請求

當主機收到針對自己IP地址的ARP請求時,會發送ARP響應報文:

  1. 接收ARP請求廣播報文
  2. 檢查請求的IP地址是否為自己配置的IP地址
  3. 如果匹配,則發送包含自己MAC地址的ARP響應報文
  4. 更新自己的ARP緩存表(如果需要)

4. 狀態轉換詳解

4.1 REACHABLE狀態

當系統成功發送或接收到目標主機的數據包時,ARP條目進入REACHABLE狀態。在此狀態下,系統認為鄰居是可達的,無需進行額外的ARP請求。

  • 超時時間:由base_reachable_time_ms參數決定
  • 狀態轉換
    • 超時后進入STALE狀態
    • 收到更新的ARP回復時保持在REACHABLE狀態

4.2 STALE狀態

當ARP條目在REACHABLE狀態超時后,會進入STALE狀態。在此狀態下,ARP條目仍然可用,但系統不確定鄰居是否仍然可達。

  • 超時時間:由gc_stale_time參數決定
  • 狀態轉換
    • 當有數據包需要發送給該鄰居時,進入DELAY狀態
    • 如果長時間未使用,會被垃圾回收機制清理

4.3 DELAY狀態

當有數據包需要發送給處于STALE狀態的鄰居時,ARP條目會先進入DELAY狀態。

  • 超時時間:通常為幾秒鐘(由內核實現決定)
  • 狀態轉換
    • 超時后進入PROBE狀態
    • 如果在延遲期間收到上層確認,可能返回REACHABLE狀態

4.4 PROBE狀態

在PROBE狀態下,系統會主動探測鄰居是否仍然可達。

  • 探測次數:由ucast_solicit參數決定
  • 探測間隔:由retrans_time_ms參數決定
  • 狀態轉換
    • 收到ARP回復則進入REACHABLE狀態
    • 探測次數用盡仍未收到回復則進入FAILED狀態

4.5 INCOMPLETE狀態

當系統需要解析一個新的IP地址對應的MAC地址時,ARP條目處于INCOMPLETE狀態。

  • 探測次數:由mcast_solicit參數決定
  • 探測間隔:由retrans_time_ms參數決定
  • 狀態轉換
    • 收到ARP回復則進入REACHABLE狀態
    • 探測次數用盡仍未收到回復則進入FAILED狀態

5. 垃圾回收機制

Linux內核通過垃圾回收機制定期清理無用的ARP條目,以防止ARP表無限增長。

5.1 觸發條件

  1. ARP表項數量超過gc_thresh2
  2. 系統定時檢查(通常每30秒)
  3. ARP表項數量超過gc_thresh3時強制清理

5.2 清理策略

  1. 優先清理FAILED狀態的條目
  2. 清理長時間處于STALE狀態的條目
  3. 根據最近使用時間清理條目

6. 參數調優建議

6.1 高可用性網絡

對于要求高可用性的網絡環境:

# 增加可達時間,減少ARP請求頻率
net.ipv4.neigh.default.base_reachable_time_ms = 60000
# 延長陳舊時間
net.ipv4.neigh.default.gc_stale_time = 120

6.2 動態網絡環境

對于設備頻繁接入/斷開的網絡環境:

# 縮短可達時間,快速發現設備狀態變化
net.ipv4.neigh.default.base_reachable_time_ms = 15000
# 縮短陳舊時間
net.ipv4.neigh.default.gc_stale_time = 30

6.3 大規模網絡

對于大規模網絡環境,需要調整ARP表大小:

# 增加ARP表項上限
net.ipv4.neigh.default.gc_thresh1 = 256
net.ipv4.neigh.default.gc_thresh2 = 1024
net.ipv4.neigh.default.gc_thresh3 = 2048

7. 監控和調試

7.1 查看ARP表

# 查看所有ARP條目
ip neighbour show# 查看特定接口的ARP條目
ip neighbour show dev eth0# 查看特定狀態的ARP條目
ip neighbour show nud reachable

7.2 ip neigh命令詳細使用方法

[ip neigh](file:///home/avatr/work/github/kg/fragment/c/test-socket-tcp/tcp_client.c#L54-L54)命令是Linux系統中用于管理鄰居表(ARP表)的強大工具,提供了豐富的選項來查看、添加、刪除和修改ARP條目。

7.2.1 基本語法
ip neighbour { add | del | change | replace | show } { IP地址 } [參數]
7.2.2 查看操作
# 顯示所有鄰居條目
ip neighbour show# 顯示特定接口的鄰居條目
ip neighbour show dev eth0# 顯示特定狀態的鄰居條目
ip neighbour show nud reachable
ip neighbour show nud stale
ip neighbour show nud failed# 顯示特定IP地址的鄰居條目
ip neighbour show 192.168.1.100# 顯示代理ARP條目
ip neighbour show proxy# 實時監控鄰居表變化
ip neighbour monitor
7.2.3 添加和修改操作
# 添加靜態ARP條目
ip neighbour add 192.168.1.100 lladdr 00:11:22:33:44:55 dev eth0# 添加永久ARP條目
ip neighbour add 192.168.1.100 lladdr 00:11:22:33:44:55 dev eth0 nud permanent# 添加代理ARP條目
ip neighbour add proxy 192.168.1.100 dev eth0# 修改現有ARP條目
ip neighbour change 192.168.1.100 lladdr 00:11:22:33:44:56 dev eth0# 替換ARP條目(如果不存在則添加)
ip neighbour replace 192.168.1.100 lladdr 00:11:22:33:44:55 dev eth0 nud permanent
7.2.4 刪除操作
# 刪除特定IP的ARP條目
ip neighbour del 192.168.1.100 dev eth0# 刪除代理ARP條目
ip neighbour del proxy 192.168.1.100 dev eth0# 清空指定接口的所有ARP條目
ip neighbour flush dev eth0# 清空特定狀態的ARP條目
ip neighbour flush nud stale
ip neighbour flush nud failed# 清空所有ARP條目(有時并不清除permanent條目)
ip neighbour flush all# 清空PERMANENT狀態的ARP條目
ip neighbour flush nud permanent
7.2.5 常用參數說明
  • lladdr: 指定鄰居的鏈路層地址(MAC地址)
  • dev: 指定網絡接口
  • nud: 指定鄰居狀態(reachable、stale、delay、probe、failed、noarp、permanent、all)
  • proxy: 指定代理ARP條目

7.3 查看統計信息

# 查看ARP相關統計信息
cat /proc/net/netstat | grep -A 1 "Neigh"# 查看更詳細的鄰居子系統統計
cat /proc/net/neigh/eth0/

7.4 實時監控

# 實時監控ARP表變化
watch -n 1 'ip neighbour show'

8. 常見問題和解決方案

8.1 ARP表項頻繁變化

問題:網絡中ARP表項頻繁在REACHABLE和STALE狀態間切換。

解決方案:

  1. 增加base_reachable_time_ms
  2. 檢查網絡中是否存在重復IP地址

8.2 ARP請求失敗

問題:ARP請求發送后無響應,條目進入FAILED狀態。

解決方案:

  1. 檢查網絡連通性
  2. 增加mcast_solicitucast_solicit
  3. 檢查防火墻是否阻止了ARP請求

8.3 ARP表溢出

問題:ARP表項數量超過限制,新條目無法添加。

解決方案:

  1. 增加gc_thresh3
  2. 檢查網絡中是否存在ARP掃描等異常行為
  3. 考慮網絡架構優化,減少需要維護的鄰居數量

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95533.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95533.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95533.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

便攜式顯示器怎么選?:6大關鍵指標全解析

地鐵通勤路上,程序員小陳掏出背包里的便攜屏,連接手機即刻擴展出第二個工作窗口,趕在上班前修復了緊急bug;咖啡廳里,設計師阿琳用筆記本加便攜屏的雙屏組合,一邊參看客戶brief一邊修改方案,效率…

以太坊網絡

以太坊的網絡和以太網是兩個完全不同的概念,雖然它們的名稱聽起來相似,但它們屬于不同的技術領域。以太坊網絡(Ethereum Network)領域:區塊鏈和加密貨幣定義:以太坊是一個開源區塊鏈平臺,支持智…

nano banana官方最強Prompt模板來了!六大場景模板詳解

最近,相信大家的朋友圈和社交媒體都被一個叫nano banana的AI圖像生成工具刷屏了。從精致的手辦模型到名畫人物穿越,再到中土世界場景還原,nano banana已然成為了最火爆的“整活工具之一。剛剛,谷歌為nano banana推出了官方Prompt模…

LeetCode 2825.循環增長使字符串子序列等于另一個字符串

給你一個下標從 0 開始的字符串 str1 和 str2 。 一次操作中,你選擇 str1 中的若干下標。對于選中的每一個下標 i ,你將 str1[i] 循環 遞增,變成下一個字符。也就是說 ‘a’ 變成 ‘b’ ,‘b’ 變成 ‘c’ ,以此類推&a…

【無人機】1.編譯betaflight和cleanflight的固件

在2023年,betaflight騰飛,而cleanflight已經結束更新,但是用cleanflight的原因是因為他最后版本支持stm32f103系列。不用betaflight因為手頭還沒有f405和f411,只有一個不支持的f407和f401,所以。。接下來開始步驟&…

刻意練習理論

刻意練習理論 一、理論概述 刻意練習(Deliberate Practice)是由心理學家安德斯艾利克森(Anders Ericsson)提出的一種系統化學習方法,核心觀點是卓越并非源于天賦,而是通過針對性訓練獲得。其理論基礎來自對…

【FastDDS】Layer DDS之Domain ( 04-DomainParticipantFactory)

Fast DDS 域參與者工廠(DomainParticipantFactory)詳解 一、域參與者工廠(DomainParticipantFactory)基礎定義 域參與者工廠(DomainParticipantFactory)的唯一作用是實現域參與者(DomainPartici…

樹莓集團建數字產業學院:產教融合強化成渝人才鏈與產業鏈銜接

成渝地區雙城經濟圈建設是國家重大發展戰略,而人才鏈與產業鏈的有效銜接,是推動成渝地區產業高質量發展的關鍵。樹莓集團順應時代發展需求,搭建數字產業學院,以產教融合為紐帶,不斷強化成渝人才鏈與產業鏈的銜接&#…

在 ASP.NET 8 WebAPI 中使用不同的提供程序驗證多個令牌(Token)及常見問題解答

介紹作為 ASP.NET 框架的最新版本,ASP.NET 8提供了強大的功能,可用于構建安全且可擴展的 Web API。API 開發的一個關鍵方面是身份驗證,它確保只有授權用戶或服務才能訪問受保護的資源。在本文中,我們將探討如何在 ASP.NET 8 API 中…

工業相機為啥丟包?黑條 / 撕裂的原因 + 解決辦法,一看就懂

工業相機為啥丟包?黑條/撕裂的原因解決辦法,一看就懂 工業相機拍圖時出現黑條、撕裂、花屏,別急著換設備——大概率是“數據丟包”在搞鬼。尤其是高頻率、高分辨率采圖時,數據傳輸稍出問題,圖像就會出故障。今天用“快…

【IQA技術專題】NIQE代碼講解

本文是對NIQE圖像質量評價指標的代碼解讀,原文解讀請看NIQE文章講解。 本文的代碼來源于IQA-Pytorch工程。 1、原文概要 NIQE實現了無參考的圖像質量評價指標,可以有效地對圖像的感知(Fidelity)質量進行評估。本文提出了一種完全…

配置時鐘分頻與倍頻

在STM32微控制器中,“配置時鐘分頻與倍頻”是一個關鍵步驟,它允許開發者根據應用需求調整系統時鐘的頻率。以下是對這一概念的詳細解釋:時鐘源與基礎頻率時鐘源:STM32微控制器通常支持多種時鐘源,如高速外部時鐘&#…

【深度學習新浪潮】視覺大模型在預訓練方面有哪些關鍵進展?

近年來,視覺大模型在預訓練領域取得了多項突破性進展,涵蓋架構設計、多模態融合、數據利用效率及訓練策略等多個維度。以下結合2024-2025年最新研究成果,從技術創新和應用突破兩方面展開分析: 一、架構創新:突破分辨率與模態限制 超高分辨率預訓練 伯克利與英偉達提出的P…

Elasticsearch原理篇

Elasticsearch原理篇寫在前面:用之于手,先明于心一、傳統數據庫的瓶頸:當數據量成為負擔1. 千萬級數據下的性能衰減2. 分頁查詢的“深水陷阱”3. 關聯查詢的擴展難題4. 全文檢索能力薄弱二、Elasticsearch 的優勢:為搜索而生的分布…

《我是如何用C語言寫工控系統的漏洞和Bug》連載(1)內容大綱

第一部分:導論與基礎 第1章 引言 1.1 工控系統的獨特性和重要性 實時性、可靠性、長生命周期的要求與IT系統的差異:后果不再是信息泄露,而是物理世界的中斷與破壞 1.2 為什么C語言依然是工控領域的主流? 性能、底層硬件操作、歷史…

.Net程序員就業現狀以及學習路線圖(三)

一、.Net程序員就業現狀分析 1. 市場需求與薪資水平 ?市場需求兩極分化?:2025年數據顯示,.Net開發崗位全國占比約0.009%,主要集中在深圳、上海等一線城市 2 3。高端崗位(云原生/AI集成方向)年薪可達36-60萬&#xff…

云計算學習100天-第40天 -普羅米修斯1

目錄 Prometheus 概述—— 安裝prometheus 案例 環境說明 實驗步驟 一、prometheus服務器配置時間同步 二、安裝Prometheus服務器 配置文件說明 三、編寫服務啟動文件并啟動服務 四、訪問web頁面 Prometheus 概述—— Prometheus是一個開源系統監控和警報工具包&a…

高效文本處理:cut、sort、uniq 和 tr 命令詳解與實戰

前言 🔪 一、cut —— 按列或字符截取 常用選項: 示例: 🔄 二、sort —— 排序(默認按行首字符升序) 常用選項: 示例: 🧼 三、uniq —— 去除連續重復行 常用選項…

時序數據庫選型指南:Apache IoTDB為何成為工業物聯網首選?

引言:時序數據管理的時代挑戰 隨著工業4.0和物聯網技術的快速發展,全球時序數據呈現爆炸式增長。據IDC預測,到2025年,全球物聯網設備產生的數據量將達到79.4ZB,其中超過60%為時序數據。這類數據具有顯著特征&#xff…

Ubuntu查看開機以來修改的文件

獲取本次開機時間 uptime -s獲取開機時間之后修改的文件 find /home -type f -newermt "2025-09-03 18:10:12"解讀:-type f意為只查找類型為“普通文件”(file),不包括目錄、鏈接等。newermt 代表“修改時間比指定時間新…