CN101841438B - 一种访问存储海量并发tcp流的流记录的方法或系统 - Google Patents
一种访问存储海量并发tcp流的流记录的方法或系统 Download PDFInfo
- Publication number
- CN101841438B CN101841438B CN2010101408630A CN201010140863A CN101841438B CN 101841438 B CN101841438 B CN 101841438B CN 2010101408630 A CN2010101408630 A CN 2010101408630A CN 201010140863 A CN201010140863 A CN 201010140863A CN 101841438 B CN101841438 B CN 101841438B
- Authority
- CN
- China
- Prior art keywords
- message
- tcp
- tcp stream
- stream record
- record
- 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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了访问存储海量并发TCP流的流记录的方法和系统。所述方法,包括下列步骤:构建二维TCP流记录表、流记录索引表和TCP流记录缓存;根据接收到的报文的四元组的哈希运算结果选择一个与存储阵列对应的报文先入先出队列存储报文,并更新流记录索引表;轮询访问报文先入先出队列,从中读取待处理报文;根据当前待处理报文的四元组哈希运算结果访问流记录索引表和TCP流记录缓存,判断TCP流记录缓存中是否存在当前待处理报文的相关TCP流记录,若是直接访问TCP流记录缓存;否则按照访问索引指示的顺序访问TCP流记录表;并更新TCP流的状态,并同时更新TCP流记录缓存、流记录索引表和TCP流记录表。
Description
技术领域
本发明涉及信息安全技术领域,特别是涉及一种访问存储海量并发TCP流的流记录的方法和系统。
背景技术
随着电脑的广泛应用和网络的不断普及,来自网路内部和外部的危险和犯罪也日益增多。而当前流行的网络攻击方式和种类逐步向网络上层延伸,攻击行为常常掩藏在7层应用的数据流中,大量的攻击数据流都是封装在标准的应用协议数据流中,通过通用的端口,进行伪装,欺骗无法TCP流重组和协议分析的网络安全产品。所以不管是基于旁路监听的入侵检测系统(IDS)、能够实现数据转发的入侵防护系统(IPS)、还是将多种网络安全功能融合在一起的统一威胁管理技术,为了提升检测的性能和准确性,都已将TCP流重组列入产品必需具备的功能。
常见的入侵检测系统如libnids和snort,在实现TCP流重组的时候都采用了相似的方式,具体过程如下:将报文的四元组信息作为输入,经过一个hash函数计算出一个值,用这个值作为访问全局hash表的索引获得一个hash表项。然后遍历该hash表项所指的线性链表,比较链表上各TCP流记录存储的四元组和待处理报文的四元组,直到发生匹配,就找到了待处理报文相关的TCP流记录,然后就可以依照TCP协议所规定的内容进行这条TCP流的重组处理。
骨干网络是众多局域网的“聚合点”,骨干网络上的安全防护是非常重要的一个环节,是能给所有的网络分支和用户都带来好处,综合防护、提升全社会网络安全环境的重要手段。采用上面描述的传统TCP流重组方法的入侵检测防护系统,对于普通场景下的应用,如办公楼,住宅小区的网络出入口,是可以胜任的。但当面对骨干网络上面的高速网络数据,在海量并发TCP流时,基于链表保存TCP流记录就会遇到困难。这是由于报文到来速度过快,系统来不及访问TCP流记录造成的。一个TCP流记录一般需要64字节或更多,当系统需要维护百万规模的海量并发TCP流时所需存储空间很大,TCP流记录只能存储在动态随机存储器(Dynamic Random Access Memory,DRAM)中。而系统维护的并发TCP流越多,被放到同一条线性链表上的TCP流记录就越多。所以在获取待处理报文相关的TCP流记录时可能需要读取多个TCP流记录。而且系统建立和关闭一条TCP流时需要新建和删除一个TCP流记录,为了维护TCP流记录所处的线性链表,还需要访问链表上临近的TCP流记录,修改对应指针。也就是说每处理一个报文都很可能要访问多个不同的TCP流记录。而基于链表保存TCP流记录,每个TCP流记录在DRAM中的位置是随机分布的,基于DRAM的实现原理,对于访问非连续的地址无法通过突发(burst)提高访问带宽,所以每次访问一个TCP流记录花费的时间都相当于访问一次DRAM所需的延迟,一般为几十到一百纳秒。
通过统计骨干网上的真实流量获知骨干网上的平均报文长度为300字节左右,这意味着系统如果想要处理10Gpbs的网络流量,就必须平均每300纳秒内处理完一个报文。可以发现即使不计算TCP流重组具体操作的开销,光是获取每个报文的TCP流记录对于基于链表保存TCP流记录的系统都是很困难的任务,更不用去考虑实现骨干网流量的入侵检测和防护。
发明内容
本发明的目的在于提供一种访问存储海量并发TCP流的流记录的方法和系统。其能够实现海量并发TCP流的流记录的存储和访问,为TCP流重组提供帮助。
为实现本发明的目的而提供的一种访问存储海量并发TCP流的流记录的方法,所述方法,包括下列步骤:
步骤100.初始化模块构建用于存储TCP流记录的二维TCP流记录表存储于DRAM中,DRAM中的每一个存储阵列存储TCP流记录表的若干行TCP流记录,根据所述TCP流记录表建立流记录索引表存储于SRAM中,构建用于保存最近访问的发生数据传输的TCP流的TCP流记录缓存存储于SRAM中;
步骤200.报文接收模块根据接收到的报文的四元组进行哈希运算,根据运算结果选择一个与所述DRAM中的存储阵列对应的报文先入先出队列存储所述报文,并相应更新所述流记录索引表;
步骤300.报文提取模块轮询访问所有所述报文先入先出队列,从中读取待处理报文;
步骤400.根据当前待处理报文的四元组哈希运算结果访问流记录索引表和TCP流记录缓存,判断TCP流记录缓存中是否存在当前待处理报文的相关TCP流记录,若是,则直接访问所述TCP流记录缓存;否则,按照从所述流记录索引表读出的访问索引指示的顺序访问所述TCP流记录表;并根据访问结果和报文信息更新与当前处理报文相关的TCP流的状态,并同时更新所述TCP流记录缓存、流记录索引表和TCP流记录表。
所述步骤100,包括下列步骤:
步骤110.DRAM的每一个存储阵列对应一个报文先入先出队列,所述报文先入先出队列用于缓存报文接收模块传过来的报文;
步骤120.根据所述TCP流记录表的每一行附带的一个访存索引信息,所有的访存索引信息依照线性表的方式存储在SRAM中,构成一个流记录索引表存储于SRAM中;
步骤130.构建TCP流记录缓存,用于保存最近访问的发生了数据传输的TCP流的流记录。
所述访存索引信息,是由两个字段组成:有效位字段,记录了在这一行中存储的有效的TCP流记录个数;排序位字段,是一行中所有TCP流记录的最近最常被使用排序。
所述步骤200,包括下列步骤:
步骤210.所述报文接收模块对接收到的报文的四元组进行哈希运算,根据哈希运算的结果作为访存索引信息,查找所述流记录索引表,确定与接收到的报文相关的TCP流记录存储在TCP流记录表中的行号;
步骤220.根据所述访存索引信息和TCP流记录表中的行号,确定与接收到的报文相关的TCP流记录放在DRAM的哪个存储阵列上,并将所述接收到的报文分发至该存储阵列对应的报文先入先出队列中缓存。
所述步骤400,包括下列步骤:
步骤410.判断当前处理报文的相关流记录是否存储在所述TCP流记录表的相应行中,若是,根据当前处理报文的包头信息更新流记录,并在当前处理报文需要关闭一条TCP流时,修改访问索引将TCP流记录表中这一位置的TCP流记录置为无效;否则,执行步骤420;
步骤420.判断当前处理报文是否需要新建一条TCP流,若是,则执行步骤430;否则,丢弃当前处理报文;
步骤430.判断TCP流记录表中对应所述索引位置上是否存在无效的TCP流记录,若是,则新建一条TCP流记录并替换无效的TCP流记录;否则,新建一条TCP流记录并替换TCP流记录表在这一行上最近一个报文最早到来的TCP流记录。
所述TCP流记录存储了处理一条TCP流所需的信息,主要包括:TCP流的四元组和TCP流的当前状态。
为实现本发明的目的还提供一种访问存储海量并发TCP流的流记录的系统,所述系统,包括:
初始化模块,构建用于存储TCP流记录的二维TCP流记录表存储于DRAM中,DRAM中的每一个存储阵列存储TCP流记录表的若干行TCP流记录,根据所述TCP流记录表建立流记录索引表存储于SRAM中,构建用于保存最近访问的发生数据传输的TCP流的TCP流记录缓存存储于SRAM中;
报文接收模块,用于接收报文,并根据接收到的报文的四元组进行哈希运算,根据运算结果选择一个与所述DRAM中的存储阵列对应的报文先入先出队列存储所述报文,并相应更新所述流记录索引表;
报文提取模块,轮询访问所有所述报文先入先出队列,从中读取待处理报文;
流记录访问模块,根据当前待处理报文的四元组哈希运算结果访问流记录索引表和TCP流记录缓存,判断TCP流记录缓存中是否存在当前待处理报文的相关TCP流记录,若是,则直接访问所述TCP流记录缓存;否则,按照从所述流记录索引表读出的访问索引指示的顺序访问所述TCP流记录表;并根据访问结果和报文信息更新与当前处理报文相关的TCP流的状态,并同时更新所述TCP流记录缓存、流记录索引表和TCP流记录表。
所述初始化模块,包括:
报文先入先出队列初始化子模块,用于为DRAM中每一个存储阵列对应建立一个报文先入先出队列,所述报文先入先出队列用于缓存所述报文接收模块传过来的报文;
流记录索引表初始化子模块,用于根据所述TCP流记录表的每一行附带的一个访存索引信息,将所有的访存索引信息依照线性表的方式存储在SRAM中,构成一个流记录索引表存储于SRAM中;
流记录缓存初始化子模块,用于构建TCP流记录缓存,保存最近访问的发生了数据传输的TCP流的流记录。
所述报文接收模块,包括:
计算模块,用于对接收到的报文的四元组进行哈希运算,将哈希运算的结果作为访存索引信息,查找所述流记录索引表,确定与接收到的报文相关的TCP流记录存储在TCP流记录表中的行号;
报文缓存分配模块,用于根据所述访存索引信息和TCP流记录表中的行号,确定与接收到的报文相关的TCP流记录放在DRAM的哪个存储阵列上,并将所述接收到的报文分发至该存储阵列对应的报文先入先出队列中缓存。
所述报文提取模块内设多个工作单元,可同时处理多个报文查找TCP流记录的请求;报文提取模块轮询访问报文先入先出队列获取待处理报文,按照待处理报文的输入顺序分发给本模块内部的空闲工作单元。
所述流记录访问模块,包括:
匹配模块,用于判断当前处理报文的相关流记录是否存储在所述TCP流记录表的相应行中,若是,根据当前处理报文的包头信息更新流记录,并在当前处理报文需要关闭一条TCP流时,修改访问索引将TCP流记录表中这一位置的TCP流记录置为无效;否则,触发判断模块;
判断模块,用于判断当前处理报文是否需要新建一条TCP流,若是,则触发更新模块;否则,丢弃当前处理报文;
更新模块,判断TCP流记录表中对应所述索引位置上是否存在无效的TCP流记录,若是,则新建一条TCP流记录并替换无效的TCP流记录;否则,新建一条TCP流记录并替换TCP流记录表在这一行上最近一个报文最早到来的TCP流记录。
本发明的有益效果在于:
1.本发明按照bank交错的方式访问TCP流记录表,减少了访问DRAM中的bank冲突,缩短了每次访问TCP流记录表的平均延迟,提高了访问速度;
2.本发明采用MRU顺序访问TCP流记录,可以减少网络中存在的大量即不传输数据报文又没有关闭的僵死TCP流记录对访问TCP流记录表的干扰,减少处理每个报文平均访问TCP流记录的次数;
3.本发明采用TCP流记录缓存可以减少处理每个报文平均访问TCP流记录的次数。
附图说明
图1是本发明访问存储海量并发TCP流的流记录的方法的步骤流程图;
图2是本发明中各数据表的结构以及它们之间的访问关系图;
图3是本发明中初始化模块构建TCP流记录表、流记录索引表以及TCP流记录缓存的步骤流程图;
图4是本发明中报文接收模块根据接收到的报文选择报文先入先出队列并存入报文的步骤流程图;
图5是本发明中根据当前处理报文访问并更新各数据表的步骤流程图;
图6是本发明一种访问存储海量并发TCP流的流记录的系统的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明的一种访问存储海量并发TCP流的流记录的方法和系统进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
为了更清楚地说明本发明的技术方案,下面详细说明本发明所要解决的技术问题以及产生背景。
本发明实现的技术方案是解决如何查找报文相关流记录,属于实现流重组的前期辅助阶段。实现流重组其实是将一条TCP流在不同时刻到来的数据报文缓存起来,按照报文规定的顺序拼成一段比较长的连续数据上传给主机。这条TCP流的流记录就记录了这些缓存的数据存储在什么地方,缓存的数据之间的对应位置是什么。当系统中存储的流记录比较多时,查找报文的相关流记录是一个很花时间,本文提出了如何组织流记录,高效查找流记录的办法。
举个例子,一条TCP流收到了2,3,5号报文,它们存储在物理地址是A,长度为S的一段空间中,2号3号相邻,存储在一起,5号包文存储的地址则与他们隔了一段。然后这条TCP流的4号报文到了。首先访问TCP流记录表,找到这个报文的相关流记录,就知道应该把4号报文缓存到内存中的哪个地址,缓存完毕后,这4个报文就形成了一段连续的数据,这就是流重组的过程。
本发明提出的其实是一个维护管理大规模并发TCP流中每条TCP流状态的方法,并不局限于用于实现TCP流重组。但是为了实现TCP流重组,本发明所述的维护TCP流状态这个步骤是必须的。
下面结合上述目标详细介绍本发明一种访问存储海量并发TCP流的流记录的方法。图1是本发明访问存储海量并发TCP流的流记录的方法的步骤流程图,如图1所示,所述方法,包括下列步骤:
步骤100.构建用于存储TCP流记录的二维TCP流记录表存储于DRAM中,根据所述TCP流记录表建立流记录索引表存储于SRAM中,构建用于保存最近访问的发生了数据传输的TCP流的TCP流记录缓存存储于SRAM中;
TCP流记录表存储在访问延迟较长,容量较大的DRAM中。流记录表的每一行在具体实施例中为256字节对齐的,所以同一行的数据必然属于DRAM的同一个存储阵列(bank)中。当报文接收模块收到一个新的报文,对其四元组做hash计算得出相关流记录存储在TCP流记录表的哪一行,就同时知道了该相关流记录是存储在DRAM中的哪一个bank中。在报文接收模块和报文提取模块中间设置几个FIFO用于缓存报文,每一个FIFO对应于DRAM的一个存储阵列。这些FIFO存在于芯片内部而不是DRAM和SRAM中。报文接收模块根据hash计算得知其相关流记录存放在DRAM的哪一个bank,就把这个报文存入该bank对应的FIFO。报文提取模块按照轮询的方式从这几个报文FIFO中读取报文提交给流记录访问模块。流记录索引表和TCP流记录缓存存储在访问延迟较短,容量较小的SRAM中。
图2是本发明中各数据表的结构以及它们之间的访问关系图,如图2所示,TCP流记录表是一个二维TCP流记录数组,TCP流记录存储了处理一条TCP流所需的信息,主要包括:TCP流的四元组,TCP流的当前状态(是否完成三次握手,是否收到乱序的报文,两个方向上是否收到带结束标记的报文,TCP流两个方向的当前报文期待序列号,TCP流相关乱序报文的指针,TCP流相关乱序报文的大小等)。
图3是本发明中初始化模块构建TCP流记录表、流记录索引表以及TCP流记录缓存的步骤流程图,如图3所示,所述步骤100,包括下列步骤:
步骤110.在DRAM中构建以二维数组形式存储TCP流记录的TCP流记录表,DRAM中的每一个存储阵列(bank)存储TCP流记录表的若干行TCP流记录;每一个bank对应一个报文FIFO,所述报文FIFO用于缓存报文接收模块传过来的报文;
其中,每一个报文FIFO缓存的所有待处理报文,与其相关的TCP流结构都存放在所述报文FIFO对应的bank中。
其中,所述TCP流记录可存放在TCP流记录表某固定一行中的任意位置上,行号由该TCP流四元组的hash运算结果确定。从TCP流记录表中查找报文的相关TCP流记录,就是从行号指的这一行中查找。
较佳地,本发明在DRAM中为TCP流记录表分配固定大小的空间,如果系统侧重于更快的处理速度,可以减少TCP流记录表的列数增加TCP流记录表的行数。如果系统侧重于尽量少丢包,可以减少TCP流记录表的行数增加TCP流记录表的列数。
作为一种可实施方式,图2中的TCP流记录表有1M行,利用索引值的后20位检索。图2中的TCP流记录表列数为4,整个系统最大可以维护4M个并发TCP流。
步骤120.根据所述TCP流记录表的每一行附带的一个访存索引信息(即TCP流记录表的行号),所有的访存索引信息依照线性表的方式存储在SRAM中,构成一个流记录索引表存储于SRAM中;
其中,流记录索引表的一个元素记录了TCP流记录表中对应位置上一行的访问索引信息,所述访存索引信息,是由两个字段组成:有效位字段,记录了在这一行中存储的有效的TCP流记录个数;排序位字段,是一行中所有TCP流记录的最近最常被使用(Most Recently Used,简称MRU)排序。
如图2所示,所述流记录索引表是一个线性表,表的大小等于TCP流记录表的行数,存储在SRAM中。
作为一种可实施方式,如图2所示,假设TCP流记录表为T,流记录索引表为I,当前处理报文的4元组hash结果为h。T[h]上可以存储4个TCP流记录,I[h]长度为8bit,其中排序位字段长2bit,排序位字段长6bit。排序位字段为00表示T[h]中存储了1个有效的TCP流记录,为01表示有2个,10表示有3个,11表示有4个。排序位字段按照2bit划分成3部分,每一部分是T[h]中的一个TCP流记录的具体位置。假如I[h]=10100011,就表示T[h]上存储了3个有效的TCP流记录,按照它们最近一个包到来的先后顺序排序结果为T[h][2]、T[h][0]、T[h][3]。也就是说三条TCP流中,最近一个包最晚到来的TCP流是T[h][2]维护的TCP流,次晚的是T[h][0]维护的TCP流,最近一个包最早到来的是T[h][3]维护的TCP流。T[h][1]上则没有存储有效的TCP流记录,如果当前处理报文是一个要求创建新TCP流的报文,且没有匹配上T[h][2]、T[h][0]、T[h][3]存储的TCP流记录,那么T[h][1]可用于存储根据当前处理报文新建的TCP流记录,更新后I[h]将等于11011000。
一个特殊情况是I[h]为00000000,此时T[h]上的4个元素上均没有有效的TCP流记录。
步骤130.构建TCP流记录缓存,用于保存最近访问的发生了数据传输的TCP流的流记录;
较佳地,TCP流记录缓存可以减少处理每个报文平均访问TCP流记录的次数。
所述TCP流记录缓存,采取直接映像方式,记录最近访问过的乱序TCP流记录,最近访问的发生了数据传输的TCP流的流记录,是TCP流记录表中部分TCP流记录的高速缓存。TCP流记录缓存的行数决定了用于检索的索引值的位数,图2中的TCP流记录缓存有1024行,利用索引值的后10位检索。
在本发明中,是采用bank交错的方式访问TCP流记录表,减少了访问DRAM中的bank冲突,缩短了每次访问TCP流记录表的平均延迟,提高了访问速度。同时按照MRU顺序访问TCP流记录,可以减少这些僵死TCP流记录对访问TCP流记录表的干扰,减少处理每个报文平均访问TCP流记录的次数。
其中,接收报文并缓存和按照MRU顺序轮询报文FIFO的两个过程是并行执行的,具体步骤将在步骤200至步骤400中详细描述。
步骤200.报文接收模块根据接收到的报文的四元组进行哈希(hash)运算,根据运算结果选择一个报文先入先出队列(First Input First Output,简称FIFO)存入所述报文;
图4是本发明中报文接收模块根据接收到的报文选择报文先入先出队列并存入报文的步骤流程图,如图4所示,所述步骤200,包括下列步骤:
步骤210.所述报文接收模块对接收到的报文的四元组进行hash运算,根据hash运算的结果作为访存索引信息,查找所述流记录索引表,确定与接收到的报文相关的TCP流记录存储在TCP流记录表中的行号;
步骤220.根据所述TCP流记录表中的行号,确定与接收到的报文相关的TCP流记录放在DRAM的哪个bank上,并将所述接收到的报文分发至该bank对应的报文FIFO中缓存。
内存控制器根据所述TCP流记录表的物理地址,将其转成行(row)地址、存储阵列(bank)地址、列(col)地址,就可以知道报文相关TCP流记录会放在DRAM的哪个bank上的,将报文分发至该bank对应的报文FIFO。
这里的物理地址就是TCP流记录存储在DRAM中的具体地址,是一个整数。Cpu访问内存时,发出的是物理地址,物理地址传给内存控制器,会转变成{row地址,bank地址,col地址},内存控制器把这三个地址发给内存。
步骤300.报文提取模块轮询访问所有所述报文FIFO,从中读取待处理报文;
较佳地,所述报文提取模块内设多个工作单元,可同时处理多个报文查找TCP流记录的请求。报文提取模块轮询访问报文FIFO获取待处理报文,按照待处理报文的输入顺序分发给本模块内部的空闲工作单元。
这种基于bank交错访问DRAM的方式之所以能够增加带宽,这是由DRAM的物理实现特性造成的。每一个bank都有一个row缓冲区记录上一次访问这个bank时读出的一整行。如果下一次访问该bank时还是访问这一行中的数据,则DRAM只需访问row缓冲区即可,很快的将数据送出,花费的时间是column访问需要的时间。但如果下一次访问该bank时访问的是另一行中的数据,则首先需要将当前row缓冲区的数据写回DRAM中的对应位置,这一过程成为预充电(Precharge);然后将想要读取的数据所位于的一整行全部读出到row缓冲区,这一过程称作row访问;最后还要从row缓冲区中读出具体要读取的数据,这一过程称作column访问。此时访问DRAM的延迟时间就包括三部分,预充电延迟,row访问延迟和column访问延迟,这种情况被称作bank冲突。如果连续的访存指令位于同一个bank的不同row,就发生了bank冲突,会导致DRAM长时间的等待数据,降低DRAM总线的利用率。
而读取TCP流记录的这一访问动作,因为报文的到来是随机的,其相关TCP流记录在DRAM中的地址也是随机的,很可能出现bank冲突的情况。而采用bank交错访问DRAM的方式,即使一个工作单元访问TCP流记录时发生了bank冲突,其他工作单元还在同时访问其他的bank,虽然单看一个报文的处理延迟没有改善,但由于多个访存请求按照流水线的方式同时进行,提高了DRAM总线的利用率,也就提高了单位时间内访问TCP流记录的数目。
步骤400.根据当前处理报文的四元组hash结果访问流记录索引表和TCP流记录缓存,判断TCP流记录缓存中是否存在当前处理报文的相关TCP流记录,若是,则访问所述TCP流记录缓存;否则,按照从所述流记录索引表读出的访问索引指示的顺序访问TCP流记录表;同时根据访问结果和报文信息更新与当前处理报文相关的TCP流的状态,并同时更新所述TCP流记录缓存、流记录索引表和TCP流记录表。
本发明中,如果当前待处理报文需要新建或删除一条TCP流,或是造成其相关TCP流记录表上有效TCP流记录的MRU顺序发生变化,都需要生成新的访问索引更新流记录索引表。
所述指示的顺序,表示根据TCP流记录表的行地址查找当前处理报文相关TCP流记录时,是按照MRU顺序访问该行所有有效TCP流记录的。
图5是本发明中根据当前处理报文访问并更新各数据表的步骤流程图,如图5所示。所述步骤400,包括下列步骤:
步骤410.判断当前处理报文的相关流记录是否存储在所述TCP流记录表的相应行中,若是,根据当前处理报文的包头信息更新流记录,并在当前处理报文需要关闭一条TCP流时,修改访问索引将TCP流记录表中这一位置的TCP流记录置为无效;否则,执行步骤420;
步骤420.判断当前处理报文是否需要新建一条TCP流,若是,则执行步骤430;否则,丢弃当前处理报文;
步骤430.判断TCP流记录表中对应所述索引位置上是否存在无效的TCP流记录,若是,则新建一条TCP流记录并替换无效的TCP流记录;否则,新建一条TCP流记录并替换TCP流记录表在这一行上最近一个报文最早到来的TCP流记录。
相应于本发明的一种维护海量并发TCP流的方法,还提供一种维护海量并发TCP流的系统,图6是本发明一种访问存储海量并发TCP流的流记录的系统的结构示意图,如图6所示,所述系统,包括:
初始化模块1,构建用于存储TCP流记录的二维TCP流记录表存储于DRAM中,DRAM中的每一个存储阵列存储TCP流记录表的若干行TCP流记录,根据所述TCP流记录表建立流记录索引表存储于SRAM中,构建用于保存最近访问的发生数据传输的TCP流的TCP流记录缓存存储于SRAM中;
其中,所述初始化模块1,包括:
报文FIFO初始化子模块11,用于为DRAM中每一个存储阵列对应建立一个报文FIFO,所述报文FIFO用于缓存报文接收模块传过来的报文;
流记录索引表初始化子模块12,用于根据所述TCP流记录表的每一行附带的一个访存索引信息,将所有的访存索引信息依照线性表的方式存储在SRAM中,构成一个流记录索引表存储于SRAM中;
流记录缓存初始化子模块13,用于构建TCP流记录缓存,保存最近访问的发生了数据传输的TCP流的流记录。
报文接收模块2,根据接收到的报文的四元组进行哈希运算,根据运算结果选择一个与所述DRAM中的存储阵列对应的报文先入先出队列存储所述报文,并相应更新所述流记录索引表;
其中,所述报文接收模块2,包括:
计算模块21,用于对接收到的报文的四元组进行hash运算,根据hash运算的结果作为访存索引信息,查找所述流记录索引表,确定与接收到的报文相关的TCP流记录存储在TCP流记录表中的行号;
报文缓存分配模块22,用于根据所述访存索引信息和TCP流记录表中的行号,确定与接收到的报文相关的TCP流记录放在DRAM的哪个bank上,并将所述接收到的报文分发至该bank对应的报文FIFO中缓存。
报文提取模块3,轮询访问所有所述报文先入先出队列,从中读取待处理报文;
较佳地,所述报文提取模块内设多个工作单元,可同时处理多个报文查找TCP流记录的请求。报文提取模块轮询访问报文FIFO获取待处理报文,按照待处理报文的输入顺序分发给本模块内部的空闲工作单元。
流记录访问模块4,根据当前待处理报文的四元组哈希运算结果访问流记录索引表和TCP流记录缓存,判断TCP流记录缓存中是否存在当前待处理报文的相关TCP流记录,若是,则直接访问所述TCP流记录缓存;否则,按照从所述流记录索引表读出的访问索引指示的顺序访问所述TCP流记录表;并根据访问结果和报文信息更新与当前处理报文相关的TCP流的状态,并同时更新所述TCP流记录缓存、流记录索引表和TCP流记录表。
其中,所述流记录访问模块4,包括:
匹配模块41,用于判断当前处理报文的相关流记录是否存储在所述TCP流记录表的相应行中,若是,根据当前处理报文的包头信息更新流记录,并在当前处理报文需要关闭一条TCP流时,修改访问索引将TCP流记录表中这一位置的TCP流记录置为无效;否则,触发判断模块42;
判断模块42,用于判断当前处理报文是否需要新建一条TCP流,若是,则触发流记录建立模块43;否则,丢弃当前处理报文;
流记录建立模块43,判断TCP流记录表中对应所述索引位置上是否存在无效的TCP流记录,若是,则新建一条TCP流记录并替换无效的TCP流记录;否则,新建一条TCP流记录并替换TCP流记录表在这一行上最近一个报文最早到来的TCP流记录。
本发明的有益效果在于:
1.本发明按照bank交错的方式访问TCP流记录表,减少了访问DRAM中的bank冲突,缩短了每次访问TCP流记录表的平均延迟,提高了访问速度;
2.本发明采用MRU顺序访问TCP流记录,可以减少网络中存在的大量即不传输数据报文又没有关闭的僵死TCP流记录对访问TCP流记录表的干扰,减少处理每个报文平均访问TCP流记录的次数;
3.本发明采用TCP流记录缓存可以减少处理每个报文平均访问TCP流记录的次数。
通过结合附图对本发明具体实施例的描述,本发明的其它方面及特征对本领域的技术人员而言是显而易见的。
以上对本发明的具体实施例进行了描述和说明,这些实施例应被认为其只是示例性的,并不用于对本发明进行限制,本发明应根据所附的权利要求进行解释。
Claims (6)
1.一种访问存储海量并发TCP流的流记录的方法,其特征在于,所述方法,包括下列步骤:
步骤100.初始化模块构建用于存储TCP流记录的二维TCP流记录表存储于DRAM中,DRAM中的每一个存储阵列存储TCP流记录表的若干行TCP流记录,根据所述TCP流记录表建立流记录索引表存储于SRAM中,构建用于保存最近访问的发生数据传输的TCP流的TCP流记录缓存存储于SRAM中;
步骤200.报文接收模块根据接收到的报文的四元组进行哈希运算,根据运算结果选择一个与所述DRAM中的存储阵列对应的报文先入先出队列存储所述报文,并相应更新所述流记录索引表;
步骤300.报文提取模块轮询访问所有所述报文先入先出队列,从中读取待处理报文;
步骤400.根据当前待处理报文的四元组哈希运算结果访问流记录索引表和TCP流记录缓存,判断TCP流记录缓存中是否存在当前待处理报文的相关TCP流记录,若是,则直接访问所述TCP流记录缓存;否则,按照从所述流记录索引表读出的访问索引指示的顺序访问所述TCP流记录表;并根据访问结果和报文信息更新与当前处理报文相关的TCP流的状态,并同时更新所述TCP流记录缓存、流记录索引表和TCP流记录表。
2.根据权利要求1所述的访问存储海量并发TCP流的流记录的方法,其特征在于,所述步骤100,包括下列步骤:
步骤110.DRAM的每一个存储阵列对应一个报文先入先出队列,所述报文先入先出队列用于缓存报文接收模块传过来的报文;
步骤120.根据所述TCP流记录表的每一行附带的一个访存索引信息,所有的访存索引信息依照线性表的方式存储在SRAM中,构成一个流记录索引表存储于SRAM中;
步骤130.构建TCP流记录缓存,用于保存最近访问的发生了数据传输的TCP流的流记录。
3.根据权利要求2所述的访问存储海量并发TCP流的流记录的方法,其特征在于,所述访存索引信息,是由两个字段组成:有效位字段,记录了在这一行中存储的有效的TCP流记录个数;排序位字段,是一行中所有TCP流记录的最近最常被使用排序。
4.根据权利要求1所述的访问存储海量并发TCP流的流记录的方法,其特征在于,所述步骤200,包括下列步骤:
步骤210.所述报文接收模块对接收到的报文的四元组进行哈希运算,根据哈希运算的结果作为访存索引信息,查找所述流记录索引表,确定与接收到的报文相关的TCP流记录存储在TCP流记录表中的行号;
步骤220.根据所述访存索引信息和TCP流记录表中的行号,确定与接收到的报文相关的TCP流记录放在DRAM的哪个存储阵列上,并将所述接收到的报文分发至该存储阵列对应的报文先入先出队列中缓存。
5.根据权利要求1所述的访问存储海量并发TCP流的流记录的方法,其特征在于,所述步骤400,包括下列步骤:
步骤410.判断当前处理报文的相关流记录是否存储在所述TCP流记录表的相应行中,若是,根据当前处理报文的包头信息更新流记录,并在当前处理报文需要关闭一条TCP流时,修改访问索引将TCP流记录表中这一位置的TCP流记录置为无效;否则,执行步骤420;
步骤420.判断当前处理报文是否需要新建一条TCP流,若是,则执行步骤430;否则,丢弃当前处理报文;
步骤430.判断TCP流记录表中对应所述索引位置上是否存在无效的TCP流记录,若是,则新建一条TCP流记录并替换无效的TCP流记录;否则,新建一条TCP流记录并替换TCP流记录表在这一行上最近一个报文最早到来的TCP流记录。
6.一种访问存储海量并发TCP流的流记录的系统,其特征在于,包括:
初始化模块,构建用于存储TCP流记录的二维TCP流记录表存储于DRAM中,DRAM中的每一个存储阵列存储TCP流记录表的若干行TCP流记录,根据所述TCP流记录表建立流记录索引表存储于SRAM中,构建用于保存最近访问的发生数据传输的TCP流的TCP流记录缓存存储于SRAM中;
报文接收模块,用于接收报文,并根据接收到的报文的四元组进行哈希运算,根据运算结果选择一个与所述DRAM中的存储阵列对应的报文先入先出队列存储所述报文,并相应更新所述流记录索引表;
报文提取模块,轮询访问所有所述报文先入先出队列,从中读取待处理报文;
流记录访问模块,根据当前待处理报文的四元组哈希运算结果访问流记录索引表和TCP流记录缓存,判断TCP流记录缓存中是否存在当前待处理报文的相关TCP流记录,若是,则直接访问所述TCP流记录缓存;否则,按照从所述流记录索引表读出的访问索引指示的顺序访问所述TCP流记录表;并根据访问结果和报文信息更新与当前处理报文相关的TCP流的状态,并同时更新所述TCP流记录缓存、流记录索引表和TCP流记录表;
所述初始化模块,包括:
报文先入先出队列初始化子模块,用于为DRAM中每一个存储阵列对应建立一个报文先入先出队列,所述报文先入先出队列用于缓存所述报文接收模块传过来的报文;
流记录索引表初始化子模块,用于根据所述TCP流记录表的每一行附带的一个访存索引信息,将所有的访存索引信息依照线性表的方式存储在SRAM中,构成一个流记录索引表存储于SRAM中;
流记录缓存初始化子模块,用于构建TCP流记录缓存,保存最近访问的发生了数据传输的TCP流的流记录;
所述报文接收模块,包括:
计算模块,用于对接收到的报文的四元组进行哈希运算,将哈希运算的结果作为访存索引信息,查找所述流记录索引表,确定与接收到的报文相关的TCP流记录存储在TCP流记录表中的行号;
报文缓存分配模块,用于根据所述访存索引信息和TCP流记录表中的行号,确定与接收到的报文相关的TCP流记录放在DRAM的哪个存储阵列上,并将所述接收到的报文分发至该存储阵列对应的报文先入先出队列中缓存;
所述报文提取模块内设多个工作单元,可同时处理多个报文查找TCP流记录的请求;报文提取模块轮询访问报文先入先出队列获取待处理报文,按照待处理报文的输入顺序分发给本模块内部的空闲工作单元;
所述流记录访问模块,包括:
匹配模块,用于判断当前处理报文的相关流记录是否存储在所述TCP流记录表的相应行中,若是,根据当前处理报文的包头信息更新流记录,并在当前处理报文需要关闭一条TCP流时,修改访问索引将TCP流记录表中这一位置的TCP流记录置为无效;否则,触发判断模块;
判断模块,用于判断当前处理报文是否需要新建一条TCP流,若是,则触更新模块;否则,丢弃当前处理报文;
更新模块,判断TCP流记录表中对应所述索引位置上是否存在无效的TCP流记录,若是,则新建一条TCP流记录并替换无效的TCP流记录;否则,新建一条TCP流记录并替换TCP流记录表在这一行上最近一个报文最早到来的TCP流记录。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101408630A CN101841438B (zh) | 2010-04-02 | 2010-04-02 | 一种访问存储海量并发tcp流的流记录的方法或系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101408630A CN101841438B (zh) | 2010-04-02 | 2010-04-02 | 一种访问存储海量并发tcp流的流记录的方法或系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101841438A CN101841438A (zh) | 2010-09-22 |
CN101841438B true CN101841438B (zh) | 2011-10-05 |
Family
ID=42744577
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101408630A Expired - Fee Related CN101841438B (zh) | 2010-04-02 | 2010-04-02 | 一种访问存储海量并发tcp流的流记录的方法或系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101841438B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102098290A (zh) * | 2010-12-17 | 2011-06-15 | 天津曙光计算机产业有限公司 | 一种tcp流淘汰替换方法 |
CN102843396B (zh) * | 2011-06-22 | 2018-03-13 | 中兴通讯股份有限公司 | 一种分布式缓存系统中的数据写入及读取方法及装置 |
CN102420771B (zh) * | 2011-12-28 | 2014-05-21 | 中国科学技术大学苏州研究院 | 高速网络环境中提高tcp并发连接速度的方法 |
CN102957628A (zh) * | 2012-12-12 | 2013-03-06 | 福建星网锐捷网络有限公司 | 报文聚合方法、装置和接入设备 |
CN103023728B (zh) * | 2013-01-15 | 2016-03-02 | 中国人民解放军信息工程大学 | 流监控方法 |
CN104199782B (zh) * | 2014-08-25 | 2017-04-26 | 浙江大学城市学院 | 一种gpu上的访存方法 |
CN106325757A (zh) * | 2015-06-16 | 2017-01-11 | 苏州简约纳电子有限公司 | 一种存储结构及其存储方法 |
CN105162765B (zh) * | 2015-07-30 | 2018-08-03 | 国家电网公司 | 一种基于断尾求生的云数据安全实现方法 |
CN107294855B (zh) * | 2017-05-31 | 2019-08-16 | 国家电网公司 | 一种高性能计算网络下的tcp查找优化方法 |
CN112905852A (zh) * | 2021-03-04 | 2021-06-04 | 睿石网云(杭州)科技有限公司 | 一种基于会话索引的应用性能报文存储装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1928839A (zh) * | 2005-09-09 | 2007-03-14 | 中国科学院计算技术研究所 | 一种远程内存服务器及其实现方法 |
CN101309216A (zh) * | 2008-07-03 | 2008-11-19 | 中国科学院计算技术研究所 | 一种ip包分类方法和设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102007473A (zh) * | 2008-04-18 | 2011-04-06 | 阿尔卡特朗讯美国公司 | 网络元件的处理节点之间的diameter总线通信 |
-
2010
- 2010-04-02 CN CN2010101408630A patent/CN101841438B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1928839A (zh) * | 2005-09-09 | 2007-03-14 | 中国科学院计算技术研究所 | 一种远程内存服务器及其实现方法 |
CN101309216A (zh) * | 2008-07-03 | 2008-11-19 | 中国科学院计算技术研究所 | 一种ip包分类方法和设备 |
Also Published As
Publication number | Publication date |
---|---|
CN101841438A (zh) | 2010-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101841438B (zh) | 一种访问存储海量并发tcp流的流记录的方法或系统 | |
CN111382327B (zh) | 一种字符串匹配装置及方法 | |
CN100550847C (zh) | 一种解决Hash冲突的方法及装置 | |
CN102479207B (zh) | 一种信息搜索的方法、系统及信息搜索设备 | |
CN104320448B (zh) | 一种基于大数据的计算设备的缓存与预取加速方法和装置 | |
CN102195874A (zh) | 数据分组的预提取 | |
CN101150485A (zh) | 一种零拷贝缓冲区队列网络数据发送的管理方法 | |
CN102971732A (zh) | 键/值存储器的集成分级查询处理的系统结构 | |
CN103455531B (zh) | 一种支持高维数据实时有偏查询的并行索引方法 | |
CN106021128B (zh) | 一种基于步幅和数据相关性的数据预取器及其预取方法 | |
CN102523285A (zh) | 一种基于对象分布式文件系统的存储缓存方法 | |
CN103678172A (zh) | 一种本地数据缓存管理方法及装置 | |
CN101789976A (zh) | 嵌入式网络存储系统及其方法 | |
CN112947860B (zh) | 一种分布式数据副本的分级存储与调度方法 | |
CN102420771B (zh) | 高速网络环境中提高tcp并发连接速度的方法 | |
CN107908357A (zh) | 命名数据网转发平面pit存储结构及其数据检索方法 | |
CN105589664A (zh) | 虚拟存储高速传输方法 | |
CN103019964B (zh) | 一种缓存数据访问方法及数据缓存系统 | |
CN106503008A (zh) | 文件存储方法和装置及文件查询方法和装置 | |
CN110187968A (zh) | 异构计算环境下的图数据处理加速方法 | |
CN107798106A (zh) | 一种分布式爬虫系统中的url去重方法 | |
CN102999443A (zh) | 一种计算机缓存系统的管理方法 | |
CN104811495A (zh) | 一种用于智慧协同网络的网络组件内容存储方法及模块 | |
CN104714898B (zh) | 一种Cache的分配方法和装置 | |
CN103491124B (zh) | 一种对彩信数据进行处理的方法及分布式缓存系统 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20111005 |