地址解析协议(Address Resolution Protocol ,ARP )是在局域网(local-area network,LAN)中,将一个不断变化的IP地址连接到固定不变物理机器地址也称为媒体访问控制地址(media access control (MAC) address)的协议或者过程。ARP协议可以认为是IP地址与MAC地址之间的相互映射,IP地址和MAC地址的长度不同,常用IPv4长度是32位,MAC地址长度是48位,为了方便系统能够识别另一个系统,IP地址和MAC地址的映射翻译是有必要的,可以想象现实情况,如果你给另一个人写信,只写姓名,该信是不能送达的,网络通信也是一样,IP地址可以认为是姓名,而MAC地址则是地址。
OSI( Open Systems Interconnection ,OSI))模型如图1使用分层来为IT团队提供一个特定网络系统的可视化视图。这有助于确定哪个层影响网络上安装的哪个应用程序、设备或软件,并进一步确定哪个IT或工程专业人员负责管理该层。在网络通信中,主机和主机之间通信符合OSI7层模型,从上到下进行数据封装,然后向外发出,在局域网的通信中,不仅需要IP的封装还需要源目的MAC的封装。MAC地址处于链路层如图2所示。在两个物理连接的设备之间建立和终止连接,以便能够进行数据传输,而IP地址处于网络层负责通过不同路由器转发数据包的层。而ARP协议就在数据链路层和网络层之间工作。
图1:OSI 7层模型
图2:MAC地址所处链路层
ARP协议如何工作?
当一台新计算机加入一个局域网(LAN)时,它将收到一个用于识别和通信的唯一IP地址。数据包到达一个网关,目的地是一个特定的主机。网关或网络上允许数据从一个网络流到另一个网络的硬件部件,要求ARP程序找到与IP地址匹配的MAC地址,也就是目的主机的物理地址。此时ARP缓存发挥作用,ARP缓存维护一个IP地址和MAC地址一一匹配的列表。能够通过IP地址在ARP缓存中找到对应的MAC地址。注意ARP缓存是动态的,但网络中的用户也可以配置包含IP地址和MAC地址的静态ARP表。ARP缓存保存在IPv4以太网中的所有操作系统上。每当一台设备请求一个MAC地址向另一台连接到局域网的设备发送数据时,设备就会验证它的ARP缓存,以确定IP地址到MAC地址的连接是否已经完成。如果它存在,则不需要新的请求。但是,如果转换还没有进行,就会发送网络地址请求,并执行ARP。
ARP缓存大小是受设计限制的,地址往往只在缓存中停留几分钟。定期清理以释放空间。这种设计还旨在保护隐私和安全,防止IP地址被网络攻击者窃取或欺骗。MAC地址是固定的,而IP地址是不断更新的。在清除过程中,未使用的地址被删除;与没有连接到网络或甚至没有通电的计算机进行通信的失败尝试相关的任何数据也是如此。
下面以示意图的形式分析ARP工作原理。
图3:PC1与PC2通信
在局域网内,PC1尝试与PC2进行通信如图3,此时PC1知道PC2的IP地址,简单地Ping通信,则在PC1命令窗口输入ping IP2,根据OSI数据封装顺序,PC1会自顶向下(从应用层到物理层)封装数据,然后发送出去。
图4:PC1与PC2通信失败
如图4所示,PC1与PC2通信失败,原因在于PC1仅知道PC2的IP地址还不够,还需要PC2的物理地址,映射到现实就是给人寄信,不仅需要这个人的姓名还需要其地址一样。仅知道PC2的IP地址而不知道PC2的MAC地址是无法进行通信的,原因是信息不完整。
ARP协议就是让PC1获取PC2的MAC地址。
图5: ARP请求和响应
如图5所示,PC1通过ARP请求和响应得到PC2的MAC地址,再进行数据封装及发送,如图6所示。至此PC1和PC2实现正常通信。ARP的实现是通过问答的形式完成,与HTTP请求和响应类似。PC1在获得IP2的MAC地址后,会在本地进行缓存形成ARP缓存表,以供后需。
图6:PC1封装数据并发送
ARP缓存表是具有时效性的缓存机制,在电脑重启或者通信设备重启后,会清空缓存表,等下次通信需要时,会重新进行ARP请求。如图7所示,使用arp -a可以查询本地ARP缓存表。
图7:本地查询ARP缓存表
ARP的广播请求和单播回应
上面简单图解ARP的功能,但事实并不是这样简单,当LAN里有很多计算机时如存在PC3、PC4等,PC1如何获得PC2的MAC地址呢?如图8所示,在LAN内通过有线路由或者无线WIFI新加入两个PC,PC1如何与PC2通信呢?
图8:LAN多机状态(有线和无线均适用)
此时,ARP协议采用以太网广播形式将请求包发送出去,交换机或WiFi设备(无线路由)收到广播包时,会将数据发送给同一局域网的其他所有主机。在这里广播是一种数据包发送方式,主要特点是二层封装时目的MAC是(ffff.ffff.ffff.ffff)或三层封装时目的IP是(255.255.255.255),目的地址如果是最大的即为广播,广播根据所在层次可分为二层广播和三层广播,根据发生范围可分为本地广播和定向广播。
图9:PC1发送广播请求包,PC2发送单播响应包
如图9所示,PC1发送的请求广播包同时被其他主机收到,然后PC3和PC4收到之后(发现不是问自己)则丢弃。而PC2收到之后,根据请求包里面的信息(有自己的IP地址),判断是给自己的,所以不会做丢弃动作,而是返回ARP回应包。因此,ARP是广播发送请求,单播返回应答。
ARP协议解析
利用wireshark可以对ARP数据包进行分析。如图10所示,ARP请求以广播形式实现,发送数据包包含自己的MAC地址及IP地址,请求对方的MAC地址。
图10:ARP请求数据包
图11:ARP响应数据包
如图11所示,响应数据包包含IP地址和MAC地址,且以单播形式发送响应。
ARP协议字段包含:
- Hardware type :硬件类型,标识链路层协议,占2字节
- Protocol type: 协议类型,标识网络层协议,占2字节
- Hardware size :硬件地址大小,标识MAC地址长度,占1字节
- Protocol size: 协议地址大小,标识IP地址长度,占1字节
- Opcode: 操作代码,标识ARP数据包类型,1表示请求,2表示回应,占2字节
- Sender MAC address :发送者MAC地址,占6字节
- Sender IP address :发送者IP,占4字节
- Target MAC address :目标MAC,此处全0表示请求,占6字节
- Target IP address: 目标IP,占4字节
ARP与DHCP、DNS的关系是什么,如何区分?
ARP是将一个动态IP地址连接到一个物理机器的MAC地址的过程。IP地址在设计上是不断变化的,原因很简单,这样做可以给用户提供安全和隐私。但是,IP地址的变化不应该是完全随机的。应该有从特定网络中可用的数字范围内分配IP地址的规则。这有助于防止不同机器分配相同IP地址问题出现,这些规则被称为动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)。IP地址作为计算机的身份是很重要的,因为它们需要执行互联网搜索。当用户搜索域名或统一资源定位器(URL)时,他们使用字母顺序的名称。另一方面,计算机使用数字IP地址将域名与服务器关联起来。为了连接两者,域名系统(Domain Name System,DNS)服务器被用来将一个IP地址从一个令人困惑的数字字符串也就是IP地址转换成一个更容易读懂的域名,反之亦然。
ARP的类型
ARP有不同的版本和用例类型。
- 代理ARP(Proxy ARP)
代理ARP是一种技术,通过这种技术,一个给定网络上的代理设备对一个不存在于该网络上的IP地址的ARP请求进行应答。代理知道流量目的地的位置,并提供自己的MAC地址作为目的地。
- 无偿ARP(Gratuitous ARP)
免费ARP像一个管理过程,作为一种让网络上的主机简单地宣布或更新其IP到MAC地址的方式。免费ARP是指ARP请求将IP地址转换为MAC地址的过程。
- 翻转ARP(Reverse ARP ,RARP)
不知道自己IP地址的主机可以使用反向地址解析协议(RARP)进行发现。
- 逆向ARP(Inverse ARP ,IARP)
ARP使用IP地址来查找MAC地址,而IARP使用MAC地址来查找IP地址。
ARP在网络中用途
ARP是必要的,因为连接到网络的主机或计算机的软件地址(IP地址)需要转换为硬件地址(MAC地址)。如果没有ARP,一个主机将无法找出另一个主机的硬件地址。局域网保存一个表或目录,将不同设备的IP地址映射到MAC地址,包括该网络上的端点和路由器。
这个表或目录不由用户维护,甚至不由IT管理员维护。相反,ARP协议会动态地创建条目。如果用户的设备不知道目标主机的硬件地址,设备就会向网络上的每一台主机发送请求此地址的消息。当正确的目标主机得知请求后,它将用它的硬件地址返回,然后存储在ARP目录或表中。
ARP相关的网络攻击
ARP欺骗(ARP Spoofing)也被称为ARP中毒路由(ARP poison routing)或ARP缓存中毒( ARP cache poisoning)。这是一种恶意攻击,网络罪犯向目标局域网发送虚假ARP消息,意图将其MAC地址与网络内合法设备或服务器的IP地址连接起来。该链接允许来自受害者计算机的数据被发送到攻击者的计算机,而不是最初的目的地。
ARP欺骗攻击是危险的,因为敏感信息可以在受害者不知情的情况下在计算机之间传递。ARP欺骗还会使其他形式的网络攻击成为可能,包括以下几种:
-
Man-in-the-Middle (MTM) Attacks
中间人(MITM)攻击是一种窃听,网络攻击者在网络通信双发之间拦截、中继和更改消息,而这双方并不知道有第三方参与其中,从而窃取信息。攻击者可能试图控制和操纵其中一方或双方的消息,以获取敏感信息。因为这些类型的攻击使用复杂的软件来模仿对话的风格和语气(包括那些基于文本和语音的对话),MITM攻击很难被拦截和阻止。MITM攻击发生在恶意软件被分发并控制受害者的网络浏览器时。浏览器本身对攻击者并不重要,但受害者分享的数据非常重要,因为它可以包括用户名、密码、帐户号码和其他在聊天和在线讨论中分享的敏感信息。一旦他们掌握了控制权,攻击者就会在受害者和合法站点之间创建一个代理,通常使用一个假冒的相似站点,来拦截受害者和合法站点之间的任何数据。攻击者利用网上银行和电子商务网站来获取个人信息和财务数据。
-
Denial-of-Service Attacks
拒绝服务(DoS)攻击是指网络攻击者试图用流量淹没系统、服务器和网络,以阻止用户访问它们。一个更大规模的DoS攻击被称为分布式拒绝服务(DDoS)攻击,在这种攻击中,使用大量的源流量来淹没系统的流量。这些类型的攻击利用网络协议中的已知漏洞。当大量的报文被发送到有漏洞网络时,很容易导致业务过载而不可用。
-
Session Hijacking
当网络攻击者窃取用户的会话ID,接管该用户的web会话,并伪装成该用户时,就会发生会话劫持。有了会话ID,攻击者就可以执行用户被授权在该网络上执行的任何任务或活动。当用户试图访问系统或登录受限制的网站或web服务时,就会发生身份验证。会话ID存储在浏览器的cookie中,进行会话劫持的攻击者会拦截认证过程并实时入侵。