ARP——地址解析协议,工作在数据链路层。
当主机A要和主机B通信时,这时候假定AB刚开机,或者ARP缓存表是空的。既然谈到通信,那么一般来说,它们应该对数据完成一个封装和解封装的过程。其他的层次我们先不谈,只看数据链路层和网络层。在A这边,做为一个数据的源,它在发送数据时,数据被封装到网络层,需要添加一个IP报头,里面有源和目标IP地址字段,源的IP和目标的IP都知道,那么是可以顺利的封装的,但是封装好的包交给数据链路层,进行再一次封装时,问题发生了,因为在数据链路层,需要封装成帧,那么在帧的头部有源MAC和目标MAC字段,源MAC是它自己,当然知道,但是目标的MAC呢?没有!!!也就是说,没有实际的地址!!!那封装还能继续下去吗?那么通信难道要终止吗?
其实在封装之前,PC将会查看自己的ARP缓存表(我们可以通过手工查看start—run—cmd—arp-a)。如果缓存表中存在目标主机的MACIP信息,那么就可以顺利的成帧。如果没有的话,那么它将经历一次ARP的解析过程。它发出一个broadcast request(一个广播请求,请求对方的MAC地址。)用sniffer可以看到。这个ARP请求数据里面有一个问题:喂,我是192.168.12.1,我的MAC地址是A!!192.168.12.2,你的MAC地址是多少?这个时候,该网段中所有的主机都能收到该广播,只有IP地址是192.168.12.2的主机会响应(response)。同时接收主机会把AIP地址和MAC地址的对应关系记录下来,放入ARP缓存中。通过了这个过程,AB都有了对方的IPMAC的对应关系了,那么第二层,第三层的封装就可以顺利的完成。
大家可以想像一下,如果在A发出广播后,收到了来自B的回应请求,同时,又有一个第三者通过某种方式监听到了A—B的对话,并截获了B回应给Aarp response。他可以把这个回应中的MAC地址字段该成另一个MAC地址,再把修改过的帧交给A。这个时候A是不是拿到了两种回应呢?它会以谁为准呢?它会以后来的为准!!!
上面的是ARPARP其实还有好几种。
RARP
(反向地址解析协议):它是通过MAC地址来寻找自己的IP地址。它主要应用在早期的无盘网络技术中和DHCP的工作过程中。
代理ARP。比如一台路由器连接了两个以太网。当其中一个网络中的主机A要和另一个网络中的B主机通信,它首先要使用ARP解析BMAC地址,当这个广播信息到达路由器接口时,路由器把该数解封装到第三层抽取网络层地址时,发现目标主机位于自己直连的另一个网络中,它将代替(默认情况下,CISCO路由器代理ARP功能是打开的)主机BA发送一个arp response(这个过程,其实和上面所说到的ARP欺骗很相似),以自己接口的MAC地址和IP地址发出这个回应数据。那么A收到之后,将会把该信息加入ARP缓存中去,同时把数据封装成帧交给路由器接口。代理ARP有时候会引起协议冲突问题。
无故ARP,觉得好笑的是:曾看到过有的书上把它翻译成了无敌ARP,我不知道是翻译问题还是打错了或者是校验出了问题,反正,我觉得不可能叫无敌ARP。无故ARP,顾名思义,就是无缘无故发送ARP请求。那么发出这样一个请求有什么好处呢?可以刷新ARP缓存,可以检测冲突。