地址解析协议(ARP)与反向地址解析(RARP)
网络中的一个机器既有逻辑地址也有物理地址。逻辑地址是为了管理员方便而设置的,就像一个学生有一个学号,在初中、高中和大学也有各自有不同的学号。而物理地址就像一个人的姓名是与生俱来的,对一个机器来说,如果不换网卡那么它就永远是网卡那个地址。逻辑地址是网络层的协议数据单元使用的地址,物理地址是数据链路层的协议单元MAC帧使用的地址。
ARP协议
在通常情况下,当我们访问一个机器的时候一定可以知道它的逻辑地址,而物理地址就不一定知道。如果不知道物理地址那么就不能把网络层数据包封装成MAC帧,完成通信。ARP协议正是为了解决这个问题而设置的。
在每台主机上,ARP协议都设置有一个IP地址和硬件地址对应关系的高速缓存。当网络层的数据报要封装成MAC帧时,首先在高速缓存中查看有无该数据报首部的目的地址所对应的硬件地址,若有,则将该硬件地址写入MAC帧的目的地址中,完成数据报的封装。若无,ARP协议则在本局域网上广播发出一个ARP请求分组,在ARP请求分组中,发送方的IP地址和发送方硬件地址,以及目标IP都是应该写入已知的数据,要寻找目标硬件地址写入全0.当请求分组到达每一个机器上时,每一台机器都要拿主机的IP地址和请求分组中的目标IP地址进行比较,如果不同则不做任何动作;若相同则发送一个ARP相应分组给请求方。在相应分组中发送方写明自己的硬件地址。当这一通信过程完成时,通信双方都要对自己的ARP高速缓存进行修改,添加上一条记录。
硬件类型 协议类型 硬件地址长度 协议长度 操作 发送MAC地址(8位组0~3) 发送方MAC地址(8位组4~5) 发送方IP地址(8位组0~1) 发送方IP地址(8位组2~3) 目标MAC地址(8位组0~1) 目标MAC地址(8位组2~5) 目标IP地址(8位组0~3)
物理地址和逻辑地址的区别可以从两个角度看:从网络互连的角度看,逻辑地址在整个因特网络中有效,而物理地址只是在子网内部有效:从网络协议分层的角度看,逻辑地址由Internet层使用,而物理地址由子网访问子层(具体地说就是数据链路层)使用。
硬件类型 协议类型 硬件地址长度 协议地址长度 操作 发送节点硬件地址 发送节点协议地址 发送节点硬件地址 发送节点协议地址
硬件类型:发送方想知道的硬件接口类型,以太网的值为1。
协议类型:发送方提供的高层协议地址类型,IP地址位080616.
操作:
ARP请求
ARP相应
RARP请求
RARP响应
查本地内存的ARP地址映像表,通常ARP地址映像表的逻辑结构如下表所示。可以看出这是IP地址和以太网地址的对照表。
IP地址 |
以太网 |
130.130.87.1 | 08 00 39 00 29 D4 |
129.129.52.3 | 08 00 5A 21 17 22 |
192.192.39.5 | 08 00 10 99 A1 44 |
如果ARP表查不到,就广播一个ARP请求分组,这种分组可经过路由器进一步转发,到达所有连网的主机。它的含义是:“如果你的IP地址是这个分组的目标地址,请回答你的物理地址是什么。”收到该分组的主机一方面可以用分组中的两个源地址更新自己的ARP地址映像表,另一方面用自己的IP地址与目标IP地址字段比较,若相符则发回一个ARP响应分组, 向发送方报告自己的硬件地址;若不相符,则不予回答。
代理ARP
代理ARP有时也被叫做混杂ARP,详见RFC925和RFC1027,代理ARP被路由器作为向主机表明自身可用的一种手段。例如,主机192.168.12.5/24需要向主机192.168.20.101/24发送数据包但是它没有配置缺省网关信息,因而也就不知道如何到达路由器。这时它可以向192.168.20.101 发送一个ARP请求;本地路由器收到这一 请求,并且路由器知道如何到达网络192.168.20.0, 因此路由器将回复以上请求,其中把自己的数据链路标识符作为ARP回复数据包中的硬件地址。事实上,路由器欺骗了本地的主机,让它认为路由器的接口就是192.168.20.101的接口。最终所有发向192.168.20.101 的数据包都被送往路由器。
图1-15给出了代理ARP的另一种用途。这里特别关注的是地址掩码。路由器配置的掩码是28位掩码(4 个子网位的C类地址),而主机配置的是标准的C类地址掩码(24 位)。
其结果是主机并不知道子网的存在。当主机192.168.20.66 想发送数据包到192.168.20.25 时,它首先将发送ARP请求。这时路由器识别出数据包的目标地址属于另一个子网,因而向请求主机回复自己的硬件地址。这种代理ARP使得子网化网络拓扑结构对主机来说是透明的。
示例1-10所示的ARP高速缓冲暗示了代理ARP的又一用途。注意,有多个IPv4地址映射到单一的MAC标识符;其中IP地址对应着主机,而硬件MAC标识符属于路由器接口。
在IOS系统中,缺省情况下代理ARP功能是打开的,当然也可以在每个接口.上使用命令no ip proxy -arp关闭此功能。
无故ARP
主机偶尔也会使用自己的IPv4地址作为目标地址发送ARP请求。这种ARP请求称为无故ARP,主要有两个用途:
- 无故ARP可以用于检查重复地址。一台设备可以向自己的IPv4地址发送ARP请求,如果收到ARP响应则表明存在重复地址。
- 无故ARP还可以用于通告一个新的数据链路标识符。当一台设备收到一个ARP请求,如果ARP高速缓冲中已有发送者的IPv4地址,那么与此IPv4地址相对应的硬件地址将会被发送者新的硬件地址所更新。这种无故ARP用途正是基于此事实。
- 某个子网内运行热备份路由器协议(HSRP协议)的路由器如果从其他路由器变成了主路由器,它就会发出一个无故ARP来更新该子网上主机的ARP缓存。
许多IP实现中都没有实现无故ARP功能,但是读者应该知道它的存在。在IOS系统中缺省情况下是关闭的,但可以通过命令ip gratuitous-arps激活它。
反向ARP
代替映射硬件地址到已知IPv4地址,反向ARP (RARP)可以实现IPv4地址到已知硬件地址的映射。某些设备,如无盘工作站在启动时可能不知道自己启动时的IPv4地址。嵌入这些设备固件中的RARP程序可以允许它们发送ARP请求,其中硬件地址为设备的硬件编入地址。RARP服务器将会向这些设备回复相应的IPv4地址。
RARP在很大程度上正在被动态主机配置协议(DHCP)和自举协议(BOOTP)的扩展协议所替代,不同于RARP,这两种协议都可以提供IPv4地址以外的更多信息,而且还可以,跨越本地数据链路。
RARP协议
RARP (Reverse Address Resolution Protocol)是反向ARP协议,即由硬件地址查找逻辑地址。通常主机的IP地址保存在硬盘上,机器关电时也不会丢失,系统启动时自动读入内存中。但是,无盘工作站无法保存IP地址,它的IP地址由RARP服务器保存。当无盘工作站启动时,广播一个RARP请求分组,把自己的硬件地址同时写入发送方和接收方的硬件地址字段中。RARP服务器接收这个请求,并填写目标IP地址字段,把操作字段改为RARP响应分组,送回请求的主机。
RARP协议往往用于无盘工作站环境。因为主机没有外存,本地不能存放IP地址,所以需要一个RARP服务器来存放IP地址和硬件地址的对应关系。当一台主机想要上internet时,它需要用自己网卡上的硬件地址到RARP服务器上取回自己的IP地址。RARP协议的格式和ARP协议的格式一样。 RARP在原理上很简单但是实现比较复杂,由于RARP的请求是在硬件层上的广播这因此这不能通过路由转发,因此在每个网络都要实现一个RARP服务器。另外在同一网络中不同主机可能会同时进行RARP请求,增大了冲突的概率.