ARP协议是“Address Resolution Protocol”的缩写,称为地址解析协议。他的作用是规定了在ipv4地址和底层网络硬件地址之间的转换,提供从网络层地址到相关硬件地址的动态映射。因为在以太网环境中,数据传输是mac地址而不是IP地址,所以需要需要在两者之间做一个转换。(传输过程中mac和ip为什么需要分别存在在上一篇博客有提到喔)
原理
在任何时候,一台主机有IP数据报文发送给另一台主机,它都要知道接收方的逻辑(IP)地址。但是IP地址必须封装成帧才能通过物理网络。这就意味着发送方必须有接收方的物理(MAC)地址,因此需要完成逻辑地址到物理地址的映射。而ARP协议可以接收来自IP协议的逻辑地址,将其映射为相应的物理地址,然后把物理地址递交给数据链路层。具体过程分为ARP请求和响应
ARP请求
实际网络中,这个LAN可能有几十上百的主机,我们只知道了IP地址的话怎样才能顺利的将数据包从Pc1发送到Pc2呢?
这时,Pc1在发送数据包之前,ARP协议就会采用以太网的“广播”功能进行一次ARP请求:将会以广播的形式发送一个ARP请求包,用来请求目标IP的对应mac地址,交换机或WiFi设备(无线路由器)收到广播包时,会将此数据发给同一局域网的其他所有主机,此时每一台主机都会接受并处理这个ARP请求报文,然后进行验证,是目标IP的主机会进行响应,而拿到ARP请求包的其他主机发现目标IP不是自己的IP则将其丢掉。
【也正是这种广播的请求方式为网络带来了很多隐患】
ARP响应
验证成功的主机会返回一个ARP响应报文,这个响应报文包含接收方的IP地址和物理地址。当然,ARP回应包不在是通过广播的形式去发送的,大部分网络协议在设计的时候,都需要保持极度克制,不需要的交互就砍掉,能合并的信息就合并,能不用广播就用单播,以此让带宽变得更多让网络变得更快。同时呢,两台主机分别写入对方的IP和MAC到自己的ARP映射表中,这样下次请求就不需要再次进行ARP交互了。
【点对点链路不使用ARP协议。】
ARP高速缓存
明白了ARP的工作原理之后,我们会发现上面提到了拿到IP对应的mac地址后会进行缓存,为了解决请求速度问题,每台安装TCP/IP协议的电脑里,都有一个ARP高速缓冲表,表里的IP地址与MAC地址是一一对应的。
那么如何查看该表呢,我们可以在命令行键入arp -a获取本机ARP高速缓存的所有内容:
ARP代理
以上说的都是在一个本地网络内完成的,那如果ARP请求是从一个网络主机发送到另一个网络主机呢?就引出了ARP代理的概念
如上图所示,主机A需要与主机B通信时,目的IP地址与本机的IP地址位于不同网络,但是由于主机A未配置网关,所以它会将以广播形式发送ARP request报文,请求主机B的MAC地址。但是,广播报文无法被路由器转发,所以主机B无法收到主机A的ARP请求报文,当然也就无法应答。
而在路由器上启用代理ARP功能,就可以解决这个问题。启用代理ARP后,路由器收到这样的请求,会查找路由表,如果存在主机B的路由表项,路由器将会使用自己的G0/0/0接口的MAC地址来回应该ARP request。主机A收到ARP reply后,将以路由器的G0/0/0接口MAC地址作为目的MAC地址进行数据转发。
逆向ARP
我们知道我们计算机中的IP地址是自动获得的,在最开始我们也提到说ARP是将mac和IP做的一种映射,前面提到的都是已知IP地址去请求mac地址的方式,那我们计算机在获得IP地址的时候,其实就是逆向ARP请求,也叫RARP.
ARP欺骗
由前面提过的工作原理就可以明白,ARP协议的安全性是相当低的,毕竟需要将一个请求广播出来,那显而易见,当一个数据可以被所有人截获的时候,他的危险性就提升了n倍,其中被使用最多的就是ARP欺骗。所以我们经常听到的这些术语,包括"网络扫描"、"内网渗透"、"中间人拦截"、"局域网流控"、"流量欺骗",基本都跟ARP脱不了干系。大量的安全工具,例如大名鼎鼎的Cain、功能完备的Ettercap、操作傻瓜式的P2P终结者,底层都要基于ARP欺骗实现。
ARP欺骗原理
ARP欺骗主要是攻击者发送大量假的ARP数据包到网络上,尤其是网关上。假设你的网关的IP地址是192.168.0.2,MAC地址为00-11-22-33-44-55,你发送的数据都会从这个MAC地址经过,这时候我发送大量ARP数据包,然而我的包是构造出来的,IP是你的IP,但是MAC地址我替换成了我的MAC地址,这时候你更新你的ARP缓存时,就会把我机器的MAC地址当成192.168.0.2的MAC地址,于是你的流量都到我这来了,我可以把你的数据改改再发给网关,或者什么都不做,你都上不了网了。
那么ARP欺骗核心其实就是:监听广播段的ARPrequest,然后处理信息并为请求主机返回一个虚假的mac地址,此时后返回的mac地址会覆盖缓存表中的mac信息,这样之后该主机向目标IP发送的数据都会先经过你返回的虚假mac地址,由你处理后再进行二次发送(或直接截获)
那么了解这么多我们一定要知道的几条终端命令:
用“arp -d”可以删除arp缓存表里的所有内容
用“arp -s“可以手动在arp表中制定ip地址与mac地址的对应关系
用arp -a获取本机ARP高速缓存的所有内容