网络数据之ARP协议分析

来源:互联网 发布:汉语言文学 知乎 编辑:程序博客网 时间:2024/05/06 00:02
ARP 地址解析协议 用于将IP地址解析为物理地址(MAC地址)。
       我们通过OSI七层模型来说明问题
 
       由上图可见,OSI模型将网络分为了七层,而IP地址位于第三层,也就是网络层,MAC地址位于数据链路层,也就是第二层。那么以太网发送IP数据包的时候,需要首先封装第三层和第二层报头。但由于发送数据包时只知道目标IP地址,不知道其MAC地址,而又不能直接跨越第二、三层,所以需要地址解析协议。而在使用ARP协议后,计算机可以按照网络层IP数据包的头部信息,将硬件地址信息(MAC地址)对应起来,以保证通信的顺利进行。ARP协议的基本功能就是将一个已知的IP地址解析成MAC地址。


       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发送消息了。
       如果想查看ARP缓存表,可以在CMD下输入ARP -a



       分析ARP数据包
 
     我们通过观察ARP请求包,在Frame帧中,可以知道该数据包的大小为42个字节。观察Ethernet发现数据包中的目的地址是ff:ff:ff:ff:ff:ff,这是一个广播地址,说明这个数据包会被广播到当前网段中的所有设备上。而这个数据包中以太网的源地址就是本机的MAC地址。
      然后对ARP请求的头部进行分析。按照顺序依次为硬件类型、协议类型、硬件地址长度、协议长度、操作码(该值为1,表示这是一个ARP请求包)、源MAC地址、源IP地址、目的IP地址、目标的MAC地址未知,所以就以全0的形式显示。



 
       ARP响应的数据包和ARP请求数据包很像,不同之处在于,用于响应的操作码(Opcode)现在是2,表明这是一个用于响应的数据包;发送方的MAC地址和IP地址变成了目标的MAC地址和IP地址;ARP请求包中的目的MAC地址和IP地址已经获取到,写入到响应包中。


       免费ARP
       当网络中的设备IP地址改变,网络主机中缓存的IP地址和MAC地址不在生效。那么为了防止由于映射失败造成通信错误,免费的ARP请求会被发送到网络中,强制所有收到它的设备使用新的IP以及MAC地址映射来更新缓存。通常,它发生在系统引导期间进行接口配置或者IP地址出现变化的时候。

 
       首先我们可以看到这个数据包是以广播的形式发出的,这样这个网络的主机都能接收到它。接下来我们发现,发送方的IP地址和接收方的IP地址是一致的。网络中的其他主机收到这个数据包之后,它会让这些主机使用新的IP地址和MAC地址映射关系来更新它们的ARP缓存。由于这个ARP数据包是源主机未经请求主动发出的,并导致了目标主机更新了ARP缓存,所以称之为免费的ARP。
 
       ARP协议是用来将IP地址解析为MAC地址的协议
 
       主机B已经确定自己就是主机A的目标是,包含有自己的MAC地址的ARP响应消息直接通过单播的形式回复给主机A。
 
       在请求包中当目标的MAC地址未知,所以就以全0的形式显示。
 

DI4.jpg (25.52 KB, 下载次数: 0)

下载附件  保存到相册

昨天 21:14 上传


       免费ARP会在它发生在系统引导期间进行接口配置或者IP地址出现变化的时候发送。


相关链接:http://bbs.ichunqiu.com/thread-9072-1-1.html?from=csdnJG

0 0