CN101136841B - 基于现场可编程门阵列的隧道实现装置及方法 - Google Patents
基于现场可编程门阵列的隧道实现装置及方法 Download PDFInfo
- Publication number
- CN101136841B CN101136841B CN 200610111797 CN200610111797A CN101136841B CN 101136841 B CN101136841 B CN 101136841B CN 200610111797 CN200610111797 CN 200610111797 CN 200610111797 A CN200610111797 A CN 200610111797A CN 101136841 B CN101136841 B CN 101136841B
- Authority
- CN
- China
- Prior art keywords
- unit
- message
- data
- tunnel
- encapsulation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于现场可编程门阵列的隧道实现装置,包括:二层处理单元、路由结果处理单元;所述路由结果处理单元设置有隧道处理单元,所述隧道处理单元用于实现隧道的封装和解封装的操作;所述多路仲裁单元,设置在二层处理单元和路由表查找单元之间,用于区分当前二层处理单元和隧道处理单元的发包状态,进行两条数据链路的仲裁,并保证报文的完整性,如果隧道处理单元有报文发送给路由表查找单元,就接收此报文,否则,接收二层处理单元的报文;所述隧道处理单元和隧道封装表相连接,所述隧道封装表用于构造外层IP头部数据。本发明还公开了一种基于现场可编程门阵列的隧道实现方法。
Description
技术领域
本发明涉及数据通信领域的一种IPv6与IPv4网络互联方法,尤其涉及采用FPGA(现场可编程门阵列)的IPv6隧道实现方式。
背景技术
目前的通信设备中,处理器通常有两种解决方案:通用CPU和网络处理器(NP)。由于其结构的限制,通用CPU更适合处理算法与控制时序,而在处理报文的转发方面性能则很差,这使得通用CPU更多的是应用在低端的网络产品中。在实现IP报文的转发处理,包括包头分析、路由查找、业务分析、队列调度等操作方面,网络处理器(NP)结合了ASIC的高性能和通用CPU开发简单的优点,可以有效的缩短开发周期,进而降低开发成本。
但是它也有以下不可避免的缺点,所以NP更多的是应用在中端或中高端的路由产品中:
1)不是完全的自由定制的,在具体的实现时会受到芯片实现方式的影响;
2)在进行组合选择的时候效率很低,很简单的功能,在实现时却会导致效率大幅下降。因为NP功能的实现从本质上说还是软件的,在处理多项选择的时候效率较低。
由于ASIC的性能明显要好于前面两者,在实现高端数据产品方面ASIC有着自己得天独厚的优势,但是由于其开发维护难度上的劣势,导致在实际研发和应用中可行性会大大降低。而FPGA具有可再编程的特点,因此在新功能维护上比ASIC有较大优势,而性能上又没有太大的差别,近年来高端路由器在使用FPGA方面进行了尝试,但是这些尝试更多的是出现在IPv4 和IPv6的基本转发层面上。在业务方面,由于业务的流程需要对FPGA的硬件逻辑设计进行比较大的改变才可以实现,因此非常不利于FPGA的模块化。
基于上述网络处理器和FPGA的特点,网络处理器在实现业务方面简单易行,但是性能较差;FPGA性能很好,但是由于不利于模块化,因此实现难度较大,在业务需求改变时涉及到的功能模块较多。IPv6隧道作为IP业务,也存在这种状况。
如图1所示,现有技术中,在FPGA中实现IPv6隧道的结构如下:
IP包预处理单元101:将从链路层处理模块收到的IP报文进行简单的分析和处理,包括包长度分析、组播包处理、有效性判断等;
查找路由表(IPv4/IPv6)102:在进行过IP包的初步处理之后,将目的IP地址送到路由表查找引擎107,根据目的IP地址进行路由表的查找;
业务和封装处理单元103:根据查到的路由表信息进行业务处理,对于隧道报文送到IPv6隧道封装处理单元104,转发报文送到路由结果处理与队列调度106;
IPv6隧道封装处理单元104:根据路由表项和封装信息,进行隧道封装和解封装处理;
查找路由表(IPv6/IPv4)105:在进行过隧道封装和解封装处理之后,将处理之后的外层IP包头的目的IP地址送到路由表查找引擎107再次进行路由表的查找,根据目的IP地址进行路由表的查找;
路由结果处理与队列调度单元106:对封装之后的报文进行业务处理,并送到交换网络;
路由表查找引擎107:硬件上与路由表的接口,实现路由表查找的硬件操作,控制外部存储单元;
物理层和链路层处理单元108:完成链路层的解帧操作,根据帧类型进行分类,将三层的包送到IP包预处理单元101;
交换网络109:进行IP报文的交换转发硬件处理;
路由表信息和封装信息110:查找路由表(IPv4/IPv6)102从路由表查找引擎107得到的路由表项内容。
在结构中可以看到,如果由于业务的变化和增加,或者对IPv6隧道功能需求的变更,相应的将导致业务和封装处理单元103、路由结果处理与队列调度单元106以及最复杂的路由查找引擎107的改变,而且,如果IPv6隧道功能有新的改动时,将会导致该部分进行大幅度的改动,如果需要改变IPv6隧道功能,则会对业务和封装处理103功能带来较大的影响。对于路由查找引擎107的影响也是一样的,由于路由查找引擎107的复杂性,这个改动将使***的稳定性受到较大的考验。
另一方面,在这种结构下,查找路由表之后,对IP报文进行隧道封装处理,之后再次进行路由表的查找,只可以在本地对隧道进行单次封装,这样可以避免一些由于重复封装造成的错误,这种方式实现起来比较简单,但是却无法实现标准中制定的本地实现嵌套封装的过程。
如图2所示,现有技术中的IPv4/IPv6包基本转发FPGA结构,负责处理链路层和网络层功能的实现。
具体结构如下:
从光网络201进来的信号经过物理层处理单元202解析之后得到二层帧,在二层处理单元203中,根据查到二层映射表208得到的信息进行接口属性的处理,并解帧为网络层报文,用目的地址在查找路由表204中进行路由查找,得到路由表209的信息,在路由结果处理单元205中通过对路由表信息进行分析,判断出缩对应报文的业务处理类型和流程,并作相应的处理之后,将包头和负载组合送入队列调度单元206,进而发送到交换网络210中。其中,主控逻辑单元207用于实现***级的状态控制,而ASIC211主要实现链路层和网络层的处理。
在这个流程的处理中,ASIC211没有实现IPv6隧道的功能,而是一个基本的转发平台。
发明内容
本发明所解决的技术问题是提供一种基于现场可编程门阵列的隧道实现装置,用于实现IPv4和IPv6报文的转发,以及在此基础之上的IPv6隧道的建立。
技术方案如下:
基于现场可编程门阵列的隧道实现装置,包括:
二层处理单元,用以实现链路层的数据的处理和传输,将处理之后的网络层报文送给路由表查找单元;
路由结果处理单元,对路由表查找单元查得的结果进行分析,得到对于当前报文的业务处理方式;
其特征在于,
所述路由结果处理单元设置有隧道处理单元,所述隧道处理单元用于实现隧道的封装和解封装的操作,根据路由表的信息,如果是解封装处理,将外层报文的IP头剥离,将负载发送到多路仲裁单元;如果是封装处理,则先查找隧道封装表,将构造的外层IP头写到原IP头之前,再与负载组合,发送到多路仲裁单元;
所述多路仲裁单元,设置在二层处理单元和路由表查找单元之间,用于区分当前二层处理单元和隧道处理单元的发包状态,进行两条数据链路的仲裁,并保证报文的完整性,如果隧道处理单元有报文发送给路由表查找单元,就接收此报文,否则,接收二层处理单元的报文;
所述隧道处理单元和隧道封装表相连接,所述隧道封装表用于构造外层IP头部数据。
优选的,所述路由表查找单元和路由结果处理单元之间设置有结果FIFO、循环Buffer、头部FIFO,所述结果FIFO用于存放路由表查找的结果,也就是路由表的表项;所述头部FIFO用于存放IP报文的头部;所述循环Buffer用于存放的是与所述头部FIFO中对应的IP头部的IP报文的负载。
优选的,所述路由结果处理单元设置有:
路由结果FIFO读取单元,用于读取所述结果FIFO中存放的路由表查 找的结果;
IP FIFO读取单元,用于读取IP FIFO中存放的IP报文的头部;
IP Buffer读取单元,用于读取循环Buffer中存放的IP报文的负载;
业务分析单元,根据路由表项的内容决定IP报文的处理方式,所述处理方式包括IP报文的封装、上送或者转发;
转发处理单元,接收所述业务分析单元发送来的IP报文,对于需要转发的IP报文,将IP报文头部与负载拼装成完整的IP报文,发送到队列调度单元;对于需要隧道封装处理的IP报文,将IP报文头部与负载拼装成完整的IP报文,发送到隧道封装单元;对于需要解封装处理的IP报文,直接将IP报文的负载发送到隧道封装单元;对于本地和协议IP报文,直接上送进行处理;
所述隧道处理单元包括:
隧道封装单元,根据路由表的信息,如果是解封装处理,直接将负载发送到IP FIFO;如果是封装处理,则先查找隧道封装表,将构造的外层IP头写到原IP头之前,再与负载组合,发送到IP FIFO;
IP FIFO,用于存放封装后的IP包,并发送到多路仲裁单元。
优选的,所述多路仲裁单元设置有数据通道仲裁单元,所述数据通道仲裁单元为36位二选一数据选择器,用来选择二层处理单元和隧道封装单元需要发送到路由表查找单元的有效数据。
优选的,当隧道封装单元有数据需要传送到路由表查找单元时,如果此时数据通道仲裁单元与路由表查找单元之间没有数据正在传送,则直接传送隧道封装单元的数据;如果此时数据通道仲裁单元与路由表查找单元之间有数据正在传送,则等待当前数据传送结束,然后传送隧道封装单元的数据;如果隧道封装单元与二层处理单元同时有请求要传送数据到路由表查找单元,则优先传送隧道封装单元的数据。
优选的,所述数据通道仲裁单元设置有:
第一FIFO读取单元,为FIFO读取控制电路,用于实现二层处理单元的接口FIFO的读操作;
第二FIFO读取单元,为FIFO读取控制电路,用于实现封装报文的IPFIFO的接口FIFO的读操作;
第一多路复用器,为32位二选一数据选择器,其控制信号来自于第一FIFO读取单元和第二FIFO读取单元,当第二FIFO读取单元中有数据发送请求时,如果此时没有数据正在传送,就开始接收对应的FIFO中的数据;如果此时有数据正在传送,等待数据传送完毕,开始接收对应的FIFO中的数据;如果第一FIFO读取单元和第二FIFO读取单元同时有数据传送请求,那么优先接收第二FIFO读取单元对应的FIFO中的数据;
协议提取判断单元,接收第一多路复用器的信号,根据对应的报文的协议类型进行区分,输出信号用于控制第一等待计数器;
第一等待计数器,第一等待计数器控制数据信号使IP头和负载分离,对于IPv6报文,IP头部有40字节,对于32位数据总线,前十个时钟之内是IP头数据,后面的数据直到包结束(EOP)是负载;对于IPv4报文,IP头部有20字节,前5个时钟之内是IP头数据,后面的数据直到包结束(EOP)是负载;对于标签报文,由标签的封装决定;
一对二分路控制器,为32位数据总线开关,受等待计数器控制,当前数据是IP头部时,将数据发送到FIFO,当前数据是IP负载时,将数据发送到循环Buffer。
优选的,所述转发处理单元包括:
优先级选择器,所述优先级选择器的控制单元是由八级移位寄存器得到的路由表项构成,决定输出的控制信号;对于业务处理转发的报文,进行相应的业务处理之后,经过第三多路复用器发送到与队列调度单元接口的接口FIFO;对于隧道处理转发的报文,进行封装或者解封装处理之后,经过第三多路复用器发送到与数据通道仲裁单元接口的IP FIFO;对于本地CPU上送报文,直接发送到CPU接口。
第二多路复用器,根据第二等待计数器的控制信号将IP报文头部与负载进行组合,成为IP包;
第二等待计数器,第二等待计数器控制IP头部和负载数据的有效性, 将IP头和负载组合成为完整的IP报文;对于IPv6报文,IP头部有40字节,对于32位数据总线,前十个时钟之内是IP头数据,后面的数据直到包结束(EOP)是负载;对于IPv4报文,IP头部有20字节,前5个时钟之内是IP头数据,后面的数据直到包结束(EOP)是负载;对于标签报文,由标签的封装决定。
所述隧道封装单元包括:
封装表查找电路,对于需要进行封装处理的报文,根据路由表中的封装信息进行封装表的查找,得到外层IP头信息,构造成为外层IP头;
第三多路复用器,为32位数据总线开关,由优先级选择器控制,当前数据是待转发的数据时,将数据发送到接口FIFO;当前数据是隧道封装报文时,将数据发送到封装报文的IP FIFO。
本发明所解决的另一个技术问题是提供一种基于现场可编程门阵列的隧道实现方法,在支持双协议基本转发的FPGA中,以模块化的简单的方法实现了IPv6隧道,包括6in4隧道、4in6隧道、6to4隧道以及隧道中继。
技术方案如下:
基于现场可编程门阵列的隧道实现方法,包括以下步骤:
(1)当收到IPv4/IPv6报文时,查IPv4/IPv6路由表;
(2)当需要隧道处理和封装处理时,进行封装;
(3)查IPv6/IPv4路由表;
(4)对需要转发的报文进行队列调度处理,发送到交换网络。
进一步,步骤(2)中,封装的步骤如下:
a、进行4in6封装;
b、根据IPv4路由表信息读取4in6封装表项;
c、判断封装之后报文的长度是否大于MTU,如果不大于MTU,进行正常的封装和转发处理,否则,将封装之后的报文上送CPU由上层协议进行分片处理;
d、用封装表信息组合成IPv6包头;
e、将IPv6包头写到IPv4包头前,完成4in6的封装处理操作。
进一步,步骤(2)还包括解封装的步骤:
(21)取出IPv4包头中的协议号字段;
(22)判断协议号是否错误,当协议号错误,则说明原来的报文有错误,直接丢弃,当协议号正确,进行解封装处理;
(23)从IPv4头后面取出IPv6包。
采用本发明的结构和方法,可以有效地解决现有技术在FPGA中实现IPv6隧道困难的问题,尤其是可以解决实现嵌套隧道困难的问题,另外,本发明的方法解决了传统隧道封装处理中由于硬件结构的限制导致的嵌套隧道封装困难的问题。该方法在支持双协议基本转发的FPGA中,以模块化的简单的方法实现了IPv6隧道,包括6in4隧道、4in6隧道、6to4隧道以及隧道中继。
本发明的结构和方法克服了现有技术在FPGA中实现IPv6隧道困难,尤其是实现嵌套隧道困难的缺点,现有技术或者不能实现嵌套封装,即使实现时,也会由于IP包头部分不断增加而受限,本发明在每一次封装之后都将IP报文头部与负载分离开,从根本上避免了这个问题,实现了一种基于硬件的IPv6隧道实现方法。本发明在支持双协议基本转发的FPGA中,以模块化的简单的方法实现IPv6隧道,这里的隧道包括6in4隧道、4in6隧道、6to4隧道以及隧道中继。本发明装置在硬件的基础上实现IPv4和IPv6报文的转发,以及在此基础之上的IPv6隧道的建立。
附图说明
图1是现有技术在FPGA中实现IPv6隧道的结构示意图;
图2是现有技术中的IPv4/IPv6包基本转发FPGA结构示意图;
图3是基于FPGA的IPv6隧道实现装置的结构示意图;
图4是6in4(6to4)封装的格式;
图5是4in6封装的格式;
图6是路由结果处理单元与IPv6隧道(封装/解封装)处理单元的具体结构示意图;
图7是数据通道仲裁单元结构示意图;
图8是路由结果处理单元和隧道封装单元的结构示意图;
图9是封装流程与基本转发的流程图;
图10是封装过程的流程图;
图11是解封装过程的流程图。
具体实施方式
下面结合附图对本发明的优选实施例作详细描述。
如图3所示,基于FPGA的IPv6隧道实现装置,包括下列结构:
ASIC 301:本发明所实现的FPGA。
光网络201:光纤通信网络,报文的物理层传输载体。
物理层处理单元202:从光信号中提取报文数据,转换为电信号,送到二层处理单元203。
二层处理单元203:在物理层处理单元202,将二层帧进行解帧处理,根据帧类型对报文进行分类,并将剥离了二层头的IP报文送到路由表查找单元204。
路由表查找单元(IPv4/IPv6)204:包括IP处理单元和路由查找引擎,IP处理单元将IP包头与负载分离开来,IP包头送到与路由结果处理单元205接口的FIFO,负载送到与路由结果处理单元205接口的循环Buffer805(参见图6),将目的IP地址送到路由查找引擎进行路由表的查找,路由查找的结果放在结果FIFO803(参见图6)中等待路由结果处理单元205的读取。
路由结果处理单元205:主要用于业务分析与实现,根据路由表的查找结果确定当前报文的业务处理过程,并加以实现。实现业务之后的报文与负载合并,一起送到队列调度单元206,进而发送到交换网络210。IPv6隧道(封装/解封装)处理单元310设置在该路由结果处理单元205。
队列调度单元206:用于实现报文的队列调度算法,将报文发送到交换网络。
交换网络210:对报文进行交换,实现转发。
多路仲裁单元309:用于区分当前二层处理单元203和IPv6隧道(封装/解封装)处理单元310的发包状态,进行两条数据链路的仲裁,并保证报文的完整性。如果IPv6隧道(封装/解封装)处理单元310有报文发送给路由表查找(IPv4/IPv6)单元204,就接收此报文,否则,接收二层处理单元203的报文;
IPv6隧道处理单元310:用于实现隧道的封装和解封装的操作,根据路由表的信息,如果是解封装处理,将外层报文的IP头剥离,直接将负载发送到多路仲裁单元309;如果是封装处理,则先要进行封装表项的查找操作,将构造的外层IP头写到原IP头之前,再与负载组合,发送到多路仲裁单元309。
主控逻辑单元207:CPU控制逻辑。
二层映射表208:二层的ND和MAC信息表。
路由表(IPv4/IPv6)209:IP层的路由表项。
4in6(6in4)隧道封装表314:隧道封装的外层IP头信息,用于构造外层IP头部数据。
从图3中的结构可以看到,与基本转发平台对应的更改只是在路由结果处理单元205中加入了一个独立的IPv6隧道处理单元310,在路由表查找单元204和二层处理单元203之间加入了多路仲裁单元309。上述IPv6隧道处理单元310和多路仲裁单元309对于基本转发平台来说是独立的,这种独立主要体现在接口上。由于基本转发平台的结构和内部外部接口不需要有任何变化,使得整个***能够完全实现模块化。
在FPGA收到IPv4报文之后查找IPv4路由表313,得到转发信息和业务信息,路由结果处理单元205对此进行分析,如果不需要进行IPv6隧道的封装或解封装处理,就进入到转发处理模块,送交队列调度单元206,否则的话,就进入到IPv6隧道处理单元310中进行隧道的处理。在隧道处理单元310中,分为封装和解封装两种操作步骤。报文在这里经过4in6封装 被封装为IPv6包,或者经过6in4解封装被解封装为IPv6包,返回查找路由表模块305再次进行路由表的查找,但此时查找的是IPv6的路由表,而不是IPv4的路由表。同样在路由结果处理单元205中进行业务分析,并将包送到队列调度单元206发送到交换网络210。
IPv4封装成IPv6报文的格式如图5所示。
同样,在FPGA收到IPv6报文时,查找IPv6路由表,得到转发信息和业务信息,路由结果处理单元205对此进行分析,如果不需要进行IPv6隧道的封装或解封装处理,就进入到转发处理模块,送交队列调度单元206,否则的话,就进入到IPv6隧道处理单元310中进行隧道的处理。在IPv6隧道处理单元310中,分为封装和解封装两种操作。报文在这里经过6in4封装被封装为IPv4包,或者经过4in6解封装被解封装为IPv4包,返回路由表查找单元204再次进行路由表的查找,但此时查找的是IPv4的路由表,而不是IPv6的路由表。同样在路由结果处理单元205中进行业务分析,并将包送到队列调度单元206,进而发送到交换网络210。
IPv6封装成IPv4报文的格式如图4所示。
如图6所示,描述的是路由结果处理单元205与IPv6隧道(封装/解封装)处理单元310的具体结构。
数据通道仲裁单元601:为36位二选一数据选择器,用来选择二层处理单元203和隧道封装单元612需要发送到路由表查找单元204的有效数据,设置在多路仲裁单元309中。当隧道封装单元612有数据需要传送到路由表查找单元204时,如果此时数据通道仲裁单元601与路由表查找单元204中间没有数据正在传送,那么就直接传送隧道封装单元612的数据;如果此时数据通道仲裁单元601与路由表查找单元204中间有数据正在传送,那么等待当前数据传送结束,就开始传送隧道封装单元612的数据;如果隧道封装单元612与二层处理单元203同时有请求要传送数据到路由表查找单元204,则优先传送隧道封装单元612的数据。
路由表查找单元(IPv4/IPv6)204:包括IP处理单元和路由查找引擎,IP处理单元将IP包头与负载分离开来,IP包头送到与路由结果处理单元 205接口的头部FIFO804,负载送到与路由结果处理单元205接口的循环Buffer605,将目的IP地址送到路由查找引擎进行路由表的查找,路由查找的结果放在结果FIFO803中等待路由结果处理单元205的读取。
结果FIFO603:在这个结果FIFO中存放路由表查找的结果,也就是路由表的表项。
头部FIFO 604:其中存放的是IP报文的头部。
循环Buffer605:这个循环Buffer605中存放的是与头部FIFO 604中对应的IP头部的IP报文的负载。
IP FIFO读取单元606:FIFO读取控制逻辑,是实现头部FIFO604的读取电路。
IP Buffer读取单元607:循环Buffer605的读取控制逻辑,是实现循环Buffer 605的读取电路;
IP FIFO608:用于存储由隧道封装单元612进行过封装或者解封装的IP报文。
路由结果FIFO读取单元609:为FIFO读取控制逻辑,为实现结果FIFO
603的读取电路。
业务分析单元610:业务分析单元610根据路由表项的内容决定IP报文的处理方式,决定是封装、上送还是转发,业务分析单元610主要由组合选择器构成,选择控制信号是由路由表项组成,输出信号是不同的业务选择标志。
转发处理单元611:对于需要转发的IP报文,转发处理单元611将IP报文头部与负载拼装成完整的IP报文,发送到队列调度单元206;对于需要隧道封装处理的报文,同样将IP报文头部与负载拼装成完整的IP报文,发送到隧道封装单元612;对于需要解封装处理的报文,直接将IP报文负载发送到隧道封装单元612;对于本地和协议报文,直接上送进行处理。
隧道封装单元612:根据路由表的信息,如果是解封装处理,直接将负载发送到IP FIFO 608,如果是封装处理,则先要进行隧道封装表814的查 找操作,将构造的外层IP头写到原IP头之前,再与负载组合,发送到IP FIFO608。
路由表(IPv4/IPv6)209:是路由表项存储电路。
4in6(6in4)隧道封装表314:是隧道封装表项存储电路。
队列调度单元206:用于实现报文的队列调度算法,将报文发送到交换网络210。
路由结果处理单元205包括上述的业务和隧道分析电路。
如图7所示,数据通道仲裁单元的实现电路如下:
第一FIFO读取单元701:为FIFO读取控制电路,用于实现二层处理单元203的接口FIFO的读操作。
第二FIFO读取单元702:为FIFO读取控制电路,用于实现封装报文的IP FIFO608的接口FIFO的读操作。
第一多路复用器703:为32位二选一数据选择器,其控制信号来自于第一FIFO读取单元701和第二FIFO读取单元702,当第二FIFO读取单元702中有数据发送请求时,如果此时没有数据正在传送,就开始接收对应的FIFO中的数据;如果此时有数据正在传送,等待数据传送完毕,开始开始接收对应的FIFO中的数据;如果第一FIFO读取单元701和第二FIFO读取单元702同时有数据传送请求,那么优先接收第二FIFO读取单元702对应的FIFO中的数据。
协议提取判断单元704:根据对应的报文的协议类型进行区分,输出信号控制后面的等待计数器705。
等待计数器705:等待计数器705的控制数据信号使IP头和负载分离,对于IPv6报文,IP头部有40字节,对于32位数据总线,前十个时钟之内是IP头数据,后面的数据直到EOP(数据末尾)是负载;对于IPv4报文,IP头部有20字节,前5个时钟之内是IP头数据,后面的数据直到EOP是负载;对于标签报文,由标签的封装决定。
一对二分路控制706:为32位数据总线开关,由等待计数器705控制,当前数据是IP头部时,将数据发送到FIFO707,当前数据是IP负载时,将 数据发送到循环Buffer 708。
FIFO 707:用于存储IP报文头部。
循环Buffer605:用于存储IP报文负载。
参照图8所示,路由结果处理单元205和隧道封装单元612的具体结构如下:
八级移位寄存器801:由于路由表项是32字节,对于32位数据总线,要等到8个时钟才能得到全部路由表内容,在八级移位寄存器801之后,就是拼装好的完整的路由表项。
优先级选择器802:该优先级选择器802的控制单元是由八级移位寄存器801得到的路由表项构成,直接决定输出的控制信号,分别分析为业务处理转发、隧道处理转发和本地CPU上送处理。对于业务处理转发的报文,进行相应的业务处理之后,经过第三多路复用器807发送到与队列调度单元307接口的FIFO 808;对于隧道处理转发的报文,进行封装或者解封装处理之后,经过第三多路复用器807发送到与数据通道仲裁单元601接口的IPFIFO 608;对于本地CPU上送报文,直接发送到CPU接口。
第二多路复用器803:根据等待计数器的控制信号将IP报文头部与负载进行组合,成为IP包。
等待计数器804:等待计数器控制IP头部和负载数据的有效性,将IP头和负载组合成为完整的IP报文,对于IPv6报文,IP头部有40字节,对于32位数据总线,前十个时钟之内是IP头数据,后面的数据直到EOP是负载,所以前十个时钟的时候传送IP头数据,后面传送负载数据,就构成了一个完整的报文;对于IPv4报文,IP头部有20字节,前5个时钟之内是IP头数据,后面的数据直到EOP是负载;对于标签报文,由标签的封装决定。
封装表查找电路805:对于需要进行封装处理的报文,根据路由表中的封装信息进行封装表的查找,得到外层IP头信息,构造成为外层IP头。
4in6(6in4)隧道封装表314:存储隧道封装处理的外层IP头信息,由支撑层面完成。
第三多路复用器807:为32位数据总线开关,由优先级选择器802控制,当前数据是待转发数据时,将数据发送到接口FIFO 808;当前数据隧道封装报文时,将数据发送到封装报文的IP FIFO 608。
接口FIFO 808:路由结果处理单元205与队列调度单元206的接口,用于存储发送到交换网络的IP报文。
参照图9所示,封装流程与基本转发流程如下:
在IPv6隧道处理模块进行处理时,分为两种操作一一封装和解封装。
步骤S901:收到IPv4/IPv6报文。
在查找路由表单元305收到IP层报文,包括IP头部和负载。
步骤S902:查IPv4/IPv6路由表。
将目的IP地址送到路由查找引擎进行路由表的查找。
步骤S903:判断是否需要隧道处理。
路由结果处理单元204根据路由查找的结果(路由表项)判断是否需要进行隧道的封装或解封装处理,如果不需要,执行步骤909,如果需要,执行步骤904。
步骤S904:判断是否需要封装处理。
在隧道处理流程中,要判断是需要进行封装还是解封装,如果是需要进行封装操作,执行步骤905,否则解封装,执行步骤910。
步骤S905:进行4in6(6in4,6to4)封装。
查找隧道封装表,根据这个封装表构造外层IP头部,并将构造的IP头部贴在原IP报文外面,形成新的IP包。
步骤S906:查IPv6/IPv4路由表。
对进行过隧道封装或解封装操作的报文重新查找路由表。
步骤S907:进行业务处理。
重新进行业务处理,包括对是否需要进行隧道处理进行判断;
步骤S908:对需要转发的报文进行队列调度处理,发送到交换网络;
步骤S909:继续处理IPv4/IPv6,处理其他业务。
步骤S910:进行6in4(6to4,4in6)解封装。
进行隧道的解封装操作,将外层Ip包头剥离,即:只发送IP负载到多路仲裁单元309。
对于解封装,目标是去掉封装在内层IP报文外面的IP头。由于路由结果处理306收到的报文已经被分为IP头和负载两个部分,因此这时只需要将负载数据发送到多路仲裁单元309,就是内层IP包的包头和负载。
对于4in6封装,首先要根据从路由表中得到的封装索引信息进行封装表的查找,从封装表中得到要封装的IPv6包头信息,在移位寄存器组中组合成IPv6包头,并且需要对包头中的Hop-limit、包长等信息重新计算,得到正确的IPv6包头,并且将这个报文头写到IPv4包头之前。对于原IPv4包头的TTL信息,也需要重新计算。在写IPv6包头时,IPv6包头长度是40字节(320位),假设总线宽度是32位,所以被封装的IPv4报文要等待10个时钟,这10个时钟的时间里,IPv6包头内容被依次传出,在第11个时钟开始,将被封装的IPv4报文传出,在这段时间里,数据始终是有效的,因此,在接收端看到的是已经封装好的4in6报文。
这里提及的4in6封装表,是由支撑层面根据对应隧道的建立信息得到的,包括封装报文头的版本号、源地址、目的地址等信息。支撑层面根据这些基本信息为每个隧道虚接口构建一个基本的外层报文头部。这样当有报文的出接口是这条隧道是,通过查找封装表,得到对应的外层报文头部,可以直接贴到内层报文之前。
对于6in4封装,过程与4in6封装是一样的,区别在于IPv4包头长度与IPv6包头不同,所以等待的时钟也不同。
参照图10所示,封装的实现流程如下:
步骤S1001:进行4in6封装。
将IPv4报文封装成为IPv6报文。
步骤S1002:根据IPv4路由表信息读取4in6封装表项。
根据IPv4路由表信息读取外层IPv6报文的报文头信息,用于组合成IPv6包头。
步骤S1003:判断包长是否大于MTU。
判断封装之后报文的长度是否大于MTU,如果不大于MTU,就进行正常的封装和转发处理,执行步骤S1004;如果封装之后报文的长度是大于MTU,执行步骤S1007,需要上送CPU由上层协议进行分片处理。
步骤S1004:用封装表信息组合成IPv6包头。
在步骤1002步骤得到4in6封装表项,根据这些封装表项和路由表中的其他表项,构造外层IPv6报文头。
步骤S1005:将IPv6包头写到IPv4包头前。
在IPv4包头前面封装上704构造的IPv6包头,完成4in6的封装处理操作。
步骤S1006:结束封装处理,封装处理结束。
步骤S1007:上送CPU进行分片。
对于封装之后包长过大的报文(大于IPv6MTU),上送CPU,由上层协议进行分片处理。
参照图11所示,解封装的过程如下:
步骤S1101:进行6in4(6to4)解封装。
将IPv4报文解封装成为IPv6报文。
步骤S1102:从IPv4头中取出协议号。
取出IPv4包头中的协议号字段。
步骤S 1103:判断协议号是41。
6in4封装的报文,协议号应该是41,如果不是41,那么说明原来的报文有错误,直接丢弃,执行步骤S1106;如果协议号是41,就进行解封装处理,执行步骤S1104。
步骤S1104:直接从IPv4头后面取出数据(IPv6包)。
直接将原来包的负载发送到多路仲裁模块309,作为新的IPv6报文。
步骤S1105:结束解封装处理,解封装处理结束。
步骤S1106:上送CPU进行处理。
对于解封装之后包长过大的报文(大于IPv4MTU),上送CPU,由上层协议进行分片处理。
综上,本发明实现了一种基于FPGA的IPv4和IPv6基本转发平台,并在此平台的基础上,加入了IPv6隧道的电路结构,使得可以在硬件的基础上实现IPv4和IPv6网络的连接,在组合选择的方面的性能方面得到很大改善。
Claims (10)
1.一种基于现场可编程门阵列的隧道实现装置,包括:
二层处理单元,用以实现链路层的数据的处理和传输,将处理之后的网络层报文送给路由表查找单元;
路由结果处理单元,对路由表查找单元查得的结果进行分析,得到对于当前报文的业务处理方式;
其特征在于,
所述路由结果处理单元设置有隧道处理单元,所述隧道处理单元用于实现隧道的封装和解封装的操作,根据路由表的信息,如果是解封装处理,将外层报文的IP头剥离,将负载发送到多路仲裁单元;如果是封装处理,则先查找隧道封装表,将构造的外层IP头写到原IP头之前,再与负载组合,发送到多路仲裁单元;
所述多路仲裁单元,设置在二层处理单元和路由表查找单元之间,用于区分当前二层处理单元和隧道处理单元的发包状态,进行两条数据链路的仲裁,并保证报文的完整性,如果隧道处理单元有报文发送给路由表查找单元,就接收此报文,否则,接收二层处理单元的报文;
所述隧道处理单元和隧道封装表相连接,所述隧道封装表用于构造外层IP头部数据。
2.根据权利要求1所述的基于现场可编程门阵列的隧道实现装置,其特征在于,所述路由表查找单元和路由结果处理单元之间设置有结果FIFO、循环Buffer、头部FIFO,所述结果FIFO用于存放路由表查找的结果,也就是路由表的表项;所述头部FIFO用于存放IP报文的头部;所述循环Buffer用于存放的是与所述头部FIFO中对应的IP头部的IP报文的负载。
3.根据权利要求2所述的基于现场可编程门阵列的隧道实现装置,其特征在于,所述路由结果处理单元设置有:
路由结果FIFO读取单元,用于读取所述结果FIFO中存放的路由表查找的结果;
IPFIFO读取单元,用于读取头部FIFO中存放的IP报文的头部;
IPBuffer读取单元,用于读取循环Buffer中存放的IP报文的负载;
业务分析单元,根据路由表项的内容决定IP报文的处理方式,所述处理方式包括IP报文的封装、上送或者转发;
转发处理单元,接收所述业务分析单元发送来的IP报文,对于需要转发的IP报文,将IP报文头部与负载拼装成完整的IP报文,发送到队列调度单元;对于需要隧道封装处理的IP报文,将IP报文头部与负载拼装成完整的IP报文,发送到隧道封装单元;对于需要解封装处理的IP报文,直接将IP报文的负载发送到隧道封装单元;对于本地和协议IP报文,直接上送进行处理;
所述隧道处理单元包括:
隧道封装单元,根据路由表的信息,如果是解封装处理,直接将负载发送到IP FIFO;如果是封装处理,则先查找隧道封装表,将构造的外层IP头写到原IP头之前,再与负载组合,发送到IP FIFO;
IP FIFO,用于存放封装后的IP包,并发送到多路仲裁单元。
4.根据权利要求3所述的基于现场可编程门阵列的隧道实现装置,其特征在于,所述多路仲裁单元设置有数据通道仲裁单元,所述数据通道仲裁单元为36位二选一数据选择器,用来选择二层处理单元和隧道封装单元需要发送到路由表查找单元的有效数据。
5.根据权利要求4所述的基于现场可编程门阵列的隧道实现装置,其特征在于,当隧道封装单元有数据需要传送到路由表查找单元时,如果此时数据通道仲裁单元与路由表查找单元之间没有数据正在传送,则直接传送隧道封装单元的数据;如果此时数据通道仲裁单元与路由表查找单元之间有数据正在传送,则等待当前数据传送结束,然后传送隧道封装单元的数据;如果隧道封装单元与二层处理单元同时有请求要传送数据到路由表查找单元,则优先传送隧道封装单元的数据。
6.根据权利要求4所述的基于现场可编程门阵列的隧道实现装置,其特征在于,所述数据通道仲裁单元设置有:
第一FIFO读取单元,为FIFO读取控制电路,用于实现二层处理单元的接口FIFO的读操作;
第二FIFO读取单元,为FIFO读取控制电路,用于实现封装报文的IP
FIFO的接口FIFO的读操作;
第一多路复用器,为32位二选一数据选择器,其控制信号来自于第一FIFO读取单元和第二FIFO读取单元,当第二FIFO读取单元中有数据发送请求时,如果此时没有数据正在传送,就开始接收对应的FIFO中的数据;如果此时有数据正在传送,等待数据传送完毕,开始接收对应的FIFO中的数据;如果第一FIFO读取单元和第二FIFO读取单元同时有数据传送请求,那么优先接收第二FIFO读取单元对应的FIFO中的数据;
协议提取判断单元,接收第一多路复用器的信号,根据对应的报文的协议类型进行区分,输出信号用于控制第一等待计数器;
第一等待计数器,第一等待计数器控制数据信号使IP头和负载分离,对于IPv6报文,IP头部有40字节,对于32位数据总线,前十个时钟之内是IP头数据,后面的数据直到包结束(EOP)是负载;对于IPv4报文,IP头部有20字节,前5个时钟之内是IP头数据,后面的数据直到包结束(EOP)是负载;对于标签报文,由标签的封装决定;
一对二分路控制器,为32位数据总线开关,受等待计数器控制,当前数据是IP头部时,将数据发送到所述数据通道仲裁单元内部的FIFO中,当前数据是IP负载时,将数据发送到循环Buffer。
7.根据权利要求4所述的基于现场可编程门阵列的隧道实现装置,其特征在于,所述转发处理单元包括:
优先级选择器,所述优先级选择器的控制单元是由八级移位寄存器得到的路由表项构成,决定输出的控制信号;对于业务处理转发的报文,进行相应的业务处理之后,经过第三多路复用器发送到与队列调度单元接口的接口FIFO;对于隧道处理转发的报文,进行封装或者解封装处理之后,经过第三多路复用器发送到与数据通道仲裁单元接口的IP FIFO;对于本地CPU上送报文,直接发送到CPU接口;
第二多路复用器,根据第二等待计数器的控制信号将IP报文头部与负载进行组合,成为IP包;
第二等待计数器,第二等待计数器控制IP头部和负载数据的有效性,将IP头和负载组合成为完整的IP报文;对于IPv6报文,IP头部有40字节,对于32位数据总线,前十个时钟之内是IP头数据,后面的数据直到包结束(EOP)是负载;对于IPv4报文,IP头部有20字节,前5个时钟之内是IP头数据,后面的数据直到包结束(EOP)是负载;对于标签报文,由标签的封装决定;
所述隧道封装单元包括:
封装表查找电路,对于需要进行封装处理的报文,根据路由表中的封装信息进行封装表的查找,得到外层IP头信息,构造成为外层IP头;
第三多路复用器,为32位数据总线开关,由优先级选择器控制,当前数据是待转发的数据时,将数据发送到接口FIFO;当前数据是隧道封装报文时,将数据发送到封装报文的IP FIFO。
8.一种基于现场可编程门阵列的隧道实现方法,包括以下步骤:
(1)当现场可编程门阵列FPGA收到IPv4/IPv6报文时,查IPv4/IPv6路由表;
(2)当需要隧道处理和封装处理时,进行封装,具体包括:如果是IPv4报文需要隧道处理和封装处理,则进行4in6封装;
(3)查IPv6/IPv4路由表,重新进行业务处理;
(4)对需要转发的报文进行队列调度处理,发送到交换网络。
9.根据权利要求8所述的基于现场可编程门阵列的隧道实现方法,其特征在于,步骤(2)中,封装的步骤如下:
a、进行4in6封装;
b、根据IPv4路由表信息读取4in6封装表项;
c、判断封装之后报文的长度是否大于MTU,如果不大于MTU,进行正常的封装和转发处理,否则,将封装之后的报文上送CPU由上层协议进行分片处理;
d、用封装表信息组合成IPv6包头;
e、将IPv6包头写到IPv4包头前,完成4in6的封装处理操作。
10.根据权利要求8所述的基于现场可编程门阵列的隧道实现方法,其特征在于,步骤(2)还包括解封装的步骤:
(21)取出IPv4包头中的协议号字段;
(22)判断协议号是否错误,当协议号错误,则说明原来的报文有错误,直接丢弃,当协议号正确,进行解封装处理;
(23)从IPv4头后面取出IPv6包。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200610111797 CN101136841B (zh) | 2006-08-28 | 2006-08-28 | 基于现场可编程门阵列的隧道实现装置及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200610111797 CN101136841B (zh) | 2006-08-28 | 2006-08-28 | 基于现场可编程门阵列的隧道实现装置及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101136841A CN101136841A (zh) | 2008-03-05 |
CN101136841B true CN101136841B (zh) | 2011-08-24 |
Family
ID=39160686
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200610111797 Expired - Fee Related CN101136841B (zh) | 2006-08-28 | 2006-08-28 | 基于现场可编程门阵列的隧道实现装置及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101136841B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7957399B2 (en) * | 2008-12-19 | 2011-06-07 | Microsoft Corporation | Array-based routing of data packets |
CN102014039B (zh) * | 2009-09-07 | 2015-05-06 | 华为技术有限公司 | 数据传输方法和接入点 |
CN103248574B (zh) * | 2013-05-07 | 2016-08-31 | 汉柏科技有限公司 | 一种IPv4网络和IPv6网络的混网方法及*** |
CN103701776A (zh) * | 2013-12-09 | 2014-04-02 | 无锡市同威科技有限公司 | 基于fpga的网络数据卡及数据传输方法 |
US9479475B1 (en) * | 2014-03-17 | 2016-10-25 | Michael E. Mazarick | System and method for IPv4 to IPv6 transition rather than an outage |
CN105763659B (zh) * | 2014-12-16 | 2019-02-05 | 中国电信股份有限公司 | 一种IPv6隧道报文封装方法及*** |
JP6608688B2 (ja) * | 2015-12-02 | 2019-11-20 | ルネサスエレクトロニクス株式会社 | 半導体装置 |
CN106656799B (zh) * | 2017-02-14 | 2019-12-03 | 湖南基石通信技术有限公司 | 一种基于无线mesh网络的报文转发方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1571360A (zh) * | 2003-07-18 | 2005-01-26 | 华为技术有限公司 | 站内自动隧道的实现方法 |
-
2006
- 2006-08-28 CN CN 200610111797 patent/CN101136841B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1571360A (zh) * | 2003-07-18 | 2005-01-26 | 华为技术有限公司 | 站内自动隧道的实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101136841A (zh) | 2008-03-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101136841B (zh) | 基于现场可编程门阵列的隧道实现装置及方法 | |
CN101325551B (zh) | 一种报文处理方法和报文处理装置 | |
CN106790104B (zh) | 多协议融合***、节点之间的ip通信及fc-ae-1553通信方法 | |
CN101247308B (zh) | 基于网络处理器实现IPv6穿越IPv4的隧道报文处理方法 | |
CN100386984C (zh) | Vlan服务器 | |
EP0871309B1 (en) | Router device and frame transfer method using datalink layer frame switching | |
CN101001209B (zh) | 变长数据包的异种网络交换***及其方法以及采用信号环接口的地址表构成方法 | |
JP3816246B2 (ja) | カットスルーパス制御方法 | |
CN101159687B (zh) | 一种多通道通信传输数据的***和装置与方法 | |
CN101098304A (zh) | 路由器和地址标识信息管理服务器 | |
CN106789609A (zh) | Fc‑eg网关、光纤通道和以太网之间的通信转换方法 | |
CN101573913A (zh) | 用于多播路由选择的方法和设备 | |
CN101001196A (zh) | 一种建立伪线隧道并利用其传送报文的方法和装置 | |
CN101729404A (zh) | 使层2主机地址与网络中的交换机屏蔽开的机制 | |
CN102957619A (zh) | 虚拟路由***及方法 | |
CN114301995A (zh) | 实时工业以太网协议的转换切换与互通融合***及其方法 | |
JP2000078205A (ja) | ネットワ―ク間デ―タ伝送方法 | |
JPH01241243A (ja) | パケット交換装置 | |
CN101753406B (zh) | 实现自动隧道二次路由的装置及报文转发方法 | |
EP1718000A1 (en) | Packet communication network, route control server, route control method, packet transmission device, admission control server, light wavelength path setting method, program, and recording medium | |
CN103414660A (zh) | 一种支持传感接入和光分组传输的传感网络的节点装置 | |
CN103401739B (zh) | 一种支持传感接入和光分组传输的传感网络的节点装置 | |
JP2846464B2 (ja) | データのスイッチングノード | |
CN100356736C (zh) | 一种ip网络抖动模拟的方法 | |
JP2852072B2 (ja) | ネツトワーク・システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110824 Termination date: 20150828 |
|
EXPY | Termination of patent right or utility model |