ARP协议详解,小白易懂

当网络设备有数据要发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通过目的IP地址来获取目的MAC地址的过程是由ARP(Address Resolution Protocol)协议来实现的。

一个网络设备要发送数据给另一个网络设备时,必须要知道对方的IP地址。但是,仅有IP地址是不够的,因为IP数据报文必须封装成帧才能通过数据链路进行发送,而数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。每一个网络设备在数据封装前都需要获取下一跳的MAC地址。IP地址由网络层来提供,MAC地址通过ARP协议来获取。ARP协议是TCP/IP协议簇中的重要组成部分,它能够通过目的IP地址获取目标设备的MAC地址,从而实现数据链路层的可达性。

网络设备通过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地址。

本例中,主机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报文。网关将会阻止该报文发送到其他网络上。

所有的主机接收到该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收到ARP Reply以后,会检查ARP报文中目的MAC地址是否与自己的MAC匹配。如果匹配,ARP报文中的源MAC地址和源IP地址会被记录到主机A的ARP缓存表中。

免费ARP: 主机被分配了IP地址或者IP地址发生变更后,必须立刻检测其所分配的IP地址在网络上是否是唯一的,以避免地址冲突。主机通过发送ARP Request报文来进行地址冲突检测。 主机A将ARP Request广播报文中的目的IP地址字段设置为自己的IP地址,且该网络中所有主机包括网关都会接收到此报文。当目的IP地址已经被某一个主机或网关使用时,该主机或网关就会回应ARP Reply报文。通过这种方式,主机A就能探测到IP地址冲突了。

经验分享 程序员 微信小程序 职场和发展