ARP协议
我们知道,当我们在浏览器里面输入网址时,DNS服务器会自动把它解析为IP地址,浏览器实际上查找的是IP地址而不是网址。那么IP地址是如何转换为第二层物理地址(即MAC地址)的呢?在局域网中,这是通过ARP协议来完成的。ARP协议对网络安全具有重要的意义。通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞。所以网管们应深入理解ARP协议。
一、什么是ARP协议 ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。 二、ARP协议的工作原理 在每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的,如附表所示。 附表 我们以主机A(192.168.1.5)向主机B(192.168.1.1)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播,目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.1.1的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“192.168.1.1的MAC地址是00-aa-00-62-c6 三、如何查看ARP缓存表 ARP缓存表是可以查看的,也可以添加和修改。在命令提示符下,输入“arp -a”就可以查看ARP缓存表中的内容了,如附图所示。 用“arp -d”命令可以删除ARP表中某一行的内容;用“arp -s”可以手动在ARP表中指定IP地址与MAC地址的对应。 四. ARP工作原理
4.1 ARP工作过程 当一个基于TCP/IP的应用程序需要从一台主机发送数据给另一台主机时,它把信息分割并封装成包,附上目的主机的IP地址。然后,寻找IP地址到实际MAC地址的映射,这需要发送ARP广播消息。当ARP找到了目的主机MAC地址后,就可以形成待发送帧的完整以太网帧头。最后,协议栈将IP包封装到以太网帧中进行传送。 如图1所示,描述了ARP广播过程。 图1 ARP广播 在图1中,当主机A要和主机B通信(如主机A Ping主机B)时。主机A会先检查其ARP缓存内是否有主机B的MAC地址。如果没有,主机A会发送一个ARP请求广播包,此包内包含着其欲与之通信的主机的IP地址,也就是主机B的IP地址。当主机B收到此广播后,会将自己的MAC地址利用ARP响应包传给主机A,并更新自己的ARP缓存,也就是同时将主机A的IP地址/MAC地址对保存起来,以供后面使用。主机A在得到主机B的MAC地址后,就可以与主机B通信了。同时,主机A也将主机B的IP地址/MAC地址对保存在自己的ARP缓存内。 4.2 ARP报文格式 ARP报文被封装在以太网帧头部中传输,如图2所示,是ARP请求协议报文头部格式。 图2 ARP请求协议报文头部格式 图2中黄色的部分是以太网(这里是Ethernet II类型)的帧头部。其中,第一个字段是广播类型的MAC地址:0XFF-FF-FF-FF-FF-FF,其目标是网络上的所有主机。第二个字段是源MAC地址,即请求地址解析的主机MAC地址。第三个字段是协议类型,这里用0X0806代表封装的上层协议是ARP协议。 接下来是ARP协议报文部分。其中各个字段的含义如下: 硬件类型:表明ARP实现在何种类型的网络上。 协议类型:代表解析协议(上层协议)。这里,一般是0800,即IP。 硬件地址长度:MAC地址长度,此处为6个字节。 协议地址长度:IP地址长度,此处为4个字节。 操作类型:代表ARP数据包类型。0表示ARP请求数据包,1表示ARP应答数据包。 源MAC地址:发送端MAC地址。 源IP地址:代表发送端协议地址(IP地址)。 目标MAC地址:目的端MAC地址(待填充)。 目标IP地址:代表目的端协议地址(IP地址)。 ARP应答协议报文和ARP请求协议报文类似。不同的是,此时,以太网帧头部的目标MAC地址为发送ARP地址解析请求的主机的MAC地址,而源MAC地址为被解析的主机的MAC地址。同时,操作类型字段为1,表示ARP应答数据包,目标MAC地址字段被填充以目标MAC地址。 4.3 ARP缓冲区 为了节省ARP缓冲区内存,被解析过的ARP条目的寿命都是有限的。如果一段时间内该条目没有被参考过,则条目被自动删除。在工作站PC的Windows环境中,ARP条目的寿命是2分钟,在大部分Cisco交换机中,该值是5分钟。 在工作站PC的Windows环境中,可以使用命令arp -a查看当前的ARP缓存,如图3所示。而在路由器和交换机中可以命令show arp完成相同的功能,如图4所示。 图3 Windows环境下,命令arp -a的输出 图4 路由器中show arp命令的输出 注意:ARP不能通过IP路由器发送广播,所以不能用来确定远程网络设备的硬件地址。对于目标主机位于远程网络的情况,IP利用ARP确定默认网关(路由器)的硬件地址,并将数据包发到默认网关,由路由器按它自己的方式转发数据包。 五. 反向ARP 反向ARP(Reverse ARP,RARP)用于把物理地址(MAC地址)转换到对应的 IP 地址。例如,在无盘工作站启动的时候,因为无法从自身的操作系统获得自己的IP地址配置信息。这时,无盘工作站可发送广播请求获得自己的IP地址信息,而RARP服务器则响应IP请求消息-为无盘工作站分配1个未用的IP地址(通过发送RARP应答包)。 反向ARP(RARP)在很大程度上已被BOOTP、DHCP所替代,后面这两种协议对RARP的改进是可以提供除了IP地址外的其它更多的信息,如默认网关、DNS服务器的IP地址等信息。 六. 代理ARP 代理ARP(PROXY ARP)也被称作混杂ARP(Promiscuous ARP)(RFC 925、1027)一般被像路由器这样的设备使用-- |

