ARP协议分析

ARP协议分析

(一)ARP协议原理

1.什么是ARP协议
ARP(Address Resolution Protocol,地址解析协议)用于将IP地址解析为物理地址(MAC地址)。这里之所以需要使用MAC地址,是因为网络中用于连接各个设备的交换机使用了内容可寻址存储器(CAM,Coment Addressable Memory)。该存储器维护的ARP表列出了它在每一个端口的所有连接设备的MAC地址。
当交换机收到了一个指向特定MAC地址的网络流量,它就会使用这个表,来确定应该使用哪一个端口发送流量。如果目标MAC地址是未知的,那么这个传输设备会首先在它的缓存中查找这个地址,如果没有找到,那么这个地址就需要通过在网络上额外的通信中解析了。或者我们可以结合下图来说明这个问题:


由上图可见,OSI模型将网络分为了七层,而IP地址位于第三层,也就是网络层,MAC地址位于数据链路层,也就是第二层。那么在通过以太网发送IP数据包的时候,需要首先封装第三层和第二层的报头。但由于发送数据包时只知道目标IP地址,不知道其MAC地址,而又不能直接跨越第二、三层,所以需要地址解析协议。而在使用了ARP协议后,计算机可以按照网络层IP数据包的头部信息,将硬件地址信息(MAC地址)对应起来,以保证通信的顺利进行。ARP协议的基本功能就是将一个已知的IP地址解析成MAC地址,以便主机之间可以正常地通信。
ARP协议是在RFC826中定义的。RFC(Request for Comments)是定义各种协议实现标准的官方文档,建议大家在学习网络知识的时候,应当多多参考这些资料,因为它最权威,也最全面。大家可以在RFC Editor的首页中搜索RFC文档,而在本次的课程中,我也给大家提供了RFC826文档,包括pdf格式以及txt格式,供大家学习参考。通过查看RFC826可以知道,其实ARP协议的解析过程只使用了两种数据包:一个ARP请求和一个ARP响应,如下图所示:

其详细工作原理为:
• (1)当主机A想要给主机B发送数据时,主机A会首先在自己的本地ARP缓存表中检查与主机B相匹配的MAC地址。
• (2)如果主机A在自己的缓存表中没找到主机B的相关条目,那么它就要想办法获取主机B的MAC地址。这就需要将ARP的请求帧广播到本地网络上的所有主机中。这个请求帧包含有主机A的IP地址和MAC地址,以及主机B的IP地址。网络中凡是收到请求帧的主机都会检查自己的IP地址是否与请求地址一致,如果不一致,则会丢弃该请求帧。对于上图来说,主机C和主机D会丢弃主机A发出的请求帧。
• (3)主机B确定ARP请求中的IP地址和自己的IP地址一致,那么就会将主机A的IP地址和MAC地址添加到本地的缓存列表中。
• (4)主机B将包含有自己MAC地址的ARP响应消息直接回复给主机A(单播)。
• (5)主机A收到从主机B发来的ARP响应消息后,会将主机B的IP地址和MAC地址添加到自己的ARP缓存表中。接下来,主机A就可以向主机B发送消息了。

(二)wireshark分析ARP协议

  1. 查看本地的APR缓存列表,cmd命令:arp –a

  1. 分析第一个ARP数据请求包。

通过Packet Details面板,检查以太网头部信息来确定这个数据包是不是一个真的广播数据包。
-首先在Frame帧中,可以知道该数据包的大小为42个字节。
-其次检查一下Ethernet部分的内容,会发现这个数据包目的地址是ff:ff:ff:ff:ff:ff,这是一个广播地址,说明当前数据包会被广播到当前网段中的所有设备上。而这个数据包中以太网的源地址就是本机的MAC地址。
-接下来展开ARP请求的头部信息
硬件类型、协议类型、硬件地址长度、协议长度、操作码(该值为1,表示这是一个ARP请求包)、发送方的MAC和IP地址,以及接收方的IP地址。
由于想要获取的目标MAC地址还是未知的,因此就以全0的形式(00:00:00:00:00:00)显示。

  1. 分析第二个ARP数据响应包。

ARP响应的数据包和请求的数据包不同之处在于:
-用于响应的数据包的操作码(Opcode)现在是2,表明这是一个用于响应的数据包;
-发送方的MAC地址和IP地址变成了目标MAC地址和IP地址;
-响应数据包中的内容都是可用的,也就是说我们已经获取了192.168.0.1主机的MAC地址,即00:13:46:0b:22:ba,那么接下来就可以正常通信了。

  1. 分析第三个免费的ARP(gratuitous ARP)数据包。
    由于网络中一个设备的IP地址是可以改变的,而MAC地址不会改变。那么一旦出现IP地址改变的情况,网络主机中缓存的IP和MAC地址映射就不再有效了。那么为了防止由于映射失败造成的通信错误,免费的ARP请求会被发送到网络中,强制所有收到它的设备使用新的IP以及MAC地址映射来更新缓存。通常,它发生在系统引导期间进行接口配置或IP地址出现变化的时候。
    如下是一个免费ARP请求:


-首先我们可以看到这个数据包是以广播的形式发出的,这样一来,网络上的所有主机都能收到它。
-接下来,发现发送方的IP地址和接收方的IP地址是一致的。网络中的其它主机收到这个数据包之后,它会让这些主机使用新的IP和MAC地址映射关系来更新它们的ARP表。由于这个ARP数据包是源主机未经请求主动发出的,并导致了目标主机更新了ARP缓存,所以称之为免费的ARP。

原文地址:https://www.cnblogs.com/Erma/p/10278408.html