ARP协议(地址解析协议)用于局域网中网络设备按IP地址查询对方的MAC地址,提供一种从网络地址(仅ipv4,ipv6用ND协议替代)到硬件地址(各种链路层协议使用的地址)的映射。

1、ARP过程

简单来说,对于即插即用的网络而言,网络中各个设备的IP地址甚至MAC地址都不是固定的,如果需要相互通信,这一时刻在网络的各个层次都要找到对应的正确的衔接口。主机、交换机等设备在转发数据报文时需要知道下一个处理报文的设备的物理地址,无论该报文目的地址是否为本网段(跨网段则发到网关设备,网关也有物理地址),这时就能用ARP协议发起通告。

和学校里面老师点名是一个道理:老师从广播通知所有学生,“请叫李小明的同学告诉我你的家庭地址,我是王老师,我在办公室1-1”,这里面王老师这个称呼就是Sender IP,李小明这个称呼就是Target IP,办公室1-1是Sender MAC,该通告报文中Target MAC字段是空的,全0,因为此时老师还不知道学生的住址;学生收到消息发现是叫的自己后,立刻前往办公室1-1报上自己的住址,即上个报文的想要的Target MAC(实际的ARP当然只是目标机回个报文而不是“前往”)。

再用计算机网络的专业术语复述上面的过程:

  1. 源主机上的应用程序需要建立一个与1.1.1.1地址设备的连接
  2. 假设主机发现目的地址与自己的IP地址在同一网段同一局域网,则需要得到对方的物理地址,假设使用以太网协议则需要知道MAC地址
  3. 源主机发起ARP过程,广播一个ARP Request报文,主要内容包含自己的MAC地址、自己的IP地址、希望响应的设备的IP地址
  4. 因为在同一广播域,目的主机收到ARP Request后解析,发现希望应答的IP地址是自己的IP地址,则回复一个ARP Reply,相比ARP Request报文多了Target MAC字段
  5. 源主机收到ARP Reply,记录MAC-IP表项(目的主机收到Request时可能也建立了表项,方便后面通信使用)
  6. 源主机得到设备1.1.1.1的物理地址,随后建立连接开始通信

设备上一般会有专门维护ARP表项的表,比如在Windows系统中可以在控制台输入arp –a查看ARP表项。ARP表项通常是有老化时间的,当然有的系统也支持配置ARP表项永远存在,一段时间内如果设备没有与某些地址的设备通信则ARP表项会被删除,下一次需要通信的时候会重新开始ARP过程。ARP表项老化操作也是即插即用网络的一种体现。

2、ARP帧

帧类型及之前的部分是以太网帧的首部,是固定的部分,ARP协议的主要部分是帧类型以后:

·硬件类型:硬件地址的类型

·协议类型:映射的地址的类型,比如ipv4地址为0x0800

·硬件地址长度、协议地址长度:即物理地址长度和映射的地址的长度,单位1byte

·op:操作类型,有4种,ARP请求(1)、ARP应答(2)、RARP请求(3)、RARP应答(4)

·发送者硬件地址:源主机的物理地址

·发送者协议地址:源主机的IP地址

·目标硬件地址:目的主机的物理地址

·目标协议地址:目的主机的IP地址

3、免费ARP

这是一种特殊的ARP报文,但并不是在协议格式上特殊,而是免费ARP报文的发送者IP地址和目标IP地址是相同的。免费ARP主要希望达到两个目标:

·允许一台主机确定当前广播域中是否有与自己IP地址重复的设备,发送免费ARP的主机不希望收到免费ARP的回应ARP报文,如果收到了说明当前自己的IP地址会在局域网中产生地址冲突,会提示系统用户

·如果一台主机更换了MAC地址,IP地址不变,发送免费ARP可以让局域网内的其他设备更新自己的ARP表项

4、冲突地址检测ACD

虽然有免费ARP,但并没有解决多个主机可以使用同一IP地址的问题,在RFC5227中定义了ACD的概念,其中定义了两种ARP报文:ARP Probe和ARP Announcement。ARP Probe用于探测当前广播域是否有其他主机使用某个IP地址,与免费ARP的区别在于,ARP Probe报文的发送者IP地址字段是全0,这是为了避免ARP污染(因为ARP请求报文会在广播域内广播到每个主机上,所以主机收到带发送者IP地址的ARP报文后都会创建缓存表项,太多ARP报文会造成域内主机上的缓存浪费)。ARP Announcement报文用于通告域内主机自己的IP地址和MAC地址,特征是其目标硬件地址字段全0,该报文不希望某个特定的主机回应,只需要域内主机创建起ARP表项即可。所以ACD定义的两种报文其实也是免费ARP的两个功能的更完善的实现。

ARP帧、ARP过程、免费ARP、ACD的原理相关推荐

  1. ARP、RARP、免费ARP、代理ARP

    ARP协议: ARP是已知对方IP地址,请求对方MAC地址的一种地址解释协议,其工作原理如下: 1.在封装数据包时如果ARP缓存表中没有找到目标IP地址,主机A就会在本地网络上发送一个ARP广播,在此 ...

  2. ARP协议具体解释之Gratuitous ARP(免费ARP)

    ARP协议具体解释之Gratuitous ARP(免费ARP) Gratuitous ARP(免费ARP) Gratuitous ARP也称为免费ARP.无故ARP.Gratuitous ARP不同于 ...

  3. ARP协议详解之Gratuitous ARP(免费ARP)

    ARP协议详解之Gratuitous ARP(免费ARP) Gratuitous ARP(免费ARP) Gratuitous ARP也称为免费ARP,无故ARP.Gratuitous ARP不同于一般 ...

  4. 浅谈---免费ARP 【Gratuitous ARP】

    1.免费ARP定义 ARP Request 报文中Sender IP 和 Target IP 都是自己的报文被称为免费ARP报文(Gratuitous ARP). 2.免费ARP作用 免费ARP报文主 ...

  5. 19.免费ARP详解

    免费 ARP(Gratuitous ARP)包是一种特殊的 ARP 请求,它并非期待得到 IP 对应的 MAC 地址,而是当主机启动的时候,发送一个 Gratuitous ARP 请求,即请求自己的 ...

  6. 【ARP地址解析协议(完整解析过程、ARP欺骗、免费ARP、ARP代理)】-20211125【下】

    目录 一.ARP地址解析协议 ARP地址解析协议:将IP地址解析为Mac地址 ARP地址解析过程 1)pc1首先会查询自身的ARP缓存表,是否存在目标ARP缓存条目. ARP请求报文(原理) 2)由于 ...

  7. 【数通】ARP及RARP 免费ARP基础知识

    ARP 基本原理 以太网的同一网段内以广播的方式查询某个IP地址对应的MAC地址,以实现三层IP地址与二层MAC地址之间的动态映射,这是任何以太网主机设备都支持的一个协议.我们有的时候称ARP为2.5 ...

  8. 普通ARP和免费ARP

    普通ARP和免费ARP及arping命令的使用 http://tenderrain.blog.51cto.com/9202912/1650245 问题:ARP协议是二层协议,还是三层协议? 答:ARP ...

  9. 图解ARP协议(五)免费ARP:地址冲突了肿么办?

    一.免费ARP概述 网络世界纷繁复杂,除了各种黑客攻击行为对网络能造成实际破坏之外,还有一类安全问题或泛安全问题,看上去问题不大,但其实仍然可以造成极大的杀伤力.今天跟大家探讨的,也是技术原理比较简单 ...

最新文章

  1. 经典排序算法之直接选择排序
  2. 乡村振兴种业使命-丰收节交易会·张桃林:种业谋定格局
  3. ROS(kinetic)报错:CMakeFiles/Makefile2:9038: recipe for target ‘XXX‘
  4. c语言中switch嵌套,C 嵌套 switch 语句 ——jQuery中文网
  5. 电子围栏原理解析---原理
  6. Tensorflow——Variable变量(打印数字小实例)
  7. 使用vue-cli+axios配置代理进行跨域访问数据
  8. 移动开发不能不知道的事-meta
  9. 网页跳转代码的三种方法
  10. 【数据处理】Python matplotlib绘制双柱状图以及绘制堆积柱状图——保姆级教程
  11. Kubernetes(K8s)基本概念:Volume(存储卷)、Persistent Volume
  12. diy公益拍卖会 杨宗纬吴尊林俊杰s.h.e等拼人气
  13. 日式风格小荷才露尖尖角
  14. ArcGIS栅格按照象元大小生成矢量的方法
  15. 猿创征文|Google Earth Engine(GEE)实现土地利用数据栅格转矢量
  16. Python育儿系列-python生成竖式运算
  17. Spring Boot--- springboot 集成 JavaMail 实现邮箱认证
  18. 视频翻译软件有哪些?视频该怎么翻译
  19. 看穿晾衣架上的“手机人”说起:黑产套路能有多深?!
  20. 使用TsLint,报错:space indentation expected

热门文章

  1. 如何制作具有声音效果的动画桌面精灵
  2. 五一劳动节快乐加餐(图论补充)------P2573 [SCOI2012]滑雪
  3. Python与sql交互入门(mysql和sqlite)
  4. 面向机器学习的自然语言标注导读
  5. 基于JAVA线上竞赛训练系统录屏计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  6. tail怎么写中文_taiI的中文翻译是什么-tail中文-tail用汉语怎么说
  7. nDCG笔记及在spark中的实现
  8. C语言基础知识:字符串赋值
  9. 第三方支付流程中,如何利用回调来解决用户掉单的问题
  10. php第三方支付接口视频,接入第三方支付及回调