0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过运用FPGA器件实现IPV6数据包的拆分和重新封装

电子设计 来源:郭婷 作者:电子设计 2019-05-13 08:03 次阅读

参加国家“863”重大专题项目“高速密码芯片及验证平台系统”的过程中,遇到了将IPV6数据包的包头和数据部分拆开,然后在数据部分送密码芯片进行加/解密处理,最后再将处理后的数据部分与包头重新封装为数据包的课题。以往对IP包进行拆装多利用软件实现,但本项目涉及到配合高速密码芯片(处理速度在2Gbit/s以上)工作的问题,显然利用软件实现IP包的拆装在速度上达不到要求。为此,运用FPGA(型号为Xilinx公司的XC2VP20-FF86CGB0345)来实现IPV6数据包的拆装。该FPGA内部逻辑框图如图1所示。

通过运用FPGA器件实现IPV6数据包的拆分和重新封装

其工作流程为:2.5GHz的标准IPV6数据包串行差分信号通过ROCKETIO高速通道后转换为16位125MHz并行信号,再经信号转换模块进一步转换为66位62.5MHz并行信号后进入FIFO1缓存,然后对其输出数据进行判断,若是报头则送入FIFO3缓存,若是数据部分则送入FIFO2缓存,最后将FIFO2数据送往密码芯片进行处理;经密码芯片处理的数据首先放入FIFO4进行缓存,然后控制FIFO3和FIFO4将一个数据包的头和数据写入FIFO5中,重新封装成一个完整的数据包;重新封装的IPV6数据包经过信号转换模块变为16位125MHz的并行信号,并通过ROCKETIO高速通道转换为2.5GHz高速串行差分信号送出。

可以看出,经过以上流程,实现了一个数据包的拆分和重新封装。

1 IPV6数据包的拆分

用FPGAP实现IPV6数据包的拆分,主要是通过控制几个FIFO的数据输入输出来实现的。FPGA内部的拆分单元电路的物理连接如图2所示,其中FIFO的作用是缓存IPV6数据包,FIFO2的作用是缓存IPV6数据包的数据部分,FIFO3的作用是缓存IPV6数据包的包头。

图中的三个FIFO都是由Xilinx公司的开发工具ISE6.1自带的Core IP生成的。其中FIFO1和FIFO3是同步FIFO,工作时钟为频率62.5MHz,输入输出数据宽度都是66bit;FIFO2是异步FIFO,输入时钟频率为62.5MHz,输出时钟频率为50MHz(密码芯片的工作时钟频率为50MHz),输入输出数据宽度都是64bit。

通过运用FPGA器件实现IPV6数据包的拆分和重新封装

FIFO1的输入数据为IPV6数据包。可以看出,该数据是以并行的66bit信号传输的,即每一时钟周期并行传送66bit数据,其中每个周期的高两位(即65位和64位)为数据包的头尾标志,这是IPV6路由器内部根据实际处理需要加上的,“10”表示一个完整数据包的第一周期,“11”表示数据包的中间内容,“01”表示一个完整数据包的最后一个周期。因为IPV6数据包的包头是固定长度的,为40字节(等于5×64bit),故数据的前五个周期为IPV6数据包的包头,包头后面跟的就是数据包的数据部分。

下面讨论IPV6数据包的包头和数据部分的拆分过程。

首先判断FIFO1输入端数据的头尾标志DATA(65“64)与FIFO1的满标志FULL1,如果DATA(65”64)=“10”且FULL1=“0”,即判断到一个完整数据包的开始且FIFO1未满,则使FIFO1的写使能WR_EN1有效,写入数据;如果DATA(65“64)=“01”,好判断到一个完整数据包结束时,则使WR_EN1无效,这样一个完整的数据包就缓存到了FIFO1时。

当判断到FIFO1的空标示EMPTY1=“0”,即FIFO1非空间,令FIFO1的读使能信号RD_EN1有效,将FIFO1中的数据读出,直到EMPTY1=“1”,即FIFO1空为止。对读出的数据设定一计数器COUNTER1进行计数,当DONT1不为0即FIFO1输出端有信号时开始计数。当0<COUNTER1<=5时,令FIFO3的写使能信号WR_EN3有效,将数据包的包头写FIFO3缓存;当COUNTER1>5时,令WR_EN3无效,WR_EN2有效,将IPV6数据包的数据部分送FIFO2缓存,准备送密码芯片处理,直到头尾标志DOUT1(65”64)=“01”时,将COUNTER1清零,在判断到COUNTER1为0后,将WR_EN2置为无效。注意:FIFO1的输出端口是66位,FIFO2的输入端口是64位的,故在FIFO1向FIFO2写数据的过程中,应将FIFO1的输出端口信号DOUT(63“0)传送给FIFO2的输入端口DIN2(63”-)。当判断到FIFO2非空间,将其读使能信号RD_EN2置为有效,即可向密码芯片送出数据。

通过运用FPGA器件实现IPV6数据包的拆分和重新封装

2 IPV6数据包的重新封装

用FPGA实现IPV6数据包的重新封装,同时是通过控制几个FIFO的数据输入输出来实现的,FPGA同部的重新封装单元电路的物理连接如图3所示,其FIFO4的作用是缓存密码芯片送出的加解密处理后的数据;FIFO5的作用是缓存重新封装后的IPV6数据;FIFO3与拆分单元共用,作用是缓用IPV6数据包头。

图中的FIFO4和FIFO5也都是由Xilinx公司的开发工具ISE6.1自带的Core IP生成的,其中FIFO4是异步FIFO,输入时钟为50MHz,输出时钟为62.5MHz,输入输出数据宽度都是66bit;FIFO5是同步FIFO,工作时钟为62.5MHz,输入输出数据宽度都是66bit。

密码芯片对数据进行加/解密处理完毕之后,在送出处理数据前,首先向外部系统发送一64bit长的连接指令,指明处理数据所用的加解密算法和数据长度。例如,在对数据进行2DES加密处理的情况下,接收指令格式(16位制)如图4所示,其中高56位为指令编码,低8位为将要输出的处理数据的长度。

通过运用FPGA器件实现IPV6数据包的拆分和重新封装

因此,在接收处理数据时,首先判断是否有接收指令,如果有接收搦令,则其接收指令中的数据长度放寄存器中进行寄存,并设定计数器COUNTER2开始计数。当0<COUNTER2<=数据长度时,则令FIFO4的写使能WR_EN4有效;当COUNTER2为其它值时,WR_EN4无效。当0<COUNTER2<数据长度时,将“11”写入DIN4(65“64),将64bit处理数据写入DIN4(63”0);当COUNTER2=数据长度时,即接收到最后一周期的处理数据时,将“01”写入DIN4(65“64),将64bit处理数据写入DIN4(63”0),并将COUNTER2清零。这样,密码芯片处理后的数据就按格式要求缓存到FIFO4中了。

这时,包头已经缓存到FIFO3中了,处理后的数据已经按格式要求缓存到FIFO4中了,最后要做的就是控制FIFO3和FIFO4,把一个完整的IPV6数据包写入FIFO5中。具体做法是:设定计数器COUNTER3,当FIFO3和FIFO4都非空时,COUNTER3开始计数。当COUNTER3>0时,将FIFO5的写使能信号WR_EN5置为有效;当COUNTER3=0时,WR_EN5置为无效。当0<COUNTER3<6时,令FIFO3的读使能RD_EN3有效,FIFO3将输出数据DOUT3(65“0)写入FIFO5的输入端DIN5(65”0);当COUNTER3>l=6时,令RD_EN3无效,RD_EN4有效,将FIFO4的输出数据DOUT4(65“0)写入FIFO5的输入端DIN5(65”0),直到DOUT4(65“64)=“01”时,将COUNTER3清零,RD_EN4置为无效。这样,一个完整的IPV6数据包就重封装在FIFO5中了,当判断到FIFO5非空间,就可以令RD_EN5有效,向外输出处理后的完整的IPV6数据包了。

通过运用FPGA器件实现IPV6数据包的拆分和重新封装

从上述讨论可以看出,本课题在FPGA中采用了五个FIFO,并设定了三个计数器控制这五个FIFO的输入输出来实现对IPV6数据包的拆分和重新封装。总的来看,整个FPGA设计思路巧妙,电路结构简单,达到了预期的处理速度。图5是整个测试系统在对1024字节的IPV6数据包进行拆包、送密码芯片加密。重装封装处理后测试仪控制软件界面上显示的收包数据统计。从该图可以看出,整个系统对IPV6数据包的处理速度达到了2.372Gbit/s,而这样的处理速度用软件是不可能达到的。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1621

    文章

    21517

    浏览量

    599349
  • 芯片
    +关注

    关注

    451

    文章

    49725

    浏览量

    417683
  • 计数器
    +关注

    关注

    32

    文章

    2242

    浏览量

    94023
收藏 人收藏

    评论

    相关推荐

    IPv6地址是什么,IPv6的意思

    由表的长度,提高了路由器转发数据包的速度。   三,IPv6增加了增强的组播(Multicast)支持以及对流的支持(Flow Control),这使得网络上的多媒体IPv6的长分布式结构图[1
    发表于 01-25 16:39

    基于IPv6的无线传感器网络边界路由器有什么优点?

    基于IPv6的无线传感器网络协议栈适配层的设计。通过数据包分片与重组机制以及报头压缩机制,协议栈适配层实现IPv6数据包在IEEE 802
    发表于 04-21 08:22

    怎样利用FPGA实现IPV6数据包的拆装?

    怎样利用FPGA实现IPV6数据包的拆装?IPV6数据包的包头和
    发表于 04-28 06:05

    基于FPGAIPV6数据包的拆装是如何实现的?

    基于FPGAIPV6数据包的拆装是如何实现的?
    发表于 05-28 06:23

    IPv6不能外发数据包如何解决呢

    覆盖,变为netif_null_output_ip6,结果,IPv6不能外发数据包。解决方案:针对IPv6,将对netif->output_ip
    发表于 09-05 14:52

    labview UDP通信实现IPV6

    labview自带的工具不支持IPV6,借助于.NET。可轻松实现IPV6的通信。后期完成TCP-IPV6功能时,再更新附件代码。*附件:
    发表于 12-20 16:35

    一种IPv6数据包安全传输的实现

    在分析了现有的加密体制的基础上,结合IPv6 数据包的特点,设计了一种保护IPv6 数据包传输的安全方案,该方法可以实现网络环境下的加密传输
    发表于 07-30 11:57 15次下载

    基于IPv6的防火墙的关键技术与实现

    IPv6 是新一代的IP 协议。它的提出解决了当今IP 地址匮乏的问题,并引入了加密和认证机制,实现了基于网络层的身份认证,确保了数据包的完整性和机密性,因此,可以说IPv6
    发表于 08-19 10:38 11次下载

    基于FPGAIPV6数据包的拆装

    介绍了一种运用FPGAIPV6数据包的包头和数据部分分离并重新
    发表于 06-25 17:53 14次下载

    移动IPV6在改进数据包发送路径模型下性能分析

    针对现有移动IPV6数据包发送代价较高的问题,对现有移动IPV6协议性能分析模型中数据包发送路径进行了改进,将访问路由发送至移动节点的数据包
    发表于 01-12 10:32 35次下载
    移动<b class='flag-5'>IPV6</b>在改进<b class='flag-5'>数据包</b>发送路径模型下性能分析

    IPv6中的网络隐蔽通道技术研究

    IPv6数据包中存在保留字段、转发时被节点忽略的字段、定义不完整字段和非关键字段等可隐匿信息的字段.这表明IPv6的冗余字段太多,协议设计时语法规则限定过宽,从而得出IPv6
    发表于 02-23 15:16 30次下载
    <b class='flag-5'>IPv6</b>中的网络隐蔽通道技术研究

    BGP/MPLS IPv6 VPN技术白皮书

    BGP/MPLS IPv6 VPN通过业务供应商IPv4骨干网向用户提供基于IPv6网络的VPN业务。在这类VPN架构中,BGP与MPLS起到非常重要的作用。BGP可发布
    发表于 02-27 15:52 34次下载
    BGP/MPLS <b class='flag-5'>IPv6</b> VPN技术白皮书

    基于FPGAIPV6数字的分离与封装实现

    本文介绍了一种运用FPGAIPV数据包的包头和数据部分分离并重新
    发表于 05-21 09:17 1877次阅读
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>IPV6</b>数字<b class='flag-5'>包</b>的分离与<b class='flag-5'>封装</b>的<b class='flag-5'>实现</b>

    如何用隧道搭建ipv6

    隧道,是一种在IPV4升级到IPV6期间的过渡技术。可以将IPV6数据包进行封装通过现有的
    发表于 12-26 14:58 2.9w次阅读
    如何用隧道搭建<b class='flag-5'>ipv6</b>

    基于XC2VP20—FF896CGB0345 FPGA实现IPV6数据包的拆装

    在参与国家“863”重大专题项目“高速密码芯片及验证平台系统”的过程中,遇到了将IPV6数据包的包头和数据部分拆开,然后把数据部分送密码芯片进行加/解密处理,最后再将处理后的
    的头像 发表于 06-14 17:02 1627次阅读
    基于XC2VP20—FF896CGB0345 <b class='flag-5'>FPGA</b><b class='flag-5'>实现</b><b class='flag-5'>IPV6</b><b class='flag-5'>数据包</b>的拆装