ARP(地址解析协议)_傲娇回忆杀的博客-程序员秘密

技术标签: HCIA  网络  路由交换  

ARP(Address Resolution Protocol,地址解析协议)可以在以太网上,根据已知的IP地址查找主机的硬件地址。


一、ARP的工作原理

我们以以太网的工作环境作为背景来探讨这一协议(串行链路由于是点到点链路,故而不需要ARP)。在以太网的工作环境中,当主机需要向一个IP地址发送数据时,它需要将目标的物理地址(也就是MAC地址,也有文献称其为硬件地址)写在数据帧的目的MAC地址字段位置上,而这一动作的前提是,网络层已经知道了这一地址并且将其与逻辑目的地址建立了一个映射关系。这就好比在手机上存了一个电话号码并备注上了一个联系人一样,当需要打电话时,只需要查找该联系人的姓名即可,手机会帮我们自动选择他的电话号码拨过去。

当我们并不知道一台主机的IP地址与物理地址的映射关系的时候,就需要用到ARP。


二、ARP分类

1.ARP

我们用一个简单的比喻来形容ARP的工作过程。当你只知道你跟张三是同班同学却不知道他的具体座位时,你站起来大喊了一声:“我是王二,谁是张三?”于是张三说:”我是张三。“这样,你就知道了张三的具体位置,同时张三也知道了你的位置和姓名。

如下图所示为一个ARP请求报文的示例。

当一台主机需要访问一个与自己在同一个网络的IP地址但不知道目的主机的物理地址时,它就会发送一个ARP请求报文。

由于我们并不知道目标物理地址是什么,该报文的目标物理地址(即MAC地址)在数据帧的头部用二层广播地址FFFF.FFFF.FFFF来填充。

一个二层目的地址为广播地址的数据帧是会被发送给广播域内所有的成员的,如果网络规划正确,那么这其中一定会包含真正的接收者。

当真正的接收者收到该数据帧之后,会转交给自身的ARP程序,经过比对,发现其中的目的IP地址正是其所拥有的,就会对发送者做出回应,在回应报文中会将自身的物理地址写在发送者MAC地址的位置。

这样,目的主机根据发送者ARP请求报文中的MAC地址和IP地址获得了发送者的物理地址和逻辑地址,并且将会以明确的MAC地址和IP地址给发送者发送回应报文。

一次美妙的陌生人之间的互相介绍就这样完成了。看起来是不是很简单呢?

2.代理ARP

在一般情况下,只能为主机分配一个默认网关。如果需要互通的主机处在相同的网段却不在同一物理网络,并且连接主机的网关设备具有不同的网关地址,在这种场景中,如果发生网络故障,我们该如何防止业务中断呢?在这种场景中,需要代理ARP,其工作过程如下图所示。

可以看出,实际上,代理ARP只是一种服务,它并不是一种协议。并且,服务提供者对用户进行了“欺骗”,只是将自身的MAC地址回应给了用户,以此来达到代替用户转发数据的目的。

在默认情况下,在华为的设备上,这一功能是关闭掉的。

3.ARP 报文格式

ARP 协议包(ARP 报文)主要分为 ARP 请求包和 ARP 响应包,本节将介绍 ARP 协议包的格式。

ARP 协议是通过报文进行工作的,ARP 报文格式如图所示。

ARP 报文总长度为 28 字节,MAC 地址长度为 6 字节,IP 地址长度为 4 字节。

其中,每个字段的含义如下。

  • 硬件类型:指明了发送方想知道的硬件接口类型,以太网的值为 1。
  • 协议类型:表示要映射的协议地址类型。它的值为 0x0800,表示 IP 地址。
  • 硬件地址长度和协议长度:分别指出硬件地址和协议的长度,以字节为单位。对于以太网上 IP 地址的ARP请求或应答来说,它们的值分别为 6 和 4。
  • 操作类型:用来表示这个报文的类型,ARP 请求为 1,ARP 响应为 2,RARP 请求为 3,RARP 响应为 4。
  • 发送方 MAC 地址:发送方设备的硬件地址。
  • 发送方 IP 地址:发送方设备的 IP 地址。
  • 目标 MAC 地址:接收方设备的硬件地址。
  • 目标 IP 地址:接收方设备的IP地址。


ARP 数据包分为请求包和响应包,对应报文中的某些字段值也有所不同。

  • ARP 请求包报文的操作类型(op)字段的值为 request(1),目标 MAC 地址字段的值为 Target 00:00:00_00:00:00(00:00:00:00:00:00)(广播地址)。
  • ARP 响应包报文中操作类型(op)字段的值为 reply(2),目标 MAC 地址字段的值为目标主机的硬件地址。

免费 ARP 包

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

本节将介绍免费 ARP 包的结构、作用,以及如何发送免费 ARP 包。

免费 ARP 包的结构

免费 ARP 报文与普通 ARP 请求报文的区别在于报文中的目标 IP 地址。普通 ARP 报文中的目标 IP 地址是其他主机的 IP 地址;而免费 ARP 的请求报文中,目标 IP 地址是自己的 IP 地址。

作用

  • 免费 ARP 数据包有以下 3 个作用。
  • 该类型报文起到一个宣告作用。它以广播的形式将数据包发送出去,不需要得到回应,只为了告诉其他计算机自己的 IP 地址和 MAC 地址。
  • 可用于检测 IP 地址冲突。当一台主机发送了免费 ARP 请求报文后,如果收到了 ARP 响应报文,则说明网络内已经存在使用该 IP 地址的主机。
  • 可用于更新其他主机的 ARP 缓存表。如果该主机更换了网卡,而其他主机的 ARP 缓存表仍然保留着原来的 MAC 地址。这时,可以发送免费的 ARP 数据包。其他主机收到该数据包后,将更新 ARP 缓存表,将原来的 MAC 地址替换为新的 MAC 地址。

    小结

对于ARP,它是通过以太网二层广播以及已知单播回复的方式来获取物理地址(MAC地址)和逻辑地址(IP地址)之间的映射关系的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_62594100/article/details/123992695

智能推荐

ajax--json数据解析实例ems_python基础教程的博客-程序员秘密

07ems.html<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>title</title> <style> #ems { width: 400px; height: 500px; positio

【pycharm】调试时报错libcudart.so.9.0: cannot open shared object file: No such file or directory_libcudart9.0_农夫山泉2号的博客-程序员秘密

cuda的lib库文件无法找到。首先看libcudart.so.9.0是否在/usr/local/cuda-9.0/lib64下。解决在pycharm的configure中的LD_LIBRARY_PATH环境变量添加/usr/local/cuda-9.0/lib64

error: the following arguments are required: --cfg_编程有梦的博客-程序员秘密

先看错误代码:parser.add_argument('--cfg', type=str, required=True, metavar="FILE", help='path to config file', )–cfg 是定义为可选参数;required=True,表示必须在命令行输入解决方案:将required=True改为required=False...

从APK角度提升App性能【Apk瘦身加固】_杨超凡的博客-程序员秘密

APK的基本概念在Android设备上,直接运行APK文件即可完成安装APK文件其实是zip格式,但后缀名被修改为apk,通过解压,可以看到Dex文件,Dex是DalvikVM executes的简称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码下图是解压之后的APK目录META-INF\ (注:Jar文件中常可以看到);res\ (注:存放资源文件的

辐射度算法的CUDA实现_BugRunner的博客-程序员秘密

1. 简介辐射度算法是一种经典的全局光照算法,它可以解决光线跟踪等直接照明方法中所不能表现的真实世界中的照明现象问题。虽然渲染的结果表现力强,但是问题之一就是算法的耗费较大,由于其原理就是对各个多边形面片进行着色,而且常常需要较多的迭代次数才能达到比较理想的效果,因此算法原理虽然比较简单,但效率就成为一个重要的瓶颈。 2. 辐射度算法原理辐射度算法的原理就是模拟真实世界中的光照原理

springMVC 面试题及答案_springmvc面试题_孤独冰刃的博客-程序员秘密

本文的面试题如下:为什么使用Spring(优缺点)spring容器创建对象的时机Spring的常用注解解释Spring MVC的常用注解解释Mybatis的常用标签或者注解用过哪些spring bean 的生命周期【~】Spring事务(ACID,隔离级别,事务传播机制)IOC底层实现原理【~】AOP底层实现原理【~】AOP详解Spring MVC 运行流程(好)什么是控制反转(Inversion of Control)与依赖注入(Dependency Injection)Bean

随便推点

C++轻量级日志类_xiaokaiV5的博客-程序员秘密

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

TensorFlow 从入门到精通(9)—— 模型保存与恢复以及TensorFlow游乐场、Tensorboard_aJupyter的博客-程序员秘密

这节课,我们介绍三种保存模型的方法,另外介绍两个很有用的工具,一个是游乐场,一个是tensorboard,这里只是浅浅带过,以后会深入讨论昨天没更新,属实是累了,下一篇卷积神经网络,冲冲冲一、只保留权重和偏执import tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras import datasets, layers, optimizers # step1 加载训练集和测试集合mnist = tf.kera.

10分钟掌握Linux vi编辑器常见命令的使用,最简单的vi编辑器教程_蔡松豆的博客-程序员秘密

10分钟掌握Linux vi编辑器常见命令的使用,最简单的vi编辑器教程Vim 是 Vi improved 的缩写,是 vi 的改进版。在Linux中,vi 被认为是事实上的标准编辑器,因为:所有版本的 Linux 都带有 vi 编辑器;占用资源少;与 ed、ex 等其他编辑器相比,vi 对用户更加友好。你可以使用 vi 编辑器编辑现有的文件,也可以创建一个新文件,还能以只读模式打开文本文件。进

MySQL报错 [Err] 1055 - mysql Expression #1 of ORDER BY clause is not in GROUP BY clause and contains_是镜子阿的博客-程序员秘密

环境:CentOS7.3 MySQL5.7.17背景:在执行创建表语句时,报错:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ‘ which ...

Windows下安装pycocotools(2022.01亲测可行)_pycocotools下载_奶盖芒果的博客-程序员秘密

复现Mask RCNN 时,需要pycocotools,尝试了网上的教程,自己总结终于安好了。。。尝试经历如下:1. 安装gitconda install git2.安装cythonpip install cython3. 下载安装pycocotools,应该是有大神在win下重写了这个库pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI但是,试了之后报

校招黑名单_Ch97CKd的博客-程序员秘密

有个正义的同学看不惯很多公司往年恶意毁约,但由于存在信息差,很多同学根本不知道发生过这些事,于是来年还是踊跃的投简历,结果就是毕业之时遭遇毁约、或者试用期裁员,导致自己明明才刚毕业却失去了...

推荐文章

热门文章

相关标签