网络基础-网络层:地址解析协议ARP与路由转发流程

地址解析协议ARP

ARP协议不是一个单纯的数据链路层协议,而是一个介于数据链路层和网络层之间的协议。
ARP协议的用途是:为了从网络层使用的IP地址解析出在数据链路层使用的硬件地址。可以说,ARP协议建立了IP地址与MAC地址的映射关系。

ARP协议的作用


网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址。数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此,在通讯前,必须获得目的主机的硬件地址。

ARP协议的工作流程


下面举一个例子来解释:
网络基础-网络层:地址解析协议ARP与路由转发流程

  1. 主机A在该局域网内广播发送一个ARP请求报文,表达的内容是:我想要与IP地址为127.20.1.2的主机通信,但我不知道你的MAC地址是多少,麻烦你告诉我你的MAC地址。
  2. 在本局域网上的所有主机上允许的所有的ARP进程都收到此ARP请求。
  3. 只有与该请求报文中所要查询的IP地址一致的主机才会将该ARP请求收下,并向其返回一个ARP响应报文,告诉主机A 自己的MAC地址。其他主机也收到了该ARP报文,但它们经过解析,发现它找的不是自己,所以将该报文丢弃。
  4. 主机A 收到主机B的请求响应后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。
  5. 主机B收到主机A 的请求时,就在其ARP高速缓存中写入主机A 的IP地址到硬件地址的映射。

由此可见,高速缓存在ARP协议中非常有用。如果不使用ARP协议,那么任何一个主机只要进行一次通信,就必须在网络上用广播方式发送ARP请求报文,这就会使网络上的通信量大大增大。ARP把已经得到的地址映射保存在高速缓存中,这样就使得该主机下次再和具有相同目的地址的主机通信时,可以直接在高速缓存中获得,就不必要在发送广播ARP请求报文了。

ARP把保存在高速缓存中的每一个映射地址项目都设置生存时间。凡超过生存时间的项目就从高速缓存中删除掉。设置这种地址映射项目的生存时间是很重要的。设想有一种一种情况,主机A与主机B通信,A的ARP高速缓存中保存有B的地址映射。但是B如果更换了网络适配器,因此B的硬件地址就变了。假定A此时还使用之前的告诉缓存中的B的地址映射来与B通信,是找不到B的,该硬件地址已经失效了,因此A是无法找到主机B的。但是过了一段时间后(一般是20分种),A在高速缓存中删除了B原先的硬件地址,于是A重新发送ARP请求,就可以再次找到B了。

在linux下,可以查看该缓存表。
网络基础-网络层:地址解析协议ARP与路由转发流程

ARP数据报格式


网络基础-网络层:地址解析协议ARP与路由转发流程

路由转发

我们现在已经获得了知道IP地址如何获得MAC地址的方法。那么如何到达该目标主机呢?
实际上,这个发往目标主机的过程就是路由的过程。路由实际就是在复杂的网络结构中,找出一条通往终点的路。

路由的过程,就是这样一跳一跳问路的过程。
一跳,就是数据链路层中的 一个区间,具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。

下面一个简单的例子来说明路由器是如何转发分组的:
网络基础-网络层:地址解析协议ARP与路由转发流程

  1. 若目的主机在局域网2或者局域网3内,都可以通过接口0或接口1由路由器R2直接交付。
  2. 若目的主机在网络1中,则下一跳路由器应为R1,其IP地址为20.0.0.7。由于R2与R1连接在同一个局域网2上,因此从路由器R2把分组转发到路由器R1是很容易的。
  3. 若目的主机在网络4中,则路由器R2把分组转发给IP地址为30.0.0.1的路由器R3。

以上过程总结下来可以分为三种情况:

  • 目的主机就在自己所在的局域网内
  • 目的主机就在与该局域网内路由器相连的局域网内
  • 通过路由器的多次转发,才能找到目的主机。

对应到生活中实际的例子,其实就好像我们问路。也可能只会得到三种答案。一种是你不用找了,你现在的地方就是你要找的地方。一种是我知道在哪里,我告诉你。一种是我不知道,但是我知道谁知道,你可以去问他。

每个路由器都需要维护一张路由表,每一条路由最主要的是以下两个信息:
(目的网络地址,下一跳地址)

由此可以得出以下两个结论:

  1. IP数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次交付)
  2. 只有到达最后一个路由器时,才试图 向目的主机进行直接交付。

路由器还可以采用默认路由以减少路由表所占用的空间和搜索路由表所用的时间。这种转发方式在一个网络只有很少的对外连接时是很有用的。
默认路由是一种特殊的静态路由,指的是当路由表中与包的目的地址之间没有匹配的表项时路由器能够做出的选择。如果没有默认路由,那么目的地址在路由表中没有匹配表项的包将被丢弃· 默认路由在某些时候非常有效,当存在末梢网络时,默认路由会大大简化路由器的配置,减轻管理员的工作负担,提高网络性能。

主机里的默认路由通常被称作默认网关。默认网关通常会是一个有过滤功能的设备,如防火墙和代理服务器。