ARP层协议解读及ARP层代码实现

ARP协议解读

ARP(地址解析协议,Address Resolution Protocol)是一个用于将网络层(IP地址)地址转换为数据链路层(MAC地址)地址的协议。它通常在局域网(LAN)中使用,尤其是在以太网网络中。当一个设备想要与另一设备通信时,它首先需要知道目标设备的MAC地址,而ARP协议就是完成这一转换过程的工具。
ARP协议的基本流程
设备发送ARP请求:当一个设备(比如主机A)需要与另一个设备(主机B)通信,但只知道目标的IP地址时,主机A会发送一个ARP请求广播包,内容包括:

目标IP地址(主机B的IP地址)。
发送者的IP地址和MAC地址(主机A的IP和MAC)。
ARP请求广播:ARP请求包会被广播到同一局域网中的所有设备。

目标设备响应ARP请求:目标设备(主机B)收到ARP请求后,检查其IP地址。如果该请求中的IP地址与自己的IP地址匹配,主机B将发送一个ARP应答包,内容包括:

目标设备的IP地址(主机B的IP)。
目标设备的MAC地址(主机B的MAC)。
发送者的IP地址和MAC地址。

主机A收到响应并缓存:主机A收到ARP应答后,更新其ARP缓存表,记录下目标设备的IP地址与MAC地址的映射关系,之后它可以直接用该MAC地址与主机B通信。
ARP协议报文结构
ARP报文通常包含以下几个字段:

硬件类型(Hardware Type):指定网络类型,通常为1,表示以太网(Ethernet)。
协议类型(Protocol Type):指定使用的协议类型,通常为0x0800,表示IPv4。
硬件地址长度(Hardware Address Length):指定硬件地址的长度(以字节为单位),以太网中为6个字节。
协议地址长度(Protocol Address Length):指定协议地址的长度,IPv4地址为4个字节。
操作码(Operation Code):指定ARP报文的类型。常见的操作码有:
1:ARP请求(Request)。
2:ARP应答(Reply)。
发送者硬件地址(Sender Hardware Address):发送方的MAC地址。
发送者协议地址(Sender Protocol Address):发送方的IP地址。
目标硬件地址(Target Hardware Address):目标方的MAC地址(在ARP请求中为空)。
目标协议地址(Target Protocol Address):目标方的IP地址。
ARP协议报文结构图如下所示
在这里插入图片描述
无论是请求包或者是应答包,其报文组成都是一致的,区别只在于内部填充的内容

ARP协议报文组包与解包

  • ARP报文组包
    首先讨论ARP_TX的代码逻辑,其输入接口应该具备可以接收用户希望向上位机发送ARP请求包的使能命令,并且代码中进行相应的请求包组包,并且可以接收上位机传来的ARP请求,并进行相应的应答包组包。接下来进行ARP组包(请求与应答包的组包逻辑)
    仿真测试1:当输入接口的arp操作码值为2,代表用户想要上位机应答,即向上位机发送请求包,当输入接口的arp操作码值为1,代表上位机想要FPGA端进行应答,即向上位机发送应答包,注意,这里的操作码输入不只是来自于ARP_RX解析到的操作码,而是另有逻辑控制,即对ARP_TX进行输入的操作码来自于用户的上位机两个单元,ARP_TX只接收用户的2值操作码与上位机的1值操作码。进行FPGA向上位机发送请求包的仿真测试,请求IP为192.168.1.20,因为不知道目的MAC地址,故填充全FF。并且在末尾填充0,进行以太网最小帧长处理操作。
    在这里插入图片描述

在这里插入图片描述
通过仿真结果可知,成功进行了ARP请求包的组包。

  • ARP报文解包
    ARP解包是对上位机传输来的ARP报文进行解析,判断当前ARP报文要访问的IP地址为板卡IP后,将解析出来的操作码,上位机IP地址与mac地址进行输出,当操作码为1时,将操作码,上位机IP地址,mac地址,传输给ARP_TX。当操作码为2时,表示上位机的ARP应答,将收到的IP与MAC地址,传输给ARP_LIST,ARP缓存表。进行对应IP与MAC的缓存。
    仿真测试2:ARP_RX接收到上位机传输来的ARP请求包。进行解析,上位机IP地址为192.168.1.20,MAC地址为A5-67-B3-A6-D5-E6
    在这里插入图片描述
    由图可知,在仿真中,ARP_RX的输入接口按照ARP报文格式传来了ARP请求包,末尾的0填充在这里进行了省略。
    接下来进行解析,所谓的解析,也就是判断固定位置的信息,以及缓存固定位置的信息,主要是源MAC-IP,目的MAC-IP

在这里插入图片描述
由图可知,成功解析了ARP请求包,并将上位机的MAC-IP地址进行了输出。
接下来看 ARP_TX收到ARP请求操作,是否能做出正确应答,板卡IP地址为192.168.1.10,MAC地址为11-22-33-44-55-66
在这里插入图片描述
在这里插入图片描述
对照ARP报文格式表,可以验证,进行了正确的ARP应答包发送

  • ARP缓存表控制逻辑
    所谓的ARP缓存表即缓存每个IP地址对应的MAC地址,在windows中,可以在命令行中通过arp -a进行缓存表的查看,
    在FPGA的逻辑实现中,使用一单口RAM进行功能实现,单口RAM位宽设置为80位,高32位为IP地址,低48位为MAC地址。ARP缓存表支持IP-MAC的缓存,也支持输入IP进行相应MAC地址的查询。
    其逻辑较为简单,即当要查询某一IP时,遍历RAM,查看RAM中是否有这一IP,若有,则将IP对应的MAC地址进行输出,若没有,则输出信息,不存在该IP与对应的MAC地址,若要进行IP-MAC缓存,则遍历RAM,看当前表内是否缓存了该IP信息,若没有缓存,则进行缓存,若缓存了,则不进行重复缓存。遍历RAM相对来说,会浪费几个时钟周期,因为在程序初始时期,ARP缓存表必然是不满的,或者说是空的,所以可以设定有指示指针,指示当前的缓存表有效尾部,每次遍历只遍历到尾部+1,减少遍历次数,若要进行缓存,则将尾部指针+1即可。

仿真测试3:缓存192.168.1.10,11-22-33-44-55-66,缓存192.168.1.20,A5-67-B3-A6-D5-E6;查询192.168.1.10对应的MAC地址;再次缓存192.168.1.20,A5-67-B3-A6-D5-E6;
在这里插入图片描述
两次缓存成功,分别缓存到了0地址和1地址
在这里插入图片描述
查询IP地址对应的MAC地址成功,输出MAC地址11-22-33-44-55-66,res为01表示存在该ip与mac地址
在这里插入图片描述
再次缓存192.168.1.20,A5-67-B3-A6-D5-E6,显示该IP地址与MAC地址已经存在于ARP缓存表
以上仿真全部成功。ARP的整体逻辑实现完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值