网络层(ARP协议)

2021年9月3日 2点热度 0条评论 来源: 金所炫我女朋友

       网络在发送分组时不需要建立连接。每一个分组(也就是IP数据报)独立发送,与其先后的分组无关(不进行编号)。网络层不提供服务质量的承诺,网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。(分组和数据报在下面是同义词,可以混用)。也就是说,所传送的分组可能出错、丢失、重复和失序(即不按序到达终点),当然也不保证分组交付的时限。

与IP协议配套使用的还有三个协议:

地址解析协议ARP(Address Resolution Protocol)

— 网际控制报文协议ICMP(Internet Control Message Protocol)

— 网际组管理协议IGMP(Internet Group Management Protocol)

      本来还有一个协议叫逆地址解析协议RARP(Reverse Address Resolution Protocol),是和ARP协议配合使用的,但现在已被淘汰不再使用了。下图画出了这三个协议和网际协议IP的关系:

     下图(a)表示有许多计算机网络通过一些路由器进行互联。由于参加互联的计算机网络都是用相同的网际协议IP(Internet Protocol),因此可以把互联以后的计算机网络看成如图(b)所示的一个虚拟互连网络。

IP地址与硬件地址

       下图说明了这两种地址的区别。从层次的角度看,物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址(称IP地址为逻辑地址是因为IP地址使用软件来实现的)。

      在发送数据时,数据从高层下到低层,然后才到通信链路上传输,使用IP地址的IP数据报一旦交给了数据链路层,就被封装成MAC帧了。MAC帧在传送时使用的源地址和目的地址都是硬件地址,这两个硬件地址都写在MAC帧的首部中。

      连接在通信链路上的设备(主机或路由器)在收到MAC帧时,根据MAC帧首部中的硬件地址决定收下货丢弃。只有在剥去MAC帧的首部和尾部后把MAC层的数据上交给网络层后,网络层才能在IP数据报的首部中找到源IP地址和目的IP地址。

      总之,IP地址放在IP数据报的首部,而硬件地址则放在MAC帧的首部。在网络层和网络层以上使用的是IP地址,而数据链路层及以下使用的是硬件地址。在上图中,当IP数据报放入数据链路层的MAC帧中后,整个的IP数据报就成为MAC帧的数据,因此在数据链路层看不见数据报的IP地址。

       下图为三个局域网用两个路由器R1和R2互连起来。现在主机H1要和主机H2通信。这两台主机的IP地址分别是IP1和IP2,而他们的硬件地址分别为HA1和HA2。通信的路径是:H1-> 经过R1转发->再经过R2转发->H2。路由器R1因同时连到两个局域网上,因此它有两个硬件地址,即HA3和HA4。同理,路由器R2也有两个硬件地址HA3和HA4。

看下表。

这里注意几点:

1) 在IP层抽象的互联网上只能看到IP数据报。虽然IP数据报要经过路由器R1和R2的两次转发,但在它的首部中的源地址和目的地址始终分别是IP1和IP2。图中的数据报上写的“从IP1到IP2”就表示前者是源地址而后者是目的地址。数据报中间经过的两个路由器的IP地址并不出现在IP数据报的首部中。

2) 虽然在IP数据报首部有源站IP地址,但路由器只根据目的站的IP地址的网络号进行路由选择。

3) 在局域网的链路层,只能看见MAC帧。IP数据报被封装在MAC帧中。MAC帧在不同的网络上传送时,其MAC帧首部中的源地址和目的地址要发生变化,如上表开始在H1到R1间传送时,MAC帧首部中写的是从硬件地址HA1发送到硬件地址HA3,路由器R1收到此MAC帧后,在数据链路层,要丢弃原来的MAC帧的首部和尾部。在转发时,在数据链路层,要重新加上MAC帧的首部和尾部。这时首部中的源地址和目的地址分别变成为HA4和HA5/路由器R2收到此帧后,再次更换MAC帧的首部和尾部,首部中的源地址和目的地址分别变成为HA6和HA2。MAC帧的首部的这种变化,在上面的IP层是看不见的

我们现在还有两个问题没有解决:

1)主机或路由器怎样知道应当在MAC帧的首部填入什么样的硬件地址?

2)路由器中的路由表是怎么得出的?

我们先看第一个问题。

       在实际应用中,我们经常遇到这样的问题L已经知道一个机器(主机或路由器)的IP地址,需要找到其相应的硬件地址。地址解析协议ARP就是用来解决这样的问题的。

下面介绍ARP协议的要点

      我们知道,网络层使用的是IP地址,但在实际网络的链路上传送数据帧时,最终还是必须使用该网络的硬件地址。但IP地址和下面的网络硬件地址之间由于格式不同而不存在简单的映射关系(如IP地址有32位,而局域网的硬件地址是48位)。此外,在一个网络上可能会有新的主机加进来,或者撤走一些主机。更换网络适配器也会是主机的硬件地址改变。地址解析协议ARP解决这个这个问题的方法是在主机ARP告诉缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)。

      每一台主机都设有一个ARP高速缓存(ARP cache)。里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表,这些都是该主机目前知道的一些地址。那么主机怎样知道这些地址呢?

       当主机A要向本局域网上的某台主机N发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址,如果有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。

      也有可能查不到主机B的IP地址的项目。这可能是主机B才入网,也可能主机A刚刚加电,其高速缓存还是空的,在这种情况下,主机A就自动运行ARP,然后按下面的步骤找出主机B的硬件地址。

1) ARP进程在本局域网上广播发送一个ARP请求分组。图(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响应分组,同时在这个ARP响应分组中写入自己的硬件地址。由于其余的所有主机IP地址都与ARP请求分组中查询的IP地址不一致,因此不理睬这个ARP请求分组,见图(b)。ARP响应分组的主要内容是:“我的IP地址是209.0.0.6,我的硬件地址是08-00-2B-00-EE-0A。”请注意:虽然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发送数据报时就很方便了。

      ARP对保存在高速缓存中的每一个映射地址项目都设置生存时间(如,10~20分钟)。凡超过生存时间的项目就从高速缓存中删除掉。设置这种地址映射项目的生存时间是很重要的。设想一种情况。主机A和B通信。A的ARP高速缓存里保存有B的硬件地址。但B的网络适配器突然坏了,B立即更换了一块,因此B的硬件地址就改变了,假定A还要和B继续通信。A在其ARP高速缓存中查找到B原先的硬件地址,并使用该硬件地址向B继续发送数据帧。但B原先的硬件地址已经失效了,因此A无法找到主机B,但是过了一段不长的生存时间,A的ARP高速缓存中已经删除了B原先的硬件地址,于是A重新广播发送ARP请求分组,又找到了B。

       请注意,ARP请求时解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题,如果所要找的主机和源主机不在同一个局域网上,看上图有H1的那个图,主机H1就无法解析出另一个局域网上主机H2的硬件地址。主机H1发送给H2数据报首先需要通过与主机H1连接在同一个局域网上的路由器R1来转发。因此主机H1这时需要把路由器R1的IP地址IP3解析为硬件地址HA3,以便能够把IP数据报传送到路由器R1,以后,R1从转发表找到下一跳路由器R2,同时使用ARP解析出R2的硬件地址HA5。于是IP数据报按照硬件地址HAA5转发到路由器R2。路由器R2转发这个IP数据报时用类似方法解析出目的主机H2的硬件地址HA2,使IP数据报最终交付给主机H2。

下面为归纳的使用ARP的四种典型情况:

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

3) 发送方是路由器(如H1),要把 IP 数据报转发到与R1连接在同一个网络(网2)上的一个主机(如H3)。这时R1发送ARP请求分组(在网2上广播), 找到目的主机H3的硬件地址。 

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

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

    原文作者:金所炫我女朋友
    原文地址: https://blog.csdn.net/qq_32998153/article/details/79669997
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。