Zynq实现二层网络加密转发

本文转载自:HeroKern的CSDN博客

二层网络加密转发是加密端将所有二层网络数据实现加密,然后发送出去,接收端接收到数据后解密,然后以二层报文发送出去。常规的网络加密仅仅局限于网络应用数据加密,对底层的ARP(IP地址到MAC地址的解析,可通过ARP广播包寻找MAC地址),ICMP(ping命令),IP(TCP和UDP的下一层)包通通实现加密传输。

本次设计选用了两块ZYNQ开发板,ZYNQ支持双千兆网卡,操作系统为linux。设计如下图所示。PC机A发起的请求应该原封不动的传输给PC机B,中间传输过程又不能被截获,所以设计出了如下方案。选用两块支持双网络的ZYNQ开发板,ZYNQ1和ZYNQ2之间采用UDP方式传输数据,方便不需要连接,直接转发数据。

加密.png

上图中已经把PC机A向PC机B数据处理流程和注意事项列举出来了,下面在详细梳理一下流程,PC机A简称A,PC机B简称B。

A和B建立ARP关系列举流程。

  • A发起ARP广播包

  • ZYNQ1的eth0收到arp包后,将数据加密安装UDP协议通过eth1端口发送出去

  • ZYNQ2的eth1收到数据后解密数据,并且解析数据类型,如果有arp包则将arp包的mac源地址设置为eth0的mac地址,并且通过eth0端口发送出去。

  • 那么PC机A就被虚拟化到ZYNQ2的eth0端口上了,同理PC机B的MAC地址和ZYNQ1的eth0端口一致,如果没有这个虚拟化过程,A向B发起访问,B在应答时候填写的目的地址是A的MAC地址,那么ZYNQ2的eth0接口MAC会 过滤掉不是自己和广播的MAC地址。

  • B向A发起访问与上述流程一样。

A和B建立ARP访问流程后,此时A的MAC地址和ZYNQ2 eth0端口MAC地址一致,B的MAC地址和ZYNQ1 eth0端口MAC地址一致,下面列举正常数据交互流程。

  • A发起网络请求,目的MAC为ZYNQ1的eth0

  • ZYNQ1解析数据,并且将数据按照UDP协议通过eth1接口发送给ZYNQ2的eth1接口

  • ZYNQ2的eth1接口接收到数据后,解析数据,然后通过eth0发送出去,因为数据里面的源MAC地址和本端口一致,所以数据与B能够正常交互。

  • B向A发起访问与上述流程一样

码设计比较简单,这里只提供初始化原始帧socket和解析arp包代码。

获取原始值帧初始化函数:

数据解析函数:

本次分享网络二层加密转发功能是用CPU去设计的,CPU跑加密算法性能太低了,后期用FPGA去做算法运算。ZYNQ实现网络二层转发功能速率在18MB/s。

最新文章

最新文章