地址解析协议(Address Resolution Protocol,简称ARP)
目录
|
地址解析协议(ARP)为IP地址到对应的硬件地址之间提供动态映射。ARP用于将计算机的网络地址(IP地址32位)转化为物理地址(MAC地址48位)[RFC826].ARP协议是属于链路层的协议,在以太网中的数据帧从一个主机到达网内的另一台主机是根据48位的以太网地址(硬件地址)来确定接口的,而不是根据32位的IP地址。内核(如驱动)必须知道目的端的硬件地址才能发送数据。当然,点对点的连接是不需要ARP协议的。
1.ARP的高速缓存技术
ARP高效运行的关键是每台使用ARP的主机中都有一个ARP高速缓存。ARP在缓存中存放了最近被解释的IP地址到MAC地址之间的映射记录,以减少广播量。由于多数网络通信都要连续发送多个报文,所以高速缓存大大提高了ARP的效率。ARP缓存总是为本地子网保留硬件广播地址(0xffffffffffffh)作为一个永久项。此项使主机能够接受ARP广播,当查看缓存时,该项不会显示。另外,在ARP请求报文中还放人信源机的IP地址和MAC地址的映射,以防止信宿机接着为信源机的MAC地址再来一次ARP请求,形成死锁。信源机在广播自己的地址映射时,网络上所有主机都可以将它存人自己的缓存。在新机入网时,主动广播自己的地址映射,以减少其他主机对该新主机的ARP请求广播。ARP协议使用一个数据结构atp—table的表。表中每个条目描述一个IP和物理地址的对应。这些条目在IP地址需要转换的时候创建,随着时间推移变得陈旧的时候被删除。
ARP表包含一个指针(arp—tables向量表)的表,把arp—table的条目链接在一起。这些条目被缓存,以加速对它们的访问。每一个条目用它的IP地址的最后两个字节做表的索引进行查找,然后跟踪这个条目链,直到找到正确的条目。Linux也缓存从atp—table条目预先建立的硬件头,用hhcache数据结构的形式进行缓存。网络拓扑结构不断变化,IP地址可能被重新分配到不同的硬件地址。例如,一些拨号服务为它建立的每一个连接分配一个IP地址。为了让ARP表中包括最新的条目,每当需要分配一个新的条目而ARP表到达了它的最大尺寸的时候,就查找最旧的条目并删除它们,从而更新缓存表。每个动态ARP高速缓存项的生存时间从被创建时开始算起为10min。2min内未用则删除。缓存容量满时,删除最老的记录。
ARP高速缓存保存有动态项和静态项。动态项是自动添加和删除的,而静态ARP项是永久的,可用TCP/IP工具ARP手工加载。静态ARP高速缓存项用于防止向路由器和服务器IP地址发出ARP请求。通过添加静态ARP项可减少ARP请求访问主机的次数。当网络接口配置改变时,应手工更新静态ARP项。对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去。在ARP背后有一个基本概念,那就是网络接口有一个硬件地址(一个48bir的值,以标识不同的以太网或令牌环网络接口),在硬件层次上进行的数据帧交换必须使用正确的硬件地址。因此,仅仅知道主机的IP地址并不能让内核发送一帧数据给主机。内核(如以太网驱动程序)必须知道目的端的硬件地址才能发送数据。
ARP的功能是在32bitlP地址和采用不同网络技术的硬件地址之间提供动态映射。点对点链路不使用ARP。当设置这些链路时(一般在引导过程进行),必须告知内核链路每一端的IP地址,并不涉及像以太网地址这样的硬件地址。
2.ARP高速缓存超时设置
在ARP高速缓存中的表项一般都要设置超时值。从伯克利系统演变而来的系统一般对完整的表项设置超时值为20min,而对不完整的表项(例如在以太网上对一个不存在的主机发出ARP请求)设置超时值为3min。当这些表项再次使用时,这些实现一般都把超时值重新设为20min.
3.ARP命令
ARP高速缓存在ARP的运行过程中非常关键。高速缓存中的每一项内容都有一个定时器,根据它来删除不完整和过时的表项。ARP命令加上参数—a可显示ARP高速缓存中的所有内容。超级用户可以用参数-d来删除ARP高速缓存中的某一项内容(可以在运行一些例子之前使用该命令格式,以看清楚ARP的交换过程)。另外,可以通过参数—s来增加高速缓存中的内容。这个参数需要主机名和以太网地址:对应于主机名的IP地址和以太网地址被增加到高速缓存中。新增加的内容是永久性的(比如,它没有超时值),除非在命令行的末尾附上关键字temp。位于命令行末尾的关键字pub和,s参数一起,可以使系统起着主机ARP代理的作用。系统将回答与主机名对应的IP地址的ARP请求,并以指定的以太网地址作为回答。如果广播的地址是系统本身,那么系统就为指定的主机名起着委托ARP代理的作用。
为了查看受害机器的ARP表,我们所使用的命令非常类似于在Windows实时响应中所使用的命令:
victim#./arp—an
从受害系统上返回的ARP表如下:
?(192.168.1.1,at00:BD:81:43:07:03[ether]on ethO
结果显示了IP地址为192.168.1.1的网络接口具有MAC地址00:BD:81:43:07:03。其他信息将有助于在不能控制IP地址时,在网络上追踪IP地址为192.168.1.1的机器。可以检查每一台机器,直至发现MAC地址为06:BD:8l:43:07:03的机器。
警告:在许多操作系统中,具有足够特权的用户可以修改他自己的MAC地址(和IP地址)。在Windows或Unix机器中,这一行为是可能的。
从逻辑Internet地址到对应的物理硬件地址需要进行翻译。
ARP 缓存表是可以查看的,也可以添加和修改。在命令提示符下,输入“arp -a”就可以查看ARP 缓存表中的内容了。用“arp -d”命令可以删除ARP 表中某一行的内容;用“arp -s”可以手动在ARP 表中指定IP 地址与MAC 地址的对应。