ARP协议基础

1、ARP协议简介

地址解析协议(Address Resolution Protocol),功能是通过目标设备的IP地址,查询出目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。

ARP报的结构如下:

ARP协议基础

 

Hardward type 是1 代表用的是以太网

Protocol type 是0x0800,代表用的是ipv4

Hardware size是6,因为MAC地址长度是6字节

Protocol size是4,因为Ipv4地址长为4字节

Opcode 是1,代表ARP的请求,是2代表RPC应答

Sender MAC address: Dell_c6:5c:73 (48:4d:7e:c6:5c:73)

Sender IP address: 10.33.8.85

Target MAC address: Dell_b1:4b:b4 (f4:8e:38:b1:4b:b4)

Target IP address: 10.33.8.242

 

一次RPC包请求如下:

ARP协议基础

一次RPC包回复如下:

ARP协议基础

RPC原理:

         在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。因此需要一种方式,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。 另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为ARP代理(ARP Proxy)。

2、ARP缓存

ARP高速缓存(ARP cache),由最近的ARP项组成的内在中的一个临时表。每个主机或者路由器都有一个ARP高速缓存表。它用来存放最近Internet地址到硬件地址之间的映射记录。高速缓存表中每一项的生存时间都是有限的,起始时间从被创建时开始计算的。

使用arp命令,我们能够查看本地计算机或另一台计算机的ARP高速缓存中的当前内容。此外,使用arp命令,也可以用人工方式输入静态的网卡物理/IP地址对,我们可能会使用这种方式为缺省网关和本地服务器等常用主机进行这项作,有助于减少网络上的信息量。

按照缺省设置,ARP高速缓存中的项目是动态的,每当发送一个指定地点的数据报且高速缓存中不存在当前项目时,ARP便会自动添加该项目。一旦高速缓存的项目被输入,它们就已经开始走向失效状态。

高速缓存表用项目数组来实现,每个项目包括以下字段:

状态:表示项目的状态.其值为FREE(已超时),PENDING(已发送请求但未应答)或RESOLVED(已经应答).

硬件类型,协议类型,硬件地址长度,协议地址长度:与ARP分组中的相应字段相同.

接口号:对应路由器的不同接口.

队列号:ARP使用不同的队列将等待地址解析的分组进行排队.发往同一个目的地的分组通常放在同一个队列中.

尝试:表示这个项目发送出了多少次的ARP请求.

超时:表示一个项目以秒为单位的寿命.

硬件地址:目的硬件地址,应答返回前保持为空.

协议地址:目的高层协议地址如IP地址

 

APR缓存查看与清理:

arp -a或arp -g

用于查看高速缓存中的所有项目;

 

arp -d IP

使用本命令能够人工删除一个静态项目,不加IP项时,清除所有!。

ARP协议基础

清除:

ARP协议基础

 

3、ARP超时重传机制,

TCP/IP协议有超时重传机制,ARP所在的数据链路层也有超时重传等差错控制的机制?为什么会这样呢?网上收集的资料有如下两个观点:

  1. 数据链路层传输的是帧,而传输层传输的是报文,而一个报文要分成很多帧。
  2. 有的网络有超时重传机制,有的没有,所以在TCP/IP层同意保证要有!
  • ARP命令

 

ARP常用命令选项:

arp -a或arp -g

用于查看高速缓存中的所有项目。-a和-g参数的结果是一样的,多年来-g一直是UNIX平台上用来显示ARP高速缓存中所有项目的选项,而Windows用的是arp -a(-a可被视为all,即全部的意思),但它也可以接受比较传统的-g选项。

arp -a IP

如果我们有多个网卡,那么使用arp -a加上接口的IP地址,就可以只显示与该接口相关的ARP缓存项目。

arp -s IP 物理地址

我们可以向ARP高速缓存中人工输入一个静态项目。该项目在计算机引导过程中将保持有效状态,或者在出现错误时,人工配置的物理地址将自动更新该项目。

arp -d IP

使用本命令能够人工删除一个静态项目。

4、地址冲突检测

IP包到MAC帧封装的过程,在ARP协议中,,MAC帧封装是根据路由下一跳的IP地址,进行本地ARP查表,然后封装MAC帧的。如果ARP表项中没有对应的ARP表项,这时数据包的发送设备会发送ARP请求(广播).这里提一下:收到MAC帧后会把MAC帧头的目的MAC与本机比较,相同则留下校队后交付上层,不同则丢弃;问题就来了,ARP是三层协议,发送ARP请求就是希望得到目的IP的MAC地址,所以这个目的MAC地址怎么填写呢?答:TCP/IP规定,目的IP为FF-FF-FF-FF-FF-FF为广播地址,所有设备接收到以该地址为目的地址的MAC帧,都需要接收处理后交付上层;

由于ARP请求的目的地址是FF-FF-FF-FF-FF-FF,同一个广播域内的所有设备都会接收到这个请求,二层对于FF-FF-FF-FF-FF-FF为目的的MAC帧的处理方式是接收并交付三层处理。三层接收到二层交付的IP包后会对数据段进行分析比较,这时分两种情况:

数据段的目的IP地址是本机:,则回复响应;

数据段的目的IP地址不是本机,则丢弃该ARP请求;

ARP协议基础

 

ARP请求是以广播形式发出,而ARP响应则是单播形式。如果ARP请求收到回复,说明该IP已经被占用。