ARP详细介绍

news/2024/9/20 21:24:00/文章来源:https://www.cnblogs.com/Iwakura-Lain/p/18400334

ARP详细介绍

地址解析协议,根据IP地址获取MAC地址,还能检测地址是否有重复

动态ARP

广播ARP报文寻找目标IP的MAC地址

  1. 主机1通过发送ARP Request报文获取主机2的MAC地址

    ​ 由于不知道目的MAC地址,因此ARP Request报文內目的MAC地址为0

  2. ARP Request是广播数据帧,因此交换机收到后,会对该帧执行泛洪操作

  3. 所有主机接收到ARP Request报文后,都会检查他的目的IP与自身的IP地址是否匹配

  4. 主机2发现IP地址匹配,则会将ARP报文中的发送端MAC地址和发送端IP记录到自己的ARP缓存表中

  5. 主机2通过发送ARP Reply报文来响应主机1的请求,此时主机2已知主机1的MAC地址,因此ARP Replay是单播数据帧

  6. 交换机收到单播数据帧后进行转发

路由器在正常情况下不会执行ARP泛洪,因为ARP是工作在数据链路层(第二层)的协议,而路由器主要工作在网络层(第三层)
但是某些路由器支持ARP代理功能,或者某些网络故障或配置错误的情况下,路由器可能会意外地参与ARP泛洪,如果路由器的某个接口被错误地配置为同一子网内的两个不同IP地址的网关,或者网络中存在环路导致ARP请求被无限循环地广播

命令 用途
show ip arp 思科查看arp缓存表
show int e0/0 查看接口MAC地址
display arp brief 华为查看arp缓存表
arp -a PC查看ARP缓存表
arp -a -N ip PC查看某一个IP对应的MAC地址
为什么第一个包会ping不通?

因为第一个包是ARP协议在探测

动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖

缺省情况下,动态ARP表项的老化超时时间为1200秒(20分钟)

​ *被老化指动态ARP表项在一段特定的时间(即老化时间)内如果没有被再次使用或更新,将会被自动从ARP缓存表中删除的过程


静态ARP

静态ARP表项是由网络管理员手工建立的IP地址和MAC地址之间固定的映射关系

静态ARP表项不会被老化,不会被动态ARP表项覆盖

  • 短静态ARP表项:手工建立映射关系时,未同时指定VLAN和出接口
  • 长静态ARP表项:手工建立映射关系时,同时指定该ARP表项所在VLAN和出接口,可以直接用于报文转发
华为命令 用途
arp static ip mac 设置静态ARP
display arp all 查看arp表项
arp expire-time expire-time 设置动态ARP表项的老化超时时间

免费ARP

设备主动使用自己的IP地址作为目的IP地址发送ARP请求

  • IP地址冲突检测:当设备接口的协议状态变为Up时,设备主动对外发送免费ARP报文

    正常情况下不会收到ARP应答,如果收到,则表明本网络中存在与自身IP地址重复的地址

    如果检测到IP地址冲突,设备会周期性的广播发送免费ARP应答报文,直到冲突解除

  • 通告一个新的MAC地址:发送方更换了网卡,MAC地址变化了,为了能够在动态ARP表项老化前通告网络中其他设备,发送方可以发送一个免费ARP

  • 在VRRP备份组中用来通告主备发生变换:发生主备变换后,MASTER设备会广播发送一个免费ARP报文来通告发生了主备变换

设备收到免费ARP报文后,进行如下判断:

  1. 收到免费ARP报文,发现源IP地址和自己的IP地址相同:
    • 周期性的广播发送免费ARP应答报文,告知此IP地址在网络中存在冲突,直到冲突解除
  2. 收到免费ARP报文,源IP地址和自己的IP地址不同:
    • 免费ARP报文是在VLANIF接口收到的,并且设备上已经有免费ARP报文中源IP地址对应的动态ARP表项,则进行ARP学习,即根据收到的免费ARP报文更新该ARP表项
    • 其余情况收到免费ARP报文后均不进行ARP学习

路由式ARP代理

在上述例子的组网中,主机A需要与主机B通信时,目的IP地址与本机的IP地址位于不同网络,但是由于主机A未配置网关,所以它将会以广播形式发送ARP Request报文,请求主机B的MAC地址

但是,广播报文无法被路由器转发,所以主机B无法收到主机A的ARP请求报文,当然也就无法应答

在路由器上启用代理ARP功能,就可以解决这个问题

启用代理ARP后,路由器收到这样的请求,会查找路由表,如果存在主机B的路由表项,路由器将会使用自己的G0/0/0接口的MAC地址来回应该ARP Request

主机A收到ARP Reply后,将以路由器的G0/0/0接口MAC地址作为目的MAC地址进行数据转发

接口下开启arp :arp-proxy enable (默认关闭)

总结:

ARP代理:

  1. 当PC没有设置网关,路由器收到一个ARP请求,但是该请求包的目的地址与收到该ARP包的接口IP不一致,并且路由器的路由表中有去往该目的的网关则会把自己接口的MAC地址回复给请求者,PC本地会对每个去往目的条目都产生一条“目的IP+网关MAC”的缓存

  2. 当目的比较多时则产生的缓存条目也非常多,占用内存,所以建议PC一定要设网关

  3. ARP代理默认关闭

ARP 代理的条件

  1. 路由器拥有去往目标IP的路由
  2. 接收到arp查询的接口的IP地址和arp请求的目标IP本在一个网段

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/793098.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个网络安全情报聚合网站《魔盒安全情报》

《魔盒》 一款专为网络安全领域提供服务的多端情报系统。 实时更新安全情报。内容包括威胁情报、数据泄露、漏洞预警、军事情报、安全博客情报等。地址网页端:https://mgb.abyssdawn.com/tg 推送频道 频道地址:mgb_sec_thread感谢 感谢以下大佬收集的安全订阅源https://githu…

mipi屏调试时序问题

mipi屏的时序大同小异,一般都跟以下差不多: 屏参配置如下:&dsi0 {status = "disabled";//rockchip,lane-rate = <1000>;dsi0_panel: panel@0 {status = "okay";compatible = "simple-panel-dsi";reg = <0>;backlight = <&…

java编译中出现 无效的目标发行版:17

java maven 编译中出现 无效的目标发行版:17 解决方法: 将 pom.xml 中的 <maven.compiler.release>17</maven.compiler.release>这段换成<maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.…

火影新版控制中心安装教程

1. 第一步卸载原有控制中心 搜索框搜索控制面板找到卸载程序点击搜索控制中心右键卸载卸载完选择YES重启 2、官网下载控制中心的压缩包 火影官网驱动下载 https://www.firebat.com.cn/index/serve/drive 根据自己是什么机器选择 (t6ax也是t6系,t6系的都选t6ad,处理器是什么就…

记录 ThreadPoolExecutor任务队列放入任务的方式

众所周知,ThreadPoolExecutor内部任务队列属性类型定义为:private final BlockingQueue workQueue; 而其有三种提交任务方式:add、put和offer,好奇其内部用的哪个,又不想查资料,故而跳到源码内部一看。结果如下:三种提交任务方式:put(E element):将指定元素插入队列,…

MCU驱动架构的初探究

最近在网上看到的MCU驱动的架构,让我感觉非常好,我对其整理和总结了一下Handler层 什么是Handler层 :Handler是将所有的资源聚集到一起的一层,包括用到的HAL硬件,队列,信号量,锁),包括挂载哪个硬件设备; 以温湿度传感器为例,handler结构体 typedef struct bsp_temp_…

基于Hutool技术Excel表格导出

今天分享一下基于Hutool技术Excel表格导出,我们先看看导出Excel表格的样子第1步:引入maven依赖<dependencies><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.3</version></…

jekins--- 通过jekins执行远程机器的shell脚本

jekins和脚本部署的不是在同一个机器,简单的来说说如何用jekins通过SSH连接执行远程机器的shell脚本 1:简单的看一下脚本的内容,自己写的一个简单的测试脚本,执行了就会打印一个脚本已执行成功在日志中#!/bin/bash# 日志文件路径 LOG_FILE="/dongguangshu/logfile.log…

[C++ Daily] 何时调用copy构造与copy赋值

<Effective C++>:"如果一个新对象被定义,一定会有个构造函数被调用,不可能调用赋值操作.如果没有新对象被定义,就不会有构造函数被调用,那么当然是赋值操作被调用."结果:

速通spring与mybatis

Spring 1.什么叫线程安全:多个线程访问一个对象时,不需要额外的调度与交替执行也不需要额外的同步,调用这个对象的行为都可以获得正确的调度结果 如何保持线程安全:使用final修饰变量,让其只可读不可修改 使用局部变量,公共数据私有化:这样堆内读取的数据就会改成在栈内…

JS解析JSON数据到TABLE表格

效果图: 数据采用JSON,[{"时间段": "上午","XX小学班课表": [{"名称": "教师上班","时间": "8:00","星期一": "","星期二": "","星期三": "&q…