1、背景
网络层地址和链路层地址是由不同部门分配的。
链路层的MAC地址是由设备制造商定义的,并存储在设备的永久性内存中,不会改变。为了不同协议族中的网络层协议同时运行,工作在特定硬件设备上的任意协议族必须使用特定类型的地址。
网络层的IP地址是由用户或网络管理员分配的,并且可以接需选择。例如,为便携设备分配的IP地址可能改变,IP地址通常从维护附近网络连接点的地址池中获得,它在系统启用或配置时分配。
为了建立IP地址和MAC地址之间的映射关系,所以引入了ARP协议。
2、ARP的映射方式
1)静态映射:手动创建一张ARP表项,用来维护IP地址和MAC地址的映射关系。但是映射关系可能会发生变化,需要定期更新比较麻烦,并且影响网络性能。
2)动态映射:每次根据协议栈动态地找出MAC地址,并且自动维护ARP表项,不需要手动参与。ARP缓存的保存期限是自条目创建开始后的20min内。
3、ARP/RARP报文在以太网中的帧格式
4、具体过程
1)本地主机首先根据IP地址,在ARP表项中查找目的MAC地址。如果ARP表项中存在,则直接使用该MAC地址将IP报文封装成以太网帧发送。
2)如果在ARP表项中查找失败,则本地主机将在局域网中广播ARP请求。ARP请求数据帧中包含目的IP地址,询问“谁有这个IP地址,请告诉我你的MAC地址”。ARP请求报文目的MAC全F,等待ARP应答报文回填。
3)目的主机的ARP层解析到这份广播报文,发现和自己的IP地址一致,便发送ARP应答报文,包含自己的IP地址和MAC地址。
4)本地主机收到ARP应答之后,便知道了目的IP对应的目的MAC地址,将其保存到ARP表项,并开始进行数据报文的发送。
5、跨网段通信
1)如果源主机发现和目的主机不在同一个网段,就要首先发ARP广播请求查询网关的MAC地址。
2)然后将使用网关的MAC地址发送缓存中的数据包(非ARP请求),目的IP不变。
3)网关收到数据包之后,检查目的IP地址,发现并不是给自己的。于是决定查询路由表进行路由。
4)网关根据目的IP地址,确定需要要使用的发出的路由接口,然后ARP请求查找目的MAC地址。
5)最后,网关转发出缓存中的数据包,使用网关的MAC地址为源MAC地址,源IP地址仍为源主机的IP地址。
【注】
1)ARP仅用于IPv4, IPv6使用邻居发现协议。
2)ARP请求报文是广播报文,应答是单播报文。
3)在TCP/IP模型中,ARP属于网络层协议,但是理解成链路层协议似乎更合适。
4)ARP协议是根据IP地址找MAC地址,RARP是根据MAC地址找IP地址(当前已经很少用)。