Menu Close

地址解析协议(ARP)

在TCP/IP协议中,有许多的协议会用于网络管理部分,这部分内容一般不会出现在用户的应用层中,而且都是MAC,IP的应用,该层并没有完整实现IP层的协议,协助实现网络中的各种管理功能,这些协议包括ARP, RARP,PING,ICMP,IGMP等。这些协议介于二层与三层之间,因此有时会被称为2.5层,就像RGMII被称为1.5层一样。本文将介绍有用户密切相关的协议–地址解析协议ARP(Address Resolution Protocol)。

1. 地址解析协议

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

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

地址解析协议的消息格式很简单,仅包含单一的地址解析请求或响应。ARP 消息的长度取决于上下两层地址的大小,上层地址由所使用的网络协议类型(通常是 IPv4)决定,下层地址则由上层协议所使用的硬件或虚拟链路层的类型决定。消息的报头中包含了这些类型以及对应的地址长度信息,此外还包含了表示请求(1)和应答(2)的操作码。数据包的有效负载为收发双方的硬件地址、协议地址,总计四个地址。

2. 反向地址解析协议

反向地址解析协议RARP(Reverse Address Resolution Protocol)与ARP正好相反,根据对方的MAC地址获取对方的IP地址。RARP协议一般很少使用,主要原因是在TCP/IP协议中先封装IP包也就是目的IP是确定的,在封装MAC包之前如果没有对方的MAC地址可以重新通过ARP获得对方的MAC地址,形成MAC-IP对放在主机内存中,在以后的通信中就可以查表实现MAC-IP的配对。

  • ARP包的结构

    • ARP协议部分在MAC层的位置

ARP高于MAC层,因此在以太网中接收MAC层服务,下面结合MAC层一起介绍ARP的结构,由ARP组成的MAC层结构如图1所示。

图1     由ARP包组成的MAC层结构

图1描述的MAC层构成如下:

(1)14字节的以太网首部,

目的地址: 为FFFF_FFFF_FFFF,表示广播地址。

源地址: 为本机的MAC地址

类型: 为0x0806,表示MAC层封装了ARP协议。

(2)28字节 ARP协议(请求或应答)

(3)填充部分:填充数据长度18(46-28)字节00

(4)FCS: 使用4字节CRC32

  • ARP包的具体结构

ARP包的具体结构如图2所示,ARP首部及地址部分合计28个字节,细节如图3。

图2    ARP包结构

IMG_256

图3    ARP协议细节

    • ARP首部:

(1)硬件类型 以太网 0001,两个字节

(2)协议类型 IP 0800 ,两个字节

(3) 硬件地址长度 6,表示MAC地址长度,一个字节

(4)协议地址长度4,表示IP地址长度,一个字节

(5) 操作码(OP) 0001 -ARP请求 0002-ARP应答 ,两个字节。

    • 地址部分:

(1)发送者硬件地址(MAC地址),6个字节。(2)发送者IP地址,4个字节(3)目的硬件地址,6个字节(4)目标IP地址,4个字节。

根据具体的MAC及IP地址,组装后的ARP请求包如图4所示。

图4  包含ARP 请求包的MAC 包

课堂练习:根据ARP组包规则,请写出应答包对应的MAC包。

关于应答包的格式内容, 请参照视频中的讲解。

4. 主机ARP的使用:

  • 在计算机的CMD窗口,输入ipconfig /all,查看本机的IP地址及MAC地址,如图5所示。

图5  ipconfig 查看IP与MAC地址

  • 输入ARP -a 查看本机存储的IP地址对应的MAC地址,如图6所示。

图6 使用ARP命令查看IP-MAC对

5. ARP在网络通信中的作用及操作流程

以主机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缓存表里查找就可。

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

(5)免费ARP(gratuitous ARP),他是指主机发送ARP查询(广播)自己的IP地址,当ARP功能被开启或者是端口初始配置完成,主机向网络发送免费ARP来查询自己的IP地址确认地址唯一可用。作用:(1)确定网络中是否有其他主机使用了该IP地址,如果有应答则产生错误消息。(2)免费ARP可以做更新ARP缓存用,网络中的其他主机收到该广播则在缓存中更新条目,收到该广播的主机无论是否存在与IP地址相关的条目都会强制更新,如果存在旧条目则会将MAC更新为广播包中的MAC。

练习:

(1)利用双口BRAM构建ARP请求包

(2)利用双口BRAM构建ARP应答包

(3) 练习使用ARP的各种命令

 

 

Posted in FPGA, FPGA 教材教案, 教材与教案, 文章

发表回复

相关链接