计算机网络之ARP协议

时间:2021-02-16 04:41:02

引言

ARP(Address Resolution Protocol,地址解析协议)是将IP地址解析为MAC地址(物理地址)的协议。在局域网中,当主机或其他网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络层地址(即IP地址),但是仅有IP地址是不够的,因为IP数据报文必须封装成帧才能通过物理网络发送。因此发送方还需要有接收方的物理地址,也就需要一个从IP地址到物理地址的映射,ARP就是用于完成这个映射的协议。

1.为什么需要ARP

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

当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48位的以太网地址来确定目的接口的,设备驱动程序从不检查IP数据报中的目的IP地址。ARP模块的功能为这两种不同的地址形式提供映射:32位的IP地址和48位的物理地址。

2.APR帧格式

虽然IP、ARP和RARP数据报都需要以太⽹驱动程序来封装成帧,但是从功能上划分,ARP和RARP属于链路层,IP属于⽹络层。虽然ICMP、IGMP、TCP、UDP的数据都需
要IP协议来封装成数据报,但是从功能上划分,ICMP、IGMP与IP同属于⽹络层,TCP和UDP属于传输 层。

数据链路层格式:

计算机网络之ARP协议

APR帧格式:

计算机网络之ARP协议


在ARP数据帧中需要强调一下的是: 

帧类型:0800表示ip数据报,0806表示ARP,8035表RARP
硬件类型说的是与主机相连接的网络类型,1代表以太网。 
协议类型说明是ipv4还是ipv6协议,不同的协议后续操作是不一样的。IP是0x0800 
协议长度,这个主要就是不同协议当中的长度,ipv4是4字节长,ipv6是16字节长度。 
硬件长度,说的是硬件地址的长度,也就是MAC帧的长度,也就是6字节。 
然后看op,op就是操作,1代表arp请求,2代表arp应答。

注意到:源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的

但是如果链路层是其他类型的网络则有可能是必要的。


ARP过程:

接下来我们来下一次ARP的完整过程,我们首先有两台主机H1和H2,当我们需要进行通信的时候,这个时候只是知道H1和H2的IP地址IP1和IP2,还有H1的MAC地址MAC1,但是无法知道H2的MAC地址,此时我们进行H1与H2通信,所以这个时候我们首先填充ARP数据报,此时的是请求ARP数据报,对目的地址全部填充1,也就是ffffffffffff,op为1,然后,由前主机以广播的形式发送到当前局域网。 

计算机网络之ARP协议

所以,当当前局域网当中的主机接受到这个广播的帧,会有两种情况,一种就是帧当中的IP2和自己不相符合,这样它们的操作就是丢弃这个帧,另外一种的IP地址和IP2符合,这个时候就来进行处理这个帧,此时,接受到请求报文的主机H2会发送一个应答ARP数据报给H1,这里ARP报文的发送端IP地址和发送端MAC地址,都是现在当前要发送应答报文的主机H2的IP2和MAC2,目的端IP地址和目的端MAC地址都当初发送请求报文的主机H1的IP1和MAC1。op现在为2,然后加一个以太网首部发送出去,当到达目的主机的时候,此时,首先取出以太网帧的首部,然后交给上层的ARP,上层的ARP进行处理,然后ARP可以从当中得到op,发现是应答报文,所以去看发送端的MAC地址,然后这样就得到了所需要进行通信的MAC地址。

计算机网络之ARP协议

ARP高速缓存


另外需要注意的问题是ARP协议的实质上需要有一个ARP缓存,这个缓存来进行保存ip地址和MAC地址的映射关系,这样,就不需要进行多次的ARP请求了。

当然,当一个MAC地址被改变或者长时间不进行通信,此时又会有一个缓存需要更新的问题,当长时间的一个缓存表中的一个映射关系不进行通信,此时就删除它,防止缓存表会填满。这个时间在这里我们叫做生存时间,为每一个映射地址我们都会设置一个生存时间。默认情况下ARP缓存是20分钟一更新。

特别需要注意,ARP只是可以对于同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。 
当面对的是不同主机之间,这个时候我们需要考虑路由器的作用。

我们用arp -a命令来查看ARP缓存表


计算机网络之ARP协议

RARP

RARP叫做逆地址解析协议,说完了ARP,其实你也就知道了RARP的通信原理,RARP我们进行操作的时候,这个时候我们知道两个MAC地址,所以在链路层上此时可以直接通信,然后通信过去得到IP地址,传回来就好了。 
RARP协议广泛的应用于无盘工作站引导时获取IP地址。
RARP允许局域网的物理机器从网管服务器ARP表或者缓存上请求其IP地址