地址解析协议 = Address Resolution Protocol = ARP ARP为IP地址到对应的硬件地址之间提供动态映射。这个过程是自动完成的,一般应用程序用户和系统管理员不必关心。
硬件地址 硬件地址 = 物理地址(Physical Address) = MAC地址(Media Access Control Address) = 局域网地址(LAN Address) = 以太网地址(Ethernet Address); 硬件地址长度为6个字节,即48bit。通常表示为12个16进制数,每两个数之间用冒号隔开。例如08 : 00 : 20 : 0A : 8C : 6D。
ARP高速缓存 每个主机上都有一个ARP高速缓存,存放了最近Internet地址到硬件地址之间的映射记录。 高速缓存中的每一项的生存时间大概为20分钟。可以用 arp -a 命令查看高速缓存中的所有内容。
用于以太网的ARP请求或应答分组格式 = 14字节以太网首部 + 28字节ARP请求/应答
以太网首部 = 6字节以太网目的地址 + 6字节以太网源地址 + 2字节帧类型 其中: 目的地址为全1的是广播地址; ARP请求/应答的帧类型是0x0806。
ARP请求/应答 = 2字节硬件类型 + 2字节协议类型 + 1字节硬件地址长度 + 1字节协议地址长度 + 2字节op + 6字节发送端以太网地址 + 4字节发送端IP地址 + 6字节目的以太网地址 + 4字节目的IP地址 其中: 硬件类型:以太网地址用值1表示; 协议类型:IP地址用值0x0800表示; 硬件地址长度 = 6个字节,协议地址长度 = 4个字节; 操作字段op:ARP请求 = 1,ARP应答 = 2,RARP请求 = 3,RARP应答 = 4; 发送端(或目的)以太网地址(硬件地址); 发送端(或目的)IP地址(协议地址)。
tcpdump命令 第一行是一个ARP请求,其中: 09:11:22.642008 对应输出的时间戳; 0:0:c0:6f:2d:40 对应源端主机的硬件地址; ff:ff:ff:ff:ff:ff 对应目的端主机的硬件地址(此处是一个以太网广播地址); arp字段说明此数据帧是一个ARP请求或应答。其后的数字60指的是以太网数据帧的长度; arp who-has svr4 表示作为ARP请求的这个数据帧中的目的IP地址是主机svr4的地址; tell bsdi 表示发送端的IP地址是主机bsdi的地址。
第二行是一个ARP应答,其中arp repl 之后打印出了响应者的主机名(svr4)和硬件地址。此时svr4通常已经将ARP请求端(bsdi)的硬件地址和IP地址存入其ARP高速缓存。 第三行是一个请求建立连接的TCP段,目的主机是svr4。 第四行是svr4发送第一段TCP报文。
逆地址解析协议 = Reverse Address Resolution Protocol = RARP RARP被那些没有磁盘驱动器的系统使用(一般是无盘工作站或者X终端),需要系统管理员进行手动设置。
无盘系统的RARP实现过程是从接口卡上读取唯一的硬件地址,然后发送一份RARP请求(以广播方式传送),请求某个主机通过RARP应答(以单播方式传送)响应该无盘系统的IP地址。
RARP的分组格式与ARP基本一致。主语差别在于RARP请求/应答的帧类型代码为0x8035,RARP请求的操作代码op = 3,应答的操作代码op = 4。
在主机bsdi上运行RARP程序和tcpdump命令得到的输出: 第一行目的端硬件地址为ff:ff:ff:ff:ff:ff 代表RARP请求以广播方式传送; 第二行的RARP应答以单播方式传送,其中at sun字段表示该RARP应答包含主机sun的IP地址; 第三行表示主机sun发送一个TFTP读请求给文件8CFC0D21.SUN4C。其中十六进制 8C:FC:0D:21 = 140.252.13.33 是主机sun的IP地址,SUN4C = 系统类型。