地址解析协议ARP

通信时使用了两个地址:

  • IP地址(网络层地址)
  • MAC地址(数据链路层地址)
    地址解析协议ARP_第1张图片

已经知道了一个机器(主机或者路由器)的IP地址,如何找出其相应的硬件地址?

地址解析协议ARP就是用来解决这样的问题的:
为了找出这个地址,我们需要进行封装。封装是一个自上而下的过程,也就是我们会先封装IP地址,然后再靠这个ARP协议来将IP地址与目的地址之间产生一个对应关系(映射关系),使得在封装的时候可以依据这个IP地址去封装到一个可以转发我的MAC地址,从而将我的数据运输出去。
地址解析协议ARP_第2张图片这里的“解析”也就是所谓的“找出”。

地址解析协议ARP要点

不管网络层使用的是什么协议,在实际网络的链路上传输数据帧的时候,最终还是必须使用硬件地址

每个主机都设有一个ARP高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器IP地址到硬件地址的映射表。
地址解析协议ARP_第3张图片

那么这个映射关系又怎么去寻找呢?
这个ARP的工作原理大概如下:

  • 当主机A预向本局域网上的某个主机B发送IP数据包时,就先在其ARP高速缓存中查看有无主机B的IP地址。
  • 如果有:就可查出其对应的硬件地址,再将此硬件地址写入MAC帧,然后通过局域网将该MAC帧发往此硬件地址。
  • 如果没有:ARP进程在本局域网上 广 播 发 送 一 个 A R P 请 求 分 组 \color{blue}广播发送一个ARP请求分组 广ARP。收到 A R P 响 应 分 组 \color{blue}ARP响应分组 ARP后,将得到的 I P 地 址 到 硬 件 地 址 的 映 射 \color{blue}IP地址到硬件地址的映射 IP写入ARP高速缓存。

ARP的集中分类:

  • ARP请求分组:包含发送方硬件地址 | 发送方IP地址 | 目 标 方 硬 件 地 址 ( 未 知 时 填 0 ) \color{blue}目标方硬件地址(未知时填0) 0 | 目标方IP地址
  • 本地广播ARP请求(路由不转发ARP请求)
  • ARP相应分组:包含发送方硬件地址 | 发送方IP地址 | 目标方硬件地址 | 目标方IP地址。
  • ARP分组封装在物理网络的帧中传输。
    地址解析协议ARP_第4张图片

比如,当前我在学校A,想写一封信到学校B,我现在地址是209.0.05,我要给学校B写信的话,下一步应该由谁,由哪个邮局来接收这封信呢?
我在发起这个询问的时候,是没有明确的目的地的,不知道是哪个街道几号建筑的,所以需要广播来知道具体的下一步发送地址在哪里。而这个广播是在本地网络(即本地局域网)中进行的。

这时,有两种情况,有人回应我和没有人回应我。

  1. 假如有1个人回应我,那么这个人要么就是我要找的那个,要不就是这个人可以替我转交给目的方,相当于是邮局。那么就可以根据发送方提供的信息(发送方的IP地址209.0.0.5和MAC地址00-00-C0-15-AD-18)来进行一个1对1的回应,因为接收方(目的地或者邮局)的IP地址(209.0.0.6)和MAC地址(08-00-2B-00-EE-0A)也是齐全的。
  2. 如果没有人知道这个学校B在哪里,就没有人回答,也就是说这个ARP请求就石沉大海了。

ARP高速缓存的作用:

  • 存放最近获得的IP地址到MAC地址到绑定,以减少ARP广播的数量。
  • 为了减少网络上的通信量,主机A在发送其ARP请求分组时,就将自己的IP地址到硬件地址的映射写入ARP请求分组。
  • 当主机B收到A的ARP请求分组时候,就将主机A的这一地址映射写入主机B自己的ARP高速缓存中。这对主机B以后向A发送数据报时就更方便了。

应当注意的问题!

  • A R P 是 解 决 同 一 个 局 域 网 上 的 主 机 或 路 由 器 的 I P 地 址 和 硬 件 地 址 的 映 射 问 题 \color{blue}ARP是解决\color{red}同一个局域网上\color{blue}的主机或路由器的IP地址和硬件地址的映射问题 ARPIP
  • 如果所要找的主机和源主机不在同一个局域网上,那么 就 要 通 过 A R P 找 到 一 个 位 于 本 局 域 网 上 的 某 个 路 由 器 ( 相 当 于 邮 局 ) 的 硬 件 地 址 \color{red}就要通过ARP找到一个位于本局域网上的某个路由器(相当于邮局)的硬件地址 ARP,然后把ARP分组发送给这个路由器,让这个路由器把ARP分组转发给下一个网络。剩下的工作就由下一个网络来做。
  • 从IP地址到硬件地址的 解 析 是 自 动 进 行 \color{red}解析是自动进行 的,不需要人工干预,主机的用户对这种地址解析过程是不知道的。
  • 只要主机或路由器要和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP协议就会自动地将该IP地址解析为链路层所需要的硬件地址。

使用ARP的四种典型情况:

地址解析协议ARP_第5张图片

  1. H1 --> H2: H1进行广播,由于H2就在同一个局域网内,H2直接回应请求,双方连通。
  2. H1 --> H3: H1广播,然而H3并不和H1在同一局域网内,因此不能直接响应H1的ARP请求。但是路由器R1却知道H3在哪里,虽然H1不知道H3在哪里,但是R1知道啊!因此R1就立马给H1一个ARP回应,表示我R1能替你去交付信息给H3,你去不了网2,我可以去,你只需要将数据发送到我的左接口就可以了。(这里另外需要说明的是,R1的左接口是属于网1的,右接口属于网2)这个行为也就是ARP一个典型的代理工作,最终实现将数据从H1转发到H3。 但 是 在 这 个 过 程 中 , H 1 所 借 助 的 映 射 关 系 : I P 地 址 是 H 3 的 , M A C 地 址 是 路 由 器 R 1 的 左 端 口 \color{blue}但是在这个过程中,H1所借助的映射关系:IP地址是H3的,MAC地址是路由器R1的左端口 H1IPH3MACR1。显然这两个并不是实际上的对应关系,但是他可以在H1所在的网络中实现一次数据交付。然后到了路由器R1之后,路由器R1要将数据发出去的时候,也需要进行一次广播询问,而它通过 R 1 的 右 端 口 \color{red}R1的右端口 R1在网2中问:“H3你在哪儿呀?我这里有一封你的信。”当这个H3收到这个询问的时候,就给R1的右端口进行回复:“我在这儿呢!你把信发给我就行。”它们之间也形成了联系。
  3. H1 --> H4: 同样,参考发送给H3的过程。R1的左端口会收到这个请求,那么他的表中会记录到,我不能直接去网3,因为网3不是连接在我这个路由器上的,但是我知道网3怎么去,但是我只要把这个交给R2,最终就可以去网3了。因此,在知道H1要去H4之后,R1就给H1一个回应:我知道怎么去H4,你把信给我就行了,我会尽最大努力给你交付的。从左端口接收到信后,R1就通过右端口在网2上问:“H4在不在我这个网2上,如果在就把这封信收了,如果不在那么谁能替我转交给H4谁就把这封信收了。” 这时,R2发现这封信所找的H4所在网3就在它的右端口上,那么它就回复给R1的右端口说:“你只要从你的右端口将信发给我的左端口就行,我替你交”。那么R1就直接给R2,之后就不管了。R2接收到信后,发现信是从H1到H4的,而这个H4就在我的网络内,因此,它的右端口就进行最后一次广播:“H4在哪里,这里有你的一封信,你快给我一个回答。” 于是H4就发出回答。这一次回答所得到的MAC地址,才是真正的H4的IP地址对应的真实的MAC地址。最后R2就知道了, I P 地 址 是 : H 1 − − > H 4 ; M A C 地 址 是 : M A C ( R 2 右 端 口 的 ) − − > M A C ( H 4 的 ) \color{red}IP地址是:H1 --> H4;MAC地址是:MAC(R2右端口的) --> MAC(H4的) IPH1>H4MACMAC(R2)>MAC(H4)

显然,路由器这里做了一个ARP代理。

为什么不直接使用硬件地址进行通信?

  • 由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要让这些异构网络能够相互通信就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。
  • IP编制就把这个复杂问题解决了。连接到互联网的主机只需要个字拥有一个唯一的IP地址,他们之间的通信就像链接在一个网络上那样方便,因为上述的调用ARP的复杂过程都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。
  • 因此,在虚拟的IP网络上用IP地址进行通信给跨网络的广大的计算机用户带来了很大的便利。
    也就是下图中:
    地址解析协议ARP_第6张图片
    一直是从IP1到IP2,但是MAC地址确是一直在改变的,是物理层上的地址。
    **IP层抽象的互联网屏蔽了下层很复杂的细节。**在抽象的网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机和主机或主机和路由器之间的通信。

你可能感兴趣的:(计算机网络,网络)