地址解析协议(Address Resolution Protoclol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利。它是IPV4中网络层必不可少的协议。不过在IPV6中已经不再适用,并被邻居发现协议(NDP)所代替。
当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48bit的以太网地址来确定目的接口的。设备驱动器从不检查IP数据报中的目的IP地址。从逻辑Internet地址到对应的物理硬件地址需要进行翻译。这就是ARP的功能
点对点(PPP)链路不使用ARP地址。
一、 基本功能
在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议链接到上层IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution protocol)及时主机在发送帧钱将目标IP地址转换成目标MAC地址的过程。另外,也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的蒋不是目的主机的真是MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况为ARP代理(ARP Proxy)。
二、原理
每台安装有TCP/IP的电脑或路由器都有一个ARP缓存表,表里的IP地址与MAC地址是相对应的。
主机地址 | IP地址 | MAC地址 |
A | 192.168.38.10 | 00-AA-00-62-D2-02 |
B | 192.168.38.11 | 00-BB-00-62-C2-02 |
C | 192.168.38.12 | 00-CC-00-62-C2-02 |
以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址为(00-BB-00-62-C2-02),直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播(ARP request),目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询 问:“192.168.38.11的MAC是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应(ARP response):“192.168.38.11的MAC地址是(00-BB-00-62-C2-02)”。 同时B也会把A的这条记录添加到ARP缓存中。这样,主机A主机收到来自B的ARP回答,知道了B的硬件地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内(一般20分钟)如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。
我们还知道,ARP请求是广播的,但是ARP应答的目的地址趋势发出请求的主机地址。ARP应答是直接发送到请求端主机的,而非广播的。
一般情况下,当系统收到ARP请求或发送ARP应答时,都要把请求端的硬件地址和IP地址存入存入ARP告诉缓存。
ARP查询与回复的例子: 1 0:0:0c:6f:2d:40 ff:ff:ff:ff:ff:ff arp 60
arp who-has 192.168.1.2 tell 192.168.1.1
2 0:0:c0:c2:9b:26 0:0:0c:6f:2d:40 arp 60
arp reply 192.168.1.2 is-at 0:0:c0:c2:9b:26
发送广播ARP报文的IP地址为:192.168.1.1,MAC地址为:0:0:0c:6f:2d:40,发送的目的地址为ff:ff:ff:ff:ff:ff (广播地址),询问的IP是192.168.1.2。IP地址是192.168.1.2的主机收到这条报文后,更新自己的arp缓存,并把自己的mac地址(0:0:c0:c2:9b:26)和IP地址(192.168.1.2)组成的报文发送给询问方0:0:0c:6f:2d:40。
四、免费ARP
免费ARP(gratuitous ARP),它是指主机发送ARP查找自己的IP地址。通常,它发生在系统引导期间进行接口配置的时候。
1 0.0 0:0:0c:6f:2d:40 ff:ff:ff:ff:ff:ff arp 60
arp who-has 140.252.13.35(询问的IP) tell 140.252.13.35(发送询问的IP)
源mac地址:0:0:0c:6f:2d:40 目的mac地址:ff:ff:ff:ff:ff:ff(广播地址)
询问140.252.13.35的硬件地址,如果有主机应答,那么arp回答的报文发送给140.252.13.35。
免费ARP有两方面的作用:
1. 一个主机可以通过它来确定另一个主机是否设置了相同的IP地址。发送端的主机并不希望对此请求有一个回答。但是如果接到一个回答,那么就会在终端日志上产生一个错误消息。
2.如果发送免费ARP的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接口卡,然后重新启动),那么这个分组就可以使其他主机告诉缓存中旧的硬件地址进行相应的更新。一个比较著名的ARP事实是,如果主机收到某个IP地址的ARP请求,而且它已经在接收者的高速缓存中,那么就要用ARP请求中的发送端硬件地址(如以太网地址)对高速缓存中的相应的内容进行更新。主机接收到任何ARP请求都要完成这个操作(ARP请求是在网上广播的,因此每次发送ARP请求时网络上的所有主机都要这样做)