一、ARP 协议
网络层以上的协议用IP地址来标识网络接口,但以太数据帧传输时,以物理地址来标识网络接口。因此我们需要进行IP地址与物理地址之间的转化。
对于IPv4来说,我们使用ARP地址解析协议来完成IP地址与物理地址的转化(IPv6使用邻居发现协议进行IP地址与物理地址的转化,它包含在ICMPv6中)。
ARP协议提供了网络层地址(IP地址)到物理地址(mac地址)之间的动态映射。ARP协议 是地址解析的通用协议。
二、ARP缓存
ARP高速缓存(即ARP表)是 ARP地址解析协议能够高效运行的关键 (如果有多次ARP响应时,以最后一次响应为准)。
ARP给IP地址和MAC地址中间做了动态映射,也就是说缓存了一个ARP表,将得到的IP地址和MAC地址对应起来,如果在表中没有查到IP地址对应的MAC地址,就会发广播去找。随着用户的使用,ARP表如果不做任何措,就会变得越来越臃肿缓慢,就降低了网络传输数据的效率,所以ARP缓存中每一项被设置了生存时间,一般是20分钟,从被创建时开始计算,到时则清除,如果在计时期间又被使用了,计时会重置。电脑断电则ARP表内容清空。
三、ARP 报文的各个字段以及含义
帧类型: ARP: 0x0806 (2)
ARP 首部:
硬件类型:硬件地址的类型, 1 表示以太网地址。(2)
协议类型:协议地址的类型, 0x0800 表示 IP 地址。 (2)
硬件地址长度: 字节为单位 6 (1)
协议地址长度: 字节为单位 4 (1)
操作类型: 2 个字节。 ARP 请求 1, ARP 回复 2, RARP 请求 3, RARP 应答 4。(2)
发送者硬件地址: 6 个字节(6)
发送者 IP 地址: 4 个字节(4)
目标硬件地址: 6 个字节(6)
目标 IP 地址: 4 个字节(4)
CRC 校验: 4 个字节 (4)
总结:
arp 总共 28 个字节。
记忆方法: 以太网先目地后源, ARP 先发送端后目地端。先硬件后协议。
四、ARP 协议的工作原理
1.每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系。
2.主机(网络接口)新加入网络时(也可能只是mac地址发生变化,接口重启等), 会发送免费ARP报文把自己IP地址与Mac地址的映射关系广播给其他主机。
3.网络上的主机接收到免费ARP报文时,会更新自己的ARP缓冲区。将新的映射关系更新到自己的ARP表中。
4.某个主机需要发送报文时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 数据包(广播),该数据包包括的内容有:源主机 IP 地址,源主机 MAC 地址,目的主机的 IP 地址等。
5.当本网络的所有主机收到该 ARP 数据包时:
(A)首先检查数据包中的 IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包。
(B)如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖。
(C) 然后将自己的 MAC 地址写入 ARP 响应包中(单播),告诉源主机自己是它想要找的 MAC 地址。
6.源主机收到 ARP 响应包后。将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。
五、ARP 协议有什么弱点?
1.缓存:主机的地址映射是基于高速缓存的,动态更新的。地址刷新是有时间限制的。 可以通过下次更新之前修改计算机上的地址缓存,造成拒绝服务攻击或者 ARP 欺骗。
2.广播:攻击者可以伪装 ARP 应答。
3.ARP 应答没有认证,都是合法的。可以在不接受到请求的时候就发出应答包。
六、ARP的四种类型
1.代理ARP
若 ARP 请求是从一个网络的主机发送给另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程叫做 ARP 代理。 ARP 代理路由器响应 ARP 请求的 MAC 地址为路由器的 MAC 地址而非 ARP 请求的主机的 MAC 地址。
ARP 代理的应用环境:
两个物理网络之间的路由是使用相同的网络号,两个路由器设置成 ARP 代理,实现相互隐瞒物理网络
2.免费ARP
指主机发送 ARP 查找自己的 IP 地址,即数据链路层 SIP=DIP
作用有两个:
1)一个主机使用免费 ARP 确定是是否有其他主机设置了相同的 IP 地址;
2)如果发送免费 ARP 的主机改变了 MAC 地址,可以通过发送免费 ARP 的方式告知其他主机端更新 ARP 表。
3.翻转ARP(RARP)
无盘工作站通过RARP协议来获取IP地址(有了IP地址之后通过TFTP引导加载系统)
自己没有ip地址,但是有mac,通过RARP,向服务器请求获得了IP地址(这个服务器分配给他的),从而获得远程操作系统 。
4.逆向ARP(InverseARP)
比较少见,一般存在于帧中继网络中(现在已经很少帧中继网络),用于实现IP和DLCI地址的映射。
七、ARP到底是链路层协议还是网络层协议
协议到底所属哪一层,可以从应用/功能来考虑,也可以从层次/包封装来考虑。
以ARP协议为例,它的功能最终是获取到MAC信息,服务于链路层,从这点考虑,ARP是链路层协议;
但是从层次来看,ARP基于Ethernet协议,IP协议基于Ethernet协议,它们在Ethernet协议里面有独立的Type类型,前者是0x0806,后者是0x0800,既然ARP和IP协议"平起平坐",那么IP是网络层,ARP也属于网络层协议。
基于功能来考虑,ARP是链路层协议;基于分层/包封装来考虑,ARP是网络层协议。(此方法对于ICMP协议同样管用)
参考:https://www.cnblogs.com/csguo/p/7527303.html
https://www.cnblogs.com/csguo/p/7542944.html
https://blog.csdn.net/treepapap/article/details/52293272
原文地址:https://www.cnblogs.com/Harriett-Lin/p/11371539.html