四、ARP:地址解析协议
4.1 引言
数据链路如以太网或令牌网都有自己的寻址机制(通常48bit的MAC地址),使用数据链路的任何网络都必须遵守。也就是说当一台主机把以太网数据帧发送到同一局域网上的另一台主机时,是根据48bit的MAC地址来确定目的接口的。设备驱动程序从不检查IP数据报中的目的IP地址。
ARP地址解析协议:为32bit的IP地址和数据链路层使用的任何地址提供映射(不一定是48bit)。也就是说ARP为IP地址到对应硬件地址之间提供动态映射(这个过程自动完成的所以叫“动态”)。一般用户和系统管理员不必担心。
RARP逆地址解析协议:是被那些没有磁盘驱动器的系统使用(一般是无盘工作站或者X终端),需要系统管理员进行手动设置。
ARP与RARP都是链路层协议。
4.2 以一次FTP的执行来诠释ARP
-
FTP客户端调用gethostbyname函数把主机名转换成32bit的IP地址。此函数在DNS中加解析器。
-
FTP客户端请求TCP用到的IP地址简历连接。
-
TCP发送一个请求分段到远端主机,即用上述IP地址发送一份IP数据报。
-
如果目的IP地址在本地网络上(如以太网或者点对点的另一端),那就直接发送给该主机。否则由IP选路函数确定下一站路由地址,转发给路由器。
-
若第四步是以太网,那么发送端主机需要将32bitIP地址转换为48bit以太网MAC地址。此时由ARP协议在一个网络上通过广播实现该功能。
- ARP发送一个名为ARP请求的以太网数据帧给以太网的每个主机。这个过程称为广播。ARP带有目的IP地址。意思是“如果你是这个IP地址的拥有者,请回答你的地址”。
- 目的主机的ARP层接收到这个报文后,识别出是发送端在询问它的IP地址,于是发送一个ARP应答,应答包括了IP地址和硬件地址。
- 收到ARP应答后,使ARP请求-应答的IP数据报就可以传送了。
-
发送IP数据报到目的主机。
点对点链路不使用ARP,因为ARP是IP映射硬件地址。点对点只必须要IP地址不涉及硬件地址。
4.3 ARP高速缓存
ARP高速运行的原因是每个主机都有一个ARP缓存,高速缓存保存了最近获取的IP地址与MAC地址的映射记录。从开始被创建起有20分钟的生存时间。
arp -a 命令查看高速缓存的所有内容。
4.4 ARP分组格式
- 前两个字段是以太网的源地址和目的地址。目的地址全为1是广播地址。电缆上所有以太网接口都要接收广播的帧。
- 帧类型字段:两字节的帧类型字段表示了后面数据类型。对于ARP请求与应答该字段值为0x0806。
- 硬件类型字段:值为1则表示是以太网地址。
- 协议类型字段:表示要映射的协议地址类型。值为0x0800即表示IP地址。
- 硬件地址长度和协议地址长度:对于ARP的请求和应答值分别为6和4。
- 操作字段:有四种选项,它们是 ARP请求(值为1)、ARP应答(值为2)、RARP请求(值为3)和RARP应答(值为4)
- 剩下四个为 发送端以太网地址,发送端IP地址,目的端以太网地址,目的IP地址。
除了目的端硬件地址外所有字段都要有填充值。
当系统接收到一个IP地址为本机地址的ARP数据报后,它把自己的硬件地址填进去,然后把ARP数据报的两个目的端地址互相替换成两个发送端地址,并把操作字段设为2,再发回。
4.5 ARP代理
ARP代理:如果ARP请求是从一个网络发往另一个网络,那么连接两个网络的路由器就能回答该请求。可以欺骗发起ARP请求的发送端,使它误以为路由器就是目的主机,事实上目的主机在路由器的另一边。
ARP代理也称作混合ARP或者ARP出租。
ARP的其他作用:通过两个物理网络之间的路由器可以互相隐藏物理网络。这个情况下两个物理网络可以用相同的网络号。即把中间的路由器设置成一个ARP代理,以响应一台网路到另一台网路的ARP请求。这种技术在过去用来隐藏一组在不同物理电缆上运行旧版T C P / I P的主机。分开这些旧主机有两个共同的理由,其一是它们不能处理子网划分,其二是它们使用旧的广播地址(所有比特值为 0的主机号,而不是目前使用的所有比特值为1的主机号。)
4.6 免费ARP
ARP的另一个特性叫:免费ARP。它指主机发送ARP查找自己的IP地址。通常发生在系统引导期间进行接口配置的时候。
免费ARP有两个作用:
- 一个主机可以通过免费ARP确定另一台主机是否设置了相同的IP地址。
- 如果发送免费ARP的主机改变了硬件地址,那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行对应的更新。
4.7 ARP命令
arp -a
arp -d 删除高速缓存里某一项内容。
arp -s 增加高速缓存里的内容,此参数需要主机名和硬件地址。