ARP协议原理

article/2025/9/25 1:27:59

文章目录

  • 引言
  • 初始ARP
  • ARP缓存表
  • 一句话总结ARP协议的工作
  • ARP表项的建立
    • 对于局域网
    • 对于公网
  • ARP缓存表的超时处理
  • ARP报文
  • 喜欢就关注我吧!

引言

从前一篇文章中,我们知道计算机中会维护一个ARP缓存表,这个表记录着IP地址与MAC地址的映射关系,我们可以通过在电脑的控制台通过arp -a指令查看一下我们自己计算机的ARP缓存表:
tcpip-6
那么什么是ARP协议呢?

初始ARP

ARP协议是地址解析协议(Address Resolution Protocol)是通过解析IP地址得到MAC地址的,是一个在网络协议包中极其重要的网络传输协议,它与网卡有着极其密切的关系,在TCP/IP分层结构中,把ARP划分为网络层,为什么呢,因为在网络层看来,源主机与目标主机是通过IP地址进行识别的,而所有的数据传输又依赖网卡底层硬件,即链路层,那么就需要将这些IP地址转换为链路层可以识别的东西,在所有的链路中都有着自己的一套寻址机制,如在以太网中使用MAC地址进行寻址,以标识不同的主机,那么就需要有一个协议将IP地址转换为MAC地址,由此就出现了ARP协议,所有ARP协议在网络层被应用,它是网络层与链路层连接的重要枢纽,每当有一个数据要发送的时候都需要在通过ARP协议IP地址转换成MAC地址,在IP层及其以上的层次看来,他们只标识IP地址,从不跟硬件打交道,就像我一样,我做应用层的工作,而不会去写底层驱动,得专门有个同事将驱动写完给我,我只需要知道他提供的API接口就行了,而我就专心处理我的工作,我相信他能把驱动写好,我只需要直接调用即可。

ARP缓存表

既然已经解释了ARP协议的用途及重要性,那么它是如何工作的?为了实现IP地址MAC地址查询与转换ARP协议引入了ARP缓存表的概念,每台主机或路由器在维护着一个ARP缓存表(ARP table),这个表包含IP地址到MAC地址的映射关系,表中记录了<IP地址,MAC地址>对,我称之为ARP表项,如我们前面那张所展示的一样,他们是主机最近运行时获得关于其他主机的IP地址MAC地址的映射,当需要发送数据的时候,主机就会根据数据报中的目标IP地址信息,然后在ARP缓存表中进行查找对应的MAC地址,最后通过网卡将数据发送出去。ARP缓存表包含一个寿命值(TTL,也称作生存时间),它将记录每个ARP表项的生存时间,生存时间到了就会从缓存表中删除。从一个表项放置到ARP缓存表中开始,一个表项通常的生存时间一般是10分钟吗,当然,这些生存时间是可以任意设置的,我们一般使用默认即可。

一句话总结ARP协议的工作

ARP协议的主要工作就是建立、查询、更新、删除ARP表项。

ARP表项的建立

当主机开机的时候,ARP缓存表肯定是空的,那么怎么一步步建立 ARP表项呢?如果此时想发送数据怎么办呢?因为没有ARP表项,说明就找不到IP地址MAC地址映射关系,这样子也就无法发送数据了。
其实协议栈的实现还是很强大的,如果没有ARP表项,那么主机就会去建立ARP表项
以我们的电脑为例,在开机的时候,我们的电脑肯定是没有ARP表项的(或者应该说只有路由器的ARP表项,因为可能是动态获取IP地址):

tcpip-8

对于局域网

如果我想向局域网中的某个电脑发送一个数据,那么我的电脑就会从已有的ARP缓存表中寻找这个IP地址对应的物理地址的ARP表项,然后直接将数据写入以太网数据帧中让网卡进行发送即可,而如果没有找到这个IP地址,那么这个数据就没法立即发送,电脑会先在局域网上广播一个ARP请求(目标MAC地址为FF-FF-FF-FF-FF-FF),广播的ARP请求发出后,处于同一局域网内的所有主机都会接收到这个请求,如果目标IP地址与接收到ARP请求的主机自身IP地址吻合就会返回一个ARP应答,告诉请求者(即我的电脑)自身的MAC地址,当我的电脑收到这个ARP应答后,就去建立一个ARP表项,并且重新将数据发送出去。
ARP协议的核心就是对缓存表的操作,发送数据包的时候,查找ARP缓存表以得到对应的MAC地址,在ARP缓存表中的TTL即将过期的时候更新缓存表以保证ARP表项有效,此外ARP协议还需要不断处理来自局域网中其他主机的ARP请求

对于公网

比如我的电脑向访问我的博客:https://jiejietop.cn
因为我的博客主机是处于外网的,那么我的电脑在访问的时候,也是找不到缓存表的,那它只能通过网关,让网关将数据转发到我的博客主机上,即:

tcpip-9

因为我的电脑与博客主机不在一个网段,电脑查询自己的路由表,知道如果想和博客主机通信则必须通过网关(gateway)来中转,所以会在与网关直连的网卡上请求网关的MAC地址,因为电脑要把发给博客主机的数据先发给网关,当合法以太帧到达网关并且顺利接收,网关会将数据递交给IP层,IP层查询路由表,找到与博客主机直连的接口(假设是直连的,实际上肯定不是直连的),网关会发一个ARP请求到博客主机上,请求它的MAC地址,网关收到应答后将建立新的ARP表项并将开始维护ARP缓存表,然后完成最终的通信。

ARP缓存表的超时处理

ARP是动态处理的,现在总结一下:ARP表项的生存时间是一般为5-10分钟(LwIP中默认是5分钟),而ARP请求的等待时间是5秒钟,当这些时间到达后,就会更新ARP表项,如果在物理链路层无法连通则会删除表项。
因此每个协议栈的实现都必须维护着一个定时器(超时机制)来管理ARP缓存表,在必要的时候更新及删除ARP表项,关于怎么处理的我们就不多追究,有兴趣的可以看LwIP的etharp_tmr()源码。

说点题外话:因为ARP协议是一个动态的协议,很多网络攻击都是利用ARP协议进行的,如ARP欺骗,ARP洪水攻击等等,而且这种攻击是很难防御的,当然也有办法,直接将动态的ARP缓存表设置为静态就行了,但是这就违背了ARP协议动态地址解析特性。

ARP报文

ARP的请求与应答都是依赖ARP报文结构进行的,ARP报文是放在以太网数据帧中进行发送的,下面是ARP报文的格式:

tcpip-10

当它封装在以太网帧中的格式:

tcpip-11

在ARP表建立前,主机并不知道目标MAC地址,所以在一开始的时候只能通过广播的方式将ARP请求包发送出去,处于同一局域网的主机都能接收到广播的数据包。所以一开始目标MAC地址FF-FF-FF-FF-FF-FF,而以太网首部的帧类型是有多种,对于ARP数据包来说,其值为0x0806,对于IP数据报来说,其值为0x0800
在ARP首部一开始的2个字节存储的是硬件类型,表示要知道目标网卡的硬件类型,其中,值为1表示以太网地址;接下来还有2字节的协议类型,其中,0x0800表示IP协议,其他还可能是ICMP/IGMP协议等;接下来有1个字节表示硬件地址长度,指出该报文中硬件地址的长度,对于以太网硬件类型,它的值为6;还有1字节的协议地址长度,如果是ARP协议、IP协议等,该值为4;ARP首部最后的op字段用于记录ARP操作的类型,分别是:

  • ARP请求,其值为1。
  • ARP应答,其值为2。
  • RARP请求,其值为3。
  • RARP应答,其值为4。

我们只关心ARP的请求与应答即可,RARP是逆地址解析协议,在这里我们就不用去了解,它在网络中基本已经被淘汰,用于主机在启动的时候获得自己的IP地址。
对于ARP首部后面的四个字段分别是源MAC地址、源IP地址、目标MAC地址、目标IP地址,这些就是比较简单的了。
为了加深理解,我们使用wireshark网络抓包工具形象地讲解报文格式与内容,关于wireshark网络抓包工具的使用方式我就不做过多讲解,网上教程一大把,打开工具,然后抓取电脑网络中的数据包。

tcpip-12
tcpip-13

未完待续…
下一篇LwIP中ARP协议的实现

喜欢就关注我吧!

欢迎关注我公众号

相关代码可以在公众号后台获取。


http://chatgpt.dhexx.cn/article/iRYKAiJs.shtml

相关文章

ARP协议简介

ARP&#xff0c;全称Address Resolution Protocol&#xff0c;中文名为地址解析协议&#xff0c;它工作在数据链路层&#xff0c;在本层和硬件接口联系&#xff0c;同时对上层提供服务。 数据链路如以太网或令牌环网都有自己的寻址机制&#xff0c;这是使用数据链路的任何网络层…

ARP协议详解,小白易懂

当网络设备有数据要发送给另一台网络设备时&#xff0c;必须要知道对方的网络层地址&#xff08;即IP地址&#xff09;。IP地址由网络层来提供&#xff0c;但是仅有IP地址是不够的&#xff0c;IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须要包含目的MAC地址&am…

ARP 协议工作原理(同网段及跨网段)

目录 一、ARP简介 二、ARP的工作原理 三、ARP协议在同网段工作原理 四、ARP协议在不同网段工作原理 一、ARP简介 ARP全称是“Address Resolution Protocol”(地址解析协议)&#xff0c;ARP作用于以太网的环境之中&#xff0c;以太网环境之中数据的传输依赖的是MAC地址并不是…

矩阵分析:特征值分解

矩阵分析&#xff1a;特征值分解 前置知识空间变换伸缩旋转 对称矩阵对称矩阵对角化 正交矩阵向量的基基变换不同基下的向量变换逆矩阵不同基下的空间变换 内积的几何意义 特征值、特征向量特征值分解代码 前置知识 空间变换 伸缩 一个矩阵其实就是一个线性变换&#xff0c;因…

关于矩阵特征值的理解

好久没看矩阵相关的东西&#xff0c;&#xff0c;&#xff0c;都忘光了&#xff0c;&#xff0c;&#xff0c;&#xff0c; 用运动来理解描述矩阵。 如何理解矩阵特征值&#xff1f; - 马同学的回答 - 知乎https://www.zhihu.com/question/21874816/answer/181864044 行列式是…

矩阵特征值求法实例

矩阵特征值 设 A 是n阶方阵&#xff0c;如果存在数m和非零n维 列向量 x&#xff0c;使得 Axmx 成立&#xff0c;则称 m 是矩阵A的一个特征值&#xff08;characteristic value)或 本征值&#xff08;eigenvalue)。 矩阵特征值方法 对于矩阵A&#xff0c;由AXλ 0X&#xff0c;λ…

MATLAB中有关矩阵特征值和特征向量的计算

在MATLAB语言中&#xff0c;求矩阵的特征值和特征向量需要用到两个函数&#xff1a;eig()、diag() diag():可生成一个对角矩阵 调用eig函数的格式为&#xff1a; [x,y]eig(A) 其中矩阵y的对角线元素存储的是A的所有特征值&#xff0c;且从小到大排列&#xff1b;而矩阵x的每一…

如何理解矩阵特征值的意义?

如何理解矩阵特征值的意义? 毕业多年,曾经有同事问我该如何理解特征值的意义? 当时,实在羞愧,我一学数学的,真不知该如何回答。 极力回想,也只能以“特征值的求法、步骤…bla…bla…”应付了事, 答非所问,简直了得! 这样的答案教科书里写得清清楚楚,网上Google…

线性代数及其应用:经典矩阵特征值证明

文章目录 前言实对称矩阵正交方阵实斜对称矩阵厄米矩阵正定矩阵相似矩阵投影矩阵反射矩阵Rank-1矩阵逆矩阵矩阵线性变换矩阵的n次方的稳定性e的矩阵次方的稳定性马尔科夫矩阵循环置换特征值分解谱定理Jordan标准型奇异值分解 前言 这里记录一下一些经典矩阵的特征值证明&#x…

数值分析 python_数值分析实验之矩阵特征值(Python代码)

一、实验目的 1.求矩阵的部分特征值问题具有十分重要的理论意义和应用价值; 2.掌握幂法、反幂法求矩阵的特征值和特征向量以及相应的程序设计; 3.掌握矩阵QR分解 二、实验原理 幂法是一种计算矩阵主特征值(矩阵按模最大的特征值)及对应特征向量的迭代方法, 特别是用于大型稀疏…

【机器学习中的数学基础】矩阵特征值、特征向量和特征值分解的几何意义

【机器学习中的数学基础】矩阵特征值、特征向量和特征值分解的几何意义 在《机器学习》西瓜书中的第十章提到了“多维缩放”&#xff08;简称MDS&#xff09;方法&#xff0c;该方法是一种经典的的降维方法。此方法的目标是获得样本在 d ′ d^{} d′维空间的表示&#xff0c;且…

python — numpy计算矩阵特征值,特征向量

文章目录 python — numpy计算矩阵特征值&#xff0c;特征向量一、数学演算二、numpy实现 转载请备注原文出处&#xff0c;谢谢&#xff1a;https://blog.csdn.net/pentiumCM/article/details/105652853 python — numpy计算矩阵特征值&#xff0c;特征向量 一、数学演算 示例…

利用矩阵特征值求解多项式的根

在PnL方法求相机位姿&#xff0c;Point—to—Line方法的点云匹配问题中&#xff0c;会将其中某一个参数的求解建模成求一个多项式的根。如下式所示&#xff1a; (1) 那么求解这样的一个多项式的根应该怎么做呢&#xff1f;参考文献1告诉我们可以利用矩阵特征值方法来求解&…

计算二阶矩阵特征值的技巧

1.计算二阶矩阵特征值的技巧 笔记来源&#xff1a;计算二阶矩阵特征值的妙计 1.1 平均特征值 1.2 特征值的积 1.3 求解特征值 根据以上两点&#xff0c;求出特征值 m m m 为平均特征值 λ 1 λ 2 2 \frac{\lambda_1\lambda_2}{2} 2λ1​λ2​​&#xff08;两个特征值 λ…

矩阵特征值和特征向量详细计算过程

1.矩阵特征值和特征向量定义 A为n阶矩阵&#xff0c;若数λ和n维非0列向量x满足Axλx&#xff0c;那么数λ称为A的特征值&#xff0c;x称为A的对应于特征值λ的特征向量。式Axλx也可写成( A-λE)x0&#xff0c;并且|λE-A|叫做A 的特征多项式。当特征多项式等于0的时候&#x…

从零开始学数据分析之——《线性代数》第五章 矩阵的的特征值

5.1 矩阵的特征值与特征向量 5.1.1 矩阵的特征值与特征向量 定义&#xff1a;设A是n阶方阵&#xff0c;若对于数&#xff0c;存在非零列向量&#xff0c;使得 则称为矩阵A的一个特征值&#xff0c;为矩阵A的对应于特征值的特征向量 定义&#xff1a;称为A的特征多项式&#x…

理解矩阵和特征向量的本质

理解矩阵和特征向量的本质 原文地址 最近复习矩阵论中&#xff0c;又是一堆定理和证明突然发现学了这么常时间的矩阵论、线性代数&#xff0c;记住的只是一堆莫名其妙的定理而已&#xff0c;一些本质的东西都没有搞清楚。 比如&#xff0c;为什么要有矩阵&#xff0c;它仅仅是…

机器学习(一):线性回归之最小二乘法

文章目录 专栏导读1、线性回归简介2、最小二乘法原理3、实战案例专栏导读 ✍ 作者简介:i阿极,CSDN Python领域新星创作者,专注于分享python领域知识。 ✍ 本文录入于《机器学习案例》,本专栏精选了经典的机器学习算法进行讲解,针对大学生、初级数据分析工程师精心打造,对…

回归评价指标:均方误差根(RMSE)和R平方(R2)

转载自&#xff1a;http://blog.csdn.net/lsldd/article/details/41251583 做回归分析&#xff0c;常用的误差主要有均方误差根&#xff08;RMSE&#xff09;和R-平方&#xff08;R2&#xff09;。 RMSE是预测值与真实值的误差平方根的均值。这种度量方法很流行&#xff08;N…

回归标准差和残差平方和的关系_用回归来理解方差分析(三):Ⅰ型平方和与Ⅲ型平方和...

阅读提示 为了更好理解这篇文章&#xff0c;你可能需要了解&#xff1a;两因素方差分析 平方和的分解 方差分析模型 虚拟变量 推荐先阅读 文中涉及到的代码只是为了验算&#xff0c;如果不熟悉代码的同学可以忽略&#xff0c;直接看结果就行。也可以自己动手尝试用SPSS验算。 1…