前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >TCP/IP协议簇中ARP协议

TCP/IP协议簇中ARP协议

作者头像
网络工程师笔记
发布于 2021-05-17 06:40:19
发布于 2021-05-17 06:40:19
9120
举报

1、ARP协议简介

在《IP协议》中我们讲解了IP地址相关内容,IP协议中包含了目的IP地址和源IP地址,但是当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48bit的以太网地址来确定目的接口的。设备驱动程序从不检查IP数据报中的目的IP地址。

还记得数据链路层的以太网的协议中,每一个数据包都有一个MAC地址头么?我们知道每一块以太网卡都有一个MAC地址,这个地址是唯一的,那么IP包是如何知道这个MAC地址的?这就是ARP协议的工作。

在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层。ARP协议数据哪一层,不同的资料有不同的说法,这里不作重点讨论。

ARP(地址解析)协议是一种解析协议,本来主机是完全不知道这个IP对应的是哪个主机的哪个接口,当主机要发送一个IP包的时候,会首先查一下自己的ARP高速缓存(就是一个IP-MAC地址对应表缓存),如果查询的IP-MAC值存不存在,那么主机就向网络发送一个ARP协议广播包,这个广播包里面就有待查询的IP地址,而直接收到这份广播的包的所有主机都会查询自己的IP地址,如果收到广播包的某一个主机发现自己符合条件,那么就准备好一个包含自己的MAC地址的ARP包传送给发送ARP广播的主机,而广播主机拿到ARP包后会更新自己的ARP缓存(就是存放IP-MAC对应表的地方)。发送广播的主机就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作。

2、ARP协议结构

之前的文章《以太网数据包结构》可以看出图表示ARP协议的数据结构

这里先看一下典型的ARP包的组成结构。

前面12个字节是MAC地址,在《以太网数据包结构》文章中讲解过,接下来是帧类型,其中0806表示是ARP协议帧。接下来,就是ARP数据包部分了,第一个硬件类型字段表示发送方想要知道的硬件接口类型硬件,对于以太网MAC地址,它的值应该为1。协议类型字段表示要映射的协议地址类型,它的值为0x0800时,即表示要映射为IP地址,可以看出,该值与以太网数据帧头中类型字段的值使用相同的一组值。

接下来的两个单字节长度的字段,称为硬件地址长度和协议地址长度,它们分别指出硬件地址和协议地址的长度,长度单位为字节。对于以太网上ARP请求或应答来说,它们的值分别为6和4,代表MAC地址的长度和IP地址的长度。在ARP协议包中留出硬件地址长度字段和协议地址长度字段可以使得ARP协议在任何网络中被使用,而不仅仅只在以太网中。

操作字段op指出ARP数据包的类型,它们可以是ARP请求(值为1)、ARP应答(值为2)、RARP请求(值为3)和RARP应答(值为4),这里我们只关心前两个类型。RARP为逆地址解析协议,这里简单说一下,RARP用于主机启动时获得自己的IP地址。这个过程很简单:主机启动时,广播发送一个RARP请求数据包,数据包中包含了自身的MAC地址,然后等待响应。网络中另一台主机必须设置为监听RARP请求状态,并在收到请求后为该主机分配一个IP地址并返回RARP应答给主机,一旦收到应答,主机就有了IP地址,就可以在后续中使用了。

接下来的四个字段是发送端的以太网MAC地址、发送端的IP地址、目的端的以太网MAC地址和目的端的IP地址。

关于PAD填充字节,请看《以太网数据包结构》有讲解。

注意:在以太网的数据帧头部中和ARP数据包中都有发送端的以太网MAC地址。对于一个ARP请求包来说,除接收方以太网地址外的所有字段都应该被填充相应的值。当接收方主机收到一份给自己的ARP请求报文后,它就把自己的硬件地址填进去,然后将该请求数据包的源主机信息和目的主机信息交换位置,并把操作字段op置为2,最后把该新构建的数据包发送回去,这就是ARP应答。

3、wireshark抓包分析

假设查询IP为192.168.0.103的MAC地址,使用如下命令

arp -a 192.168.0.103

抓包分析

这里分享下wireshark的抓包文件

链接:https://pan.baidu.com/s/1AWPj85Jb4nmLY8h2yJucUA 提取码:bxjq

(提示:公众号不支持外链接,请复制链接到浏览器下载)

4、ARP协议分类

ARP数据包的种类有两种:

一是ARP请求包,它是通过以太网广播的方式发送的,用于向具有某个IP地址的主机发送请求,希望该主机返回其MAC地址;

二是ARP应答包,收到ARP请求的主机会比对该数据包中的IP地址与自己的IP地址是否符合,若是,则该主机向源主机返回一个ARP应答包,向源主机报告自己的MAC地址。源主机通过提取ARP应答包中的相关字段来更新ARP缓存表。

一个典型的arp缓存信息如下,在任意一个系统里面用“arp-a”命令:

都会得到这样的结果。这样的高速缓存是有时限的,一般是20分钟(伯克利系统的衍生系统)。

5、ARP协议应用

基础知识:路由下有两个设备,他们相互知道对方IP和MAC,但是他们不能直接通讯,需要路由做转发,如果两个设备直接用网线连起来,就是直接通讯。

举个栗子

路由下有两个设备,首先一点:每个设备(包括路由),都有自己的ARP缓存表。设备A向局域网下设备B通讯(A设备知道B设备的IP)

情况1:A知道B的MAC地址,也就是在自己的ARP缓存表有设备B,直接封包,交给路由就好。

情况2:A不知道B的MAC地址,也就是在自己的ARP缓存表没有设备B,此时比较不幸,发送数据需要延时发送,首先设备A会向网关(就是路由)ARP请求包(以太网目的地址是FF-FF-FF-FF-FF-FF),这时候分情况A和B。

情况A:路由知道设备B的MAC,也就是自己的ARP缓存表有设备B,把自己的知道的设备B的IP和MAC返给设备A,设备A更新一下,自己的ARP缓存表,按情况1处理。

情况B:路由不知道设备B的MAC,路由就在自己的局域网发送,ARP请求包,去问设备B的MAC。得到之后,再发送给A。A得到MAC地址后按照情况1处理。

上述情况说明,想要网络设备第一次就通讯流畅,必须要局域网内的设备都知道自己的MAC地址,在网络设备开发中我们一般在网络设备首次接入网络后,首先向局域网广播自己的<IP,MAC>地址信息,称为无回报(gratuitous)ARP请求,这样的一个ARP数据包将告诉其他主机关于自己的信息,其他主机根据各自收到的ARP包更新自己的ARP表项。上文中提到的伯克利系统的衍生系统,ARP的缓存表一般存储20分钟,如果不及时更新,主机会删除“离线”设备的ARP表,因为主机ARP缓存表内存有限,不可能存储无限的ARP表信息。针对这种情况,我们开发网络设备,需要每隔一段时间广播一下自己的<IP,MAC>地址信息,表示自己“还活着”。但是不能太过频繁发送,频繁发送会被部分型号的路由认为是病毒。

6、ARP攻击

上一篇《IP协议》讲解了IP攻击,接下来讲解下我们常听的ARP攻击。

ARP协议有一个很大的漏洞,如果网络中的所有用户都规规矩矩,按照上述流程使用ARP就不会存在任何问题。但如果有恶意的设备收到一个ARP请求包(ARP请求包是广播形式发送的,局域网所有主机都可以收到),它不管包中的IP地址是否和自己相同,都会产生一个ARP应答包,告诉请求的用户:我这台主机的MAC地址就是你请求的目的IP地址匹配的MAC地址。另一方面,由于发送ARP请求的源主机不具备任何容错、认证功能(ARP协议未提供任何机制实现这些功能),这样它便会轻易地相信这条ARP应答,并把它加入到了自己的ARP缓存表中。这样做的后果可想而知,源主机在以后都会将具有该目的P地址的数据包发送到那个恶意的主机上。这样,它能轻松地实现数据的窃听,这也就是我们常常听说的ARP攻击的基本原理。

当PC1发送ARP协议询问PC2的MAC地址时,由于是广播的,PC3也收到了这个ARP请求包,PC3把不属于自己的广播包接收,同时回应一个虚假的回应包,告诉PC1我就是PC2。这样PC1会收到两个回应包(一个正确的IP2-MAC2,一个虚假的IP2-MAC3),但是PC1并不知道到底哪个是真的,所以PC1会做出判断,并且判断后到达的为真,那么怎么让虚假的回应包后到达呢,PC3可以连续不断的发送这样的回应包,总会把哪个正确的回应包覆盖掉。

而后PC1会建立IP2-MAC3这样一条ARP缓存条目,以后当PC1给PC2发送信息的时候,PC1依据OSI模型从上至下在网络层给数据封装目的IP为IP2的包头,在链路层通过查询ARP缓存表封装目的MAC为MAC3的数据帧,送至交换机,根据查询CAM表,发现MAC3对应的接口为Port3,就这样把信息交付到了PC3,完成了一次ARP攻击。

如果ARP攻击严重的话,恶意的网络设备只要在网络内阅读送上门的所有广播的ARP请求数据包,就能偷听到网内所有<IP,MAC>地址信息,进而监听多台网络设备。

防止办法:

我们可以使用静态ARP缓存表防止ARP攻击,但是缺点是违背了ARP协议的动态地址解析原则。

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网络工程师笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Wireshark实战分析之ARP协议(一)
ARP(Address Resolution Protocol)协议,地址解析协议。该协议的功能是将IP地址转化为物理地址。
DragonKingZhu
2022/05/08
2420
Wireshark实战分析之ARP协议(一)
以太网数据包TCP、IP、ICMP、UDP、ARP协议头结构详解
(1)字节和数字的存储顺序是从右到左,依次是从低位到高位,而网络存储顺序是从左到右,依次从低位到高位。
网络技术联盟站
2019/07/23
5.1K0
ARP欺骗常见姿势及多机ARP欺骗
ARP欺骗是一个老生常谈的话题,翻看各位师傅的文章,大多数都是在使用arpspoof(当然,同样看到过使用Python写一款类似的工具的文章)进行单机欺骗。本文的目的在于总结ARP欺骗原理、常见姿势以及实现多机ARP欺骗。
FB客服
2019/08/30
3K0
ARP欺骗常见姿势及多机ARP欺骗
WireShark ARP协议分析
ARP(Address Resolution Protocol,地址解析协议)是一种用于在IP网络中解析物理地址的通信协议,它的作用是将IP地址转换为MAC地址以便在局域网中传输数据包,ARP协议通常运行在网络层和数据链路层之间,它通过广播查询请求和响应来实现IP地址到MAC地址的映射。当一个主机需要发送数据包时,它会先检查ARP缓存中是否已经存在目标IP地址对应的MAC地址,如果没有则发送广播查询请求,等待目标主机响应,然后将响应中的MAC地址存储到ARP缓存中以便下次使用,ARP协议是网络通信中必不可少的一部分,它可以帮助网络管理员快速解决网络故障和安全问题
Al1ex
2023/05/12
5760
WireShark ARP协议分析
arp属于tcp/ip协议吗_tcp协议与ip协议的区别
本文主要讲述了ARP的作用、ARP分组格式、ARP高速缓存、免费ARP和代理ARP。
全栈程序员站长
2022/09/20
1K0
arp属于tcp/ip协议吗_tcp协议与ip协议的区别
ARP & RARP
对于以太网,数据链路层上是根据48bit的以太网地址来确定目的接口,设备驱动程序从不检查IP数据报中的目的IP地址。ARP协议为IP地址到对应的硬件地址之间提供动态映射。
Nujil
2023/04/12
1.8K0
一次web请求用到的arp、ip、udp、tcp、rip、http协议详解
本文面向有一定计算机网络基础的读者,通过实验剖析请求环节中的报文附加一些类比,帮助读者更清晰的了解常用的网络协议工作细节。 本文数据链路层以以太网为例介绍。 概念链接: MAC地址 IP地址 子网掩码 默认网关 。
mooner
2022/12/04
1.4K0
一次web请求用到的arp、ip、udp、tcp、rip、http协议详解
【计网】从零开始认识arp协议
传输层协议提供一种策略保证通信的稳定性;网络层协议提供一种能力保证可以进行通信。数据链路层是用于两个设备(同一种数据链路节点)之间进行传递。
叫我龙翔
2024/10/30
3280
【计网】从零开始认识arp协议
ARP欺骗原理_ARP欺骗实验
一.arp欺骗的原理 以太网设备(比如网卡)都有自己全球唯一的MAC地址,它们是以MAC地址来传输以太网数据包的,但是以太网设备却识别不了IP数据包中的IP地址,所以要在以太网中进行IP通信,就需要一个协议来建立IP地址与MAC地址的对应关系,使IP数据包能够发送到一个确定的主机上。这种功能是由arp(AddressResolution Protocol)来完成的。 arp被设计成用来实现IP地址到MAC地址的映射。arp使用一个被称为arp高速缓存的表来存储这种映射关系,arp高速缓存用来存储临时数据(IP地址与MAC地址的映射关系),存储在arp高速缓存中的数据在几分钟没被使用,会被自动删除。 arp协议不管是否发送了arp请求,都会根据收到的任何arp应答数据包对本地的arp高速缓存进行更新,将应答数据包中的IP地址和MAC地址存储在arp高速缓存中。这正是实现arp欺骗的关键。可以通过编程的方式构建arp应答数据包,然后发送给被欺骗者,用假的IP地址与MAC地址的映射来更新被欺骗者的arp高速缓存,实现对被欺骗者的arp欺骗。
全栈程序员站长
2022/11/17
2.4K0
C/C++ Npcap包实现ARP欺骗
npcap 是Nmap自带的一个数据包处理工具,Nmap底层就是使用这个包进行收发包的,该库,是可以进行二次开发的,不过使用C语言开发费劲,在进行渗透任务时,还是使用Python构建数据包高效,唯一的区别是使用Python的库,可以节约我们寻找数据包结构的时间.
王瑞MVP
2022/12/28
7270
计算机网络基础知识点1. OSI,TCP/IP,五层协议的体系结构,以及各层协议2. IP地址的分类3. ARP是地址解析协议,简单语言解释一下工作原理。4. 各种协议的介绍5. 描述RARP协议6.
1. OSI,TCP/IP,五层协议的体系结构,以及各层协议 OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。 五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。 每一层的协议如下: 物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器) 数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机) 网络层:IP、ICMP、ARP、RARP、OSPF、IPX
JavaEdge
2018/05/16
3.4K0
【计算机网络】详解数据链路层数据帧&Mac地址&ARP协议
"以太网" 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容 。例如:规定了网络拓扑结构,访问控制方式,传输速率等;例如以太网中的网线必须使用双绞线,传输速率有 10M、100M、1000M等。以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等。
用户10923276
2024/10/17
3590
【计算机网络】详解数据链路层数据帧&Mac地址&ARP协议
【Linux】:数据链路层(以太网 & 局域网通信 & ARP协议 & ARP 欺骗 & DDos 攻击)
数据链路层 位于物理层和网络层之间,其作用是将源自物理层来的数据可靠地传输到相邻节点的目标主机的网络层,主要通过物理介质(如以太网,Wi-Fi等)将数据分割成帧,并在相邻节点之间进行传输。
IsLand1314
2025/03/02
1760
【Linux】:数据链路层(以太网 & 局域网通信 & ARP协议 & ARP 欺骗 & DDos 攻击)
数据链路层重点总结
又是新的一年,展望2023年,博主给大家带来了网络中数据链路层的重点总结,附上博主本人的实例,帮助大家更好的理解数据是怎么在网络中传输的。
VIBE
2023/01/04
4760
数据链路层重点总结
linux网络编程之TCP/IP基础(二):利用ARP和ICMP协议解释ping命令
s1mba
2018/01/03
2.9K0
linux网络编程之TCP/IP基础(二):利用ARP和ICMP协议解释ping命令
【Linux网络】网络层IP协议,数据链路层:以太网、ARP协议
但是随着互联网的飞速发展,这种划分方案的局限性很快显现出来,A 类地址很容易浪费,于是提出了新的划分方案:CIDR(Classless Interdomain Routing)
_小羊_
2025/03/02
1260
【Linux网络】网络层IP协议,数据链路层:以太网、ARP协议
18张图详解ARP协议所有细节(附流程),果断收藏
只要确定了 IP 地址后,就能够向这个 IP 地址所在的主机发送数据报。但是再往深了想,IP 地址只是标识网络层的地址,那么在网络层下方数据链路层是不是也有一个地址能够告诉对方主机自己的地址呢?是的,这个地址就是MAC 地址。
网络工程师笔记
2022/02/28
15.1K0
18张图详解ARP协议所有细节(附流程),果断收藏
ARP 报文格式
地址解析协议(ARP)是网络通信中的核心协议之一,它工作在OSI模型的数据链路层,负责将网络层的IP地址映射为数据链路层的MAC地址。这一过程对于网络数据包的正确传输至关重要。本文将详细介绍ARP报文的格式、工作原理、应用场景以及安全问题。
Michel_Rolle
2024/10/11
2.6K0
地址解析协议 ARP
ARP(Address Resolution Protocol,RFC 826)是根据IP地址获取物理地址的一个TCP/IP协议。主机通过将ARP请求广播到网络上的所有主机并接收返回消息来确定目标IP地址的物理地址,同时将IP地址和硬件地址存入本机ARP缓存中,下次请求时直接查询ARP缓存。
十二惊惶
2024/02/28
4050
地址解析协议 ARP
ARP协议:网络世界的临门一脚
各位同学肯定见过关于网络的面试题,什么TCP协议和UDP的区别啦,IP协议工作在哪层啊等等,这都是网络中定义的各种协议。这些标准化的协议就是网络分层模型标准化的核心部分。要想搞懂网络,必须搞明白其中的几种主要的网络协议。
古时的风筝
2023/03/23
4510
ARP协议:网络世界的临门一脚
推荐阅读
相关推荐
Wireshark实战分析之ARP协议(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档