地址解析协议ARP
一 发送数据的过程
在学习ARP协议的工作原理之前,我们需要先知道为什么需要ARP协议,它在数据传输过程中有怎样的作用。
以下是计算机网络中发送数据的一个大致过程。
首先要知道,源主机发送数据要经过5层的封装,目的主机接收数据也要经过5层的解封装,中间系统只有低三层,只负责数据传输,数据在中间系统传输时,也要反复进行3层的封装和解封装。
以下是5层模型中发生数据的步骤:
- 应用层有一个文件需要传输,也就是一个数据报文需要传输。
- 传输层将数据报文进行分段,分成多段数据报。
- 网络层拿到数据报,加上首部,封装成IP数据报,再对IP数据报进行分片,以便分组转发,首部应该包含源IP地址和目的IP地址。
- 数据链路层拿到IP数据报,加上首部和尾部(一般是帧检验序列FCS)封装成数据帧,首部应该包含源MAC地址和目的MAC地址。
- 物理层拿到数据帧后,以比特流的形式去传输。
备注:MAC地址,即硬件地址,和IP地址不同的是,IP地址是网络层标志各主机和路由器的地址,而MAC地址是实际的物理地址。
由于每当数据到达链路层,都需要加上源MAC地址和目的MAC地址,所以就需要用到ARP解析协议,去完成下一跳的IP地址到MAC地址的映射,确定下一跳具体走哪,也就是确定下一跳的硬件地址。
二 ARP工作原理
-
首先要知道,每一台主机都设有一个ARP高速缓存,里面存有本局域网上的各主机和路由器的IP地址到MAC地址的映射表,这些都是该主机目前知道的一些MAC地址。
-
当主机A要向本局域网上的某台主机发送IP数据报时,就先在其ARP缓存中查看有无主机B的IP地址,如果有,就在ARP缓存中查找其对应的MAC地址,再把这个MAC地址写入MAC帧,然后通过局域网把该MAC帧发往此MAC地址。
-
如果ARP缓存中没有该MAC地址,就需要经过以下步骤去获取目的MAC地址。
- ARP进程在本局域网上广播发送一个ARP请求分组。ARP请求分组的主要内容为源IP地址和源MAC地址,以及目的IP地址。
- 在本局域网上的所有主机(或路由器)上运行的ARP进程都收到此ARP请求分组。
- 若主机B的IP地址与ARP请求分组中要查询的目的IP地址一致,就收下这个ARP请求分组,并向主机A发送ARP响应分组,同时在这个ARP响应分组中写入自己的MAC地址。
- 主机A收到主机B的ARP响应分组后,就在其高速缓存中写入主机B的IP地址到MAC地址的映射。至此,链路层就可以写入目的MAC地址,封装成MAC帧了。
下面是主机1要向主机3发送数据的过程(主机1和主机3在同一个网络,没有经过路由器)
备注:如果主机之间不在同一个网络,比如上图的主机1和主机5,则在数据传输过程中,需要经过多个路由器转发,可以发现,网络层的源IP地址和目的IP地址通常是保持不变的(NAT的情况可能改变),而链路层的源MAC地址和目的MAC地址是随着传输过程而发生变化的。
三 小结
ARP协议简介
由于在实际网络的链路上传送数据帧时,最终必须使用MAC地址。
所以我们需要ARP协议:完成主机或路由器IP地址到MAC地址的映射。(解决下一跳走哪的问题)
ARP协议使用过程
检查ARP高速缓存,有对应表项则写入MAC帧,没有则用目的MAC地址为FF-FF-FF-FF-FF-FF的帧封装并广播ARP请求分组,同一局域网中所有主机都能收到该请求。目的主机收到请求后就会向源主机单薄一个ARP响应分组,源主机收到后将此映射写入ARP缓存(10-20min更新一次)。
ARP协议4种典型情况
- 主机A发给本网络上的主机B:用ARP找到主机B的硬件地址;
- 主机A发给另一网络上的主机B:用ARP找到本网络上一个路由器(网关)的硬件地址;
- 路由器发给本网络的主机A:用ARP找到主机A的硬件地址;
- 路由器发给另一个网络的主机B:用ARP找到本网络上的一个路由器的硬件地址。