可编程逻辑
ARP协议是地址解析协议,在网络中有MAC地址和IP地址之分,IP地址可以随着网络拓扑的改变而改变,而MAC地址是不会改变的。一般MAC地址在厂商生产的时候就烧好了,以后这个器件的MAC地址就不再会改变了。
因为IP地址在网络中是可能改变的,所以我们需要知道一个设备的MAC地址和IP地址才能准确的发送信息给目的器件。
而应用程序一般是直接给某个IP发送信息的,这个时候就需要自动去获取这个IP的MAC地址了,ARP协议就是做这个事情的。
我们可以在自己的电脑上查看目前的arp表,如果你想要访问的IP在ARP表中没有与之对应的MAC地址,那么就会自动发送ARP请求指令,当从机收到ARP请求指令的时候,就会给主机一个应答信号,这样双方就都有了对方的MAC地址。
通过arp -a指令来查看此时的ARP表。可以看到并没有192.168.1.10相对应的mac地址。
通过ping命令给从机发送arp请求,现在还不支持ICMP协议,所以看到的是请求超时。
通过抓包软件可以看到ARP请求和响应的协议包
这是请求的协议包,可以看到协议是0806也就是ARP协议,操作码是1,也就是请求协议。
ARP的应答包,可以看到操作码是2。
再通过arp -a来查看目前的arp表,就可以发现多了192.168.1.10的MAC地址。
而FPGA端需要做的就是对ARP协议的解析工作。
整个arp解析分为以下几个文件
arp_rx中将以太网帧通过以下状态机进行解析
首先是前导码的解析,然后是帧头的解析,之后是数据,最后是校验信息。
当整个校验过程中出现了校验错误的情况就停止进行下一步操作,重新回到空闲状态等待下一帧数据。
最后将会获得MAC,IP,操作码等相关信息。
在arp_ctrl中会去判断发送ARP应答指令还是ARP请求指令。如果目前收到了主机的ARP请求,那么就向主机发送ARP应答。如果现在想主动获取某个IP的MAC地址,那么就发送ARP请求。
在arp_tx中会根据arp_ctrl中给的指令来组织arp包发送出去。也是分为5个状态的状态机完成这个功能。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !