ARP协议

ARP为IP地址到对应的MAC地址提供动态映射,即询问目标IP地址对应的MAC地址。

假设同一个LAN里有多台主机,PC1发起ARP请求到结束的过程大致如下:

  1. 广播形式发起ARP请求,请求包里的信息包括:发送端的IP地址和MAC地址、目的IP地址、目的MAC地址是未填充的、以及其它一些控制信息。
  2. 局域网内的主机在接收到该ARP地址后,判断目的IP地址是不是本机IP地址,若不是则丢弃不管;若是,则填充目的MAC地址,根据请求包的发送方的地址信息,以单播形式发起响应。
  3. 发送方收到响应,缓存。

其过程以一问一答形式实现,问是广播,答是单播。广播包封装时,二层MAC地址全是1(ff:ff:ff:ff:ff:ff),三层IP地址全是1(255.255.255.255)。

ARP高效运行的关键是每个主机上都有一个ARP高速缓存,其存放了最近IP地址到硬件地址之间的映射记录,每一项生存时间一般为20分钟,可设置。可通过以下命令查看:

arp -a

当一台主机把以太网数据帧发送到同一局域网内的另一台主机时,是根据48bit的MAC地址来确定目的接口的,设备驱动程序从不检查IP数据报中的目的IP地址。

ARP协议完全划分到链路层上也不完全正确,到是更像工作在网络层和链路层中间。ARP请求是二层广播包,没法过路由器。

代理ARP:如果ARP请求是从一个网络的主机发往另一个网络的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称为委托ARP或ARP代理。这样可以让发送端误认为路由器就是目的主机。路由器的功能相当于目的主机的代理,把分组从其它主机转发给它。

ARP代理和普通ARP并非互斥而是互补关系。当发起方本身不具备网关/路由功能,需要跨网段访问时,就会使用ARP代理。正常使用时,用户通过DHCP协议或手工配置获得IP和网关信息时,不需要ARP代理。

  • 当发起方没有网关信息,需要跨网段访问目标时,发起ARP请求(ARP代理),网关接收到请求后,发现目标IP跨网段,返回网关的MAC地址给发起方。(若不是代理ARP的话,网关当成正常ARP请求时,发现不是询问自己的MAC地址会直接丢弃的)
  • 当发起方有网关信息时(同网段),需要跨网段访问目标时,直接普通ARP请求询问网关的MAC地址。

两种方式返回都是网关的MAC地址。

免费ARP:指主机发送ARP查找自己的IP地址。有两个方面作用:

  • 一个主机可以通过它来确定另一个主机是否设置了相同的IP地址。
  • 如果发送免费ARP的主机正好改变了硬件地址,那这个分组就可以使其它主机的高速缓存中旧的硬件地址进行相应的更新。(一ARP协议事实:如果主机收到某个IP地址的ARP请求,并且已经在缓存中,就对其对应的硬件地址进行更新)

RARP:具有本地磁盘的系统引导时,一般是从磁盘的配置文件中读取IP地址。但是无盘机,如X终端或无盘工作站则需要采用其它方式获得IP地址。一个RARP请求在网络上进行广播,它在分组中标明发送端的硬件地址,以请求相应的IP地址的响应。RARP使用链路层广播,大多数路由器无法转发。


参考

[1] TCP/IP详解卷1

[2] https://zhuanlan.zhihu.com/p/28771785

results matching ""

    No results matching ""