流监控方法

文档序号:7550443阅读:242来源:国知局
专利名称:流监控方法
技术领域
本发明涉及计算机网络技术领域,特别涉及流监控方法
背景技术
随着互联网规模的迅速膨胀、新应用的层出不穷,导致网络的可管理性和可控性越来越差,因此急需高效的网络管控手段(如拥塞控制、入侵检测、QOS保证和异常流检测等)。由于在网络设备(如路由器、防火墙和网络入侵检测装置)中流监控是提供网络管控手段的基础,因此流监控方法正在成为研究热点
发明内容

有鉴于此,本发明的目的在于提供流监控方法,来实现对网络设备的流监控。为实现上述目的,本发明提供如下技术方案一种流监控方法,基于流监控装置,所述流监控装置至少包括头域提取单元、计算单元、待处理队列单元、处理控制单元、已处理队列单元和存储控制单元;所述方法包括所述头域提取单元将链路的每一待处理报文分别进行解析,获取每一待处理报文的报文信息,并输出给所述待处理队列单元进行存储;所述报文信息至少包括五元组、报文数、报文类型、字节数和服务类型Tos ;所述五元组包括源IP地址、源端口、目的IP地址、目的端口和传输层协议号;所述计算单元对每一待处理报文的五元组进行哈希运算得到流序列号ID,并将所述流ID输出给所述待处理队列单元进行存储;当所存储的报文信息的数目达到第一预设数目或预设时间时,所述待处理队列单元将所存储的所有报文信息和相应的流ID进行输出至所述处理单元;所述第一预设数目大于I ;所述处理单元获取存储地址与所述流ID相匹配的存储单元中的存储信息,并根据所述存储信息和所述流ID对应的报文信息进行处理,得到包含待处理报文的报文信息的已处理流表项;所述已处理队列单元对所述已处理流表项及存储地址进行存储,并且当存储的所述已处理流表项的数目达到第二预设数目或预设时间时,将所存储的已处理流表项及存储地址输出至所述存储控制单元;所述第二预设数目大于I;所述存储控制单元将所述已处理流表项写入相应的存储单元,所述已处理流表项写入相应的存储单元后作为已建流表项。优选的,所述流监控装置还包括链表维护单元,链表维护单元预先为存有已建流表项的存储单元分配N个单向链表,所述N为大于I的自然数,每一所述单向链表包括至少一个链表节点,每一所述链表节点对应一个存储有已建流表项的存储单元;所述方法还包括所述链表维护单元依次读取每一单向链表中每一链表节点所对应存储单元中所存储的已建流表项,若所读取的已建流表项为不活动超时流,则删除所读取的已建流表项。
优选的,所述链表维护单元存储N个链表的第I个链表节点的存储地址,并且除每一单向链表的链表尾节点外,其余所有的链表节点所对应的已建流表项中存储所在单向链表的下一个链表节点所对应的存储地址。优选的,所述链表维护单元依次读取每一单向链表节点所对应存储单元中所存储的已建流表项,若所读取的已建流表项为不活动超时流,则删除所读取的已建流表项具体包括所述链表维护单元将每一单向链表的第I个链表节点所对应的存储单元作为读取目标,依次向每一读取目标发送读操作指令,以便读入各读取目标所存储的已建流表项;待向第N个单向链表的第I个链表节点所对应的存储单元发送读操作指令后,所述链表维护单元对每一个已读入的已建流表项进行超时处理;所述超时处理包括当所述已读入的已建流表项为不活动超时流时,删除所述已建流表项,并向所述已读入的已建流表项所对应的单向链表的下一个链表节点所对应的存储单元发送所述读操作命令。优选的,所述根据所述存储信息和所述流ID对应的报文信息进行处理,得到包含待处理报文的报文信息的已处理流表项具体包括将与所述待处理队列单元输出的各流ID相匹配的各存储单元作为读取对象,依次连续向各读取对象发送读操作命令,以便各读取对象根据接收到的读操作命令进行读操作;每读入一读取对象所存储的存储信息,即根据待处理报文的报文信息中的报文类型和读入的存储信息进行处理,得到已处理流表项。优选的,所述流监控装置还包括活动超时流计算单元,在每读入一读取对象所存储的存储信息后还包括
活动超时流计算单元查看存储信息是否为已建流表项;若所述存储信息为已建流表项,则查看所述待处理报文到达时间与已建流表项中的报文的首次到达时间,计算是否大于预先设置活动超时流的超时值;若大于,删除所述已建流表项。优选的,所述报文类型包括SYN类型、FIN类型、RST类型和其他类型;各读取对象中的存储信息具体为空或者已建流表项,所述已建流表项包括报文信息;优选的,所述根据待处理报文的报文信息中的报文类型和读入的存储信息进行处理,得到已处理流表项具体包括当待处理报文对应的报文类型为SYN类型时,生成空流表项作为已处理流表项;当待处理报文对应的报文类型为FIN类型、其它类型或RST类型时,将所对应的读取对象中存储的已建流表项更改为所述已处理流表项;优选的,所述将所述已处理流表项写入相应的存储单元具体包括将与已处理流表项相应的各存储单元作为写入对象,依次连续向各写入对象发送写操作命令,以便各写入对象根据接收到的写操作命令进行写操作。 优选的,所述存储地址包括一级存储地址和二级存储地址;
各写入对象中的存储信息具体为空或者已建流表项,所述已建流表项包括有效已建流表项和无效已建流表项;在将与已处理流表项相应的各存储单元作为写入对象,依次连续向各写入对象发送写操作命令之前,所述方法还包括当待处理报文对应的报文类型为SYN类型,并且,所述待处理报文的相应的读取对象中的存储信息具体为空或无效已建流表项时,将所述读取对象作为写入对象;当待处理报文对应的报文类型为SYN类型,并且,所述待处理报文的相应的读取对象中的存储信息具体为有效已建流表项时,重新计算出所述待处理报文的存储地址并作·为待处理报文的目标流ID,并将所述待处理报文的报文信息和所述待处理报文的目标流ID输出至待处理队列单元,所述待处理报文的目标流ID某一二级存储地址相匹配;当待处理报文对应的报文类型为FIN类型、RST类型或其他类型时,比较待处理报文的报文信息中的五元组,与相应的读取对象中存储的已建流表项的五元组是否相同,若相同,则将所述读取对象作为写入对象;否则,重新计算出所述待处理报文的存储地址并作为待处理报文的目标流ID,并将所述待处理报文的报文信息和所述待处理报文的目标流ID输出至待处理队列单元,所述待处理报文的的目标流ID某一二级存储地址相匹配。从上述的技术方案可以看出,在本发明实施例中,首先,头域提取单元对链路的每一待处理报文分别进行解析,获得每一待处理报文的报文信息,并输出给待处理队列单元进行存储。其次,计算单元对每一待处理报文的五元组进行哈希运算,得到流ID,并将流ID输出给待处理队列单元进行存储。并且当待处理单元所存储的报文信息达到第一预设数目或预设时间时,输出所有的报文信息和相应的流ID进行输出至处理单元。再次,处理单元获取存储地址与流ID相匹配的存储单元中的存储信息,然后根据存储信息和流ID对应的报文信息进行处理,得到包含待处理报文的报文信息的已处理流表项。已处理队列对已处理流表项及存储地址进行存储,并且当存储的已处理流表项的数目达到第二预设数目或预设时间时,将所存储的已处理流表项及存储地址输出到存储控制单元。最后,存储控制单元将已处理流表项写入相应的存储单元,并且将已处理流表项写入相应的存储单元后作为已建流表项。由于本发明对每一待处理报文分别进行解析,获取每一待处理的报文信息,并且会获取存储地址与流ID相匹配的存储单元中的存储信息,并且根据存储信息和流ID对应的报文信息进行处理,得到已处理流表项。从而使已处理流表项包含了所解析报文的报文信息,并将已处理流表项写入相应的存储单元。通过查看存储单元中的已处理流表项,即可实现流监控。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例提供的流监控方法的流程图;图2是本发明提供的已建流表项和已处理流表项的存储格式图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明所基于的流监控装置,至少包括头域提取单元、计算单元、待处理队列单元、处理单元、已处理队列单元和存储控制单元;如图1所示,本发明所提供的流监控方法,至少包括以下步骤S1:头域提取单元将链路的每一待处理报文分别进行解析,获取每一待处理报文的报文信息,并输出给待处理队列单元进行存储;报文信息至少包括报文的五元组、报文数、报文类型、字节数和服务类型Tos等;五元组包括源IP地址、源端口、目的IP地址、目的 端口和传输层协议号;具体的,头域提取单元对每一待处理报文进行解析,获取每一待处理报文的报文信息,并输出给待处理队列单元进行存储。其中报文信息可包括所解析报文的五元组、报文数、报文类型、字节数和服务类型Tos等信息,其中五元组包括待处理报文的源IP地址、源端口、目的IP地址、目的端口和传输层协议号。例如,一个五元组为192. 168.1. 110000TCP121. 14. 88. 7680,其代表的为一个IP地址为192. 168.1.1的终端通过端口 10000,利用TCP协议,和IP地址为121. 14. 88. 76,端口为80的终端进行连接。S2:计算单元对每一待处理报文的五元组进行哈希运算得到流序列号ID,并将流ID输出给待处理队列单元进行存储;S3:当所存储的报文信息的数目达到第一预设数目或预设时间时,待处理队列单元将所存储的所有报文信息和相应的流ID输出至处理单元;第一预设数目大于I ;具体的,可由定时器或计数器触发待处理队列单元将所存储的所有报文信息和相应的流ID输出至处理单元。计数器预先存储第一预设数目,预设数目大于1,可当待处理队列单元所存储的报文信息的数目达到第一预数目时,由计数器触发待处理队列单元的输出。也可定时器设定预设时间(即待处理队列单元输出所存储的所有报文信息和相应的流ID的时间间隔),当待处理队列单元输出所存储的所有报文信息和相应的流ID的时间间隔达到预设时间后,由定时器触发待处理队列单元的输出。S4:处理单元获取存储地址和流ID相匹配的存储单元中的存储信息,并根据存储信息和流ID对应的报文信息进行处理,得到包括待处理报文的报文信息的已处理流表项;其中,已处理流表项的格式如图2所示。S5:已处理队列单元对已处理流表项及存储地址进行存储,并且当存储的已处理流表项的数目达到第二预设数目或预设时间时,输出所存储的已处理流表项及存储地址;第二预设数目大于I ;已处理队列单元的输出过程与待处理队列单元的输出过程相类似,在此不再赘述。S6:存储控制单元将已处理流表项写入相应的存储单元,已处理流表项写入相应的存储单元后作为已建流表项。具体的,存储控制单元可由存储器和现场可编程门阵列FPGA组成。已处理队列单元会依次输出所存储的已处理流表项及存储地址。FPGA向已处理队列单元所输出的多个存储地址对应的存储单元依次下写入命令。举例来说,假设将已处理流表项写入存储单元内部需A、B、C三个周期,已处理队列输出至存储控制单元的有a地址及已处理流表项a、b地址及已处理流表项b和c地址及已处理流表项C。此时,FPGA会依次向a地址、b地址和c地址相对应的存储单元下写入命令。FPGA会下达第一个写入命令,将已处理流表项a写入a地址的写入命令,由于执行写入操作需A、B、C三个周期,所以可以在第一个写入命令执行到B周期时,FPGA会下达第二个写入命令,将已处理流表项b写入b地址的写入命令,并可在第一个写入命令执行到C周期,第二个写入命令执行到B周期时,FPGA会下达第三个写入命令,将已处理流表项c写入c地址的写入命令。这样,存储器在一定时间内,几乎时刻都在写入已处理流 表项,而不必等写入已处理流表项a这一操作完成后,再写入已处理流表项b,等待已处理流表项b写入这一操作完成后,再写入已处理流表项C。这样,将大大提高已建流表项写入存储控制单元的效率。由上可见,在本发明实施例中,首先,头域提取单元对链路的每一待处理报文分别进行解析,获得每一待处理报文的报文信息,并输出给待处理队列单元进行存储。其次,计算单元对每一待处理报文的五元组进行哈希运算,得到流ID,并将流ID输出给待处理队列单元进行存储。并且当待处理单元所存储的报文信息达到第一预设数目或预设时间时,输出所有的报文信息和相应的流ID进行输出至处理单元。再次,处理单元获取存储地址与流ID相匹配的存储单元中的存储信息,然后根据存储信息和流ID对应的报文信息进行处理,得到包含待处理报文的报文信息的已处理流表项。已处理队列对已处理流表项及存储地址进行存储,并且当存储的已处理流表项的数目达到第二预设数目或预设时间时,将所存储的已处理流表项及存储地址输出到存储控制单元。最后,存储控制单元将已处理流表项写入相应的存储单元,并且将已处理流表项写入相应的存储单元后作为已建流表项。由于本发明对每一待处理报文分别进行解析,获取每一待处理的报文信息,并且会获取存储地址与流ID相匹配的存储单元中的存储信息,并且根据存储信息和流ID对应的报文信息进行处理,得到已处理流表项。从而使已处理流表项包含了所解析报文的报文信息,并将已处理流表项写入相应的存储单元。通过查看存储单元中的已处理流表项,即可实现流监控。在本发明其它实施例中,上述所有实施例中的流监控装置还包括链表维护单元,链表维护单元预先为存有已建流表项的存储单元分配N个单向链表,其中N为大于I的自然数,每一单向链表包括至少一个链表节点,每一链表节点对应一个存储有已建流表项的存储单元;上述方法还包括链表维护单元依次读取每一单向链表中每一链表节点所对应存储单元中所存储的已建流表项,若所读取的已建流表项为不活动超时流,则删除所读取的已建流表项。所谓不活动超时流指一条流长时间没有新包到达,距离最后一个包到达的时间超过某个门限值,需要删除不活动超时流。对于门限值的设定不同的网络有不同的需求。其中,一个存储单元所存储的已建流表项对应一个流,存储单元所存储已建流表项的格式仍可参见图2 ;具体的,在读取已建流表项后,查看已建流表项中所记录的最后一个包的到达时间,并查看是否超过门限值,若超过,则为不活动超时流,并将不活动超时流删除。更具体的,如图2所示,将不活动超时流所对应的已建流表项的Live位置于0,即可将不活动超时流删除。在本发明其它实施例中,上述所有实施例中的链表维护单元存储N个链表的第I个链表节点的存储地址,并且除每一单向链表的链表尾节点外,其余所有的链表节点所对应的已建流表项中存储所在单向链表的下一个链表节点所对应的存储地址。仍请参照图2,已建流表项中的下一跳地址即除链表节点外,其余所有的链表节点所在单向链表的下一个链表节点所对应的存储地址。每一单向链表的链表尾节点对应存储单元中所存储的已建流表项中的下一跳地址存储内容为空。具体的,链表维护单元预先为存有已建流表项的存储单元分配N个单向链表。举例来说,存储地址为1 一 9的存储单元都存储有已建流表项,可以为I 一 9分配3个单向链表,单向链表I可以为1 — 3 — 5 — 2,单向链表2可以为4 — 6 — 9,单向链表3可以为7 — 8。此时单向链表I的链表节点可包括链表节点1、链表节点3、链表节点5和链表节点2 ;单向链表2的链表节点可包括链表节点4、链表节点6和链表节点9 ;单向链表3的链表节点可包括链表节点7和链表节点8。链表节点I所对应的存储地址为I的存储单元中的已建流表中所存储的下一跳地址为地址3。除每一单向链表中的链表尾节点外,其余链表节点所对应的已建流表中所存储的下一跳地址依次类推,在此不再赘述。同时单向链表I中的链表节点2、单向链表2中的链表节点9和单向链表3中链表节点8即为所在单向链表的链表节点的链表尾节点,并且链表节点2、链表节点9和链表节点8所对应的已建流表中的下一跳地址的存储内容为空。其链表维护单元保存每一单向链表的第一个链表节点所对应的已建流表项的存储地址即可。仍沿用上述例子,当有新的流到达需要更新链表时,可将新的流所对应已建流表项的存储地址加入到较短的链表中,此时,可将新的已建流表项的存储地址加入到链表3中。具体的,将链表维护单元所保存的链表3的存储地址7更改为新流所对应的已建流表项的存储地址,同时将新流所对应的已建流表项中的下一跳地址更改为存储地址7。在本发明其它实施例中,上述所有实施例中的链表维护单元依次读取每一单向链表节点所对应存储单元中所存储的已建流表项,若所读取的已建流表项为不活动超时流,则删除所读取的已建流表项具体包括链表维护单元将每一单向链表的第I个链表节点所对应的存储单元作为读取目标,依次向每一读取目标发送读操作指令,以便读入各读取目标所存储的已建流表项;待向第N个单向链表的第I个链表节点所对应的存储单元发送读操作指令后,链表维护单元对每一个已读入的已建流表项进行超时处理;上述超时处理包括当已读入的已建流表项为不活动超时流时,删除上述已建流表项,并向已读入的已建流表项所对应的单向链表的下一个链表节点所对应的存储单元发送所述读操作命令。由待处理队列的长度触发中断进行链表维护单元,仍沿用上述例子,链表维护单元会将链表I的第I个节点即存储地址I所对应的存储单元、链表2的第I个节点即存储地址4所对应的存储单元、链表3的第I个节点即存储地址7所对应的存储单元作为读取目标,FPGA会依次向链表I中的存储地址I所对应的存储单元、链表2的存储地址4所对应的存储单元和链表3的存储地址7所对应的存储单元依次发送读命令。同样假设,从发送读命令到完成读出存储单元所存储的已建流表项需要A、B、C三个周期。
FPGA会先下达第一个读出命令,将链表I的存储地址I所存储的已建流表项读出。由于执行该写操作需A、B、C三个周期,所以可以在第一个读出命令执行到B周期时,FPGA会下达第二个读出命令,将链表2的存储地址4读出。并可在第一个读出命令执行到C周期,第二个读出命令执行到B周期时,FPGA会下达第三个读出命令,将链表3的存储地址7读出。然后在链表3的存储地址7读出后,链表I所的存储地址I中的已建流表项可以已经完成计算其是否为不活动超时流,并且链表I有下一跳地址可以已经读出,此时可以继续读取链表I的下一跳地址所存储的已建流表,同样链表2的下一跳地址所存储的已建流表也能得到,以此循环类批。查看所读出的已建流表所对应的流是否为不活动超时流具体过程可以为根据网络的实际情况,预先设置不活动超时流的超时值。在将单向链表中所存储的已建流表读出后,查看已建流表中的最后一个包(包里面包含有报文)的到达时间,可用当前时间减去最后一个包的到达时间,查看是否大于预设的超时值。如大于预设的超时值,则FPGA将会发送命令将其删除。具体的,仍请参见图2,删除不活动超时流可以将已建流表项中的Live位置为0,同时将不活动超时流所对应的链表节点从单向链表中删除。若所删除的链表节点为 所在单向链表中的第一个链表节点,则可将链表维护单元所存储的地址更改为第二个链表节点的存储地址即可,仍沿用上述例子,如需将链表I中的第一个链表节点即链表节点I从链表I中删除,则只需将链表维护单元所保存的存储地址更改为第二个链表节点的存储地址3即可。若所删除的链表节点为所在单向链表中的中间链表节点(既不为第一个链表节点也不为链表尾节点),则需将要删除的链表节点的前一链表节点所对的已建流表中的下一跳地址更改为需删除链表节点的后一链表节点的存储地址即可,仍沿用上述例子,如需将链表I中的链表节点3从链表I中删除,则只需将链表节点I所对就的已建流表项中的下一跳地址更改为存储地址5即可。若所删除的链表节点为所在单向链表中的尾节点,则只需将需删除链表节点的前一链表节点所对应的已建流表项中的下一跳地址更改为空即可,仍沿用上述例子,如需将链表I中的链表节点2删除,则只需将链表节点5所对就的已建流表项中的下一跳地址更改为空即可。由上可见,在本发明实施例中,首先提供了一种实现处理不活动超时流的方法,实现了对流的管理。再次,在本发明实施例中链表维护单元预先为存有已建流表的存储单元分配N个单向流表,然后依次读取单向链表中所存储的已建流表是否超时,如此在查看不活动超时流时,只需要查看存储有已建流表的存储单元而不必对所有存储单元都进行查看。同时由于在读出已建流表和判定已建流表所对应的流是否为不活动超时流的过程中,会有大量的时间重叠的过程,因此在相同的时间内,可以实现对更多的流的流管理。在本发明其它实施例中,上述所有实施例中的“根据存储信息和流ID对应的报文信息进行处理,得到包含待处理报文的报文信息的已处理流表项”具体包括将与待处理队列单元输出的各流ID相匹配的各存储单元作为读取对象,依次连续向各读取对象发送读操作命令,以便各读取对象根据接收到的读操作命令进行读操作;每读入一读取对象所存储的存储信息,即根据待处理报文的报文信息中的报文类型和读入的存储信息进行处理,得到已处理流表项。此处读入读取对象所存储的存储信息的操作过程与链表维护单元的读操作相类似,在此不再赘述。在本发明其它实施例中,上述所有实施例中的流监控装置还包括活动超时流计算单元,在上述每读入一读取对象所存储的存储信息后还包括活动超时流计算单元查看存储信息是否为已建流表项;若存储信息为已建流表,则查看待处理报文到达时间与已建流表项中的报文的首次到达时间,计算是否大于预先设置活动超时流的超时值;若大于,删除所述已建流表。由上可见,要本发明实施例中,提供了一种处理活动超时流的方法,实现了流管理,同时由于采于本发明所提取的依次向读取对象发送操作命令的方法,将会节约读取存储信息的时间,使得在同一时间内,可以处理更多的活动超时流。在本发明其它实施例中,上述所有实施例中的各读取对象中的存储信息具体为空或已建流表项,其中已建流表项包括报文信息;报文信息中的报文类型包括SYN类型、FIN 类型、RST类型和其他类型。在本发明其它实施例中,上述所所有实施例中的根据待处理报文的报文信息中的报文类型和读入的存储信息进行处理,得到已处理流表项具体,已处理流表的格式仍可参照图2,包括当待处理报文对应的报文类型为SYN类型时,生成空流表项作为已处理流表项;当待处理报文对应的报文类型为FIN类型、其它类型或RST类型时,将所对应的读取对象中存储的已建流表项更改为所述已处理流表项;具体的,仍请参见图2,图中的Live位即为有效位,Live位为I可表示已建流表项有效,,Live位为O可表示已建流表项无效,并将修改后的已建流表项作为已处理流表项。当待处理报文对应的报文类型为FIN类型或RST类型时,将已建流表项的Live位置为O。当待处理报文的报文类型为其它类型时,修改已建流表项中的包数、字节数和最后一个包到达时间等信息,并将修改后的已建流表项作为已处理流表项。在本发明其它实施例中,将已处理流表项写入相应的存储单元具体包括将与已处理流表项相应的各存储单元作为写入对象,依次连续向各写入对象发送写操作命令,以便各写入对象根据接收到的写操作命令进行写操作。在本发明其它实施例中,上述所有实施例中的各写入对象中的存储信息具体为空或者已建流表项,所述已建流表项包括有效已建流表项和无效已建流表项;将存储地直分为一级存储地址和二级存储地址。举例来说,可将存储地址分为二级,0000-0999可作为一级存储地址,1000—1999可作为二级存储地址。在将与已处理流表项相应的各存储单元作为写入对象,依次连续向各写入对象发送写操作命令之前,方法还包括当待处理报文对应的报文类型为SYN类型,并且,待处理报文的相应的读取对象中的存储信息具体为空或无效已建流表项时,将读取对象作为写入对象;当待处理报文对应的报文类型为SYN类型,并且,待处理报文的相应的读取对象中的存储信息具体为有效已建流表项时,重新计算出待处理报文的存储地址并作为待处理报文的目标流ID,并将待处理报文的报文信息和待处理报文的目标流ID输出至待处理队列单元,待处理报文的目标流ID与某一二级存储地址相匹配;具体的,重新计算出存储地址可为更改原存储地址的首为地址,例如SYN报文存储地址为0100,但存储地址为0100的存储单元存有有效的已建流表,则可将SYN报文的存储地址更改为1100并可将其作为待处理报文的目标流ID,重新输出至待处理队列单元。当待处理报文对应的报文类型为FIN类型、RST类型或其他类型时,比较待处理报文的报文信息中的五元组,与相应的读取对象中存储的已建流表的五元组是否相同,若相同,则将所述读取对象作为写入对象;否则,重新计算出待处理报文的存储地址并作为待处理报文的目标流ID,并将所述待处理报文的报文信息和待处理队列的目标流ID输出至待处理队列单元,待处理队列的目标流ID与某一二级存储地址相匹配。如上述过程类似,在此不再赘述。对所 公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
权利要求
1.一种流监控方法,其特征在于,基于流监控装置,所述流监控装置至少包括头域提取单元、计算单元、待处理队列单元、处理控制单元、已处理队列单元和存储控制单元;所述方法包括所述头域提取单元将链路的每一待处理报文分别进行解析,获取每一待处理报文的报文信息,并输出给所述待处理队列单元进行存储;所述报文信息至少包括五元组、报文数、 报文类型、字节数和服务类型Tos ;所述五元组包括源IP地址、源端口、目的IP地址、目的端口和传输层协议号;所述计算单元对每一待处理报文的五元组进行哈希运算得到流序列号ID,并将所述流 ID输出给所述待处理队列单元进行存储;当所存储的报文信息的数目达到第一预设数目或预设时间时,所述待处理队列单元将所存储的所有报文信息和相应的流ID进行输出至所述处理单元;所述第一预设数目大于 I ;所述处理单元获取存储地址与所述流ID相匹配的存储单元中的存储信息,并根据所述存储信息和所述流ID对应的报文信息进行处理,得到包含待处理报文的报文信息的已处理流表项;所述已处理队列单元对所述已处理流表项及存储地址进行存储,并且当存储的所述已处理流表项的数目达到第二预设数目或预设时间时,将所存储的已处理流表项及存储地址输出至所述存储控制单元;所述第二预设数目大于I ;所述存储控制单元将所述已处理流表项写入相应的存储单元,所述已处理流表项写入相应的存储单元后作为已建流表项。
2.根据权利要求1所述的方法,其特征在于,所述流监控装置还包括链表维护单元,链表维护单元预先为存有已建流表项的存储单元分配N个单向链表,所述N为大于I的自然数,每一所述单向链表包括至少一个链表节点,每一所述链表节点对应一个存储有已建流表项的存储单兀;所述方法还包括所述链表维护单兀依次读取每一单向链表中每一链表节点所对应存储单元中所存储的已建流表项,若所读取的已建流表项为不活动超时流,则删除所读取的已建流表项。
3.根据权利要求2所述的方法,其特征在于,所述链表维护单元存储N个链表的第I个链表节点的存储地址,并且除每一单向链表的链表尾节点外,其余所有的链表节点所对应的已建流表项中存储所在单向链表的下一个链表节点所对应的存储地址。
4.根据权利要求3所述的方法,其特征在于,所述链表维护单元依次读取每一单向链表节点所对应存储单元中所存储的已建流表项,若所读取的已建流表项为不活动超时流, 则删除所读取的已建流表项具体包括所述链表维护单元将每一单向链表的第I个链表节点所对应的存储单元作为读取目标,依次向每一读取目标发送读操作指令,以便读入各读取目标所存储的已建流表项;待向第N个单向链表的第I个链表节点所对应的存储单元发送读操作指令后,所述链表维护单元对每一个已读入的已建流表项进行超时处理;所述超时处理包括当所述已读入的已建流表项为不活动超时流时,删除所述已建流表项,并向所述已读入的已建流表项所对应的单向链表的下一个链表节点所对应的存储单元发送所述读操作命令。
5.根据权利要求1所述的方法,其特征在于,所述根据所述存储信息和所述流ID对应的报文信息进行处理,得到包含待处理报文的报文信息的已处理流表项具体包括将与所述待处理队列单元输出的各流ID相匹配的各存储单元作为读取对象,依次连续向各读取对象发送读操作命令,以便各读取对象根据接收到的读操作命令进行读操作; 每读入一读取对象所存储的存储信息,即根据待处理报文的报文信息中的报文类型和读入的存储信息进行处理,得到已处理流表项。
6.根据权利要求5所述的方法,其特征在于,所述流监控装置还包括活动超时流计算单元,在每读入一读取对象所存储的存储信息后还包括活动超时流计算单元查看存储信息是否为已建流表项;若所述存储信息为已建流表项,则查看所述待处理报文到达时间与已建流表项中的报文的首次到达时间,计算是否大于预先设置活动超时流的超时值;若大于,删除所述已建流表项。
7.根据权利要求5所述的方法,其特征在于所述报文类型包括SYN类型、FIN类型、RST类型和其他类型;各读取对象中的存储信息具体为空或者已建流表项,所述已建流表项包括报文信息。
8.根据权利要求7所述的方法,其特征在于,所述根据待处理报文的报文信息中的报文类型和读入的存储信息进行处理,得到已处理流表项具体包括当待处理报文对应的报文类型为SYN类型时,生成空流表项作为已处理流表项;当待处理报文对应的报文类型为FIN类型、其它类型或RST类型时,将所对应的读取对象中存储的已建流表项更改为所述已处理流表项。
9.根据权利要求7所述的方法,其特征在于,所述将所述已处理流表项写入相应的存储单元具体包括将与已处理流表项相应的各存储单元作为写入对象,依次连续向各写入对象发送写操作命令,以便各写入对象根据接收到的写操作命令进行写操作。
10.根据权利要求9所述的方法,其特征在于,所述存储地址包括一级存储地址和二级存储地址;各写入对象中的存储信息具体为空或者已建流表项,所述已建流表项包括有效已建流表项和无效已建流表项;在将与已处理流表项相应的各存储单元作为写入对象,依次连续向各写入对象发送写操作命令之前,所述方法还包括当待处理报文对应的报文类型为SYN类型,并且,所述待处理报文的相应的读取对象中的存储信息具体为空或无效已建流表项时,将所述读取对象作为写入对象;当待处理报文对应的报文类型为SYN类型,并且,所述待处理报文的相应的读取对象中的存储信息具体为有效已建流表项时,重新计算出所述待处理报文的存储地址并作为待处理报文的目标流ID,并将所述待处理报文的报文信息和所述待处理报文的目标流ID输出至待处理队列单元,所述待处理报文的目标流ID某一二级存储地址相匹配;当待处理报文对应的报文类型为FIN类型、RST类型或其他类型时,比较待处理报文的报文信息中的五元组,与相应的读取对象中存储的已建流表项的五元组是否相同,若相同, 则将所述读取对象作为写入对象;否则,重新计算出所述待处理报文的存储地址并作为待处理报文的目标流ID,并将所述待处理报文的报文信息和所述待处理报文的目标流ID输出至待处理队列单元,所述待处理报文的的目标流ID某一二级存储地址相匹配。·
全文摘要
本发明公开了一种流监控方法,包括以下步骤头域提取单元将链路的每一待处理报文分别进行解析,获取每一待处理报文的报文信息,并输出给待处理队列单元进行存储;计算单元对每一待处理报文的五元组进行哈希运算得到流序列号ID,并将流ID输出给待处理队列单元进行存储;待处理队列单元将所存储的所有报文信息和相应的流ID进行输出至所述处理单元;处理单元获取存储地址与流ID相匹配的存储单元中的存储信息,并根据存储信息和流ID对应的报文信息进行处理,得到包含待处理报文的报文信息的已处理流表项;已处理队列单元将所存储的已处理流表项及存储地址输出至所述存储控制单元;存储控制单元将所述已处理流表项写入相应的存储单元。
文档编号H04L12/26GK103023728SQ20131001466
公开日2013年4月3日 申请日期2013年1月15日 优先权日2013年1月15日
发明者李玉峰, 叶荻秋, 王雨, 卜佑军, 程东年, 陈庶樵, 伊鹏, 张建辉, 田乐 申请人:中国人民解放军信息工程大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1