0

0

Linux arp与ip neigh命令使用实例

舞姬之光

舞姬之光

发布时间:2025-09-21 22:52:01

|

919人浏览过

|

来源于php中文网

原创

arp和ip neigh是Linux下管理ARP缓存的核心命令,用于查看、添加、删除IP与MAC地址映射。ip neigh属于现代iproute2工具集,提供更详细的状态信息(如REACHABLE、STALE)和强大功能(如批量刷新),推荐优先使用;而arp命令来自旧版net-tools,功能简单但兼容性好。两者均可用于诊断网络连通问题,例如检查目标设备是否可达、排查网关通信故障或识别ARP欺骗。通过分析ARP缓存条目的存在性、正确性和状态,可快速定位局域网通信异常,是网络维护的重要手段。

linux arp与ip neigh命令使用实例

在Linux环境下,

arp
ip neigh
这两个命令是理解和管理本地网络中IP地址与MAC地址映射关系的核心工具。它们能让你直观地看到设备如何发现局域网内的其他主机,是网络诊断和配置不可或缺的一部分。简单来说,它们就是你透视ARP缓存的“眼睛”,帮你确认数据包能否正确找到它的邻居。

arp
ip neigh
命令的使用实例

要深入理解这两个命令,我们不妨从最常见的场景入手。

查看ARP缓存

这是最基础也最常用的操作。当你需要知道你的机器当前缓存了哪些IP地址对应的MAC地址时,它们就派上用场了。

  • 使用

    arp
    命令:

    arp -a

    这个命令会列出所有已知的ARP缓存条目。输出通常包含IP地址、对应的MAC地址以及接口。有时你会看到一些“不完整”或“过期”的条目,这很正常,说明该条目正在解析中或已超时。

  • 使用

    ip neigh
    命令:

    ip neigh show

    或者更简洁地:

    ip n

    ip neigh
    iproute2
    工具集的一部分,它提供了更丰富的信息,例如ARP条目的状态(
    REACHABLE
    STALE
    FAILED
    等)。这对于诊断网络问题非常有用,因为你可以一眼看出某个邻居是否可达,或者其条目是否需要刷新。

添加静态ARP条目

在某些特定场景下,比如为了安全加固(防止ARP欺骗),或者在没有DHCP服务器的嵌入式系统中,你可能需要手动为某个IP地址添加一个静态的MAC地址映射。

  • 使用

    arp
    命令:

    sudo arp -s 192.168.1.100 00:11:22:33:44:55

    这会将

    192.168.1.100
    这个IP地址永久绑定到
    00:11:22:33:44:55
    这个MAC地址。请注意,
    sudo
    是必需的,因为这涉及到对系统网络配置的修改。

  • 使用

    ip neigh
    命令:

    sudo ip neigh add 192.168.1.100 lladdr 00:11:22:33:44:55 dev eth0 permanent

    ip neigh
    的语法更明确,
    lladdr
    指定链路层地址(MAC地址),
    dev eth0
    指定接口,
    permanent
    则表示这是一个静态条目,不会被动态更新或超时移除。

删除ARP条目

当一个设备的MAC地址发生变化,或者你怀疑某个ARP缓存条目是错误的(比如在ARP欺骗攻击后),你可能需要手动删除它。

  • 使用

    arp
    命令:

    sudo arp -d 192.168.1.100

    这会删除

    192.168.1.100
    对应的ARP条目。

  • 使用

    ip neigh
    命令:

    sudo ip neigh del 192.168.1.100 dev eth0

    ip neigh
    删除时也需要指定接口,这在多网卡环境下非常有用。

刷新ARP缓存

有时,为了强制系统重新解析某个IP地址的MAC地址,或者在进行网络配置更改后,你可能需要清除整个ARP缓存。

  • 使用
    ip neigh
    命令:
    sudo ip neigh flush all

    这个命令会清除所有非静态的ARP缓存条目。

    arp
    命令本身没有直接清除所有缓存的选项,通常需要通过删除单个条目或重启网络服务来实现。

为什么我需要关心ARP缓存,它在网络中扮演什么角色?

ARP缓存,或者说地址解析协议(Address Resolution Protocol)的缓存,是本地网络通信的基石。想象一下,你的电脑想和局域网里的另一台电脑(比如IP地址是192.168.1.50)对话。在IP层,你知道它的IP地址,但数据包要真正传输,最终得靠物理网卡把数据帧发出去。这就引出了一个问题:你的网卡怎么知道192.168.1.50的物理地址(MAC地址)呢?

LongShot
LongShot

LongShot 是一款 AI 写作助手,可帮助您生成针对搜索引擎优化的内容博客。

下载

这就是ARP协议的职责。当你的电脑需要发送数据给一个IP地址,但不知道其MAC地址时,它会广播一个ARP请求:“谁是192.168.1.50?请告诉我你的MAC地址!”192.168.1.50收到请求后,会回复一个ARP应答,告诉你的电脑:“我就是192.168.1.50,我的MAC地址是XX:XX:XX:XX:XX:XX。”你的电脑收到这个应答后,就会把这个IP-MAC映射关系存储在本地的ARP缓存中,以便后续快速查找,避免每次通信都进行广播查询。

所以,ARP缓存的核心作用就是将IP地址映射到MAC地址,实现局域网内的数据帧传输。它就像一个本地的“电话簿”,记录着IP地址和物理地址的对应关系。

如果你不关心它,可能会遇到各种稀奇古怪的网络问题:

  • 网络不通: 如果ARP缓存中的MAC地址是错的,或者根本没有条目,你的数据包就无法到达目的地。
  • 安全隐患: ARP欺骗就是利用ARP协议的无状态特性,伪造ARP应答,将错误的IP-MAC映射植入你的缓存,从而劫持你的流量。
  • 性能问题: 频繁的ARP广播会增加网络负担,虽然通常不明显,但在大规模网络中也可能成为瓶颈。

因此,理解和管理ARP缓存,是每个网络管理员和高级用户必备的技能,它能帮助你快速诊断和解决各种网络连通性问题,甚至防范一些基础的网络攻击。

arp
命令和
ip neigh
命令,我应该用哪个,它们有什么核心区别

这确实是一个常见的问题,特别是在Linux系统上,你经常会看到这两种命令并存。简单来说,

ip neigh
是更现代、功能更强大且推荐使用的工具,而
arp
则是一个历史悠久的经典命令,但功能相对受限。

arp
命令:

  • 起源: 它是UNIX/Linux系统中较早的工具,主要用于管理内核中的ARP缓存。
  • 功能: 它的主要功能是查看、添加和删除ARP缓存条目。语法相对简单直接。
  • 局限性:
    • 信息量少:
      arp -a
      输出的信息相对简单,缺乏详细的邻居状态信息。你很难直观地判断一个条目是动态获取的、静态设置的,还是过期了。
    • 集成度低: 它独立于
      iproute2
      工具集,这意味着它无法与
      ip
      命令的其他功能(如路由、接口管理)进行无缝协作。
    • 管理能力弱: 缺乏批量操作、刷新整个缓存等高级功能。

ip neigh
命令:

  • 起源: 它是
    iproute2
    工具集(由
    ip
    命令提供)的一部分,
    iproute2
    旨在替代旧的
    net-tools
    (如
    ifconfig
    route
    arp
    等),提供更统一、更强大的网络配置和管理能力。
  • 功能: 除了查看、添加、删除ARP条目外,它还能显示更详细的邻居状态(
    REACHABLE
    STALE
    FAILED
    PROBE
    等),支持更灵活的过滤和批量操作,以及强制刷新缓存。
  • 优势:
    • 信息丰富:
      ip neigh show
      能够清晰地展示每个邻居条目的状态,这对于诊断问题至关重要。例如,
      STALE
      表示条目可能已过期,需要重新验证;
      FAILED
      则表示尝试解析失败。
    • 统一性: 作为
      iproute2
      的一部分,它与
      ip addr
      (管理IP地址)、
      ip route
      (管理路由表)等命令保持一致的语法和逻辑,学习曲线更平滑,且易于脚本化。
    • 更强大的管理能力:
      ip neigh flush all
      可以方便地清空整个动态ARP缓存,这在排障时非常有用。它还支持通过各种条件进行过滤和操作。
    • 更贴近内核:
      iproute2
      工具集与Linux内核的网络子系统集成得更紧密,通常能提供更准确、更实时的信息。

核心区别总结:

特性 @@######@@ 命令 @@######@@ 命令
工具集 @@######@@ (较老) @@######@@ (较新,推荐)
信息量 较少,主要显示IP-MAC映射 丰富,包含状态、接口等详细信息
状态显示 无明确状态,多为“完整”或“不完整” 明确的邻居状态(REACHABLE, STALE, FAILED等)
管理能力 简单增删,无批量刷新 灵活增删,支持批量刷新 (@@######@@)
语法 传统UNIX风格 @@######@@风格,更具一致性
推荐度 历史兼容,特定场景仍可用 强烈推荐,功能更强大,信息更全面

结论: 除非你正在维护一个非常老的系统,或者有特定的脚本依赖于

arp
的输出格式,否则在现代Linux环境中,你应该优先使用
ip neigh
命令
。它提供的详细信息和更强大的管理功能,能让你在网络诊断和配置时事半功倍。

如何利用这两个命令诊断常见的网络连通性问题?

当网络出现问题时,ARP缓存往往是第一个需要检查的地方,因为它直接关系到局域网内的设备能否互相找到对方。

场景一:局域网内两台设备无法互相通信

假设你的机器(A)无法Ping通同网段的另一台机器(B,IP地址为192.168.1.100)。

  1. 检查本地ARP缓存: 在机器A上执行:
    net-tools
    • 如果没有任何输出: 这说明机器A从未成功解析过机器B的MAC地址。
      • 可能原因:
        • 机器B可能关机了,或者网络线缆未连接。
        • 机器B的IP地址配置错误,不在同一个子网。
        • 机器B的防火墙阻止了ARP请求或ICMP响应。
        • 局域网内存在交换机端口隔离或VLAN配置问题。
      • 排查步骤: 确认机器B是否开机并正确连接网络,检查其IP配置。尝试从A向B
        iproute2
        一次,然后再次检查ARP缓存,看是否有
        flush all
        iproute2
        状态的条目。
    • 如果输出显示
      arp
      ip neigh
      机器A尝试解析过,但没有收到应答。
      • 可能原因: 同上,但更明确地指向机器B未响应ARP请求。
      • 排查步骤: 在机器B上检查其网络配置和防火墙设置。
    • 如果输出显示
      ip neigh show 192.168.1.100
      # 或者使用 arp
      arp -a | grep 192.168.1.100
      ping
      ,但MAC地址是错的:
      这很可能是ARP欺骗,或者机器B的MAC地址近期更改了,而机器A的缓存未更新。
      • 排查步骤: 确认机器B的真实MAC地址。在机器A上删除错误的ARP条目并重新Ping:
        FAILED

场景二:路由器或网关不通

如果你无法访问互联网,但局域网内的其他设备可以互通,那么问题可能出在与网关的通信上。

  1. 获取网关IP:

    INCOMPLETE

    通常会显示

    INCOMPLETE
    之类的输出,
    FAILED
    就是你的网关IP。

  2. 检查网关的ARP缓存条目:

    REACHABLE
    • 如果网关条目缺失或显示
      STALE
      你的机器无法解析到网关的MAC地址。
      • 排查步骤: 尝试Ping网关。检查网线连接,重启路由器。如果你手动设置过静态ARP条目,确认其MAC地址是否正确。
    • 如果网关条目存在且正确,但依然无法上网: 这说明本地ARP通信正常,问题可能出在网关本身(如网关的WAN口配置、DNS问题、ISP问题)或你的机器路由表上。此时,ARP命令的诊断作用就到此为止了,你需要检查路由表 (
      sudo ip neigh del 192.168.1.100 dev 
      ping 192.168.1.100
      ip neigh show 192.168.1.100
      ) 或DNS配置 (
      ip route show default
      )。

场景三:静态ARP条目导致的问题

如果你之前为了某种目的添加了静态ARP条目,但现在网络配置有变(比如更换了网卡,MAC地址变了),那么静态条目可能会导致连通性问题。

  1. 查看所有静态ARP条目:

    default via 192.168.1.1 dev eth0

    或者

    192.168.1.1
  2. 删除错误的静态条目: 如果你发现某个IP地址对应的MAC地址是旧的或错误的,需要删除它。

    ip neigh show 192.168.1.1

    删除后,系统会重新通过ARP协议动态解析该IP地址的MAC地址。

总结:

FAILED
ip route show
命令在网络诊断中扮演着“照妖镜”的角色,它们能让你看到最底层的IP-MAC映射关系。通过观察这些条目的存在与否、正确性以及状态,你可以快速定位局域网内的连通性问题。记住,当怀疑网络不通时,从ARP缓存开始检查,往往能事半功倍。

cat /etc/resolv.conf
ip neigh show permanent
arp -a | grep PERM
sudo ip neigh del 192.168.1.100 dev eth0
# 或者
sudo arp -d 192.168.1.100
arp
ip neigh

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

990

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

51

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

232

2025.12.29

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

219

2023.12.07

linux是嵌入式系统吗
linux是嵌入式系统吗

linux是嵌入式系统,是一种用途广泛的系统软件,其特点是:1、linux系统是完全开放、免费的;2、linux操作系统的显著优势是多用户和多任务,保证了多个用户使用互不影响;3、设备是独立的,只要安装驱动程序,任何用户都可以对任意设备进行使用和操作。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

170

2024.02.23

C++ 嵌入式系统开发入门与实践
C++ 嵌入式系统开发入门与实践

本专题将带你系统掌握 C++ 在嵌入式系统中的实战应用,内容覆盖硬件抽象、驱动开发、内存与性能优化、实时系统编程、跨平台编译构建,以及常用嵌入式框架与调试技巧,帮助开发者从零构建可运行于 MCU、ARM 等平台的高性能嵌入式项目。

186

2025.11.18

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1345

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

700

2023.06.29

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

74

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.4万人学习

Git 教程
Git 教程

共21课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号