Loading

ARP地址解析协议介绍,ARP欺骗的原理

  在实际应用中,我们经常会遇到这样的问题:已经知道了一个主机或者路由器的IP地址,需要找出其相应的硬件地址。地址解析协议ARP就是用来解决这样的问题的。图4-10说明了ARP协议的作用。

  由于是IP协议使用了ARP协议,因此通常就把ARP协议划归网络层。但ARP协议的用途是为了从网络层使用的IP地址,解析出在数据链路层使用的硬件地址。因此,有的教科书就按照协议的所用,把ARP协议划归在数据链路层。这样做当然也是可以的。

ARP协议的原理

  我们知道,网络层使用的是IP地址,但在实际网络的链路上传送数据帧时,最终还是必须使用该网络的硬件地址,硬件地址也叫MAC地址(以太网设备(比如网卡)都有自己全球唯一的MAC地址)。但IP地址和下面的网络的硬件地址之间由于格式不同而不存在简单的映射关系(例如,IP地址有32位,而局域网的硬件地址是48位)。此外,在一个网络上可能经常会有新的主机加入进来,或撤走一些主机。更换网络适配器也会使主机的硬件地址改变。地址解析协议ARP解决这个问题的方法是在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)。每个主机或者路由器都有一个ARP高速缓存表。它用来存放最近Internet地址到硬件地址之间的映射记录。存储在ARP高速缓存中的数据在几分钟没被使用,会被自动删除。 

ARP高速缓存表的构造

  当主机A要向本局域网上的某台主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。
也有可能查不到主机B的IP地址的项目。这可能是主机B才入网,也可能是主机A刚刚加电,其高速缓存还是空的。在这种情况下,主机 A就自动运行ARP,然后按以下步骤找出主机B的硬件地址。

  (1) ARP进程在本局域网上广播发送一个ARP请求分组(具体格式可参阅[COME06]的第23章)。图4-11(a)是主机A广播发送ARP请求分组的示意图。ARP请求分组的主要内容是:“我的IP地址是209.0.0.5,硬件地址是00-00-C0-15-AD-18。我想知道IP地址为209.0.0.6的主机的硬件地址。”

  (2) 在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组。

  (3) 主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向主机A发送ARP响应分组(其格式见[COME06]),同时在这个ARP响应分组中写入自己的硬件地址。由于其余的所有主机的IP地址都与ARP请求分组中要查询的IP地址不一致,因此都不理睬这个ARP请求分组,见图4-11(b)。ARP响应分组的主要内容是:“我的IP地址是209.0.0.6,我的硬件地址是08-00-2B-00-EE-OA。”请注意:虽然ARP请求分组是广播发送的,但ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。

  (4) 主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。

  当主机A向B发送数据报时,很可能以后不久主机B还要向A发送数据报,因而主机B也可能要向A发送ARP 请求分组。为了减少网络上的通信量,主机A在发送其ARP请求分组时,就把自己的IP地址到硬件地址的映射写入ARP请求分组。当主机B收到A的ARP请求分组时,就把主机A的这一地址映射写入主机B自己的ARP高速缓存中。以后主机B向A发送数据报时就很方便了。同时,其他主机虽然不会理睬和回应,但是也会将主机A的这一地址映射写入自己的ARP高速缓存中。

 

  请注意,ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。如果所要找的主机和源主机不在同一个局域网上,就需要通过路由器来转发。

  从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。只要主机或路由器要和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP协议就会自动地把这个IP地址解析为链路层所需要的硬件地址。

  下面我们归纳出使用ARP的四种典型情况(图4-12)。

  (1) 发送方是主机(如H1),要把IP数据报发送到同一个网络上的另一台主机(如H2)。这时H1发送ARP请求分组(在网1上广播),找到目的主机H2的硬件地址。
  (2) 发送方是主机(如H1),要把IP数据报发送到另一个网络上的一台主机(如H3或H4)。这时H1发送 ARP请求分组(在网1上广播),找到网1上的一个路由器R1的硬件地址。剩下的工作由路由器R1来完成。R1要做的事情是下面的(3)或(4)。
  (3) 发送方是路由器(如R1),要把IP数据报转发到与R1连接在同一个网络(网2)上的主机(如H3)。这时R1发送ARP请求分组(在网2上广播),找到目的主机H3的硬件地址。
  (4) 发送方是路由器(如R1),要把IP数据报转发到网3上的一台主机(如H4)。H4与R1不是连接在同一个网络上。这时R1发送ARP请求分组(在网2上广播),找到连接在网2上的一个路由器R2的硬件地址。剩下的工作由这个路由器R2来完成。

  在许多情况下需要多次使用ARP。但这只是以上几种情况的反复使用而已。

为什么不只使用MAC地址进行通信?

  有的读者可能会产生这样的问题: 既然在网络链路上传送的帧最终是按照硬件地址找到目的主机的,那么为什么我们还要使用抽象的IP地址,而不直接使用硬件地址进行通信?这样似乎可以免除使用ARP。

  由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此由用户或用户主机来完成这项工作几乎是不可能的事。但IP编址把这个复杂问题解决了。连接到互联网的主机只需各自拥有一个唯一的IP地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为上述的调用ARP的复杂过程都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。

  以下为个人理解:ip地址可以根据网络变化,而MAC地址不会变。每个地区都配有一个网段的ip,所以你搬去另一个地区的时候,那个网段可能就变了。所以如果只有MAC地址,没有ip地址的话,那么硬件地址转换工作量就很大了,你每换一个地区,这个转换工作就要做一次,完成这么大量的转换工作几乎不可能。(可以把IP地址理解为你的现居地址,把MAC地址理解为你的身份证号,住址可以变,但身份证号不会变

      网关连接着两个局域网,在局域网内使用本地的MAC地址进行通信(查找ARP缓存),跨越局域网通信需要IP地址(查找路由表)。

      这里引申一个问题:A 知道自己的下一个中转站是 B,那从 A 发出来的包,应该把 B 的 IP 地址放在哪里呢?B 知道自己的下一个中转站是 C,从 B 发出来的包,应该把 C 的 IP 地址放在哪里呢?如果放在 IP 协议中的目标地址,那包到了中转站,怎么知道最终的目的地址是 D 呢?

   答:中转站的地址体现在mac地址中,最终的目的地址体现在ip地址中。 中转的时候不需要存下一站的IP地址,只需存 MAC 地址即可。即网络包的源 IP 地址和目的 IP 地址不变,源 MAC 地址和目的 MAC 地址在不断地更新。所谓的下一跳,看起来是 IP 地址,其实是要通过 ARP 得到 MAC 地址,将下一跳的 MAC 地址放在目标 MAC 地址里面。

ARP欺骗的过程

  ARP协议不管是否发送了ARP请求,都会根据收到的任何ARP应答数据包对本地的ARP高速缓存进行更新,将应答数据包中的IP地址和MAC地址存储在ARP高速缓存中。这正是实现ARP欺骗的关键。可以通过编程的方式构建ARP应答数据包,然后发送给被欺骗者,用假的IP地址与MAC地址的映射来更新被欺骗者的ARP高速缓存,实现对被欺骗者的ARP欺骗。 

  例如:现在有一台PC3,当PC1和PC2建立关系的时候,PC3处于监听状态,也就是会把广播包给丢弃,但PC3同样也可以把包抓起,并回复虚假包,告诉PC1,我是PC2,那么PC1就收到了两条PC2的回应包(一个真的,一个假的),PC1不知道谁是真谁是假,所以PC3就可以连续发包,覆盖掉真正的PC2的包,与PC1建立联系,进行ARP欺骗。

 

参考:

《计算机网络(第7版)》谢希仁 编著

百度百科 - ARP高速缓存

arp欺骗原理

arp命令使用详解

极客时间:趣谈网络协议,讲师:刘超,前网易研究院云计算技术部首席架构师 

 

posted @ 2020-05-18 08:38  拾月凄辰  阅读(641)  评论(0编辑  收藏  举报