引言
当一台主机将以太网数据帧发送到同一个局域网上的另一台主机时,是根据48bit的以太网地址来确定目的接口的,设备驱动程序从不检查IP数据报中的IP地址。
ARP为IP地址和硬件地址之间提供动态映射,说是动态的,因为这个过程是自动完成的。
RARP是被那些没有磁盘驱动器的系统使用的,它需要系统管理员进行手动设置。
例子
用一个例子解释ARP的运行过程
敲入命令ftp bsdi
1. ftp客户端调用函数gethostbyname将主机名转换为32bit的IP地址。这个函数在DNS中被称为解析器。
2. ftp客户端用得到的IP地址建立TCP链接。
3. TCP发送一个连接请求分段到远端的主机,即用上述的IP地址发送IP数据报。
4. 如果目的主机在本地网络上,那么IP数据报可以直接发送到目的主机上;如果目的主机在一个远程网络上,那么就通过IP选路函数来确定位于本地网络上的下一站路由器地址。
5. 假定是一个以太网,那么发送端必须把32bit的IP地址变换成48bit的以太网地址。从逻辑Internet地址到对应的物理硬件地址需要进程翻译,这就是ARP的功能。
6. ARP发送一份ARP请求的以太网数据帧给以太网上的每个主机,该过程称为广播。其中,ARP请求数据帧中包含目的主机的IP地址,即如果你是这个IP地址的拥有者,请回答你的硬件地址。
7. 目的主机的ARP层识别出这份广播是发送端在寻问它的硬件地址,于是发送一个ARP应答。
8. 到ARP应答后,使ARP进行请求-应答交换的IP数据报现在就可以发送了。
9. 发送IP数据报到目的地址。
每一个网络接口都有一个48bit的硬件地址,在硬件层次上进行数据帧交换必须有正确的接口地址。但是知道主机的IP地址并不能发送一帧数据给主机。因为内核必须知道目的端的硬件地址才能发送数据,这也就是ARP的存在意义。
SLIP和PPP(点对点)链路不使用ARP。当设置这些链路时,需要告诉内核链路每一端的IP地址而不需要涉及硬件地址。
ARP高速缓存
每个主机上都有一个ARP高速缓存,用于存放最近Internet地址到硬件地址的映射记录。高速缓存中每一项的生存时间一般为20分钟,起始时间从被创建时开始算起(生存时间在再次使用后,重新更新为20分钟)。
ARP分组格式
ARP请求和应答帧格式
对比第二章中以太网分装的帧格式发现,首部是一样的,后面的ARP请求/响应字段就是数据段。
若以太网目的地址全1则是广播地址。
在ARP请求/应答分组格式中有重复信息:在以太网首部和ARP请求/应答帧中都有发送端的硬件地址。
对一个ARP请求来说,除目的端的硬件地址外其他都要填上。当主机收到一份目的IP地址为本机的ARP请求后,它就把自己的硬件地址填进去,然后将填进去的目的端地址替换两个发送端地址,将发送端地址替换目的地址,最后发送。
对不存在主机的ARP请求
若网络号和子网号对应的网络确实存在,但是主机号不存在,就会有多次ARP请求,大约75s后TCP连接请求才放弃。
注意:直到ARP应答返回时,TCP报文段才可以被发送,因为这时才知道目的地的硬件地址。
ARP高速缓存超时设置
对完整的表项设置超时值为20min,对不完整的表项设置为3min。
ARP代理
如果ARP请求时从一个网络的主机发往另一个网络的和足迹,那么连接两个网络的路由器就可以回答这个ARP请求,该过程称为委托ARP或者ARP代理。这样可以欺骗发起ARP的发送端,认为路由器就是目的主机,而事实上目的主机在路由器的另一边。
ARP代理也称ARP混合和ARP出租,这些名字来源于ARP代理的其他用途:通过两个物理网络的路由器可以相互隐藏物理网络,这种情况下两个物理网络之间可以使用想用的网络号,只要把中间的路由器设置成ARP代理以响应一个网络到另一个网络的ARP请求。
免费ARP
免费ARP指主机发送ARP查找自己的IP地址。
免费ARP作用:
1. 通过它来确定另一个主机是不是设定了相同的IP。若有ARP响应则说明有另外一个主机设定了相同的IP地址。
2. 若发送免费ARP的主机正好改变了硬件地址(换网卡),那么免费ARP可以使其他主机高速缓存ARP中的旧的硬件地址进行更新。如果主机收到某个IP地址的ARP请求并且它已经在接收者的告诉缓存中,那么就要用ARP请求中的发送端的硬件地址对高速缓存中相应的内容进行更新。
一个例子:通过发送含有备份硬件地址和故障服务器的IP地址的免费ARP请求,使得备份服务器可以顺利的接替故障服务器进行工作。这使得所有目的地为故障服务器的报文都被送到了备份服务器那里,客户程序不必关心原来的额服务器是否出了故障。
RARP逆地址解析协议
引言
具有本地磁盘的系统引导时,一般从磁盘上的配置文件中读取IP地址。但无盘机如X终端和无盘工作站则需要采用其他方式获得IP地址。
无盘系统的RARP实现过程是从接口卡上读取唯一的硬件地址,然后发送一份RARP请求(一帧在网络上广播的数据),请求某个主机响应该无盘系统的IP地址(在RARP应答中)。
RARP请求以广播方式传送,RARP应答以单播方式传送。RARP的应答中包含发送端的IP地址,这样发送端就知道了自己的IP地址。当无盘系统从RARP应答中收到它的IP地址后,它将发送TFTP请求来读取引导映像。
RARP服务器设计
提供一个ARP服务器很简单,通常是TCP/IP在内核中实现的一部分。由于内核知道IP地址和硬件地址,因此当它收到一个询问IP地址的ARP请求时,只需用相应的硬件地址来提供应答就可以了。
RARP服务器要为多个主机(网络上所有的无盘系统)提供硬件地址到IP地址的映射。该映射包含在一个磁盘文件中。由于内核一般不读取和分析磁盘文件,因此RARP服务器的功能就由用户进程来提供而不是作为内核TCP/IP实现的一部分。
RARP请求是在硬件层进行广播的,它不经过路由器转发。通常在一个网络上要提供多个RARP服务器,为了让无盘系统在RARP服务器关机的状态也能引导。
每个RARP服务器对每个RARP请求都要发送RARP应答。