ARP协议我们虽然已经说过很多次了,但是这个协议的重要性值得我们再次来探讨一下它的基本概念和流程过程。这对我们防范ARP攻击和欺骗的重要途径,所谓知己知彼百战不殆也是这个道理。
这里我们要介绍的是 Address Resolution Protocol (ARP)。 ARP是 TCP IP 设计者利用乙太网的广播性质﹐设计出来的地址解释协定。它的主要特性和优点是它的地址对应关系是动态的﹐它以查询的方式来获得 IP协议地址和实体地址的对应。它的工作原理非常简单:
1. 首先﹐每一台主机都会在 ARP快取缓冲区 (ARPCache)中建立一个 ARP表格﹐用来记录 IP协议地址和实体地址的对应关系。这个 Table 的每一笔资料会根据自身的存活时间递减而最终消失﹐以确保资料的真实性。
2. 当发送主机有一个封包要传送给目的主机的时候﹐并且获得目的主机的 IP协议地址﹔那发送主机会先检查自己的 ARP表格中有没有该 IP协议地址的实体地址对应。如果有﹐就直接使用此地址来传送框包﹔如果没有﹐则向网路发出一个 ARPRequest 广播封包﹐查询目的主机的实体地址。这个封包会包含发送端的 IP协议地址和实体地址资料。
3. 这时﹐网路上所有的主机都会收到这个广播封包﹐会检查封包的 IP 栏位是否和自己的 IP协议地址一致。如果不是则忽略﹔如果是则会先将发送端的实体地址和 IP 资料更新到自己的 ARP表格去﹐如果已经有该 IP 的对应﹐则用新资料覆盖原来的﹔然后再回应一个 ARPReply 封包给对方﹐告知发送主机关于自己的实体地址;
4. 当发送端接到 ARPReply 之后﹐也会更新自己的 ARP表格﹔然后就可以用此纪录进行传送了。
5. 如果发送端没有得到 ARPReply ﹐则宣告查询失败。
ARP的查询过程可参考下图:
ARP的查询过程
ARP的查询过程
前面说的 ARP表格﹐只有在 TCP IP 协定被载入核心之后才会建立﹐如果 TCP IP 协定被卸载或关闭机器﹐那么表格就会被清空﹔到下次协定载入或开机的时候再重新建立﹐而同时会向网路发出一个 A广播﹐告诉其它机器它的目前地址是什么﹐以便所有机器都能保持最正确的资料。
然而﹐ARPcache 的大小是有所限制的﹐如果超过了界限﹐那么越长时间没被使用过渡资料就必须清理掉﹐以腾出空间来储存更新的资料。所以﹐当机器收到 ARPequest 封包时﹐如果查询对象不是自己﹐则不会根据发送端地址资料来更新自己的 ARP表格﹐而是完全忽略该封包。同时﹐每笔存在 cache 中的资料﹐都不是永久保存的﹕每笔资料再更新的时候﹐都会被赋予一个存活倒数计时值﹐如果在倒数时间到达的时候﹐该资料就会被清掉。然而﹐如果该资料在倒数时间到达之前被使用过﹐则计时值会被重新赋予。
当然了﹐ARP尚有一套机制来处理当 ARP表格资料不符合实际地址资料的状况(例如﹐在当前连线尚未结束前﹐收到目的端的地址资料更新讯息)﹔或是目的主机太忙碌而未能回答 ARP请求等状况。