Not Only Algorithm,不仅仅是算法,关注数学、算法、数据结构、程序员笔试面试以及一切涉及计算机编程之美的内容 。。
你的位置:NoAlGo博客 » 网络 » ,

ARP和RARP协议

ARP和RARP是TCP/IP实现中的一个基础协议,它们对于应用程序或系统管理员来说一般是透明的,但是这些概念和工作原理是计算机网络的重要基础,需要仔细理解。
本文将对ARP、RARP以及相关的概念做一个简单的介绍。

一 简介

ARP(Address Resolution Protocol,地址解析协议)和RARP(Reverse Address Resolution Protocol,逆向地址解析协议)是为IP地址和硬件地址之间提供动态映射的协议。网络层使用的是32位的IP地址,但是IP数据包要通过数据链路层发送,而数据链路层并不识别IP地址,其用来标识节点的是MAC(Medium/Media Access Control)地址,也叫硬件地址。MAC地址一般是六个字节(48位)的十六进制数字,是网络底层的物理传输过程中用来识别主机全球唯一标识符。所以知道一个主机的IP地址并不能发送一帧数据给该主机,只有知道目的端的硬件地址才能发送数据。ARP的功能就是将IP地址解析成对应的MAC地址,适用于有盘网络,而RARP则是将MAC地址解析成对应的IP地址,适用于无盘网络。

二 ARP原理

下面通过一个例子说明ARP的原理,假设源主机要向目标主机发送数据,其工作过程如下:

  1. 应用程序先把目标主机名转换成32bit的IP地址,这个转换过程或者使用DNS,或者在较小网络中使用一个静态的主机文件(hosts文件)。
  2. 得到的IP地址之后,应用程序建立TCP连接。
  3. TCP发送一个连接请求到远端的主机,即用上述IP地址发送一份IP数据报。
  4. 如果目的主机在本地网络上(如以太网、令牌环网或点对点链接的另一端),那么IP数据报可以直接送到目的主机上。如果目的主机在一个远程网络上,那么就通过IP选路函数来确定位于本地网络上的下一站路由器地址,并让它转发IP数据报。在这两种情况下,IP数据报都是被送到位于本地网络上的一台主机或路由器。
  5. 假设是一个以太网,那么发送端主机必须把32bit的IP地址变换成48bit的以太网地址。此时ARP发送一份称作ARP请求的以太网数据帧给以太网上的每个主机。这个过程称作广播,ARP请求数据帧中包含目的主机的IP地址,其意思是“如果你是这个IP地址的拥有者,请回答你的硬件地址。”目的主机的ARP层收到这份广播报文后,识别出这是发送端在寻问它的IP地址,于是发送一个ARP应答。这个ARP应答包含IP地址及对应的硬件地址。
  6. 收到ARP应答后,源主机可以利用得到的MAC地址发送IP数据报到目的主机。

每个主机上都有一个ARP高速缓存表。这个高速缓存表本质是一个IP地址到MAC地址的对应表,表中每一个条目分别记录了最近使用的网络上其他主机的IP地址及其对应的MAC地址。 每一个以太网或令牌环网络适配器都有自己单独的表。当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询。

ARP缓存可以包含动态和静态项目。动态项目随时间推移自动添加和删除。每个动态ARP缓存项的潜在生命周期是10分钟。新加到缓存中的项目带有时间戳,如果某个项目添加后2分钟内没有再使用,则此项目过期并从ARP缓存中删除;如果某个项目已在使用,则又收到2分钟的生命周期;如果某个项目始终在使用,则会另外收到2分钟的生命周期,一直到10分钟的最长生命周期。静态项目一直保留在缓存中,直到重新启动计算机为止。

我们可以在命令提示符下使用arp命令来查看、添加或修改ARP高速缓存表:

  • “arp -a”,查看ARP缓存表中的所有的内容
  • “arp -d”,删除ARP表中的某一项内容或所有内容
  • “arp -d <ip地址>”,删除指定所在行的内容
  • “arp -s”,手动在ARP表中指定IP地址与MAC地址的对应,类型为static(静态),此项存在硬盘中,而不是缓存表,计算机重新启动后仍然存在,且遵循静态优于动态的原则。如果这个设置不对,可能导致无法上网。

具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址。但是无盘机,如X终端或无盘工作站,则需要采用其他方法来获得IP地址。网络上的每个系统都具有唯一的硬件地址,它是由网络接口生产厂家配置的。无盘系统的RARP实现过程是从接口卡上读取唯一的硬件地址,然后发送一份RARP请求(一帧在网络上广播的数据),请求某个主机在RARP应答中响应该无盘系统的IP地址。

RARP分组的格式与ARP分组基本一致,它们之间主要的差别是RARP请求或应答的帧类型代码为0×8035,而且RARP请求的操作代码为3,应答操作代码为4。对应于ARP,RARP请求以广播方式传送,而RARP应答一般是单播(unicast)传送的。

ARP服务器很简单,通常是TCP/IP在内核中实现的一部分。由于内核知道IP地址和硬件地址,因此当它收到一个询问IP地址的ARP请求时,只需用相应的硬件地址来提供应答就可以了。而RARP服务器一般要为多个主机(网络上所有的无盘系统)提供硬件地址到IP地址的映射。该映射包含在一个磁盘文件中。由于内核一般不读取和分析磁盘文件,因此RARP服务器的功能就由用户进程来提供,而不是作为内核的TCP/IP实现的一部分。而且,RARP请求是作为一个特殊类型的以太网数据帧来传送的(帧类型字段值为0×8035),要求RARP服务器必须能够发送和接收这种类型的以太网数据帧,由于发送和接收这些数据帧与系统有关,因此RARP服务器的实现是与系统捆绑在一起的。另外,RARP请求是在硬件层上进行广播的,意味着它们不经过路由器进行转发。为了让无盘系统在RARP服务器关机的状态下也能引导,通常在一个网络上(例如一根电缆)要提供多个RARP服务器。当服务器的数目增加时(以提供冗余备份),网络流量也随之增加,因为每个服务器对每个RARP请求都要发送RARP应答。发送RARP请求的无盘系统一般采用最先收到的RARP应答。

三 ARP的分组格式

在以太网上解析IP地址时, ARP请求和应答分组的格式如下表所示。

以太网
目的地址
以太网
源地址

类型
硬件
类型
协议
类型

硬件地
址长度

协议地
址长度

操作
类型

发送端
以太网地址
发送端
IP地址
目的以
太网地址
目的
IP地址
6字节 6字节 2字节 2字节 2字节 1字节 1字节 2字节 6字节 4字节 6字节 4字节

其中前三个字段(一共14字节)表示以太网的头部,后面28个字节表示ARP请求或应答。其字段的含义如下:

  • 前两个字段是以太网的源地址和目的地址。(目的地址为全1的特殊地址是广播地址,电缆上的所有以太网接口都要接收广播的数据帧。)
  • 两个字节长的以太网帧类型表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0×0806。
  • 硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。协议类型字段表示要映射的协议地址类型。它的值为0×0800即表示IP地址。
  • 硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。
  • 操作字段指出四种操作类型,它们是ARP请求(值为1)、ARP应答(值为2)、RAR P请求(值为3)和RARP应答(值为4)。这个字段必需的,因为ARP请求和ARP应答的帧类型字段值是相同的。
  • 接下来的四个字段是发送端的硬件地址(在本例中是以太网地址)、发送端的协议地址(IP地址)、目的端的硬件地址和目的端的协议地址。注意,这里有一些重复信息:在以太网的数据帧报头中和ARP请求数据帧中都有发送端的硬件地址。

对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去。

四 代理ARP和免费ARP

代理ARP(Proxy ARP))就是通过使用一个主机(通常为路由器),来作为指定的设备对另一设备的ARP请求作出应答。一般如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求。这样可以欺骗发起ARP请求的发送端,使它误以为路由器就是目的主机,而事实上目的主机是在路由器的“另一边”。路由器的功能相当于目的主机的代理,把分组从其他主机转发给它。

为什么要有ARP代理?路由器的一个重要功能是把局域网广播包限制在该网内,不让扩散,否则会造成网络风暴。ARP 请求是个广播包,它询问的对象若在同一个局域网内,就会回答。但如果查询对象不在同一个局域网,那怎么办呢?为了解决这个问题,路由器就提供了代理ARP的服务。

免费ARP(Gratuitous ARP)是指主机发送ARP查找自己的IP地址,通常发生在系统引导期间进行接口配置的时候。对于免费ARP请求中的各字段来说,发送端的ip地址和目的端的ip地址是一致的。免费ARP可以有两个方面的作用:

  • 一个主机可以通过它来确定另一个主机是否设置了相同的IP地址。通常源主机不希望有主机对此请求有一个回答。但是,如果收到一个回答,那么就会在终端日志上产生一个错误消息“以太网地址:a:b:c:d:e:f发送来重复的IP地址”。这样就可以警告系统管理员,某个系统有不正确的设置。
  • 如果发送免费ARP的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接口卡,然后重新启动),那么这个分组就可以使其他主机ARP缓存中旧的硬件地址进行相应的更新。一个比较著名的ARP协议事实是,如果主机收到某个IP地址的ARP请求,而且它已经在接收者的高速缓存中,那么就要用ARP请求中的发送端硬件地址(如以太网地址)对高速缓存中相应的内容进行更新。主机接收到任何ARP请求都要完成这个操作(ARP请求是在网上广播的,因此每次发送ARP请求时网络上的所有主机都要这样做)。

五 ARP欺骗/攻击

通过上面的介绍,我们知道源主机A要向目标主机B发送报文时,会查询本地的ARP缓存表,找到B的IP地址对应的MAC地址后再进行数据传输。如果未找到,则A广播一个ARP请求报文(携带主机A的IP地址和物理地址),请求主机B的物理地址。网上所有主机会受到ARP请求,但只有主机B识别到该请求的IP是自己的IP,于是向A主机发回一个ARP响应报文,其中包含有B的MAC地址。A接收到B的应答后,就会更新本地的ARP缓存。接着使用这个MAC地址发送数据。

ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。比如在局域网中,攻击者通过收到的ARP请求广播包,能够知道其他节点的IP和MAC地址,此时,攻击者能够伪装成目标主机,告诉源主机一个假的地址,使得源主机发送给目标主机的所有数据包都被攻击者截取,但双方浑然不知。ARP攻击主要是存在于局域网网络中,局域网中若有一台计算机感染ARP木马,则感染该ARP木马的系统将会试图通过“ARP欺骗”手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。

ARP欺骗是黑客常用的攻击手段之一,一般分为二种,一种是对路由器ARP表的欺骗;另一种是对内网PC的网关欺骗:

  • 第一种ARP欺骗的原理是截获网关数据。它通知路由器一系列错误的内网MAC地址,并按照一定的频率不断进行,使真实的地址信息无法通过更新保存在路由器中,结果路由器的所有数据只能发送给错误的MAC地址,造成正常PC无法收到信息。
  • 第二种ARP欺骗的原理是伪造网关。它的原理是建立假网关,让被它欺骗的PC向假网关发数据,而不是通过正常的路由器途径上网。在PC看来,就是上不了网了,“网络掉线了”。

对于ARP攻击防护问题中最常用的方法就是做IP和MAC静态绑定,在网内把主机和网关都做IP和MAC绑定。欺骗是通过ARP的动态实时的规则欺骗内网机器,所以我们把ARP全部设置为静态可以解决对内网PC的欺骗,同时在网关也要进行IP和MAC的静态绑定,这样双向绑定才比较保险。另外也可以使用ARP类的防护软件。

上一篇: 下一篇:
  1. 想问一下楼主,在以太网的ARP请求或者应答分组格式里面“以太网目的地址”和“目的以太网地址”中的内容是一样的么?

我的博客

NoAlGo头像编程这件小事牵扯到太多的知识,很容易知其然而不知其所以然,但真正了不起的程序员对自己程序的每一个字节都了如指掌,要立足基础理论,努力提升自我的专业修养。

站内搜索

最新评论