1、功能
当主机通过数据链路发送数据的时候, IP 数据报 会先被封装为一个 数据帧 ,而 MAC 地址 会被添加到数据帧的 报头 (链路层介绍时已讲过)。 ARP 便是在这个过程中通过目标主机的 IP 地址,查询目标主机的 MAC 地址。
2、原理
电脑和路由器中都有一个 ARP 缓存表 ,其中保存的是近期(20 分钟)与自己有过通信的主机的 IP 地址与 MAC 地址的对应关系。
ARP 缓存表使用过程:
当主机要发送一个 IP 数据报的时候,会首先查询一下自己的 ARP 缓存表;
如果在 ARP 缓存表中找到对应的 MAC 地址,则将 IP 数据报封装为数据帧,把 MAC 地址放在帧首部,发送数据帧;
如果查询的 IP-MAC 值对不存在,那么主机就向网络中广播发送一个 ARP 请求数据帧,ARP 请求中包含待查询 IP 地址;
网络内所有收到 ARP 请求的主机查询自己的 IP 地址,如果发现自己符合条件,就回复一个 ARP 应答数据帧,其中包含自己的 MAC 地址;
收到 ARP 应答后,主机将其 IP - MAC 对应信息存入自己的 ARP 缓存,然后再据此封装 IP 数据报,再发送数据帧。
可以通过命令 arp -a 查看 ARP 缓存表(表项记录 20 分钟超时),这里还有其它 ARP 命令可以对缓存表做查看、修改:
命令功能格式arp -a或arp -g显示ARP高速缓存中的所有内容ARP -a[inet_addr] [-N if_addr]arp -d用户删除ARP高速缓存中的某一项内容ARP -d inet_addr [if_addr]arp -s向ARP高速缓存中人工输入一个静态项目。该项目在计算机引导过程中将保持有效状态,或者在出现错误时,人工配置的物理地址将自动更新该项目。(这个参数需要主机号和以太网地址,静态的ARP关系)ARP -s inet_addr eth_addr[if_addr]arp pub -s使系统起着主机ARP代理功能。系统将回答与主机名对应的IP地址的ARP请求3、ARP代理
如果 ARP 请求是从一个网络上的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该 ARP 请求,这个过程称作 代理 ARP(Proxy ARP)。
当连接这两个网络的路由器收到该 ARP 请求时,它会发现自己有通向目的主机的路径,随后它会将自己(路由器)的 MAC 地址回复给源主机。源主机会认为路由器的 MAC 地址就是目的主机的 MAC 地址,而对于随后发来的数据帧,路由器会转发到它后面真实 MAC 地址的目的主机。
两个物理网络之间的路由器可以使这两个网络彼此透明化,在这种情况下,只要路由器设置成一个 ARP 代理,以响应一个网络到另一个网络主机的 ARP 请求,两个物理网络就可以使用相同的网络号。
4、ARP欺骗
从 ARP 代理的原理可以看出来:IP - MAC 的对应信息很容易被伪造!黑客可以伪造 ARP 应答数据帧而欺骗 ARP 请求者,从而达到截获数据的目的。