TCP/IP协议族分为四层,其中在数据链路层传输的数据帧只能识别网卡物理地址,常用的以太网就是48位的MAC地址。TCP/IP协议族专门设计了用于地址解析的协议ARP(Address Resolution Protocol),它可以把一个IP地址映射成对应的物理地址。另外,对于无法保存IP地址的主机(如无盘工作站),TCP/IP协议族也提供了从物理地址到IP地址映射的反向地址解析协议RARP(Reverse Address Resolution Protocol):
ARP协议:
1)ARP报文格式:
在常用的以太网中,ARP报文被封装成下图所示的数据帧,然后以广播方式发送到物理网络:
其中,ARP报文格式为:
(1)—硬件类型:占2个字节,表示发送者的硬件地址的类型,它的值是1的话表示以太网地址;
(2)—协议类型:占2个字节,表示发送方要映射的协议地址类型,如下表所示。协议地址为IP地址时,它的值是0x0800:
(3)—硬件地址长度和协议地址长度:分别占1个字节,分别表示硬件地址和协议地址的字节长度。对于以太网上的IP地址的ARP请求或应答来说,它们的值分别是6和4;
(4)—操作代码:ARP和RARP在设计时的协议格式完全相同,只有操作代码字段可以对它们进行区分。该字段指出四种操作报文类型:
值为1:ARP请求报文;
值为2:ARP应答报文;
值为3:RARP请求报文;
值为4:RARP应答报文。
(5)—发送方硬件地址和发送方协议地址:该地址长度由硬件地址长度字段和协议地址长度字段指定;
(6)—目标方硬件地址和目标方协议地址:该地址长度由硬件地址长度字段和协议地址长度字段指定;
2)ARP工作原理:
ARP工作时,首先由知道目标主机 IP 地址但不知道目标主机物理地址的主机发出一份 ARP 请求报文, 该报文中填有发送方硬件地址、发送方IP地址和目标方IP地址,操作代码为1,目标方硬件地址填的是广播地址 ( 在以太网中为全 1) ,因此该网络内的所有主机都可以收到该报文,其含意是“如果你是这个IP地址的拥有者,请回答你的硬件地址”。
目的主机的 ARP 层收到这份广播报文后,识别出这是发送方在寻问它的IP 地址,于是发送一个ARP 应答报文。这个ARP应答报文包含它的IP地址及对应的硬件地址,操作代码为2,把原来的发送方硬件地址和协议地址填入目标方硬件地址和协议地址位置,即这时目标方变成了发送方,发送方变成了目标方。请求方收到ARP应答报文后,就可以使用目标方物理地址进行IP数据报的发送了。
3)ARP高速缓存:
由于ARP请求是以广播方式发送的,因此频繁使用ARP会造成网络拥挤,影响网络的正常工作。解决该问题的关键是使用ARP高速缓存技术。
在网络中,每台主机上都有一个ARP高速缓存,这个高速缓存存放了最近IP地址到硬件地址的映射记录,高速缓存区中表项建立的方法是:
(1)—请求主机收到ARP应答后,主机就把获得的IP地址与物理地址的映射关系写入ARP表中;
(2)—由于ARP请求报文是广播发送的,所有收到ARP请求报文的主机都可以把其中发送方的物理地址和IP地址映射写入自己的高速缓冲区中,以备将来使用;
(3)—网络中主机在启动时,可以主动广播自己的IP地址和物理地址的映射关系,以免其他主机对它提出ARP请求(这同时使得一台主机在启动时,可以知道自己的IP地址与网络中其他主机的IP地址是否冲突)。
使用高速缓存后,当ARP解析一个IP地址时,它会首先搜索ARP高速缓存查看是否有与该IP地址匹配的ARP表项,如果找到,ARP地址解析完成;如果找不到,才会向网络上发送ARP请求报文。
ARP高速缓存中的表项一般分为动态表项和静态表项两种:动态表项有一定的生存时间,它随时间的推移自动添加和删除;静态表项在主机工作期间一直保留在高速缓存中,除非用arp命令删除它。
RARP协议:
在对主机进行配置时,IP地址一般保存在本机的硬盘上,系统引导时从磁盘上的配置文件中读取本机IP地址。但对于互联网中无盘工作站或X终端等无法在本机保存IP地址的主机,需要使用RARP协议。
在互联网中,一条主机的标识是IP地址;在局域网中,主机的标识是硬件地址,它保存在网络接口卡中,可以唯一标识一个网络中的一台主机。无盘工作站启动时,利用从网络接口卡中读取的硬件地址做标识,发送一个RARP请求报文来获取本机IP地址。RARP请求报文在网络中也是广播发送的,询问“谁知道这个物理地址对应的IP地址”。
通常系统中设有专门的用来响应RARP请求的RARP服务器,在RARP服务器中保存有本网络中主机的物理地址和IP地址的映射表,RARP规定只有RARP服务器才能产生应答报文。网络中可以有多个RARP服务器,这时需要指定某个为主服务器,其他的为备份服务器。
RARP报文的格式与ARP报文格式基本一致,主要的差别是RARP请求或应答的帧类型代码为0x8035,并且RARP请求的操作代码是3,应答操作代码是4。