5.ARP协议

2023-11-03

1.前言

当网络设备需要有数据要发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链进行发送。数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通过目的IP地址来获取目的MAC地址的过程是由ARP(Address Resolution Protocol)协议来实现的。

2.目标

  • 掌握ARP的工作原理
  • 理解ARP缓存表的作用

3.ARP

在这里插入图片描述
一个网络设备要发送数据给另一个网络设备时,必须知道对方的IP地址。但是仅有IP地址是不行的,因为IP数据报文必须封装成帧才能通过数据链路进行发送,而数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。每一个网络设备在数据封装前都需要获取下一跳的MAC地址,IP地址由网络层来提供,MAC地址通过ARP协议来获取。ARP协议是TCP/IP协议簇中的重要组成部分,它能够通过目的IP地址获取目标设备的MAC地址,从而实现数据链路层的可达性。

4.ARP数据包格式

在这里插入图片描述
网络设备通过ARP报文来发现目的MAC地址。ARP报文中包含以下字段:

  1. Hardware Type表示硬件地址类型,一般为以太网;
  2. Protocol Type表示三层协议地址类型,一般为IP
  3. Hardware Length和Protocol Length为MAC地址和IP地址的长度,单位是字节;
  4. Operation Code指定了ARP报文的类型,包括ARP Request和ARP Reply;
  5. Source Hardware Address指的是发送ARP报文的设备IP地址;
  6. Destination Hardware Address指的是接收者MAC地址,在ARP Request报文中,该字段值为0;
  7. Destination Protocol Address指的是接收者的IP地址;

5.ARP工作过程

在这里插入图片描述
通过ARP协议,网络设备可以建立目标IP地址和MAC地址之间的映射。网络设备通过网络层获取到目的IP地址之后,还要判断目的MAC地址是否已知。

6.ARP缓存

在这里插入图片描述 网络设备一般都有一个ARP缓存(ARP Cache),ARP缓存用来存放IP地址和MAC地址的关联信息。在发送数据前,设备会先查找ARP缓存表。如果缓存表中存在对方设备的MAC地址,则直接采用该MAC地址来封装帧,然后将帧发送出去。如果缓存表中不存在相应的信息,则通过发送ARP Request报文来获取它。学习到的IP地址的映射关系会被放入ARP缓存表中存放一段时间。在有效期内,设备可以直接从这个表中查找目的MAC地址来进行数据封装,而无需进行ARP查询。过了这段有效期,ARP表项会被自动删除。
如果目标设备位于其他网络,则源设备会在ARP缓存表中查找网关的MAC地址,然后京数据发送给网关,网关再把数据发送给设备。

7.ARP请求

在这里插入图片描述
本例中,主机A的ARP缓存表中不存在主机C的MAC地址,所以主机A会发送ARP Request来获取MAC地址。ARP Request报文封装在以太帧里。帧头中的源MAC地址为发送端主机A的MAC地址。此时,由于主机A不知道主机C的MAC地址、目的IP地址、源MAC地址、目的MAC地址,其中目的MAC的地址的值为0.ARP Request报文会在整个网络上传播,该网络中的所有主机包括网关都会接收到此ARP Request报文。网关将会阻止该报文发送到其他网络上。

8.ARP响应

在这里插入图片描述
所有的主机接收到该ARP Request报文后,都会检查它的目的协议地址字段与自身的IP地址是否匹配。如果不匹配,则该主机不会响应该ARP Request报文。如果匹配,则该主机会将ARP报文中的源MAC地址和源IP地址信息记录到自己的ARP缓存表中,然后通过ARP Reply报文进行响应。
在这里插入图片描述
主机会向主机A回应ARP Reply报文。ARP Reply报文中的源协议地址是主机C自己的IP地址,目标协议地址是主机A的IP地址,目的MAC地址是主机A的MAC地址,源MAC地址是自己的MAC地址,同时Operation Code被设置为Reply。ARP Reply报文通过单播传送。

9.ARP缓存

在这里插入图片描述
主机A收到ARP Reply以后,会检查ARP报文中目的MAC地址是否与自己的MAC匹配。如果匹配,ARP报文中的源MAC地址和源IP地址会被记录到主机A的ARP缓存表中。

10.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地址进行数据转发。

11.免费ARP

在这里插入图片描述

  • 主机被分配了IP地址或者IP地址发生变更后,必须立刻检测其所分配的IP地址在网络上是否是唯一的,以避免地址冲突。主机通过发送ARP Request报文来进行地址冲突检测。
  • 主机A将ARP Request广播报文中的目的IP地址字段设置为自己的IP地址,且该网路中的所有主机包括网关都会接收到此报文。当目的IP地址已经被某一个主机或网关使用时,该主机或网关就会回应ARP Reply报文。通过这种方式,主机A就能探测到IP地址冲突了。

12.总结

  • 网络设备在什么情况下会发送ARP Request?
    源设备在发送数据给目的设备前,会首先查看自身的ARP缓存,查找ARP缓存中是否存在目的设备的IP地址和MAC地址的映射。如果存在则直接使用,如果不存在则会发送ARP Request。
  • 网路设备什么时候会产生免费ARP?
    当网络上的一个设备被分配了IP地址或者IP地址发生变更后,可以通过免费ARP来检查IP地址是否冲突。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

5.ARP协议 的相关文章

随机推荐

  • 树莓派vlc配置

    本文目的是用树莓派播放一个MP4视频 硬件版本 树莓派3b 系统版本 2018 04 18 raspbian stretch vlc版本 3 0 3 换源 etc apt sources list deb http mirrors aliy
  • java的h2是什么_什么是H2数据库

    展开全部 H2是Thomas Mueller提供的一个开源的 纯java实现的关系数据库 e68a84e8a2ad3231313335323631343130323136353331333366306436 H2是一个开源的嵌入式数据库引擎
  • 《数学之美》——机器学习最佳入门教程

    本文转载至 http www cricode com 3095 html 数学之美系列 目录 作者 吴军 Google研究员 来源 Google黑板报 快课网整理 数学之美 一 统计语言模型 数学之美 二 谈谈中文分词 数学之美 三 隐含马
  • [Python学习] 专题二.条件语句和循环语句的基础知识

    前面讲述了 专题一 函数的基础知识 而这篇文章讲述的Python的条件语句和循环语句的基础知识 主要内容包括 1 条件语句 包括单分支 双分支和多分支语句 if elif else 2 循环语句 while的使用及简单网络刷博器爬虫 3 循
  • ENSP网络综合实验(WALN+隧道+NAT)

    实验拓扑 https wwa lanzoub com ivTyH0w8vz6d 设备接入 汇聚交换机 S3700 S5700 路由器 AR3200 为例 接入层 用户角色包括员工 接入方式包括有线和无线 和访客 仅能通过无线接入 办公WIF
  • java注解反射之自定义Retrofit 项目实战

    java注解反射之自定义Retrofit 项目实战 前言 一 自定义注解 二 自定义按钮事件 三 功能实现 总结 前言 前面我用了两篇的文章 来讲解注解与反射的原理 简单的项目实战 本篇文章我将带领大家 进一步的深入学习 我们将通过代理的方
  • Redis的线程模型,单线程和多线程的抉择

    Redis单线程就应对了大多数场景 但是用户的需求总是无止境的 其次硬件 操作系统均有较高的配置 如果一直使用单线程 也是对硬件的一种浪费了 所以在redis 6 0之后 可以开启多线程 所以面试题又多了一项 简单了解了解就可以了 1 Re
  • 基于MegEngine实现语义分割【附部分源码及模型】

    文章目录 前言 语义分割发展史及意义 一 数据集的准备 二 基于MegEngine的语义分割框架构建 1 引入库 2 CPU GPU配置 3 数据标准化 4 解析数据集到列表中 5 设置数据迭代器 6 获取loader 7 模型构建 8 模
  • 从源代码编译安装 Mono 2.4 和 MonoDevelop 2.0

    从源代码编译安装 Mono 2 4 和 MonoDevelop 2 0 虽然现在几乎所有的Linux发行版都预置了Mono软件 但是大多数都比较旧 因此要体验最新版本的Mono 还是要用源代码自己进行编译安装的 先说几句废话 Mono 2
  • F12打断电调试

    举例 比如一个系统查询信息 点击 查询 显示需要 工号为纯数字 此刻需要F12开发者工具调试 第一步 按下键盘F12 找到Sources 对应的代码 打断点 第二步 在页面右键单击 重新加载框架 此刻会在打断点的地方停止 点击Console
  • [已解决]ln: failed to create symbolic link ‘/usr/bin/python’: File exists

    安装python3 在添加软链时报错如下 翻译过来的意思就是 创建符号链接失败 文件存在 root VM 12 15 centos Python 3 7 6 ln s usr local python3 bin python3 7 usr
  • git学习记录3-----分支操作

    git学习记录3 分支操作 从master分支创建feature A 分支和 fix B 分支 查看分支 创建 切换分支 培育分支实操 首先在READEME md进行修改 切换回master分支 切换回上一个分支 特性分支 主干分支 分支合
  • 判断子序列(C语言)

    判断子序列 思路简单 所用知识比较基础 题目 给定字符串 s 和 t 判断 s 是否为 t 的子序列 字符串的一个子序列是原始字符串删除一些 也可以不删除 字符而不改变剩余字符相对位置形成的新字符串 例如 ace 是 abcde 的一个子序
  • 【OpenCV图像处理】1.18 拉普拉斯算子 - Laplance算子

    文章目录 1 相关理论 2 代码 运行效果 1 相关理论 在上一节已经提到过 f t f t f t 的一阶导就是 f
  • Makefile语法详细总结及示例解析(快速掌握)

    文章目录 一 简介 二 常用规则介绍 2 1 递归扩展变量 2 2 常见的自动化变量解析 2 3 常用的编译器宏定义 2 4 条件语法 2 5 其他特殊变量 1 VPATH变量 2 PHONY变量 3 include变量 4 Q 变量 2
  • 一定要看的VS code安装keil插件的常见问题

    前几天安装了VS code 想在里面写单片机程序 碰到了很多人都会问的问题 看了网络上好多文章都没有解决 后来问了一个学长 才终于解决 一 打开keil工程出现波浪线 出现红色波浪线的主要原因是 没有找到路径 学长说的是 没有包标准C库的两
  • C语言程序设计教程习题和答案-C语言期末复习必看资料

    C语言期末复习必看资料 喜欢的点个赞再走呗 万分感谢
  • 如何用Stata完成(shui)一篇经济学论文(十二):描述性统计、回归与结果保存

    文章目录 描述性统计 回归命令 结果保存 描述性统计 描述性统计的命令我一般使用summerize 用法为summerize加上你所想要总结的变量名称 如果summerize后什么都不加 则表示描述所有变量 sysuse auto 表示描述
  • Linux网络编程:网络基础

    文章目录 一 协议 二 网络应用设计模式 BS模式和CS模式 三 网络分层模型 OSI七层 TCP IP四层 四 通信过程 五 协议格式 1 数据包封装 2 以太网帧格式和ARP数据报格式 3 IP段格式 4 UDP数据报格式 5 TCP数
  • 5.ARP协议

    1 前言 当网络设备需要有数据要发送给另一台网络设备时 必须要知道对方的网络层地址 即IP地址 IP地址由网络层来提供 但是仅有IP地址是不够的 IP数据报文必须封装成帧才能通过数据链进行发送 数据帧必须要包含目的MAC地址 因此发送端还必