1、ARP报文格式
ARP协议工作在数据链路层,网络中传输的ARP包示意如下(由于字段较多,这里对连续字段进行换行处理):
帧头 | Data(ARP包) | FCS |
ARP包:
Hardware Type | Protocol Type | Hardware Length | Protocol Length | Operation Code |
16位 | 16位 | 8位 | 8位 | 16位 |
Source Hardware Address | Source Protocol Address | ||
48位 | 32位 |
Destination Hardware Address | Destination Protocol Address |
48位 | 32位 |
Hardware Type:硬件类型,指物理网络的类型,如以太网(值为1)
Protocol Type:协议类型,指网络协议类型,如IP协议(值为0x0806)
Hardware Length:硬件地址长度,指MAC地址长度,通常为6字节
Protocol Length:协议地址长度,指I票地址长度,通常为4字节
Operation Code:操作类型,指明ARP操作类型,ARP请求为1;ARP响应为2;RARP请求为3,RARP响应为4
Source Hardware Address:发送方硬件地址
Source Protocol Address:发送方IP地址
Destination Hardware Address:接收方硬件地址
Destination Protocol Address:接收方IP地址
2、ARP运行过程
一台设备通过网络向另一台设备发送数据时,进行IP报文和帧封装时必须要填入目标设备的IP地址和MAC地址,而从上层交付的信息中只告知了目标IP地址,MAC地址则需要设备通过ARP协议自行获取。
当源主机需要向目的主机发送数据时,源主机会先查看自己的ARP缓存表中是否有目标IP地址和MAC地址,若有则直接使用,若没有则通过ARP协议到网络中询问。询问过程是源主机向网络中广播一个ARP请求报文(即Operation Code=1),该报文包含了源IP、源MAC和目的IP。所有接受到该广播的设备均用自己的IP与目的IP进行比对,若不一致则不响应该请求,若一致则向源主机发送一个ARP响应报文(即Operation Code=2),其中就包含了目的主机的MAC地址。这样源主机和目的主机都知道了对方的IP及对应的MAC地址,并更新其ARP缓存表待以后使用。若ARP缓存表中的条目长时间不使用,主机会将该条目删除下次需要时再通过ARP询问,条目的默认缓存时间通常是1200S。需要注意的是ARP请求报文是广播包,也就是说该报文不能穿越路由器,不能转发到其他广播域,只能被主机所在网段内的其他主机收到。
3、ARP代理
若主机配置了网关(一般是路由器),则发往另一个网段的数据会直接发往网关而不需要通过ARP协议获取MAC地址。若主机没有配置网关,则发往另一个网段的数据会被直接丢弃,ARP协议根本不会起作用。只有当源主机认为目标与自己处于同网段,但实际上目标主机处于另一网段,且他们之间通过一个路由器连接在一起(后面会详细说明这种情况)。因为源主机认为目标与自己处于同网段,所以源主机依旧向网段内广播ARP请求报文,启用了ARP代理的路由器也会收到该报文,路由器先查看目标主机的IP是否在自己的路由表中,若不存在则丢弃该报文,若存在则路由器会向源主机返回一个ARP应答报文,应答报文中目标IP对应的MAC地址是路由器自己的MAC地址。源主机记录该MAC地址后,需要发往目标主机的数据均会发往路由器再由路由器转发。
4、免费ARP
免费ARP报文中的目的IP就是源主机本身,该报文依旧通过广播的形式发到广播域,其目的在于检测广播域内是否有主机与源主机IP冲突,另外还可以更新广播域内其他主机的ARP缓存表。
【ARP代理奇怪的作用范围】前面讲到ARP代理的产生条件非常有限,首先源主机要认为自己与目的主机位于同网段,但实际又不在同网段,这是怎么回事呢。
实际上是可能的,这是由于掩码不同导致的问题。前几章中我们讲到过VLSM(可变长子网掩码)技术,也就是说一个IP可以使用不同的掩码来划分网段。那就会产生一种情况,如A:192.168.0.1/255.255.0.0和B:192.168.1.1/255.255.255.0这两个IP,因为掩码的问题导致A认为B与自己是同一网段,但B却认为A与自己不在同一网段,这种情况下的通讯就需要依靠ARP代理了。
【ARP到底工作于那一层】在学习时我们发现OSI模型中将ARP划分到数据链路层,而在TCP/IP模型中又将ARP划分到了网络层,那ARP到底是那一层呢。
首先OSI模型是一个理论模型,而TCP/IP模型是网络实现后才进行划分的。OSI分为7层,最低层包括物理层、数据链路层、网络层等等。TCP/IP分为4层,包括网络接入层、网际互连层、传输层、应用层。这里误会的产生就在TCP/IP模型中将最低层叫做网络层,实际上它对应的是OSI中的物理层和数据链路层,所以把名字改成接入层大家就不争论了吧。实际上ARP在网络中传输时也并不包含IP头。
【ARP缓存表】ARP缓存表就是个IP-MAC对照表,设备会定期对其进行更新和清理。
【网关】网关实质上是一个网络通向其他网络的IP地址(路由器的IP)。比如有网络A和网络B,网络A的网段为192.168.1.0/255.255.255.0;网络B的网段为192.168.2.0/255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使两个网络连接在同一台交换机上,TCP/IP协议也会根据子网掩码判定两个主机处于不同的网络里。而要实现这两个网络之间的通信则必须通过网关。如果网络A中的主机发现数据包的目的主机不再本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。