是什么?
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;
最直白的说法是:在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能提供该节点的MAC地址。
大家都知道,OSI模式把网络工作分为七层,彼此不直接打交道,只通过接口(layre interface). IP地址在第三层(网络层), MAC地址在第二层(数据链路层)。协议在发送数据包时,首先要封装第三层(IP地址)和第二层 (MAC地址)的报头, 但协议只知道目的节点的IP地址,不知道其物理地址,又不能跨第二、三层,所以得用ARP的服务拿到MAC地址。
也就是说,ARP是在局域网中为上层协议提供目标IP的Mac的协议。
为什么?
IP网络是通过IP地址进行通信的。但是在同一网段内交换机是通过MAC进行数据转发的,所以就需要ARP协议进行IP地址与MAC地址相互映射。
也就是说,交换机通过Mac地址进行数据转发,而ARP能为交换机提供Mac地址和端口的映射,记录在交换机的Mac地址与端口映射表中。
怎么做?
ARP代理
当局域网内部主机发起跨网段的ARP请求时,出口路由器/网关设备将自身MAC地址回复该请求时,这个过程称为代理ARP
例如,主机PC1(192.168.20.66/24)需要向主机PC2(192.168.20.20/24)发送报文,因为主机PC1不知道子网的存在且和目标主机PC2在同一主网络网段,所以主机PC1将发送ARP协议请求广播报文请求192.168.20.20的MAC地址。这时,路由器将识别出报文的目标地址属于另一个子网(注意,路由器的接口IP地址配置的是28位的掩码),因此向请求主机回复自己的硬件地址(0004.dd9e.cca0)。之后,PC1将发往PC2的数据包都发往MAC地址0004.dd9e.cca0(路由器的接口E0/0),由路由器将数据包转发到目标主机PC2。(接下来路由器将为PC2做同样的代理发送数据包的工作)。代理ARP协议使得子网化网络拓扑对于主机来说是透明的(或者可以说是路由器以一个不真实的PC2的MAC地址欺骗了源主机PC1)
也就是说,如果主机不知道子网的存在又要和另一个子网的主机通信,它会发送广播报文,被网关的路由器接受到后路由器会进行“善意的欺骗”,将自身的Mac地址发送给主机并接收报文,然后发送到另一个网段。