基于两级表存储和查询传输层信息的IP分片处理方法
技术领域:本发明涉及网络设备对IP报文的处理方法,尤其涉及网络设备中只利用小存储空间来存储和查询传输层信息的IP分片处理方法。
背景技术:IP协议已成为Internet的核心,IP报文最大长度为65535字节,其具体长度由软件确定。但网络数据从源主机到目的主机中间可能需要经过不同的物理网络,每一种物理网络都会规定链路层数据帧的最大长度,即所谓链路层的最大传输单元MTU(Maximum Transfer Unit),如以太网的MTU一般为1500字节,但是不同的物理网络规定的MTU值是不一样的。IP协议采用IP分片实现各种具有不同MTU的物理网络之间的互连互通。IP分片是将大的原始IP报文分为多个小的符合MTU限制的分片报文的传输方式。分片报文的网络层报文头信息与原始IP报文的网络层报文头的相同,因此同一个原始报文的所有分片报文的源IP地址srcIP、目的IP地址dstIP、报文标识ID、协议类型TYPE这四个域相同,并且这四个域也决定了分片报文所属的原始报文。
分片可以发生在源主机,也可以发生在路由器上,但只有在目的主机才重组为原始IP报文。IP分片报文的网络层报文头复制了原始IP报文的网络层报文头信息,而将网络层的负载部分(其中包括传输层报文头)分隔成多段,每一段作为其中一个分片报文的网络层负载,因此同一个原始报文的所有分片报文中只有首片包含有传输层报文头,中间片和尾片则没有,如附图1所示。但一些应用(如防火墙、网络入侵检测、流量分析、负载均衡等)要求得到每个报文的源端口号和目的端口号之类的传输层信息。而除首片外,中间片和尾片的网络层负载中因为没有传输层报文头,从而报文中没有携带源端口号和目的端口号之类的传输层信息,因此需要对分片报文进行处理来获得其对应原始报文的传输层信息。在目的端主机采用保存所有分片报文,直到一个原始报文的所有分片接收到后再将所有分片重组为一个原始报文,但是如防火墙、网络入侵检测、流量分析、负载均衡等网络设备因一般部署在企业网的出口或者主干链路上,需处理的报文数量巨大,同时又不需知道分片报文对应的原始报文内容而只需获取所需的传输层信息,因此网络设备对分片报文处理不宜采用分片报文重组的方式。因此网络设备中分片报文处理一般是在首片到达时提取并存储所需的传输层信息,同一个原始报文的其它分片(中间片或者尾片)到达时通过查询得到该传输层信息。
国内外对于网络设备如何获取分片报文传输层信息的论述较少。从已有的相关资料了解到一般采用网络搜索引擎芯片(也称为三态内容寻址存储器)TCAM(Ternary ContentAddressable Memory)结合静态随机存取存储器SRAM(Static Random Access Memory)来实现分片报文传输层信息的存储和查询。具体的存储结构为:TCAM芯片存储标志分片报文所归属的原始报文的srcIP、dstIP、ID、TYPE,相应的SRAM表项中存储该原始报文的传输层信息。TCAM芯片是可掩码的内容寻址存储器,在这里实现从srcIP、dstIP、ID、TYPE映射得到存储该信息位置(地址)的功能。当处理一个分片报文时,首先提取报文中的srcIP、dstIP、ID、TYPE,然后根据是首片还是中间片或者尾片分别进行处理。如果是首片,分片报文处理逻辑提取传输层信息和srcIP、dstIP、ID、TYPE,向TCAM芯片发送空闲表项查询命令,TCAM芯片返回所有空闲表项中地址最小的那一项的地址,然后向返回的该表项中写入标志该分片报文归属的srcIP、dstIP、ID、TYPE,往SRAM芯片的对应表项(如同一地址的表项)中写入如源目端口号之类的传输层信息;如果是中间片或者尾片,分片报文处理逻辑提取srcIP、dstIP、ID、TYPE,以srcIP、dstIP、ID、TYPE为内容向TCAM芯片发送匹配命令,如果匹配则说明TCAM中已存储该分片报文所属原始报文信息那一项,读SRAM芯片对应表项的值即获得传输层信息。TCAM结合SRAM的方式一般采用队列方式维护分片信息(srcIP、dstIP、ID、TYPE与传输层信息的对应关系),即将其看作队列存储结构来管理,存储新分片原始报文信息的地址是上次存储位置增加1,但有种情况例外:如果上次存储的位置为最大地址,则存储新分片原始报文的地址为最小地址。因此为了存储较长时间内的所有分片原始报文的分片信息同时避免老的分片原始报文信息过早(该原始报文还有剩余的分片报文没有到达或者处理完)的被覆盖,需要较大容量的TCAM和SRAM。TCAM芯片价格昂贵且功耗大,使设备成本增加,同时电源设计和散热设计复杂度也增加。对于采用FPGA等编程器件来实现逻辑处理的系统来说,大容量的TCAM和SRAM芯片占用了编程器件非常宝贵的引脚资源,限制了编程器件外接芯片的数量。
文献《Characteristics of Fragmented IP Traffic on Internet Links》(发表在IMC 2001上)分析了实际网络流量的分片特性,得出IP分片报文所占比例是很低的(分片报文约占总报文数的0.5%,占总字节数的1.0%),而且处于悬挂分片状态的原始IP报文(是指其部分分片报文已处理完,而剩余的分片报文正在处理或还没有达到的那些分片原始报文)的数目更少(一般少于几百个)。因此对于网络设备的分片处理来说,只需记录当时处于悬挂分片状态的原始IP报文的分片信息即可,而那些所有分片报文已经处理完的原始IP报文的分片信息即可删除。从以上的网络流量分片特性可以得出实际上需要存储的分片信息很少,因此可以只用很小的存储空间即可实现分片信息的存储和查询,而不需要如TCAM结合SRAM的方式那样需要大存储容量的芯片。但是如何在很小的存储空间中存储、管理分片信息以及如何高效的查询获得传输层信息则是采用小存储空间解决分片问题的关键,目前尚未有公开文献解决这个问题。
发明内容:本发明针对目前网络设备中IP分片报文处理需要大容量的存储芯片,设备成本高和设计复杂度高的问题,提供一种在网络设备上基于两级表存储和查询传输层信息的IP分片处理方法,利用小存储空间来达到高效存储、管理分片信息以及高效查询获得传输层信息,为网络设备提供一种存储开销小、实现简单的IP分片处理方案,降低网络设备成本和复杂度。
本发明的技术方案是:
第一步,设计IP分片报文处理逻辑,IP分片报文处理逻辑与报文头缓存区、完整网络层传输层信息缓存区和系统控制逻辑相连,它从报文头缓存区取报文头数据,从报文头数据提取并存储完分片信息或者查询获得传输层信息后构造由网络层和传输层信息组成的分片处理结果,将分片处理结果写入完整网络层传输层信息缓存区。分片处理结果由网络层信息加传输层信息组成,为五元组(srcIP、dstIP、TYPE、源端口号sport、目的端口号dport)之类的信息。后续处理逻辑(负载均衡、五元组过滤、流恢复等)读取完整网络层传输层信息缓存区中数据,结合报文数据缓存区中对应的报文数据进行后续处理,将后续处理结果(如负载均衡中报文的输出端口号等)送给输出接口处理逻辑,输出接口处理逻辑根据后续处理逻辑的处理结果对报文进行部分转发、全部转发或丢弃。IP分片报文处理逻辑的参数(如尝试距离、尝试阈值、超时维护周期等)由用户通过系统控制逻辑设置。IP分片报文处理逻辑由分片报文解析模块、网络层传输层分片数据缓存区、控制模块、哈希模块、地址生成模块、两级表、超时维护模块组成。
分片报文解析模块与报文头缓存区和网络层传输层分片数据缓存区相连,从报文头缓存区读取报文头数据,根据IP报文头中的分片标志字段(flag)、分段偏移字段(fragment_offset)判断报文的分片状态,解析报文头数据,提取网络层的srcIP、dstIP、ID、TYPE和传输层信息,若是中间片或者尾片分片报文则只提取srcIP、dstIP、ID、TYPE并将传输层信息复位为0。然后将srcIP、dstIP、ID、TYPE、传输层信息、两位分片状态标志位(Frag,FD)写入网络层传输层分片数据缓存区,其中Frag表示本报文是否是分片报文(Frag为1表示本报文是分片报文,为0表示本报文不是分片报文),FD表示本报文是否是首片分片报文(FD为1表示是首片分片报文,为0表示是中间片或者尾片分片报文),FD在Frag为1时才有效。标志字段(flag)有三位,第一位保留(为0),第二位为DF,表示报文是否分片(0表示是分片,1表示不分片),最后一位为MF,表示IP原始报文分片是否还有更多分片报文(0表示为分片结束,本分片报文是原始报文的尾片,1表示还有分片报文,本报文是原始报文的首片或者中间片)。分片状态判断方法为:DF为0、MF为1、fragment_offset为0,则此报文为首片,置两位分片状态标志位(Frag,FD)为(1,1);DF为0、MF为1、fragment_offset不为0,则此报文为中间片,置两位分片状态标志位(Frag,FD)为(1,0);DF为0、MF为0、fragment_offset不为0,则此报文为尾片,置两位分片状态标志位(Frag,FD)为(1,0);其他情况表示该报文不是分片报文,置两位分片状态标志位(Frag,FD)为(0,0)。
网络层传输层分片数据缓存区是一片组织成队列结构的存储空间,与分片报文解析模块和控制模块相连,负责响应分片报文解析模块的写请求,存储srcIP、dstIP、ID、TYPE、传输层信息、分片状态标志位信息,同时响应控制模块的读请求,以先来先服务的方式给控制模块提供srcIP、dstIP、ID、TYPE、传输层、分片状态标志位信息。
两级表是一个双端口存储器,通过其端口A与控制模块的第一控制逻辑、当前地址寄存器、传输层结果寄存器相连,通过其端口B与超时维护模块相连,负责给控制模块提供存储分片信息以及查询传输层信息的读写接口,并为超时维护模块提供维护分片信息的读写接口。两级表的每个表项都可以存储一个分片原始报文的分片信息,具体内容为:有效位、srcIP、dstIP、ID、TYPE、传输层信息以及超时定时器,其中有效位表示该表项是否有效,1表示该表项有效(被占用),0表示无效(空闲),超时定时器记录该表项中存储的原始报文分片信息在两级表中的有效时间,以便超时维护模块利用该超时定时器来管理维护两级表中存储的分片信息。IP分片报文处理逻辑处理首片时,若两级表的某表项空闲,则称该表项匹配当前分片报文;否则,则称该表项不匹配当前分片报文。IP分片报文处理逻辑当前处理其它分片(中间片或者尾片)时,若两级表的某表项有效且其存储的srcIP、dstIP、ID、TYPE与当前处理的分片报文的相应域都相等,则称该表项匹配当前分片报文;否则,则称该表项不匹配当前分片报文。两级表由第一级表---初始分片信息表、第二级表---冲突分片信息表组成,第二级表的表项数大于等于第一级表的表项数。分片报文经过哈希模块的hash计算后得到访问第一级表地址,初始分片信息表用于在该第一级表地址所指示的表项匹配当前分片报文时存储分片信息和查询传输层信息,冲突分片信息表用于该第一级表地址所指示的表项不匹配当前分片报文时通过多次尝试本表的不同位置来试图找到匹配当前分片报文的表项,从而达到成功存储分片信息和查询传输层信息的目的。两级表用单独的冲突分片信息表处理访问地址冲突(指该地址所指示的表项不匹配当前报文),消除解决地址冲突时的堆积现象,提高地址冲突时多次尝试的命中率。两级表的端口A是访问两级表一条通道,由输入数据线data_1、命令数据线w/r_1、地址数据线addr_1和读结果数据线q_1组成,给控制模块提供向两级表存储分片信息和从两级表查询传输层信息的读写通道。两级表的端口B是访问两级表的另一条通道,由输入数据线data_2、命令数据线w/r_2、地址数据线addr_2和读结果数据线q_2组成,给超时维护模块提供从两级表读取表项内容以及向两级表更新超时定时器、删除表项的读写通道。根据文献《Characteristics of Fragmented IP Traffic on Internet Links》(发表在IMC 2001上)分析的网络流量分片特性可得知,处于悬挂分片状态的原始报文很少(一般少于几百个),而两级表只需存储这些处于悬挂分片状态原始报文的分片信息,因此两级表实际所需要的存储空间很小(16KB左右)。对于基于FPGA等可编程芯片的系统而言,两级表可直接使用可编程芯片的内部存储器,有助于充分利用可编程芯片的资源,提高处理速度,节约宝贵的引脚资源,简化设计,降低功耗和节约成本。
控制模块与网络层传输层分片数据缓存区、哈希模块、地址生成模块、两级表、外部的完整网络层传输层信息缓存区及系统控制逻辑相连,负责从网络层传输层分片数据缓存区读取一个报文的网络层传输层分片数据,当该分片数据指示为首片分片报文时将分片信息存储到两级表中,当该分片数据指示为其它分片即中间片或者尾片报文时查询两级表获得传输层信息。控制模块由第一控制逻辑、当前地址寄存器、当前网络层传输层分片数据寄存器、传输层结果寄存器、尝试阈值寄存器、尝试次数计数器、第一两级表参数寄存器组成。第一控制逻辑与哈希模块、地址生成模块、以及控制模块的当前地址寄存器、当前网络层传输层分片数据寄存器、传输层结果寄存器、尝试阈值寄存器、尝试次数计数器、第一两级表参数寄存器相连,负责对哈希逻辑、地址生成模块、两级表端口A、控制模块的尝试次数寄存器进行控制,并读取当前网络层传输层分片数据寄存器、传输层结果寄存器、尝试阈值寄存器、第一两级表参数寄存器的值,完成分片报文的分片信息存储或者传输层信息查询的功能;当前地址寄存器与第一控制逻辑及地址生成模块相连,负责指示访问两级表的当前表项位置;当前网络层传输层分片数据寄存器与网络层传输层分片数据缓存区及第一控制逻辑相连,负责寄存控制模块当前正在处理报文的网络层传输层分片数据;传输层结果寄存器与第一控制逻辑以及两级表的读结果数据线q_1相连,负责寄存第一控制逻辑处理首片时分片数据中的传输层信息或者处理其它分片时从两级表中查询得到的传输层信息;尝试阈值寄存器与第一控制逻辑以及外部的系统控制逻辑相连,寄存用户通过系统控制逻辑设定的访问两级表中第二级表的最大尝试次数,第一控制逻辑通过访问尝试阈值寄存器来判断何时终止尝试;尝试次数计数器与第一控制逻辑相连,负责记录第一控制逻辑已经尝试访问两级表中第二级表的次数,由第一控制逻辑在取一个新的网络层传输层分片数据时复位为0,第一控制逻辑在每访问一次两级表中第二级表的表项时将尝试次数寄存器增加1;第一两级表参数寄存器与第一控制逻辑以及外部的系统控制逻辑相连,负责存储两级表中第一级表的基地址、第一级表的总表项数。
第一控制逻辑是一个状态机,由空闲、取分片数据、计算hash、访问第一级表、匹配、地址生成、访问第二级表、结果处理8个状态组成。网络设备启动时,第一控制逻辑的状态初始化为空闲状态。当第一控制逻辑处于空闲状态时,当网络层传输层分片数据缓存区有分片数据可读且外部的完整网络层传输层信息缓存区可写时,状态转为取分片数据状态,否则保持在空闲状态;当第一控制逻辑处于取分片数据状态时,第一控制逻辑将尝试次数计数器复位为0,从网络层传输层分片数据缓存区读取分片数据写入当前网络层传输层分片数据寄存器中,若当前网络层传输层分片数据寄存器的两位分片状态标志位中Frag为0,则将当前网络层传输层分片数据寄存器中的传输层信息写入传输层结果寄存器中,状态转为结果处理状态,若当前网络层传输层分片数据寄存器的两位分片状态标志位中Frag为1,则状态转为计算hash状态;当第一控制逻辑处于计算hash状态时,第一控制逻辑给哈希模块发激励信号,等待哈希模块返回哈希值,将哈希模块返回的哈希值模第一两级表参数寄存器中的第一级表的总表项数然后再加上第一两级表参数寄存器中的第一级表的基地址得到访问两级表第一级表的地址存入当前地址寄存器,状态转为访问第一级表状态;当第一控制逻辑处于访问第一级表状态时,第一控制逻辑访问当前地址寄存器所指示的两级表中第一级表表项,如果正在处理的分片数据是首片,第一控制逻辑提取当前网络层传输层分片数据寄存器中的传输层信息存入传输层结果寄存器中,状态转为匹配状态;当第一控制逻辑处于匹配状态时,如果正在处理的分片数据是首片,第一控制逻辑判断两级表端口A的读结果数据线q_1返回的数据是否指示该表项空闲,若指示该表项空闲,则将当前网络层传输层分片数据寄存器中的srcIP、dstIP、ID、TYPE、传输层信息写入该表项并将状态转为结果处理状态,若指示该表项不是空闲,则判断尝试次数计数器是否等于尝试阈值寄存器,若等于则将状态转为结果处理状态,若不等则将状态转为地址生成状态;如果正在处理的分片数据是其它分片,第一控制逻辑判断两级表端口A的读结果数据线q_1返回的数据中的srcIP、dstIP、ID、TYPE域与当前网络层传输层分片数据寄存器的相应域是否相等以及返回的数据中有效位是否为1,若相等且有效位为1,则将两级表端口A的读结果数据线q_1返回的数据中传输层信息存入传输层结果寄存器中,将状态转为结果处理状态,若不相等或者有效位不为1则判断尝试次数计数器是否等于尝试阈值寄存器,若等于尝试阈值寄存器则置传输层结果寄存器为默认的全0并将状态转为结果处理状态,若不等于尝试阈值寄存器则将状态转为地址生成状态;当第一控制逻辑处于地址生成状态时,第一控制逻辑向地址生成模块的第二控制逻辑发生成下一个地址信号,等待地址生成模块返回下一个地址,将地址生成模块返回的下一个地址存入当前地址寄存器中,状态转为访问第二级表状态;当第一控制逻辑处于访问第二级表状态时,第一控制逻辑访问当前地址寄存器所指示的两级表中第二级表表项,尝试次数计数器增加1,将状态转为匹配状态;当第一控制逻辑处于结果状态时,第一控制逻辑将当前网络层传输层分片数据寄存器中的srcIP、dstIP、TYPE及传输层结果寄存器中的传输层信息组装写入完整网络层传输层信息缓存区,将状态转为空闲状态。
哈希模块与控制模块的当前网络层传输层分片数据寄存器及第一控制逻辑相连,为方便利用第三方开发的哈希逻辑而作为独立模块设计,哈希模块收到第一控制逻辑发来的激励信号后,从第一控制模块的当前网络层传输层分片数据寄存器读取srcIP、dstIP、ID、TYPE,采用低位补0的方式将srcIP、dstIP、ID、TYPE填充成hash函数要求的位数,可默认采用的hash函数为CRC16,其计算公式为y=x16+x12+x2+1(其中x为输入的数值,y为得到的哈希值),通过CRC16计算后得到16位的哈希值返回给控制模块。
地址生成模块与控制模块的第一控制逻辑、当前地址寄存器及外部的系统控制逻辑相连,负责在收到控制模块发来的生成下一个地址信号后,读取控制模块的当前地址寄存器并生成下一个地址返回给控制模块。地址生成模块由第二控制逻辑、尝试距离寄存器、第二两级表参数寄存器组成。第二控制逻辑与尝试距离寄存器、第二两级表参数寄存器、控制模块的当前地址寄存器及第一控制逻辑相连,负责在收到控制模块的生成下一个地址信号后读取控制模块的当前地址寄存器并根据尝试距离寄存器和第二两级表参数寄存器生成下一个地址返回给控制模块,地址生成的具体方法如下:第二控制逻辑判断控制第一控制逻辑的上上一个状态(当前状态的上一个状态的上一个状态),若第一控制逻辑的上上一个状态为访问第一级表状态,将读取的当前地址寄存器减去第二两级表参数寄存器中的第一级表的基地址得到偏移量,再用偏移量加上第二两级表参数寄存器的第二级表的基地址得到下一个地址,当第一控制逻辑的上上一个状态为访问第二级表状态时,用读取的当前地址寄存器减去第二两级表参数寄存器中第二级表基地址,之后加上尝试距离寄存器,然后用得到的值模第二两级表参数寄存器中第二级表表项总数得到地址偏移量,将地址偏移量再加上第二两级表参数寄存器中第二级表基地址得到下一个地址;尝试距离寄存器与第二控制逻辑及外部的系统控制逻辑相连,负责寄存用户设定的当前地址与生成的下一个地址间的间隔大小,为了保证在生成的第一级表地址冲突时,控制逻辑尽可能多的尝试访问两级表中二级表的表项,尝试距离必须与第二级表的总表数互素,这样保证在用户设定尝试阈值等于两级表中第二级表的总表项数时,控制模块能够遍历第二级表中所有表项,达到访问两级表中二级表表项的最大数目;第二两级表参数寄存器存储两级表中第二级表的总表数以及第二级表的基地址。
超时维护模块与两级表的端口B及外部的系统控制逻辑相连,负责周期更新两级表中所有有效表项的超时定时器,当有表项的超时定时器超过超时阈值寄存器时,将该表项删除。超时维护模块由周期定时器、管理周期寄存器、超时阈值寄存器、第三两级表参数寄存器、表项内容寄存器、当前地址计数器及扫描器组成。周期定时器是一个计时器,与扫描器相连,负责定时将其自身增加1,当其值等于管理周期寄存器时激励扫描器从休眠状态进入扫描状态,网络设备初始化时被复位为0。管理周期寄存器与扫描器及外部的系统控制逻辑相连,由用户通过系统控制逻辑设定,当周期定时器等于管理周期寄存器时,扫描器状态转为扫描状态,开始新一周期的超时维护处理,管理周期寄存器决定了扫描器周期维护两级表的粒度;超时阈值寄存器与扫描器及外部的系统控制逻辑相连,由用户通过系统控制逻辑设定,表示两级表中表项信息可以有效存储的管理周期数;第三两级表参数寄存器与扫描器及外部的系统控制逻辑相连,存储由用户设定的两级表参数,包括两级表中第一级表的基地址、第一级表的总表项数、第二级表的基地址、第二级表的总表项数;表项内容寄存器与两级表端口B的输入数据线data_2、读结果数据线q_2及扫描器相连,寄存扫描器当前访问的两级表表项内容;当前地址计数器与扫描器及两级表端口B的地址数据线addr_2相连,记录扫描器访问的两级表的当前位置,初始化时复位为两级表中第一级表的基地址;扫描器与两级表端口B的命令数据线w/r_2、周期定时器、管理周期寄存器、超时阈值寄存器、第三两级表参数寄存器、表项内容寄存器、当前地址计数器相连。扫描器是一个状态机,由休眠、扫描2个状态组成,网络设备初始化时复位为休眠状态。当扫描器处于休眠状态时,扫描器判断周期定时器是否等于管理周期寄存器,若等于将周期定时器复位为0,转为扫描状态,若不等于则保持休眠状态;当扫描器处于扫描状态时,扫描器访问当前地址计数器指示的两级表表项,如果该表项有效(有效位为1),判断该表项的超时定时器是否等于超时阈值寄存器,若等于则将该表项删除(置该表项的有效位为0),若不等则将该超时定时器增加1,判断当前地址计数器是否等于两级表中第二级表的尾地址(第二级表尾地址=第二级表基地址+第二级表总表项数-1),若等于,扫描器将当前地址计数器置为第一级表的基地址,状态转为休眠状态,否则将当前地址计数器赋值为两级表下一个表项地址(下一个表项地址具体是指:若当前地址计数器等于第一级表尾地址即第一级表的基地址加上第一级表的总表项数减去1,下一个表项地址为第二级表的基地址;否则下一个表项地址为当前地址计数器增加1),状态保持在扫描状态。
第二步,IP分片报文处理逻辑对IP报文进行处理,具体流程为:
2.1.网络设备启动时对IP分片报文处理逻辑进行初始化。网络层传输层分片数据缓存区复位为空,第一控制逻辑状态复位为空闲,两级表中所有表项复位为空闲(有效位为0),超时维护模块中的周期定时器复位为0,超时维护模块中的当前地址计数器复位为两级表中第一级表的基地址,超时维护模块中的扫描器状态复位为休眠。
2.2.当报文头缓存区中有报文可读且后面的网络层传输层分片数据缓存区可写时,分片报文解析模块从报文头缓存区中取出一个报文的报文头数据,并根据该报文头数据的IP报文头中的标志字段(flag)、分段偏移字段(fragment_offset)来判断IP报文的分片状态并置两位分片状态标志位(Frag,FD)。DF为0、MF为1、fragment_offset为0,则此报文为首片,置两位分片状态标志位(Frag,FD)为(1,1);DF为0、MF为1、fragment_offset不为0,则此报文为中间片,置两位分片状态标志位(Frag,FD)为(1,0);DF为0、MF为0、fragment_offset不为0,则此报文为尾片,置两位分片状态标志位(Frag,FD)为(1,0);其他情况表示该报文不是分片报文,置两位分片状态标志位(Frag,FD)为(0,0)。分片报文解析模块从报文头数据中提取srcIP、dstIP、ID、TYPE这四个域的信息和传输层信息,将srcIP、dstIP、ID、TYPE、传输层信息(如是中间片或者尾片则将传输层信息置为0)、两位分片状态标志位(Frag,FD)写入网络层传输层分片数据缓存区中,转步骤2.3。报文头缓存区中无报文可读或者网络层传输层分片数据缓存区不可写时,转步骤2.2等待。
2.3.控制模块的第一控制逻辑处于空闲状态,当网络层传输层分片数据缓存区有分片数据可读并且外部的完整网络层传输层信息缓存区可写时,将状态转为取分片数据状态,执行步骤2.3.1,否则保持在空闲状态,转步骤2.3等待;
2.3.1第一控制逻辑处于取分片数据状态,将尝试次数计数器复位为0,从网络层传输层分片数据缓存区读取分片数据写入当前网络层传输层分片数据寄存器中。判断读取的分片数据中的标志位Frag是否为1,若标志位Frag不为1则将分片数据中的传输层信息写入传输层结果寄存器中,将状态转为结果处理状态,转步骤2.4;若标志位Frag为1则将状态转为计算hash状态,转步骤2.3.2;
2.3.2第一控制逻辑处于计算hash状态,给哈希模块发激励信号。
2.3.3哈希模块收到第一控制逻辑发来的激励信号后,从控制模块的当前网络层传输层分片数据寄存器中读取srcIP、dstIP、ID、TYPE,采用低位补0的方式将srcIP、dstIP、ID、TYPE填充成128位,将其通过hash函数计算后得到的哈希值返回给第一控制逻辑。
2.3.4第一控制逻辑将哈希模块返回的哈希值模第一两级表参数寄存器中的第一级表的总表项数再加上第一两级表参数寄存器中的第一级表基地址得到访问第一级表的地址存入当前地址寄存器,将状态转为访问第一级表状态,判断控制模块的当前网络层传输层分片数据寄存器中的标志位FD是否为1,若为1(首片)转步骤2.3.5,否则(其它分片)转步骤2.3.6。
2.3.5第一控制逻辑处于访问第一级表状态,将控制模块中的当前网络层传输层分片数据寄存器中的传输层信息赋值给控制模块中的传输层结果寄存器,访问当前地址寄存器所指示的两级表中第一级表表项,将状态转为匹配状态,执行步骤2.3.5.1。
2.3.5.1第一控制逻辑处于匹配状态,判断两级表端口A的读结果数据线q_1返回的数据是否指示该表项空闲,若指示该表项空闲,则将当前网络层传输层分片数据寄存器中的srcIP、dstIP、ID、TYPE、传输层信息以及有效位(置1)、超时定时器(置为0)写入该表项并将状态转为结果处理状态,转步骤2.4;若指示该表项被占用则判断尝试次数计数器是否等于尝试阈值寄存器,若等于将状态转为结果处理状态,转步骤2.4,若不等则将状态转为地址生成状态,转步骤2.3.5.2。
2.3.5.2第一控制逻辑处于地址生成状态,向地址生成模块的控制逻辑发生成下一个地址信号。
2.3.5.3地址生成模块的第二控制逻辑接收第一控制逻辑发来的生成下一个地址信号后,读取控制模块的当前地址寄存器,为尝试访问两级表的第二级表生成下一个地址,并将该下一个地址返回给控制模块的第一控制逻辑。
2.3.5.4第一控制逻辑处于地址生成状态,将地址生成模块的第二控制逻辑返回的下一个地址存入当前地址寄存器中,将状态转为访问第二级表状态。
2.3.5.5第一控制逻辑处于访问第二级表状态,访问当前地址寄存器所指示的两级表中第二级表表项,尝试次数计数器增加1,将状态转为匹配状态,转步骤2.3.5.1。
2.3.6第一控制逻辑处于访问第一级表状态,访问当前地址寄存器所指示的两级表中第一级表表项,将状态转为匹配状态,执行步骤2.3.6.1。
2.3.6.1第一控制逻辑处于匹配状态,判断两级表端口A的读结果数据线q_1返回的数据的srcIP、dstIP、ID、TYPE域与控制模块中的当前网络层传输层分片数据寄存器的相应域是否相等及返回的数据的有效位是否为1,若相等且有效位为1,则将两级表端口A的读结果数据线q_1返回的数据中传输层信息存入控制模块的传输层结果寄存器中,将状态转为结果处理状态,转步骤2.4;若不相等或者有效位为0则判断尝试次数计数器是否等于尝试阈值寄存器,若等于则置传输层结果寄存器为默认的全0并将状态转为结果处理状态,转步骤2.4,若不等则将状态转为地址生成状态,转步骤2.3.6.2。
2.3.6.2第一控制逻辑处于地址生成状态,向地址生成模块的第二控制逻辑发生成下一个地址信号。
2.3.6.3第二控制逻辑收到第一控制逻辑发来的生成下一个地址信号后,读取控制模块的当前地址寄存器,为尝试访问两级表的第二级表生成下一个地址,并将该下一个地址返回控制模块的第一控制逻辑。
2.3.6.4第一控制逻辑处于地址生成状态,将地址生成模块返回的下一个地址存入当前地址寄存器中,将状态转为访问第二级表状态。
2.3.6.5第一控制逻辑处于访问第二级表状态,访问当前地址寄存器所指示的两级表中第二级表表项,尝试次数计数器增加1,将状态转为匹配状态,转步骤2.3.6.1。
2.4.第一控制逻辑处于结果处理状态,将控制模块中的当前网络层传输层分片数据寄存器中的srcIP、dstIP、TYPE及传输层结果寄存器中的传输层信息组装写入完整网络层传输层信息缓存区,将状态转为空闲状态,转步骤2.2。
2.5.在步骤2.2至2.4运行的同时,超时维护模块维护两级表分片信息,具体步骤如下:
2.5.1扫描器处于休眠状态,判断周期定时器是否等于管理周期寄存器,若等于则将周期定时器复位为0,将当前地址计数器置为两级表中第一级表的基地址,将状态转为扫描状态,转步骤2.5.2;若不等于则保持休眠状态,转步骤2.5.1等待周期定时器。
2.5.2扫描器处于扫描状态,扫描器访问当前地址计数器指示的两级表表项,获取表项内容(有效位、srcIP、dstIP、ID、TYPE、传输层信息和超时定时器)存入表项内容寄存器中。如果表项内容寄存器中有效位为1,说明该表项有效,则判断表项内容寄存器中的超时定时器值是否等于超时阈值寄存器,若等于则将该表项清除,即将有效位以及srcIP、dstIP、ID、TYPE、传输层信息和超时定时器所有这些域都置为0后重新写入当前地址计数器指示的表项中,若不等则将表项内容寄存器中超时定时器增加1,然后将更新后的表项内容寄存器重新写入当前地址计数器指示的表项,完成超时定时器更新;如果表项内容寄存器中有效位为0,说明该表项无效,则不作任何处理。
2.5.3扫描器处于扫描状态,判断当前地址计数器是否等于两级表中第二级表的尾地址,若等于则将状态转为休眠状态,转步骤2.5.1;否则将当前地址计数器赋值为两级表下一个表项地址,状态保持在扫描状态,转步骤2.5.2。
本发明是一种在网络硬件设备中仅使用少量存储空间即可获取传输层信息的IP分片报文处理方案。采用本发明可以达到以下技术效果:
1.消耗的存储空间少,避免使用如TCAM等昂贵而功耗大或者占用PCB板面大的芯片,减少了设备成本,降低了设计复杂度(包括电源设计、散热设计和PCB板设计)。
2.采用两级表存储分片信息,减少了由于访问地址冲突带来的影响,消除了访问冲突所造成的堆积现象,提高了分片信息存储和传输层信息查询的效率。
3.采用hash函数将大范围空间(srcIP、dstIP、ID、TYPE)映射为小范围空间来计算两级表的访问地址,现有很多随机性很好的hash计算公式(如CRC16),再加上采用两级表来减少访问地址冲突的影响,因此本发明对分片报文的处理效果可以与采用TCAM结合SRAM等大存储器结构方式的处理效果相当。
4.本发明中的两级表所需空间小,特别适合基于FPGA等可编程器件实现逻辑处理的网络设备,可利用可编程器件的内部存储空间来实现两级表,充分利用可编程器件的存储资源,避免外接大容量存储芯片,节约宝贵的引脚资源,允许可编程器件外接更多其他芯片,提高设计的灵活性和简便性。
附图说明:
图1是源主机或者路由器对IP原始报文进行分片的示意图。
图2是本发明IP分片报文处理逻辑在网络设备中所处的位置示意图。
图3是本发明总体流程图。
图4是本发明第一步构建的IP分片报文处理逻辑的具体结构图。
图5是IP分片报文处理逻辑控制模块的第一控制逻辑的状态转换图。
图6是本发明第二步对分片原始报文的首片分片报文进行处理的流程图。
图7是本发明第二步对分片原始报文的其它分片(中间片或尾片)进行处理的流程图。
图8是本发明第二步的2.5中超时维护模块对两级表分片信息进行维护的流程图。
具体实施方式:
图1是源主机或者路由器对IP原始报文进行分片的示意图。源主机或者路由器对IP原始报文进行分片这是公知的事实,在本发明中阐述IP报文为何分片以及如何分片是为了更清楚的了解本发明IP分片报文处理逻辑的背景。当源主机通过输出接口发送大IP报文(该报文大小大于输出接口的MTU)或者路由器从输入接口接收报文经过路由查找等处理后从另一个输出接口(该输出接口的MTU小于报文的输入接口的MTU)发送出去时,需要解决将被发送出去的报文超过输出接口MTU限制的问题,这个时候必须采用IP分片方式对原始IP报文进行分片后才能继续传输。如附图1所示,原始IP报文包括一个IP头、一个trans头(传输层报文头)以及传输层负载部分,分片的时候将IP层的负载部分分为多段,这里以4段为例,第一段包括传输层报文头和传输层负载的第一部分,第二段为传输层负载的第二部分,依此第三段、第四段分别为传输层负载的第三、第四部分。这个原始IP报文的第一段(在本发明中称为首片)的IP报文头中srcIP、dstIP、ID、TYPE与原始IP报文头中的相同,负载部分为原始IP报文网络层负载部分的第一段,其中包含原始IP报文的传输层报文头和传输层负载第一部分,拥有传输层报文头信息;原始IP报文的分片报文中除第一段和最后一段外的分段(在本发明中称为中间片)的IP报文头中srcIP、dstIP、ID、TYPE与原始IP报文头中的相同,负载部分为原始IP报文网络层负载部分的中间部分,没有传输层报文头信息;原始IP报文的最后一段(在本发明中称为尾片)的IP报文头中srcIP、dstIP、ID、TYPE与原始IP报文头中的相同,负载部分为原始IP报文网络层负载部分的残余部分(这里指第四段),同样也没有传输层报文头信息。
图2是本发明IP分片报文处理逻辑在网络设备中所处的位置示意图,图中阴影部分即是本发明的IP分片报文处理逻辑。在网络设备不考虑分片报文的情况下,网络设备由输入接口处理逻辑、报文头缓存区、报文数据缓存区、五元组过滤等后续处理逻辑及输出接口处理逻辑组成,但是分片报文对有些网络设备的功能影响很大,如基于五元组过滤的防火墙如不考虑分片报文则会造成防火墙不能成功阻断恶意的分片流量,因此为了功能完整,分片报文处理功能在一些网络设备中是必须的。加上IP分片报文处理逻辑后网络设备构成如附图2所示,其中的完整网络层传输层信息缓存区与没考虑分片处理时的报文头缓存区的作用是一样的,加上它只是为了更好的衔接各模块。输入接口处理逻辑、报文头缓存区、报文数据缓存区、五元组过滤等后续处理逻辑、输出接口处理逻辑及完整网络层传输层信息缓存区是一般网络设备的共有模块,是公知的。下面对网络设备各模块作简要说明。输入接口处理逻辑与网络设备接口的成帧芯片、系统控制逻辑、报文头缓存区、报文数据缓存区相连,由用户通过系统控制逻辑设定成帧芯片位宽等参数,负责接收成帧芯片发来的的报文数据,判断该数据是否属于报文头数据,若是则将该数据写入报文头缓存区中并写入报文数据缓存区中,否则只写入报文数据缓存区中。报文头缓存区是一片组织成队列结构的存储空间,与输入接口处理逻辑、本发明的IP分片报文处理逻辑相连,负责响应输入接口处理逻辑的写请求,存储报文头数据,同时响应本发明的IP分片报文处理逻辑的读请求,以先来先服务的方式给IP分片报文处理逻辑提供报文头数据。报文数据缓存区是一片组织成队列结构的存储空间,与输入接口处理逻辑、后续处理逻辑(或者输出接口处理逻辑)相连,负责响应输入接口处理逻辑的写请求,存储报文完整数据,同时响应后续处理逻辑(或者输出接口处理逻辑)的读请求,以先来先服务的方式给后续处理逻辑(或者输出接口处理逻辑)提供报文数据。系统控制逻辑与输入接口处理逻辑、本发明的IP分片报文处理逻辑、后续处理逻辑及输出接口处理逻辑相连,用于用户通过命令设置各模块参数。本发明的IP分片报文处理逻辑与报文头缓存区、完整网络层传输层信息缓存区和系统控制逻辑相连,负责从报文头缓存区读取报文头数据,提取并存储完分片信息或者查询获得传输层信息后构造由网络层和传输层信息组成的分片处理结果,将分片处理结果写入外部的完整网络层传输层信息缓存区,在附图4中详细描述其结构。完整网络层传输层信息是一片组织成队列结构的存储空间,与本发明的IP分片报文处理逻辑、后续处理逻辑相连,负责响应本发明的分片报文处理逻辑的写请求,存储具有完整网络层传输层信息的报文头数据,同时响应后续处理逻辑的读请求,以先来先服务的方式给后续处理逻辑提供具有完整网络层传输层信息的报文头数据。后续处理逻辑与完整网络层传输层信息缓存区、系统控制逻辑及输出接口处理逻辑相连,根据自身功能可能还需要与报文数据缓存区相连,负责实现网络设备主体功能。输出接口处理逻辑与后续处理逻辑、系统控制逻辑、网络设备接口的成帧芯片相连,根据网络设备功能需要还可能与报文数据缓存区相连,根据后续处理逻辑的处理结果处理对报文进行转发部分、转发全部、丢弃等处理。具有分片处理功能的网络设备对报文的大致处理流程是这样的:网络接口接收经过物理层编码的报文,然后报文经过成帧芯片解码及串并转化为具有一定位宽的报文数据,输入接口处理逻辑接收经过转化后的报文数据并将所需的报文头数据分离出来存入报文头缓存区,将整个报文(包括报文头)存入报文数据缓存区中;本发明的分片处理逻辑单元从报文头缓存区取一个报文的报文头数据,经过处理后得到网络层和传输层完整信息写入后端的完整网络层传输层信息缓存区中,后续处理逻辑读取完整网络层传输层信息缓存区中的网络层传输层信息结合报文数据进行相应的主体功能处理,如五元组过滤(防火墙)、流恢复(应用层数据还原)、负载均衡(分流设备)等;输出接口处理逻辑根据后续处理逻辑的处理结果处理对报文进行转发部分、转发全部、丢弃等处理。所有这些功能模块的参数由用户通过系统控制逻辑设定,分片报文处理逻辑需要设置的参数有:尝试距离寄存器、尝试阈值寄存器、管理周期寄存器、超时阈值寄存器、第一两级表参数寄存器、第二两级表参数寄存器和第三两级表参数寄存器。
图3是本发明总体流程图。本发明包括以下步骤:
第一步,设计IP分片报文处理逻辑,详细内容见附图4所示。
第二步,IP分片报文处理逻辑对IP报文进行处理,IP分片报文处理逻辑的输入为IP报文头数据(包括IP层报文头和传输层报文头数据),输出为完整网络层传输层信息。IP分片报文处理逻辑根据输入的IP报文头数据将报文分为3类:首片分片报文、其它分片(中间片或者尾片)报文、非分片报文。IP分片报文处理逻辑对首片分片报文的处理流程详见附图6所示;对其它分片报文的处理流程详见附图7所示;对非分片报文处理时,由输入的IP报文头数据直接解析生成完整网络层传输层信息输出。IP分片报文处理逻辑对两级表中存储的分片信息进行周期维护,当某表项的分片信息存储周期数超过设定的超时阈值时,删除该表项分片信息,详细流程见附图8所示。
图4是本发明第一步构建的IP分片报文处理逻辑的具体结构图。IP分片报文处理逻辑由分片报文解析模块、网络层传输层分片数据缓存区、控制模块、哈希模块、地址生成模块、两级表、超时维护模块组成。
分片报文解析模块与报文头缓存区和网络层传输层分片数据缓存区相连,从报文头缓存区读取报文头数据,根据IP报文头中的分片标志字段(flag)、分段偏移字段(fragment_offset)判断报文的分片状态,解析报文头数据,提取网络层的srcIP、dstIP、ID、TYPE和传输层信息,若是中间片或者尾片分片报文则只提取srcIP、dstIP、ID、TYPE并将传输层信息复位为0。然后将srcIP、dstIP、ID、TYPE、传输层信息、两位分片状态标志位(Frag,FD)写入网络层传输层分片数据缓存区。
网络层传输层分片数据缓存区是一片组织成队列结构的存储空间,与分片报文解析模块和控制模块相连,负责响应分片报文解析模块的写请求,存储srcIP、dstIP、ID、TYPE、传输层信息、分片状态标志位信息,同时响应控制模块的读请求,以先来先服务的方式给控制模块提供srcIP、dstIP、ID、TYPE、传输层、分片状态标志位信息。
两级表是一个双端口存储器,通过其端口A与控制模块的第一控制逻辑、当前地址寄存器、传输层结果寄存器相连,通过其端口B与超时维护模块相连,负责给控制模块提供存储分片信息以及查询传输层信息的读写接口,并为超时维护模块提供维护分片信息的读写接口。两级表的每个表项都可以存储一个分片原始报文的分片信息。两级表由第一级表---初始分片信息表、第二级表---冲突分片信息表组成,第二级表的表项数大于等于第一级表的表项数。分片报文经过哈希模块的hash计算后得到访问第一级表地址,初始分片信息表用于在该第一级表地址所指示的表项匹配当前分片报文时存储分片信息和查询传输层信息,冲突分片信息表用于该第一级表地址所指示的表项不匹配当前分片报文时通过多次尝试本表的不同位置来试图找到匹配当前分片报文的表项。两级表的端口A是访问两级表一条通道,由输入数据线data_1、命令数据线w/r_1、地址数据线addr_1和读结果数据线q_1组成,给控制模块提供向两级表存储分片信息和从两级表查询传输层信息的读写通道。两级表的端口B是访问两级表一条通道,由输入数据线data_2、命令数据线w/r_2、地址数据线addr_2和读结果数据线q_2组成,给超时维护模块提供从两级表读取表项内容以及向两级表更新超时定时器、删除表项的读写通道。
控制模块与网络层传输层分片数据缓存区、哈希模块、地址生成模块、两级表、外部的完整网络层传输层信息缓存区及系统控制逻辑相连,负责从网络层传输层分片数据缓存区读取一个报文的网络层传输层分片数据,当该分片数据指示为首片分片报文时将分片信息存储到两级表中,当该分片数据指示为其它分片报文时查询两级表获得传输层信息。控制模块由第一控制逻辑、当前地址寄存器、当前网络层传输层分片数据寄存器、传输层结果寄存器、尝试阈值寄存器、尝试次数计数器、第一两级表参数寄存器组成。第一控制逻辑是一个状态机,与哈希模块、地址生成模块、以及控制模块的当前地址寄存器、当前网络层传输层分片数据寄存器、传输层结果寄存器、尝试阈值寄存器、尝试次数计数器、第一两级表参数寄存器相连,负责对哈希逻辑、地址生成模块、两级表端口A、控制模块的尝试次数寄存器进行控制,并读取当前网络层传输层分片数据寄存器、传输层结果寄存器、尝试阈值寄存器、第一两级表参数寄存器的值,完成分片报文的分片信息存储或者传输层信息查询的功能,有8个状态,分别为:空闲、取分片数据、计算hash、访问第一级表、匹配、地址生成、访问第二级表、结果处理,状态转换图详见附图5所示;当前地址寄存器与第一控制逻辑及地址生成模块相连,负责指示访问两级表的当前表项位置;当前网络层传输层分片数据寄存器与网络层传输层分片数据缓存区及第一控制逻辑相连,负责寄存控制模块当前正在处理报文的网络层传输层分片数据;传输层结果寄存器与第一控制逻辑以及两级表的读结果数据线q_1相连,负责寄存第一控制逻辑处理首片时分片数据中的传输层信息或者处理其它分片时从两级表中查询得到的传输层信息;尝试阈值寄存器与第一控制逻辑以及外部的系统控制逻辑相连,寄存用户通过系统控制逻辑设定的访问两级表中第二级表的最大尝试次数,第一控制逻辑通过访问尝试阈值寄存器来判断何时终止尝试;尝试次数计数器与第一控制逻辑相连,负责记录第一控制逻辑已经尝试访问两级表中第二级表的次数,由第一控制逻辑在取一个新的网络层传输层分片数据时复位为0,第一控制逻辑在每访问一次两级表中第二级表的表项时将尝试次数寄存器增加1;第一两级表参数寄存器与第一控制逻辑以及外部的系统控制逻辑相连,负责存储两级表中第一级表的基地址、第一级表的总表项数。
哈希模块与控制模块的当前网络层传输层分片数据寄存器及第一控制逻辑相连,为方便利用第三方开发的哈希逻辑而作为独立模块设计,哈希模块收到第一控制逻辑发来的激励信号后,从第一控制模块的当前网络层传输层分片数据寄存器读取srcIP、dstIP、ID、TYPE,采用低位补0的方式将srcIP、dstIP、ID、TYPE填充成hash函数要求的位数,,通过hash函数计算后得到的哈希值返回给控制模块。
地址生成模块与控制模块的第一控制逻辑、当前地址寄存器及外部的系统控制逻辑相连,负责在收到控制模块发来的生成下一个地址信号后,读取控制模块的当前地址寄存器并生成下一个地址返回给控制模块。地址生成模块由第二控制逻辑、尝试距离寄存器、第二两级表参数寄存器组成。第二控制逻辑与尝试距离寄存器、第二两级表参数寄存器、控制模块的当前地址寄存器及第一控制逻辑相连,负责在收到控制模块的生成下一个地址信号后读取控制模块的当前地址寄存器并根据尝试距离寄存器和第二两级表参数寄存器生成下一个地址返回给控制模块;尝试距离寄存器与第二控制逻辑及外部的系统控制逻辑相连,负责寄存用户设定的当前地址与生成的下一个地址间的间隔大小;第二两级表参数寄存器存储两级表中第二级表的总表数以及第二级表的基地址。
超时维护模块与两级表的端口B及外部的系统控制逻辑相连,负责周期更新两级表中所有有效表项的超时定时器,当有表项的超时定时器超过超时阈值寄存器时,将该表项删除。超时维护模块由周期定时器、管理周期寄存器、超时阈值寄存器、第三两级表参数寄存器、表项内容寄存器、当前地址计数器及扫描器组成。周期定时器是一个计时器,与扫描器相连,负责定时将其自身增加1,当其值等于管理周期寄存器时激励扫描器从休眠状态进入扫描状态,网络设备初始化时被复位为0。管理周期寄存器与扫描器及外部的系统控制逻辑相连,由用户通过系统控制逻辑设定,当周期定时器等于管理周期寄存器时,扫描器状态转为扫描状态,开始新一周期的超时维护处理,管理周期寄存器决定了扫描器周期维护两级表的粒度;超时阈值寄存器与扫描器及外部的系统控制逻辑相连,由用户通过系统控制逻辑设定,表示两级表中表项信息可以有效存储的管理周期数;第三两级表参数寄存器与扫描器及外部的系统控制逻辑相连,存储由用户设定两级表参数,包括两级表中第一级表的基地址、第一级表的总表项数、第二级表的基地址、第二级表的总表项数;表项内容寄存器与两级表端口B的输入数据线data_2、读结果数据线q_2及扫描器相连,寄存扫描器当前访问的两级表表项内容;当前地址计数器与扫描器及两级表端口B的地址数据线addr_2相连,记录扫描器访问的两级表的当前位置,初始化时复位为两级表中第一级表的基地址;扫描器与两级表端口B的命令数据线w/r_2、周期定时器、管理周期寄存器、超时阈值寄存器、第三两级表参数寄存器、表项内容寄存器、当前地址计数器相连。扫描器是一个状态机,由休眠、扫描2个状态组成。
图5是IP分片报文处理逻辑控制模块的第一控制逻辑的状态转换图。控制模块的第一控制逻辑是一个状态机,由空闲、取分片数据、计算hash、访问第一级表、匹配、地址生成、访问第二级表、结果处理8个状态组成。网络设备启动时,第一控制逻辑的状态初始化为空闲状态。当第一控制逻辑处于空闲状态时,当网络层传输层分片数据缓存区有分片数据可读且外部的完整网络层传输层信息缓存区可写时,状态转为取分片数据状态,否则保持在空闲状态;当第一控制逻辑处于取分片数据状态时,第一控制逻辑将尝试次数计数器复位为0,从网络层传输层分片数据缓存区读取分片数据写入当前网络层传输层分片数据寄存器中,若当前网络层传输层分片数据寄存器的两位分片状态标志位中Frag为0时,则将当前网络层传输层分片数据寄存器中的传输层信息写入传输层结果寄存器中,状态转为结果处理状态,若当前网络层传输层分片数据寄存器的两位分片状态标志位中Frag为1时,则状态转为计算hash状态;当第一控制逻辑处于计算hash状态时,第一控制逻辑给哈希模块发激励信号,等待哈希模块返回哈希值,将哈希模块返回的哈希值模第一两级表参数寄存器中的第一级表的总表项数然后再加上第一两级表参数寄存器中的第一级表的基地址得到访问两级表第一级表的地址存入当前地址寄存器,状态转为访问第一级表状态;当第一控制逻辑处于访问第一级表状态时,第一控制逻辑访问当前地址寄存器所指示的两级表中第一级表表项,如果正在处理的分片数据是首片,第一控制逻辑提取当前网络层传输层分片数据寄存器中的传输层信息存入传输层结果寄存器中,状态转为匹配状态;当第一控制逻辑处于匹配状态时,如果正在处理的分片数据是首片,第一控制逻辑判断两级表端口A的读结果数据线q_1返回的数据是否指示该表项空闲,若指示该表项空闲,则将当前网络层传输层分片数据寄存器中的srcIP、dstIP、ID、TYPE、传输层信息写入该表项并将状态转为结果处理状态,若指示该表项不是空闲,则判断尝试次数计数器是否等于尝试阈值寄存器,若等于则将状态转为结果处理状态,若不等则将状态转为地址生成状态;如果正在处理的分片数据是其它分片,第一控制逻辑判断两级表端口A的读结果数据线q_1返回的数据中的srcIP、dstIP、ID、TYPE域与当前网络层传输层分片数据寄存器的相应域是否相等以及返回的数据中有效位是否为1,若相等且有效位为1,则将两级表端口A的读结果数据线q_1返回的数据中传输层信息存入传输层结果寄存器中,将状态转为结果处理状态,若不相等或者有效位不为1则判断尝试次数计数器是否等于尝试阈值寄存器,若等于尝试阈值寄存器则置传输层结果寄存器为默认的全0并将状态转为结果处理状态,若不等于尝试阈值寄存器则将状态转为地址生成状态;当第一控制逻辑处于地址生成状态时,第一控制逻辑向地址生成模块的第二控制逻辑发生成下一个地址信号,等待地址生成模块返回下一个地址,将地址生成模块返回的下一个地址存入当前地址寄存器中,状态转为访问第二级表状态;当第一控制逻辑处于访问第二级表状态时,第一控制逻辑访问当前地址寄存器所指示的两级表中第二级表表项,尝试次数计数器增加1,将状态转为匹配状态;当第一控制逻辑处于结果状态时,第一控制逻辑将当前网络层传输层分片数据寄存器中的srcIP、dstIP、TYPE及传输层结果寄存器中的传输层信息组装写入完整网络层传输层信息缓存区,将状态转为空闲状态。
图6是本发明第二步对分片原始报文的首片分片报文进行处理的流程图,对首片分片报文进行处理存储分片信息的流程如下:
1.当报文头缓存区中有报文可取而且后面的网络层传输层分片数据缓存区可写时,分片报文解析模块从报文头缓存区中取出一个首片分片报文的报文头数据,根据该报文头数据的IP报文头中的标志字段(flag)、分段偏移字段(fragment offset)来判断报文的分片状态并置两位分片状态标志位(Frag,FD)。此报文为首片,DF为0、MF为1、fragment_offset为0,置两位分片状态标志位(Frag,FD)为(1,1)。从报文头数据中提取srcIP、dstIP、ID、TYPE这四个域的信息和传输层信息,将srcIP、dstIP、ID、TYPE、传输层信息、两位分片状态标志位(1,1)写入网络层传输层分片数据缓存区中。
2.控制模块的第一控制逻辑处于空闲状态,当网络层传输层分片数据缓存区有分片数据可读并且外部的完整网络层传输层信息缓存区可写时,状态转为取分片数据状态,转步骤2.1,否则保持在空闲状态,转步骤2等待;
2.1第一控制逻辑处于取分片数据状态,将尝试次数计数器复位为0,从网络层传输层分片数据缓存区读取分片数据写入当前网络层传输层分片数据寄存器中。将状态转为计算hash状态。
2.2第一控制逻辑处于计算hash状态,给哈希模块发激励信号。
2.3哈希模块收到第一控制逻辑发来的激励信号后,从控制模块的当前网络层传输层分片数据寄存器中读取srcIP、dstIP、ID、TYPE,采用低位补0的方式将srcIP、dstIP、ID、TYPE填充成hash函数要求的位数,将其通过hash函数计算后得到的哈希值返回给第一控制逻辑。
2.4第一控制逻辑将哈希模块返回的哈希值模第一两级表参数寄存器中的第一级表的总表项数再加上第一两级表参数寄存器中的第一级表基地址得到访问第一级表的地址存入当前地址寄存器,将状态转为访问第一级表状态。
2.5第一控制逻辑处于访问第一级表状态,将控制模块中的当前网络层传输层分片数据寄存器中的传输层信息赋值给控制模块中的传输层结果寄存器,访问控制模块的当前地址寄存器所指示的两级表中第一级表表项,将状态转为匹配状态,转步骤2.5.1。
2.5.1第一控制逻辑处于匹配状态,判断两级表端口A的读结果数据线q_1返回的数据是否指示该表项空闲,若指示该表项空闲,则将当前网络层传输层分片数据寄存器中的srcIP、dstIP、ID、TYPE、传输层信息以及有效位(置1)、超时定时器(置为0)写入该表项并将状态转为结果处理状态,转步骤3;若指示该表项不是空闲的则判断尝试次数计数器是否等于尝试阈值寄存器,若等于将状态转为结果处理状态,转步骤3,若不等则将状态转为地址生成状态,转步骤2.5.2。
2.5.2第一控制逻辑处于地址生成状态,向地址生成模块的第二控制逻辑发生成下一个地址信号。
2.5.3第二控制逻辑接收第一控制逻辑发来的生成下一个地址信号后,读取控制模块的当前地址寄存器,为尝试访问两级表的第二级表生成下一个地址,并将该下一个地址返回控制模块的第一控制逻辑。
2.5.4第一控制逻辑处于地址生成状态,将地址生成模块的第二控制逻辑返回的下一个地址存入当前地址寄存器中,将状态转为访问第二级表状态。
2.5.5第一控制逻辑处于访问第二级表状态,访问当前地址寄存器所指示的两级表中第二级表表项,尝试次数计数器增加1,将状态转为匹配状态,转步骤2.5.1。
3.第一控制逻辑处于结果处理状态,将控制模块中的当前网络层传输层分片数据寄存器中的srcIP、dstIP、TYPE及传输层结果寄存器中的传输层信息组装写入完整网络层传输层信息缓存区。本首片分片报文处理结束,将状态转为空闲状态,转步骤1。
图7是本发明第二步对分片原始报文的其它分片(中间片或尾片)进行处理的流程图。对其它分片进行处理查询两级表获取其传输层信息的流程如下:
1.当报文头缓存区中有报文可读且后面的网络层传输层分片数据缓存区可写时,分片报文解析模块从报文头缓存区中取出一个报文的报文头数据,并根据该报文头数据的IP报文头中的标志字段(flag)、分段偏移字段(fragment offset)来判断报文的分片状态并置两位分片状态标志位(Frag,FD)。本分片报文为中间片或者尾片,置两位分片状态标志位(Frag,FD)为(1,0)。从报文头数据中提取srcIP、dstIP、ID、TYPE这四个域的信息,将srcIP、dstIP、ID、TYPE、传输层信息(置为默认的全0)、两位的分片状态标志位(1,0)写入网络层传输层分片数据缓存区中。
2.控制模块的第一控制逻辑处于空闲状态,当网络层传输层分片数据缓存区有分片数据可读并且外部的完整网络层传输层信息缓存区可写时,状态转为取分片数据状态,转步骤2.1,否则保持在空闲状态,转步骤2等待;
2.1第一控制逻辑处于取分片数据状态,将尝试次数计数器复位为0,从网络层传输层分片数据缓存区读取分片数据写入当前网络层传输层分片数据寄存器中。状态转为计算hash状态。
2.2第一控制逻辑处于计算hash状态,给哈希模块发激励信号。
2.3哈希模块收到第一控制逻辑发来的激励信号后,从控制模块的当前网络层传输层分片数据寄存器中读取srcIP、dstIP、ID、TYPE,采用低位补0的方式将srcIP、dstIP、ID、TYPE填充成128位,将其通过hash函数计算后得到的哈希值返回给第一控制逻辑。
2.4第一控制逻辑将哈希模块返回的哈希值模第一两级表参数寄存器中的第一级表的总表项数再加上第一两级表参数寄存器中的第一级表基地址得到访问第一级表的地址存入当前地址寄存器,状态转为访问第一级表状态。
2.5第一控制逻辑处于访问第一级表状态,访问当前地址寄存器所指示的两级表中第一级表表项,状态转为匹配状态,转步骤2.5.1。
2.5.1第一控制逻辑处于匹配状态,判断两级表端口A的读结果数据线q_1返回的数据中的srcIP、dstIP、ID、TYPE域与控制模块中的当前网络层传输层分片数据寄存器的相应域是否相等且返回的数据的有效位是否为1,若相等且有效位为1,则将两级表端口A的读数据总线返回的数据中传输层信息存入控制模块的传输层结果寄存器中,状态转为结果处理状态,转步骤3;若不相等或者有效位为0则判断尝试次数计数器是否等于尝试阈值寄存器,若等于则置传输层结果寄存器为默认的全0并将状态转为结果处理状态,转步骤3,若不等则状态转为地址生成状态,转步骤2.5.2。
2.5.2第一控制逻辑处于地址生成状态,向地址生成模块的第二控制逻辑发生成下一个地址信号。
2.5.3第二控制逻辑接收第一控制逻辑发来的生成下一个地址信号后,读取控制模块的当前地址寄存器,为尝试访问两级表的第二级表生成下一个地址,并将该下一个地址返回控制模块的第一控制逻辑。
2.5.4第一控制逻辑处于地址生成状态,将地址生成模块的第二控制逻辑返回的下一个地址存入当前地址寄存器中,将状态转为访问第二级表状态。
2.5.5第一控制逻辑处于访问第二级表状态,访问当前地址寄存器所指示的两级表中第二级表表项,尝试次数计数器增加1,将状态转为匹配状态,转步骤2.5.1。
3.第一控制逻辑处于结果处理状态,将控制模块中的当前网络层传输层分片数据寄存器中的srcIP、dstIP、TYPE及传输层结果寄存器中的传输层信息组装写入完整网络层传输层信息缓存区。本分片报文处理结束,状态转为空闲状态,转步骤1。
图8是本发明第二步的2.5中超时维护模块对两级表分片信息进行维护的流程图。超时维护模块对两级表的分片信息进行超时维护的具体流程如下:
1扫描器处于休眠状态,判断周期定时器是否等于管理周期寄存器,若等于将周期定时器复位为0,将当前地址计数器置为两级表中第一级表的基地址,将状态转为扫描状态,转步骤2;若不等于则保持休眠状态,转步骤1等待周期定时器。
2扫描器处于扫描状态,扫描器访问当前地址计数器指示的两级表表项,获取表项内容(有效位、srcIP、dstIP、ID、TYPE、传输层信息和超时定时器)存入表项内容寄存器中。如果表项内容寄存器中有效位为1,说明该表项有效,则判断表项内容寄存器中的超时定时器值是否等于超时阈值寄存器,若等于则将该表项清除,即将有效位以及srcIP、dstIP、ID、TYPE、传输层信息和超时定时器所有这些域都置为0后重新写入当前地址计数器指示的表项中,若不等则将表项内容寄存器中超时定时器增加1,然后将更新后的表项内容寄存器重新写入当前地址计数器指示的表项,完成超时定时器更新;如果表项内容寄存器中有效位为0,说明该表项无效,则不作任何处理。
3扫描器处于扫描状态,判断当前地址计数器是否等于两级表中第二级表的尾地址(第二级表尾地址=第二级表基地址+第二级表总表项数-1),若等于将状态转为休眠状态,转步骤1;否则将当前地址计数器赋值为两级表下一个表项地址(下一个表项地址具体是指:若当前地址计数器等于第一级表尾地址,即为第一级表的基地址加上第一级表的总表项数减去1,下一个表项地址则为第二级表的基地址;否则将当前地址计数器增加1即为下一个表项地址),状态保持在扫描状态,转步骤2。