ARP..

ARP

0 前言

真正接触到现网才发现ARP十分重要,无论是排错还是S-MLAG都需要用到ARP这个协议,以前对于ARP的理解比较混乱;所以这次对其中的主要内容做个梳理;一定要学好ARP!!!

1 ARP的概念

Ardress resolution protocol,地址解析协议,通过IP层解析出MAC层,帮助数据包转发到下一跳的协议;

2 ARP表

2.1 ARP表内容

主要的内容有以下几个:IP MAC interface age;

着重说一下 :interfaceARP表的interface一定是物理接口,因为三层数据转发的出接口就是依赖ARP表项中的interface

什么意思?也就是我们根据ARP表封装完MAC层之后,转发是根据ARP表里的interface,而不是MAC表的interface;下面就来验证:
在这里插入图片描述

在正常情况下,PC1 ping通 PC2 后,也就是产生ARP表项后,我们做以下修改:

  • 修改MAC,不修改ARP

    将PC2对应的MAC的接口修改到G0/0/3,发现ICMP还是从G0/0/2走,则证明不是依靠MAC转发

  • 修改ARP,不修改MAC

    将PC2对应的ARP的接口修改到G0/0/3,发现ICMP是从G0/0/3走,则证明是依靠ARP转发

注:一定是物理口,像锐捷设备他的ARP表不全,可能出现interface是vlanif的情况,只需要输入show arp details就可以显示完整的ARP表,其中就有关联物理接口;

2.2 ARP表更新条件

报文类型更新ARP表条件更新内容
免费ARP①ARP表中已存在Sender IP对应的表项(可以是只有IP的临时表性)用Sender IP和Sender Mac更新表项信息
ARP_request①Target_IP为进接口IP用Sender IP和Sender Mac更新表项信息
ARP_reply①Target_IP为进接口IP ②ARP表中已经存在Sender IP表项(可以是只有IP的临时表项)用Sender IP和Sender Mac更新表项信息

注意,以上的更新条件仅限于普通的ARP流程,如果是代理ARP,那么上面的更新条件将被颠覆;

报文类型更新ARP表条件更新内
ARP_request①Target_IP可达用Sender IP和Sender Mac更新表项信息
ARP_reply①Target_IP可达 ②ARP表中已经存在Sender IP表项(可以是只有IP的临时表项)用Sender IP和Sender Mac更新表项信息

2.3 ARP表删除条件

  1. ARP表中的age超时

  2. ARP表中的interface接口down

    这点很关键,这就说明ARP能够对物理接口的状态动态感知,一旦物理接口DOWN,ARP表项消失
    这也是S-MALG联动ARP转32位路由的重要原因之一;

3 ARP的流程

  1. 本地产生数据包,封装数据层和IP层,根据IP层查询路由表

  2. 查询路由表的目的是为了将流量先转发到一个本地接口

  3. 转发到接口的目的是为了下一步MAC地址的封装判断

  4. 判断该转发接口的IP和报文的目的IP是否是一个网段
    如果同网段,则查看ARP表有无目的IP对应的MAC
    有,则直接根据ARP表项封装
    无,则该接口发送ARP请求,其中Target ip为包的目的IP

    如果异网段,看路由是否有下一跳
    有下一跳,则查看ARP表是否有路由下一跳的MAC地址
    有,则直接根据ARP表项封装
    无,则该接口发送ARP请求,其中Target ip为路由下一跳的IP
    没下一跳,则查看ARP表是否有无目的IP对应的MAC
    有,则直接根据ARP表项封装
    无,则该接口发送ARP请求,其中Target ip为包的目的IP

  5. 根据获取到的ARP表项,封装包的MAC层,然后根据ARP的interface项将报文转发出去;

这些上面的语言过于抽象,我们将从下面几个场景,对ARP的流程做一个验证和梳理,希望方便理解;以下场景默认ARP表都为初始状态(空),后面不再赘述;

3.1 普通网关

PC1的网关为192.168.1.254,PC2的网关为192.168.2.254,PC1试图ping PC2;
在这里插入图片描述
①PC1产生icmp echo数据层,然后封装IP层,其中源IP为192.168.1.1,目的IP为192.168.2.1;
②PC1查询自己的路由表,因为PC1设置了网关【网关本质就是一条默认路由 0.0.0.0 0.0.0.0 G0/0 192.168.1.254】,目的IP匹配了这一条路由,所以将数据包先送到G0/0;
③判断该转发接口的IP和报文的目的IP不是一个网段,且存在下一跳,为192.168.1.254,由于ARP表没有这个IP的表项,所以本地生成一个ARP的临时表项【IP:192.168.1.1 MAC:?】,并且该接口发送ARP请求,其中的Target IP为192.168.1.254;
④网关收到ARP Request后,发现Target IP为自己,所以用这个ARP请求的Sender ip和Sender MAC更新自己的ARP表项目【IP:PC1 MAC PC1 interface:G0/1】,并且回复ARP Reply包;
⑤PC1收到Reply后,利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:R MAC:R interface:G0/0】
⑥PC1根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑦icmp echo到达R;
⑧R先查看MAC层,发现目的MAC为自己,解封装二层;查看三层,发现目的IP为192.168.2.1,和本地路由表中的192.168.254.0/24 g0/1的直连路由匹配;所以将数据包送到G0/3接口;
⑨判断该转发接口的IP和报文的目的IP是一个网段,由于本地ARP表没有192.168.2.1的MAC,所以本地生成一个ARP的临时表项【IP:192.168.2.1 MAC:?】,并且该接口发送ARP请求,其中的Target IP为192.168.2.1;
⑩PC2收到ARP Request后,发现Target IP为自己,所以用这个ARP请求的Sender ip和Sender MAC更新自己的ARP表项目【IP:R MAC:R interface:G0/4】,并且回复ARP Reply包;
⑩R收到Reply后,发现其中的Targer IP为自己,利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:PC2 MAC:PC2 interface:G0/3】
⑪R根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑫PC2收到数据包,在回复echo reply时候,就顺利很多,因为沿途都有ARP表项,不再赘述;

3.2 VLANif网关

PC1的网关为192.168.1.254,PC2的网关为192.168.2.254,PC1试图ping PC2;
在此基础上,中间的由器换成三层交换机,PC1属于VLAN 1,PC2属于VLAN 2,他们的网关位置被移到VLANif口
在这里插入图片描述
①PC1产生icmp echo数据层,然后封装IP层,其中源IP为192.168.1.1,目的IP为192.168.2.1;
②PC1查询自己的路由表,因为PC1设置了网关【网关本质就是一条默认路由 0.0.0.0 0.0.0.0 G0/0 192.168.1.254】,目的IP匹配了这一条路由,所以将数据包先送到G0/0;
③判断该转发接口的IP和报文的目的IP不是一个网段,且存在下一跳,为192.168.1.254,由于ARP表没有这个IP的表项,所以本地生成一个ARP的临时表项【IP:192.168.1.1 MAC:?】,并且该接口发送ARP请求,其中的Target IP为192.168.1.254;
④网关收到ARP Request后,发现Target IP为自己,所以用这个ARP请求的Sender ip和Sender MAC更新自己的ARP表项目【IP:PC1 MAC PC1 interface:G0/1】,并且回复ARP Reply包;
⑤PC1收到Reply后,利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:R MAC:R interface:G0/0】
⑥PC1根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑦icmp echo到达R;
⑧R先查看MAC层,发现目的MAC为自己,解封装二层;查看三层,发现目的IP为192.168.2.1,和本地路由表中的192.168.254.0/24 vlanif2的直连路由匹配;所以将数据包送vlanif2逻辑接口;
⑨判断该转发接口的IP和报文的目的IP是一个网段,由于本地ARP表没有192.168.2.1的MAC,所以本地生成一个ARP的临时表项【IP:192.168.2.1 MAC:?】,并且该接口发送ARP请求(带VLAN 2的TAG,所以二层支持转发VLAN 2的接口都会发),其中的Target IP为192.168.2.1;
⑩PC2收到ARP Request后,发现Target IP为自己,所以用这个ARP请求的Sender ip和Sender MAC更新自己的ARP表项目【IP:R MAC:R interface:G0/4】,并且回复ARP Reply包;
⑪R收到Reply后,发现其中的Target IP为自己,于是利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:PC2 MAC:PC2 interface:G0/3】
⑫R根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑬PC2收到数据包,在回复echo reply时候,就顺利很多,因为沿途都有ARP表项,不再赘述;

4 ARP代理

4.1 作用

当本地接口收到一个目的MAC不为自身MAC的ARP请求时,开启了ARP代理的本地接口会尝试帮助发送方进行报文的转发;

4.2 ARP代理流程

  1. 开启ARP代理的本地接口收到一个目的MAC非自己的ARP请求
  2. 本地查看路由表,看ARP请求的Target ip是否可达
    如果可达,回复ARP_Reply进行ARP欺骗,将数据包引流到本地后进一步转发;
    如果不可达,不做回复;

下面讲几个实习中碰到的例子:

4.2.1 S-MLAG

PC1和PC2是同网段;S上存在一个VLANIF1,作为PC1和PC2的网关,并且开启了ARP代理;
G0/1和G0/4开启了端口隔离,不能直接通过二层互通;
在这里插入图片描述
①PC1产生icmp echo数据层,然后封装IP层,其中源IP为192.168.1.1,目的IP为192.168.1.3;
②PC1查询自己的路由表,目的IP匹配了【192.168.1.0 g0/0】这一条路由,所以将数据包先送到G0/0;
③判断该转发接口的IP和报文的目的IP是一个网段,由于本地ARP表没有192.168.1.3的MAC,所以本地生成一个ARP的临时表项【IP:192.168.1.3 MAC:?】,并且该接口发送ARP请求,其中的Target IP为192.168.1.3;
④网关收到ARP Request后,发现Target IP不是自己,但是VLANIF 1它开启了ARP代理,所尝试进行数据包的转发:查看自身路由表发现存在【192.168.1.0/24 vlanif1】的路由,所以判断ARP中的Target ip 192.168.1.3可达,所以进行ARP欺骗:先根据Target IP中的【Sender IP和MAC更新本地ARP表】,并且回复给PC1 ARP_Reply【Sender IP: PC2 Sender MAC:VLANIF1 Target IP:PC1 Target MAC:PC1】进行ARP欺骗;
⑤PC1收到Reply后,利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:PC2 MAC:VLANIF1 interface:G0/0】
⑥PC1根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑦icmp echo到达S的VLANIF1;
⑧VLANIF1先查看MAC层,发现目的MAC为自己,解封装二层;查看三层,发现目的IP为192.168.1.3,和本地路由表中的192.168.1.0/24 vlanif1的直连路由匹配;所以将数据包送到vlanif1接口;
⑨判断该转发接口的IP和报文的目的IP是一个网段,由于本地ARP表没有192.168.1.3的MAC,所以本地生成一个ARP的临时表项【IP:192.168.1.3 MAC:?】,并且该接口发送ARP请求(带VLAN 1的TAG,所以二层支持转发VLAN 2的接口都会发),其中的【Sender IP: PC1 Sender MAC: VLANIF1 Target IP:PC2】【ARP欺骗】
⑩PC2收到ARP Request后,发现Target IP为自己,所以用这个ARP请求的Sender ip和Sender MAC更新自己的ARP表项目【IP:PC1 MAC:VLANIF1 interface:G0/4】,并且回复ARP Reply包;
⑪S收到Reply后,利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:PC2 MAC:PC2 interface:G0/3】
⑫S根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑬PC2收到数据包,在回复echo reply时候,就顺利很多,因为沿途都有ARP表项,不再赘述;

4.2.2 路由

R1和R2互联,其中R1有一条静态路由【2.2.2.2 32 G0/0】,这条静态路由没有指定下一跳IP地址;
R2上面有一个环回接口,IP地址为2.2.2.2;
在这里插入图片描述
现:关闭R2的G0/1接口的arp代理功能;然后R1 ping 2.2.2.2;发现无法ping通;
再:开启R2的G0/1接口的arp代理功能;然后R1 ping 2.2.2.2;发现可以ping通;

简单解释一下:
R1上的2.2.2.2的路由没有配置下一跳IP,而且出接口的IP和目的IP不是一个网段;
所以R1发送的ARP请求中的Target IP为2.2.2.2;
如果R2的G0/1没开启ARP代理,因为Target IP不是自己,就不会回复,也就不可达;
如果R2的G0/1开启了ARP代理,那就可以帮忙转发,也就可达;

综上:
配置路由的时候,务必配上下一跳IP,因为出接口不配置也能迭代出来;
一方面,如果接收口没开启ARP代理功能,就无法可达;
另一方面,配置下一跳之后,对于本地来说,访问多个相同下一跳的网段,只会有一条ARP记录,节省表项;

<think>好的,用户想了解如何在不同操作系统和网络设备上显示ARP表。首先,我需要回忆ARP的基本概念,它是用来将IP地址解析为MAC地址的协议。然后,分步骤整理不同系统的命令。 对于Linux系统,我记得常用的命令是`arp -n`或者`ip neigh show`。可能需要检查这些命令是否需要管理员权限,比如加上sudo。接着是Windows,通常使用`arp -a`,这个命令在命令提示符下运行。然后是macOS,应该和Linux类似,但可能需要使用`arp -a`或者`netstat -rn`来查看路由表里的ARP信息。 接下来是网络设备,比如Cisco交换机和路由器,用户需要进入特权模式,使用`show arp`或`show ip arp`。华为设备可能类似,但命令可能略有不同,比如`display arp`。Juniper设备则可能用`show arp`。这些需要确认具体设备的CLI命令。 还要考虑用户可能的深层需求,比如他们是否想了解如何清除ARP缓存,或者遇到ARP相关的问题如何排查。例如,可以提到`arp -d`在Windows和Linux下删除条目,或者网络设备上的清除命令。 需要确保引用的内容正确,比如用户提供的引用中提到Linux的ARP不需要配置,属于协议的一部分,所以可以引用这一点说明查看ARP表的必要性。同时,用户提供的引用中提到了Linux下的网络配置和监控模式,虽然和ARP表无直接关联,但可以强调Linux对网络状态的可视化支持。 最后,生成相关问题时要覆盖常见操作和故障排除,比如查看ARP缓存、清除方法、不同系统的差异,以及ARP欺骗的防范。这有助于用户全面了解ARP相关操作。</think>### 如何查看操作系统及网络设备的ARP表 #### 1. **Linux系统** - **命令**: 使用 `arp` 或 `ip neigh` 命令 ```bash arp -n # 显示ARP表(数字格式) ip neigh show # 更现代的替代命令 ``` - **说明**: Linux系统通过ARP协议自动维护IP与MAC地址的映射关系,无需额外配置[^1]。`arp -n` 会以非解析主机名的形式显示结果,加快输出速度。 #### 2. **Windows系统** - **命令**: 使用 `arp -a` 在命令提示符(CMD)或PowerShell中执行: ```cmd arp -a # 显示所有接口的ARP缓存 ``` - **说明**: 输出包含动态(动态学习)和静态(手动绑定)条目,动态条目会随时间过期。 #### 3. **macOS系统** - **命令**: 使用 `arp -a` 或 `netstat -rn` ```bash arp -a # 显示ARP表 netstat -rn # 显示路由表(包含部分ARP信息) ``` #### 4. **网络设备(如交换机、路由器)** - **Cisco设备**: ```bash show arp # 显示IPv4 ARP表 show ip arp # 同上(部分设备) ``` - **华为设备**: ```bash display arp # 显示ARP表 ``` - **Juniper设备**: ```bash show arp # 显示ARP表 ``` #### 5. **关键原理** ARP表是IP与MAC地址的动态映射数据库,用于局域网内通信。当设备需要发送数据包时,会先查询ARP表获取目标MAC地址;若未找到,则广播ARP请求[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辽胜于无

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值