ARP协议
ARP
ARP 协议报文及原理
当网络设备有数据要发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通过目的IP地址来获取目的MAC地址的过程是由ARP(Address Resolution Protocol)协议来实现的。
ARP数据包格式
ARP协议报文
网络设备通过ARP报文来发现目的MAC地址。ARP报文中包含以下字段:
Hardware Type表示硬件地址类型,一般为以太网;
Protocol Type表示三层协议地址类型,一般为IP;
Hardware Length和Protocol Length为MAC地址和IP地址的长度,单位是字节;
Operation Code指定了ARP报文的类型,包括ARP Request和ARP Reply;
Source Hardware Address指的是发送ARP报文的设备MAC地址;
Source Protocol Address指的是发送ARP报文的设备IP地址;
Destination Hardware Address指的是接收者MAC地址,在ARP Request报文中,该字段值为0;
Destination Protocol Address指的是接收者的IP地址。
ARP工作过程
- 通过ARP协议,建立目的IP地址和MAC地址的映射。通过网络层获取目的IP地址还要判断目的MAC地址是否已知。如,在主机A发送数据给主机C时,首先获取主机C的MAC地址。
ARP缓存(ARP Cache):存放IP地址和MAC地址。
网络设备一般都有一个ARP缓存(ARP Cache),ARP缓存用来存放IP地址和MAC地址的关联信息。在发送数据前,设备会先查找ARP缓存表。如果缓存表中存在对方设备的MAC地址,则直接采用该MAC地址来封装帧,然后将帧发送出去。如果缓存表中不存在相应信息,则通过发送ARP Request报文来获得它。学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。在有效期内,设备可以直接从这个表中查找目的MAC地址来进行数据封装,而无需进行ARP查询。过了这段有效期,ARP表项会被自动删除。
如果目标设备位于其他网络,则源设备会在ARP缓存表中查找网关的MAC地址,然后将数据发送给网关,网关再把数据转发给目的设备
ARP请求
如上示例:主机A的ARP缓存表中不存在主机C的MAC地址,所以主机A会发送ARP Request来获取目的MAC地址。
ARP Request报文封装在以太帧里。帧头中的源MAC地址为发送端主机A的MAC地址。
此时,由于主机A不知道主机C的MAC地址,所以目的MAC地址为广播地址FF-FF-FF-FF-FF-FF。
ARP Request报文中包含源IP地址、目的IP地址、源MAC地址、目的MAC地址,其中目的MAC地址的值为0。
ARP Request报文会在整个网络上传播,该网络中所有主机包括网关都会接收到此ARP Request报文。网关将会阻止该报文发送到其他网络上。
该例适用不知道主机C的MAC地址:
帧头的目的MAC用广播形式进行发送,ARP中目的MAC值为0,操作类型为Request。同时,网关会阻止该报文发送到其他网络。
所有主机收到后,会检查IP地址是否匹配,不匹配则不响应,匹配后主机C把源MCA和IP地址将记录到自己ARP缓存表中。发送ARP Reply进行响应。
向A发送的ARP Reply报文,源地址和源MAC都是主机C的地址,操作类型为Reply,以单播形式传送。
主机A收到Reply报文后,检查MAC地址是否匹配,然后将源MAC和源IP地址记录主机A的ARP缓存表中。
ARP响应
所有的主机接收到该ARP Request报文后,都会检查它的目的协议地址字段与自身的IP地址是否匹配。如果不匹配,则该主机将不会响应该ARP Request报文。如果匹配,则该主机会将ARP报文中的源MAC地址和源IP地址信息记录到自己的ARP缓存表中,然后通过ARP Reply报文进行响应。主机C会向主机A回应ARP Reply报文。ARP Reply报文中的源协议地址是主机C自己的IP地址,目标协议地址是主机A的IP地址,目的MAC地址是主机A的MAC地址,源MAC地址是自己的MAC地址,同时Operation Code被设置为Reply。ARP Reply报文通过单播传送。
这样主机A就可以拿到主机C的mac地址,从而封装报文进行数据发送。
ARP代理
同一网段,不同物理网络上的计算机之间,通过ARP代理进行相互通信
因为路由器无法转发,主机B收不到ARP Request报文,也无法应答。路由开启代理ARP功能后,收到Request会先查找路由表,如存在则把自己的G0/0/0接口作为MAC地址回应主机A。主机A通过该MAC地址进行数据转发。
免费ARP
将主机IP发生改变,查找网络中是否IP地址有冲突。发送ARP Request报文,设置目的IP地址为自己的IP地址,进行广播,所有主机包括网关都会收到,当有任何主机和网关回应该报文,则可确定IP地址冲突