基于FPGA的UDP/IPv6硬件协议栈及实现方法

文档序号:7555349阅读:191来源:国知局
专利名称:基于FPGA的UDP/IPv6硬件协议栈及实现方法
技术领域
本发明属于网络通信领域,尤其涉及一种基于FPGA的UDP/IPv6硬件协议栈及实现方法。
背景技术
自从互联网工程任务组(IETF)定义了 IPv6协议的基本架构,传统互联网便迎来了变革。伴随着IPv4地址的耗尽,IPv6互联网协议凭借其在地址资源、安全机制、寻址机制、实时交付服务等方面的优势成为未来互联网的发展趋势。与IPV4相比,IPV6具有以下几个优势:1) IPv6具有更大的地址空间。IPv4中规定IP地址长度为32,最大地址个数为232 ;而IPv6中IP地址的长度为128,即最大地址个数为2128。与32位地址空间相比,其地址空间增加了 2128-232个。2) IPv6使用更小的路由表。IPv6的地址分配一开始就遵循聚类(Aggregation)的原则,这使得路由器能在路由表中用一条记录(Entry)表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的速度。3) IPv6增加了增强的组播(Multicast)支持以及对流的支持(FlowControl),这使得网络上的多媒体应用有了长足发展的机会,为服务质量(QoS, Quality ofService)控制提供了良好的网络平台。4) IPv6加入了对自动配置(Auto Configuration)的支持。这是对DHCP协议的改进和扩展,使得网络(尤其是局域网)的管理更加方便和快捷。5)IPv6具有更高的安全性。在使用IPv6网络中用户可以对网络层的数据进行加密并对IP报文进行校验,在IPV6中的加密与鉴别选项提供了分组的保密性与完整性。极大的增强了网络的安全性。6)允许扩充。如果新的技术或应用需要时,IPV6允许协议进行扩充。
7)更好的头部格式。IPV6使用新的头部格式,其选项与基本头部分开,如果需要,可将选项插入到基本头部与上层数据之间。这就简化和加速了路由选择过程,因为大多数的选项不需要由路由选择。8)新的选项。IPV6有一些新的选项来实现附加的功能。同时,在科研和工程领域,越来越多的设备需要接入互联网,尤其是简易的主机。而传统的IPv4协议已经成为了一个掣肘。因此,针对IPv6网络中的节点研发一种高效、低资源消耗的网络传输方案成为了不可回避的问题。在传统的方案中,采用嵌入式系统的软件IPv6协议栈会提高互联网主机的资源消耗、开发难度和大规模部署的成本,不利于在IPv6网络中进行大规模应用。对此,有学者提出软件与硬件协议栈共存的设计方案实现完整IPv6协议,但其完整协议的结构复杂,不利于互联网技术的应用和维护。2008年,中国学者许川佩和郝锐实现了精简IPv6硬件协议栈,但其在实现过程中缺少了默认路由表、前缀列表和邻节点高速缓存表,将降低数据发送的效率
发明内容
本发明所要解决的技术问题是,提供一种能有效提高发送效率的基于FPGA的UDP/IPv6硬件协议栈;同时,本发明还提供了一种基于FPGA的UDP/IPv6硬件协议栈的实现方法。为解决上述技术问题,本发明采用的技术方案是:一种基于FPGA的UDP/IPv6硬件协议栈,该协议栈包括:
外部接口模块,用于外部跟协议栈的通信;
UDP发送数据寄存器模块,用于存放待发送的UDP数据;
UDP发送控制模块,用于把UDP数据组装成IPv6报文;
配置寄存器模块,用于存放协议栈的配置信息;
ICMPv6发送控制模块,用于组装ICMPv6报文;
发送优先级控制模块,用于解决当同时需要发送UDP报文和ICMPv6报文时的冲突问
题;
DM9000驱动模块,用于把组装 好的IPv6报文通过DM9000发送出去并且通过DM9000接收报文;
接收数据预处理模块,用于过滤掉接收到的不需要处理的报文(不需要处理的报文为除M)P报文和ICMPv6报文以外的报文),并把UDP报文和ICMPv6报文分别送到不同的模块处理;
ICMPv6处理模块,用于提取接收到的ICMPv6报文中的有用信息(有用信息包括报文类型、代码和报文主体里的具体信息,报文主体的具体信息根据报文的类型的不同而不同,如路由器请求报文中的源链路层地址选项);
数据更新模块,用于根据从ICMPv6提取的信息更新协议栈的配置信息;
UDP接收数据寄存器模块,用于存放接收到的UDP报文。所述UDP发送控制模块包含模块化的邻节点高速缓存表、网络前缀列表和默认路由表,这些表由若干条基本表项模块组成,并由ICMPv6数据更新模块进行数据更新;所述基本表项模块用于自动计时清零。所述基本表项模块包括一个X位的数据寄存器,用于存放表项的有效数据,一个Y位的生存时间定时器,用来对表项的有效时间进行倒计时,当倒数到0时清除数据寄存器和允许位,一个I位的允许位,表示该表项是否有效。同时,本发明还提供一种所述的基于FPGA的UDP/IPv6硬件协议栈的实现方法,当协议栈开始工作时,用户需要通过外部接口把配置信息写入配置寄存器模块,然后用户向配置寄存器相应地址写入初始化命令,当初始化完成时再写入自动配置命令,自动配置的结果从配置寄存器相应的地址读出来;当自动配置完成,通过外部接口模块向UDP发送数据寄存器模块写入数据,并向配置寄存器模块写入相应的发送命令开始发送数据;当有接收到数据时,外部接口模块会产生中断信号,通知用户到UDP接收数据寄存器模块读取数据。所述UDP发送数据寄存器模块、UDP接收数据寄存器模块由普通的双端口 RAM实现,包括一个时钟信号、一组读数据总线、一组读地址总线、一条读允许信号、一组写数据总线、一组写地址总线、一条写允许信号及一个复位信号;
所述配置寄存器模块由普通的三端口 RAM实现,包括一个时钟信号、一组读数据总线、一组读地址总线、一条读允许信号、两组写数据总线、两组写地址总线、两条写允许信号、一组控制输出信号及一个复位信号。
所述UDP发送控制模块的实现包括如下步骤:
1)等待启动信号;
2)无状态自动配置是否成功,如果是,进行下一步,否则退出流程;
3)目的IP地址是否为链路本地地址,如果是转到5),否则转到4);
4)目的IP的前缀在前缀列表中是否有匹配的项目,如果有,转到5),否则转到7);
5)在邻节点高速缓存表中是否有匹配的邻节点高速缓存项,如果是则组装UDP报文并启动DM9000驱动模块的发送功能,否则转到6);
6)地址解析是否有进行过,如果是,结束流程,否则进行地址解析并转到3);
7)默认路由表中是否有可用的默认路由表项,如果是则组装UDP报文并启动DM9000驱动模块的发送功能,否则结束流程。所述ICMPv6发送控制模块的实现包括如下步骤:
1)等待启动信号; 2)根据ICMPv6报文的类型进行判断,根据不同类型的报文获取所需要的数据; 3)根据ICMPv6报文的类型和格 式,组装ICMPv6报文并启动DM9000驱动模块的发送功
倉泛;
所述发送优先级控制模块的实现包括如下步骤:
I)判断输入是否有冲突,如果没有,把输入连接到相应的输出,否则转入下一步。2)判断冲突的输入信号优先级,把高优先级的输入连接到相应的输出;
所述DM9000驱动模块的实现包括如下步骤:
1)判断初始化信号是否有效,如果是,初始化DM9000芯片,设置DM9000为接收所有多播帧,否则转入下一步;
2)判断接收信号是否有效,如果是,从DM9000接收报文并返回上一步,否则转入下一
I K
少;
3)判断发送信号是否有效,如果是,通过DM9000发送报文并返回1),否则直接返回I); 所述接收数据预处理模块的实现包括如下步骤:
1)等待来自DM9000的报文接收中断,如果有中断,转入下一步,否则继续等待;
2)启动DM9000驱动模块接收报文,并判断接收报文是否有错误,如果有错,返回上一步,否则转入下一步;
3)如果目的MAC地址是不需要处理的多播地址或广播地址,返回1),否则转入下一步;
4)判断是否为UDP报文,如果是,把UDP数据存放到UDP接收寄存器模块并产生外部中断通知用户读取UDP数据,否则转入下一步;
5)判断是否为ICMPv6报文,如果是,把相应的内容提交到ICMPv6处理模块并启动ICMPv6处理模块,否则返回I)。所述ICMPv6处理模块的实现包括如下步骤:
1)等待接收数据预处理模块产生的内部中断信号,如果有,转到2),否则继续等待;
2)判断当前是否处于无状态自动配置的过程,如果是,则转到3),否则转到5);
3)判断所收到的ICMPv6报文是否为此前邻居请求报文所对应的邻居公告报文,如果是,则返回相应的状态信息并转到9),否则转到4);
4)判断所收到的ICMPv6报文是否为路由器公告报文,如果是,则调用ICMPv6数据更新模块进行前缀列表或/和默认路由表的数据更新并跳到9),否则转到9);
5)判断当前是否处于地址解析的过程,如果是,则转到6),否则转到7);
6)判断所收到的ICMPv6报文是否为所请求邻节点的邻居公告报文,如果是,则调用ICMPv6数据更新模块进行邻节点高速缓存表的数据更新并转到9),否则转到9);
7)判断所收到的ICMPv6报文是否为回送请求报文,如果是,则调用ICMPv6发送控制模块产生回送应答报文,否则转到8);
8)判断所受到的ICMPv6报文是否为邻居请求报文,如果是,则调用ICMPv6发送控制模块产生邻居公告报文,否则转到9);
9)ICMPv6报文处理结束。所述ICMPv6数据更新模块的实现包括如下步骤:
1)等待启动信号和更新类别信号,如果有转到2),否则继续等待;
2)判断更新类别是否为更新邻节点告诉缓存表,如果是,则更新邻节点高速缓存列表中未使能或剩余生存时间最短的表项并转到5),否则转到3);
3)判断更新类别是否为默认路由表,如果是,则更新默认路由表中未使能或剩余生存时间最短的表项并转到5),否则转到4);
4)判断更新类别是否为前缀列表,如果是,则更新前缀列表中未使能或剩余生存时间最短的表项并转到5),否则转到5);
5)结束数据更新。与现有技术相比,本发明的有益效果是:
(I)该协议栈在传输层和网络层上实现了如下功能:1)支持全球地址单播地址和链路本地单播地址;2)支持重复地址检测功能;3)支持无状态自动配置功能;4)支持地址解析功能(邻居发现);5)支持回送应答功能;6)支持UDP传输。(2)使用具有自动计时清零功能的表项模块组成邻节点高速缓存表、网络前缀列表和默认路由表,不但提高了发送数据的效率,而且简化了设计,使整个系统得以优化。(3)对数据处理过程中可能产生冲突的地方采取优先级的方法解决冲突,跟用FIFO解决冲突相比,节省了大量存储资源。


图1是硬件协议栈结构 图2是具有自动计时清零功能的表项模块示意 图3是自动配置流程 图4是UDP发送控制模块流程 图5是地址解析流程图。
具体实施例方式下面结合具体实施例对本发明作进一步的说明。硬件协议栈的总体结构
基于FPGA的精简UDP/IPv6硬件协议栈结构如图1所示,包括一个外部接口模块,用于外部跟协议栈的通信,一个UDP发送 数据寄存器模块,用于存放待发送的UDP数据,一个UDP发送控制模块,用于把UDP数据组装成IPv6报文,一个配置寄存器模块,用于存放协议栈的配置信息,一个ICMPv6发送控制模块,用于组装ICMPv6报文,一个发送优先级控制模块,用于解决当同时需要发送M)P报文和ICMPv6报文时的冲突问题,一个DM9000驱动模块,用于把组装好的IPv6报文通过DM9000发送出去并且通过DM9000接收报文,一个接收数据预处理模块,用于过虑掉接收到的不需要处理的报文,并把UDP报文和ICMP报文分别送到不同的模块处理,一个ICMPv6处理模块,用于提取接收到的ICMPv6报文中的有用信息,一个数据更新模块,用于根据从ICMPv6提取的信息更新协议栈的配置信息,一个UDP接收数据寄存器模块,用于存放接收到的UDP报文。具有自我计时清零功能的缓存表
为了提高发送数据的效率,省掉每发送一次都要进行一次地址解析的麻烦,UDP发送控制模块包含了模块化的邻节点高速缓存表、网络前缀列表和默认路由表,这些表由若干条基本表项模块组成,并由ICMPv6数据更新模块进行数据更新,组成这些缓存表的基本表项模块结构如图2所示。基本表项模块具有自动计时清零功能,包括一个X位的数据寄存器data[X_l:0],用于存放表项的有效数据,如邻节点高速缓存表的表项中的邻节点的IP地址等,一个Y位的生存时间定时器lifetime [Y-1:0],用来对表项的有效时间进行倒计时,当倒数到0时清除数据寄存器和允许位,一个I位的允许位enable,表示该表项是否有效。下面以邻节点高速缓存表来说明基本表项模块的用法。假设邻节点高速缓存表共有十个表项,其序号分别为0-9,以reCOrd0-reCOrd9表示十个表项,以data0_data9表示十个表项的数据部分,以Iifetime0-lifetime9表示十个表项的生存时间定时器的计数值,以enable0_enable9表示十个表项的允许位。一开始所有表项都是无效的,即enable0-enable9都为O。若有新的数据要加入到表中,则按下面步骤进行: I)判断enable0_enable9的值是否全为I,如果是,转入下一步,否则选择一个enable为0的表项把数据更新进去,在更新表项数据data的同时,lifetime也被重写,enable被置为I。2)比较Iifetime0_lifetime9的值,选择lifetime最小的一个表项写入新数据,同时更新lifetime和enable。协议栈的初始化
当协议栈开始工作时,用户需要通过外部接口把MAC地址等配置信息写入配置寄存器模块,配置寄存器内容格式如表I所示,然后用户向配置寄存器相应地址写入初始化命令,控制命令的格式如表2所示,当初始化完成时再写入自动配置命令,自动配置的结果可以从配置寄存器相应的地址读出来,自动配置流程如图3所示。当自动配置完成,用户可以开始通过外部接口模块向UDP发送数据寄存器模块写入数据,并向配置寄存器模块写入相应的发送命令开始发送数据。当有接收到数据时,外部接口模块会产生中断信号,通知用户到UDP接收数据寄存器模块读取数据。表I配置寄存器内容格式
权利要求
1.一种基于FPGA的UDP/IPv6硬件协议栈,其特征在于,该协议栈包括: 外部接口模块,用于外部跟协议栈的通信; UDP发送数据寄存器模块,用于存放待发送的UDP数据; UDP发送控制模块,用于把UDP数据组装成IPv6报文; 配置寄存器模块,用于存放协议栈的配置信息; ICMPv6发送控制模块,用于组装ICMPv6报文; 发送优先级控制模块,用于解决当同时需要发送UDP报文和ICMPv6报文时的冲突问题; DM9000驱动模块,用于把组装好的IPv6报文通过DM9000发送出去并且通过DM9000接收报文; 接收数据预处理模块,用于过滤掉接收到的不需要处理的报文; ICMPv6处理模块,用于提取接收到的ICMPv6报文中的有用信息; 数据更新模块,用于根据从ICMPv6提取的信息更新协议栈的配置信息; UDP接收数据寄存器模块,用于存放接收到的UDP报文。
2.根据权利要求1所述的基于FPGA的UDP/IPv6硬件协议栈,其特征在于,所述UDP发送控制模块包含模块化的邻节点高速缓存表、网络前缀列表和默认路由表,这些表由若干条基本表项模块组成,并由ICM Pv6数据更新模块进行数据更新;所述基本表项模块用于自动计时清零。
3.根据权利要求2所述的基于FPGA的UDP/IPv6硬件协议栈,其特征在于,所述基本表项模块包括一个X位的数据寄存器,用于存放表项的有效数据,一个Y位的生存时间定时器,用来对表项的有效时间进行倒计时,当倒数到O时清除数据寄存器和允许位,一个I位的允许位,表示该表项是否有效。
4.一种根据权利要求1所述的基于FPGA的UDP/IPv6硬件协议栈的实现方法,其特征在于,当协议栈开始工作时,用户需要通过外部接口把配置信息写入配置寄存器模块,然后用户向配置寄存器相应地址写入初始化命令,当初始化完成时再写入自动配置命令,自动配置的结果从配置寄存器相应的地址读出来;当自动配置完成,通过外部接口模块向UDP发送数据寄存器模块写入数据,并向配置寄存器模块写入相应的发送命令开始发送数据;当有接收到数据时,外部接口模块会产生中断信号,通知用户到UDP接收数据寄存器模块读取数据。
5.根据权利要求4所述的实现方法,其特征在于,所述UDP发送数据寄存器模块、UDP接收数据寄存器模块由普通的双端口 RAM实现,包括一个时钟信号、一组读数据总线、一组读地址总线、一条读允许信号、一组写数据总线、一组写地址总线、一条写允许信号及一个复位号; 所述配置寄存器模块由普通的三端口 RAM实现,包括一个时钟信号、一组读数据总线、一组读地址总线、一条读允许信号、两组写数据总线、两组写地址总线、两条写允许信号、一组控制输出信号及一个复位信号。
6.根据权利要求4所述的实现方法,其特征在于,所述UDP发送控制模块的实现包括如下步骤: I)等待启动信号;2)无状态自动配置是否成功,如果是,进行下一步,否则退出流程; 3)目的IP地址是否为链路本地地址,如果是转到5),否则转到4); 4)目的IP的前缀在前缀列表中是否有匹配的项目,如果有,转到5),否则转到7); 5)在邻节点高速缓存表中是否有匹配的邻节点高速缓存项,如果是则组装UDP报文并启动DM9000驱动模块的发送功能,否则转到6); 6)地址解析是否有进行过,如果是,结束流程,否则进行地址解析并转到3); 7)默认路由表中是否有可用的默认路由表项,如果是则组装UDP报文并启动DM9000驱动模块的发送功能,否则结束流程。
7.根据权利要求4所述的实现方法,其特征在于,所述ICMPv6发送控制模块的实现包括如下步骤: 1)等待启动信号; 2)根据ICMPv6报文的类型进行判断,根据不同类型的报文获取所需要的数据; 3)根据ICMPv6报文的类型和格式,组装ICMPv6报文并启动DM9000驱动模块的发送功倉泛; 所述发送优先级控制模块的实现包括如下步骤:` 1)判断输入是否有冲突,如果没有,把输入连接到相应的输出,否则转入下一步; 2)判断冲突的输入信号优先级,把高优先级的输入连接到相应的输出; 所述DM9000驱动模块的实现包括如下步骤: 1)判断初始化信号是否有效,如果是,初始化DM9000芯片,设置DM9000为接收所有多播帧,否则转入下一步; 2)判断接收信号是否有效,如果是,从DM9000接收报文并返回上一步,否则转入下一I K少; 3)判断发送信号是否有效,如果是,通过DM9000发送报文并返回1),否则直接返回I)。
8.根据权利要求4所述的实现方法,其特征在于,所述接收数据预处理模块的实现包括如下步骤: 1)等待来自DM9000的报文接收中断,如果有中断,转入下一步,否则继续等待; 2)启动DM9000驱动模块接收报文,并判断接收报文是否有错误,如果有错,返回上一步,否则转入下一步; 3)如果目的MAC地址是不需要处理的多播地址或广播地址,返回1),否则转入下一步; 4)判断是否为UDP报文,如果是,把UDP数据存放到UDP接收寄存器模块并产生外部中断通知用户读取UDP数据,否则转入下一步; 5)判断是否为ICMPv6报文,如果是,把相应的内容提交到ICMPv6处理模块并启动ICMPv6处理模块,否则返回I)。
9.根据权利要求4所述的实现方法,其特征在于,所述ICMPv6处理模块的实现包括如下步骤: 1)等待接收数据预处理模块产生的内部中断信号,如果有,转到2),否则继续等待; 2)判断当前是否处于无状态自动配置的过程,如果是,则转到3),否则转到5); 3)判断所收到的ICMPv6报文是否为此前邻居请求报文所对应的邻居公告报文,如果是,则返回相应的状态信息并转到9),否则转到4);4)判断所收到的ICMPv6报文是否为路由器公告报文,如果是,则调用ICMPv6数据更新模块进行前缀列表或/和默认路由表的数据更新并跳到9),否则转到9); 5)判断当前是否处于地址解析的过程,如果是,则转到6),否则转到7); 6)判断所收到的ICMPv6报文是否为所请求邻节点的邻居公告报文,如果是,则调用ICMPv6数据更新模块进行邻节点高速缓存表的数据更新并转到9),否则转到9); 7)判断所收到的ICMPv6报文是否为回送请求报文,如果是,则调用ICMPv6发送控制模块产生回送应答报文,否则转到8); 8)判断所受到的ICMPv6报文是否为邻居请求报文,如果是,则调用ICMPv6发送控制模块产生邻居公告报文,否则转到9); 9)ICMPv6报文处理结束。
10.根据权利要求4所述的实现方法,其特征在于,所述ICMPv6数据更新模块的实现包括如下步骤: 1)等待启动信 号和更新类别信号,如果有转到2),否则继续等待; 2)判断更新类别是否为更新邻节点告诉缓存表,如果是,则更新邻节点高速缓存列表中未使能或剩余生存时间最短的表项并转到5),否则转到3); 3)判断更新类别是否为默认路由表,如果是,则更新默认路由表中未使能或剩余生存时间最短的表项并转到5),否则转到4); 4)判断更新类别是否为前缀列表,如果是,则更新前缀列表中未使能或剩余生存时间最短的表项并转到5),否则转到5); 5)结束数据更新。
全文摘要
本发明涉及基于FPGA的UDP/IPv6硬件协议栈,包括外部接口模块、UDP发送数据寄存器模块、UDP发送控制模块、配置寄存器模块、ICMPv6发送控制模块、发送优先级控制模块、DM9000驱动模块、接收数据预处理模块、ICMPv6处理模块、数据更新模块及UDP接收数据寄存器模块。协议栈在传输层和网络层上实现如下功能支持全球地址单播地址和链路本地单播地址、重复地址检测、无状态自动配置、地址解析、回送应答、UDP传输等功能。本发明还包含由具有自动清零功能缓存表项组成的邻节点高速缓存表、默认路由表、前缀列表,通过优级方法解决发送过程的冲突问题,不但提高发送数据的效率,且简化设计,使整个系统得以优化,节省大量存储资源。
文档编号H04L12/781GK103248579SQ20131013788
公开日2013年8月14日 申请日期2013年4月19日 优先权日2013年4月19日
发明者谭洪舟, 谢舜道, 谢凯, 刘忆琨, 陈荣军, 朱雄泳 申请人:中山大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1