本页使用了标题或全文手工转换

地址解析协议

维基百科,自由的百科全书
(重定向自Address Resolution Protocol
跳转至: 导航搜索

地址解析协议 (ARP) 是通过解析网路层英语Internet layer地址来找寻数据链路层地址的一个在网络协议包中极其重要的网络传输协议。 ARP最初在1982年的RFC 826(征求意见稿)[1]中提出并纳入互联网标准 STD 37. ARP 也可能指是在多数操作系统中管理其相关地址的一个进程。

ARP是通过網路位址(例:IPv4)来定位MAC地址 (也称为以太地址)。 ARP已经在很多网路层和数据链接层之间得以实现,包括IPv4Chaosnet英语Chaosnet, DECnet英语DECnet和Xerox PARC Universal Packet英语PARC Universal Packet (PUP) 使用IEEE 802标准, 光纤分布式数据接口, X.25, 帧中继异步传输模式 (ATM), IEEE 802.3IEEE 802.11标准上IPv4占了多数流量。

IPv6邻居发现协议 (NDP)用于代替地址解析协议。

基本功能[编辑]

以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。

另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为委托ARP或ARP代理(ARP Proxy)

点对点链路中不使用ARP,实际上在点对点网络中也不使用MAC地址,因为在此类网络中分别已经获取了对端的IP地址。

数据包结构[编辑]

为了把IP地址映射到48位以太网地址用于传输,需要一个体现地址转换协议的包格式。

以太网传输层[编辑]

  • 目标以太网地址:目标MAC地址。FF:FF:FF:FF:FF:FF (二进制全1)为广播地址。
  • 源以太网地址:发送方MAC地址。
  • 帧类型:以太类型,ARP为0x0806。

以太网报文数据[编辑]

  • 硬件类型:如以太网(0x0001)、分组无线网
  • 协议类型:如IP网际协议(0x0800)、IPv6(0x86DD)。
  • 硬件地址长度:每种硬件地址的字节长度,一般为6(以太网)。
  • 协议地址长度:每种协议地址的字节长度,一般为4(IPv4)。
  • 操作码:1为ARP请求,2为ARP回显,3为RARP请求,4为RARP应答。
  • 源硬件地址:n个字节,n由硬件地址长度得到,一般为发送方MAC地址。
  • 源协议地址:m个字节,m由协议地址长度得到,一般为发送方IP地址。
  • 目标硬件地址:n个字节,n由硬件地址长度得到,一般为目标MAC地址。
  • 目标协议地址:m个字节,m由协议地址长度得到,一般为目标IP地址。

报文格式[编辑]

长度(位) 48 48 16 16 16 8 8 16 48 32 48 32
数据类型 目标以太网地址 源以太网地址 帧类型 硬件类型 协议类型 硬件地址长度 协议地址长度 操作码 源硬件地址 源协议地址 目标硬件地址 目标协议地址
组成 14字节 以太网首部 28字节 ARP请求/应答

原理[编辑]

在Windows命令行查看ARP缓存表

在每台安装有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
D 192.168.38.13 00-DD-00-62-C2-02
E 192.168.38.14 00-EE-00-62-C2-02
... ... ...

以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。
1.当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到就知道目标MAC地址為(00-BB-00-62-C2-02),直接把目标MAC地址写入帧里面发送就可。
2.如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播(ARP request),目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.38.11的MAC地址是什么?”

3.网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应(ARP response):“192.168.38.11的MAC地址是00-BB-00-62-C2-02”,此回应以单播方式。这样,主机A就知道主机B的MAC地址,它就可以向主机B发送信息。同时它还更新自己的ARP高速缓存(ARP cache),下次再向主机B发送信息时,直接从ARP缓存表里查找就可。


ARP缓存表采用老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。

免费ARP[编辑]

免费ARP(gratuitous ARP),他是指主机发送ARP查询(广播)自己的IP地址,当ARP功能被开启或者是端口初始配置完成,主机向网络发送免费ARP来查询自己的IP地址确认地址唯一可用。

作用:

  1. 确定网络中是否有其他主机使用了IP地址,如果有应答则产生错误消息。
  2. 免费ARP可以做更新ARP缓存用,网络中的其他主机收到该广播则在缓存中更新条目,收到该广播的主机无论是否存在与IP地址相关的条目都会强制更新,如果存在旧条目则会将MAC更新为广播包中的MAC。

查看ARP缓存表[编辑]

Windows:开始→运行→cmd→arp -a(参数a表示显示所用内容)

Linux终端→arp

另見[编辑]

外部链接[编辑]