一种报文分流处理方法及装置
技术领域
本发明涉及通信技术领域,尤其涉及一种报文分流处理方法及装置。
背景技术
随着现代网络技术的发展和网络影响的扩大,越来越多的网络设备,如安全网关、边缘路由器和核心路由器,需要支持快速准确的报文分流。未来网络的发展趋势需要为用户提供更好的服务质量,而诸如防火墙、区分服务、虚拟专网、基于策略的路由和高层交换等提高服务质量的机制都是基于高效报文分流技术的。使用报文分流技术,可有效检测并实时阻断隐藏在海量网络流量中的病毒、攻击与滥用行为,也可以对分布在网络中的各种流量进行有效管理,从而实现对网络应用、网络基础设施和网络性能的保护。
现有技术中,通常采用多核CPU(Central Processing Unit,中央处理单元)进行业务报文处理,每个CPU核由四个硬线程VCPU(Virtual CentralProcessing Unit,虚拟中央处理单元)构成,为了使多个VCPU在相互配合下达到最大报文处理速度,需要使用流分类算法使所有VCPU的报文分发负载平衡。流分类算法采用一定规则识别符合某类特征的报文,是有区别地对报文进行服务的前提和基础。具体地,流分类算法可以使用IP(Internet Protocol,因特网协议)报文头的ToS(Type of Service,服务类型)字段的优先级位,识别出有不同优先级特征的流量;也可以由网络管理者设置流分类的策略。报文的分类依据一般都局限在封装报文的头部信息,很少使用报文的内容作为分流的标准。报文分流的结果没有范围限制,可以是一个由三元组(包括源地址、协议号和目的地址)确定的狭小范围,也可以是到某网段的所有报文。
在网络环境中,当需要传输的IP报文大小超过MTU(MaximumTransmission Unit,最大传输单位)时,会产生IP分片情况。例如,在以太网环境中可传输最大IP报文(MTU)为1500字节,而传输的IP报文大于1500字节时,需要使用分片技术将IP报文分片后,才能传输。由于TCP(TransferControl Protocol,传输控制协议)面向连接,对数据包的到达顺序以及数据包传输中是否发生错误有严格的要求,因此,应使同组分片报文尽量在同一VCPU上处理。
为满足上述要求,现有技术提出了三元组流分类及分片报文处理方案和五元组流分类及分片报文处理方案,其中,三元组流分类方案通过提取报文IP头部的源IP、目的IP和协议三部分的内容进行Hash(哈希)运算,得到进行报文处理的目的VCPU,并对分片报文进行进一步分析。当IP数据报文被分片后,每一分片都成为一个分组,具有自己的IP首部,并在选择路由时与其他分组独立。当数据报文的分片到达目的端时有可能会失序,但是在IP首部中有足够的信息使接收端正确组装上述数据报文的分片,因此,分片报文采用三元组流分类算法,仍能使同组分片报文在同一VCPU上处理,且对分片报文不作特殊处理。
五元组流分类方案在三元组流分类的基础上添加源端口和目的端口两部分信息,通过Hash运算得到目的VCPU。由于分片报文只有首片具有源/目端口,其他分片都仅有源/目IP地址没有端口,因此,分片报文应进行特殊处理,即对分片报文采用Hash链表缓存,在一组报文接收完毕后,对分片报文进行统一分发处理。
具体地,Hash链表用于将所有关键字为同一词的记录存储在同一线性链表中,假设某哈希函数产生的哈希地址在区间[0,m-1]上,则设立一个指针型向量Chain chainhash[m],该向量的每个分量的初始状态都是空指针,凡哈希地址为i的记录都插入到头指针为chainhash[i]的链表中,在链表中的插入位置可以在表头或表尾,也可以在中间,以保持同一词在同一线性链表中按关键字排列。同一组分片报文的标识字相同,因此可将标识字相同的分片报文挂接在同一Hash链表中,链中每个结点存放报文相关信息,包括标识符、MF(More Fragment,更多分片)值、DF(Don′t Fragment,不允许分片)值和偏移量等信息。对分片报文的处理流程包括,根据报文的标准偏移和MF值来判断是否为分片报文,如果不是分片报文,则直接按照五元组进行流分类;如果是分片报文,则读取IP头中的协议信息,如果IP头中没有协议信息,则判断该分片报文不是首片报文;如果IP头中有协议信息,则判断该分片报文是首片报文,并提取该分片报文的源/目的IP地址、源/目的端口和标识等信息,对标识相同的分片报文悬挂于同一Hash链表中。随后,继续接收分片报文直到分片报文的MF值为0,表示该报文包结束。当一组报文接收完毕后,查找该链表中所有标识相同的报文进行流分类处理。
然而,对于三元组流分类及分片报文处理方案,由于目前很多局域网采用NAT(Network Address Translation,网络地址转换)技术以解决全球IP地址不足的现状,存在大量IP相同但端口不同的网络数据报文,而IP地址相同而端口不同的报文要在同一个VCPU上处理,因此,会造成报文分发不平衡的现象,即某些VCPU因阻塞而丢包,而另一些VCPU却处于空闲状态。
对于五元组流分类及分片报文处理方案,对分片报文的缓存处理会占用内存空间并降低分类速度,查找Hash链表会给系统带来很大开销,同时,网络中存在分片风暴攻击,即故意发送部分IP分片而不是全部的IP分片,会使目标主机总是处于等待分片报文的状态,消耗并占用了系统资源。
发明内容
本发明提供了一种报文分流处理方法及装置,用于提高多核网络设备处理报文的速度和效率。
本发明提供了一种报文分流处理方法,应用于包括多核网络设备的报文分流处理系统中,所述方法包括以下步骤:
所述多核网络设备提取报文的五元组信息,所述五元组信息包括源端口、目的端口、源因特网协议IP地址、目的IP地址和协议内容;
所述多核网络设备根据所述报文的分片信息,判断所述报文是否为分片报文,如果所述报文为分片报文,则根据所述报文的源IP地址、目的IP地址和协议内容进行哈希Hash运算,获取所述报文对应的虚拟中央处理单元VCPU;如果所述报文不是分片报文,则根据所述报文的源端口、目的端口、源IP地址、目的IP地址和协议内容进行Hash运算,获取所述报文对应的VCPU;
所述多核网络设备通过所述获取的VCPU处理所述报文。
所述报文的分片信息为所述报文包含的标志字段和标准偏移字段。
所述多核网络设备根据所述报文的分片信息,判断所述报文是否为分片报文,具体为:
如果所述标志字段的最后一位为0且标准偏移字段为0,则所述多核网络设备判断所述报文不是分片报文;如果所述标志字段的最后一位为0且标准偏移字段不为0,或所述标志字段的最后一位为1,则所述多核网络设备判断所述报文是分片报文。
当所述报文为分片报文时,所述多核网络设备通过所述获取的VCPU处理所述报文,具体为:
所述多核网络设备通过同一VCPU处理同一分组中的所有分片报文。
当所述报文为分片报文时,所述多核网络设备通过所述获取的VCPU处理所述报文之后,还包括:
所述多核网络设备根据所述分片报文中的标识字段和标准偏移字段,对同一分组中的分片报文进行组装。
本发明还提供了一种报文分流处理装置,应用于报文分流处理系统中,所述装置包括:
提取模块,用于提取报文的五元组信息,所述五元组信息包括源端口、目的端口、源因特网协议IP地址、目的IP地址和协议内容;
判断模块,用于根据所述报文的分片信息,判断所述报文是否为分片报文;
获取模块,与所述判断模块和所述提取模块连接,用于在所述判断模块判断所述报文为分片报文时,根据所述提取模块提取的所述报文的源IP地址、目的IP地址和协议内容进行Hash运算,获取所述报文对应的VCPU;在所述判断模块判断所述报文不是分片报文时,根据所述提取模块提取的所述报文的源端口、目的端口、源IP地址、目的IP地址和协议内容进行Hash运算,获取所述报文对应的VCPU;
处理模块,与所述获取模块连接,用于通过所述获取模块获取的VCPU处理所述报文。
所述报文的分片信息为所述报文包含的标志字段和标准偏移字段。
所述判断模块,具体用于在所述标志字段的最后一位为0且标准偏移字段为0时,判断所述报文不是分片报文;在所述标志字段的最后一位为0且标准偏移字段不为0,或所述标志字段的最后一位为1时,判断所述报文是分片报文。
当所述报文为分片报文时,所述处理模块,具体用于通过同一VCPU处理同一分组中的所有分片报文。
当所述报文为分片报文时,所述处理模块,还用于根据所述分片报文中的标识字段和标准偏移字段,对同一分组中的分片报文进行组装。
与现有技术相比,本发明具有以下优点:
本发明通过综合三元组流分类方案和五元组流分类方案,改进了报文分流算法,对非分片报文采用五元组流分类,对分片报文动态切换到三元组流分类,解决了三元组流分类方案对大流量报文分发不平衡的缺陷,弥补了五元组流分类方案下分片报文缓存带来的性能下降的不足,报文在多VCPU上分发更加均衡,加快了报文处理速度,减小了丢包率;另外,同一组分片报文在同一VCPU上处理,为上层分片报文的重组提供方便。
附图说明
图1为本发明中的一种报文分流处理方法流程图;
图2为本发明中报文头的结构示意图;
图3为本发明中的一种报文分流处理装置结构示意图。
具体实施方式
本发明的核心思想为:多核网络设备根据报文的分片信息,判断该报文是否为分片报文,如果报文为分片报文,则根据该报文的源IP地址、目的IP地址和协议内容进行Hash运算,获取报文对应的VCPU,并通过该VCPU处理报文;如果报文不是分片报文,则根据报文的源端口、目的端口、源IP地址、目的IP地址和协议内容进行Hash运算,获取报文对应的VCPU,并通过该VCPU处理报文。
本发明中提供了一种报文分流处理方法,应用于包括多核网络设备的报文分流处理系统中,该方法如图1所示,包括以下步骤:
步骤101,多核网络设备提取报文的五元组信息。
其中,五元组信息包括源端口、目的端口、源IP地址、目的IP地址和协议内容,如表1所示。
表1 五元组信息表
源端口 |
目的端口 |
源IP地址 |
目的IP地址 |
协议内容 |
Port1 |
Port2 |
10.10.0.1 |
10.10.0.0 |
Tcp |
Port2 |
any |
Ip1 |
Ip2 |
Udp |
步骤102,多核网络设备根据报文的分片信息,判断该报文是否为分片报文,如果报文为分片报文,则执行步骤103;如果报文不是分片报文,则执行步骤104。
具体地,报文的分片信息可以为报文包含的标志字段和标准偏移字段。报文头的结构如图2所示,该报文头包括4位版本字段、4位首部长度字段、8位服务类型字段、16位数据包总长度字段、16位标识字段、3位标志字段、13位标准偏移字段、8位TTL(Time To Live,生存时间)字段、8位协议字段、16位首部校验和字段、32位源IP地址和32位目的IP地址,其中,版本字段表示IP协议的版本,通信双方使用的IP协议版本必须一致,目前IP协议版本为Ipv4(Internet Protocol version 4,因特网协议第4版),因此,该字段通常为4;首部长度字段用于表示报头区包含的长度单位的个数;服务类型字段用于规定对本报文的处理方式,发送端可以利用该字段要求中途转发该报文的路由器使用低延迟、高吞吐率或高可靠性的线路发送;数据包总长度字段用于表示该报文的总长度,包括报头区和数据区的长度之和;标识字段为IP报文在源主机的网络层产生时所被加上的一个16位的唯一识别码;标志字段为用于描述报文分片状态的3位标志记号;标准偏移字段用于描述分片状态下的报文在原报文中的起始位置;TTL字段用于描述报文在网络中的有效存在时间,字段单位为跳站,一个跳站代表IP报文经过的一个路由器,每经过一个路由器,报文的TTL值减1,如果TTL值为0,则该报文被丢弃,避免死循环的发生;协议字段用于指明报文所携带的数据字段部分到达目的主机对应的高层协议;首部校验和字段用于检测报文在传输过程中,报文的头部信息是否被修改;源IP地址和目的IP地址在报文的传输过程中始终保持不变。
多核网络设备根据报文的标志字段和标准偏移字段判断该报文是否为分片报文,如果标志字段的最后一位为0且标准偏移字段为0,则该报文不是分片报文;如果标志字段的最后一位为0且标准偏移字段不为0,或标志字段的最后一位为1,则该报文是分片报文。
步骤103,多核网络设备根据报文的源IP地址、目的IP地址和协议内容进行Hash运算,获取该报文对应的VCPU。
具体地,Hash运算可以将任意长度的输入,通过散列算法变换成固定长度的输出,该输出为散列值。散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,因而无法从散列值来唯一地确定输入值。
多核网络设备可以将报文的源IP地址、目的IP地址和协议内容作为Hash运算的输入量,通过散列算法将上述输入量变换成固定长度的散列值,即128位的编码,并根据该编码获取对应的VCPU。由于同一分组中的所有分片报文的源IP地址、目的IP地址和协议内容均相同,因此,同一分组中的所有分片报文对应同一个VCPU。
步骤104,多核网络设备根据报文的源端口、目的端口、源IP地址、目的IP地址和协议内容进行Hash运算,获取该报文对应的VCPU。
具体地,多核网络设备还可以将报文的源端口、目的端口、源IP地址、目的IP地址和协议内容作为Hash运算的输入量,通过散列算法将上述输入量变换成固定长度的散列值,即128位的编码,并根据该编码获取对应的VCPU。由于Hash运算中,不同的输入可能会散列成相同的输出,因此,具有不同源端口、目的端口、源IP地址、目的IP地址或协议内容的报文可以对应相同或不同的VCPU。
步骤105,多核网络设备通过上述获取的VCPU处理报文。
具体地,当报文为分片报文时,多核网络设备通过同一VCPU处理同一分组中的所有分片报文。
当报文为分片报文时,多核网络设备通过获取的VCPU处理报文后,还可以根据分片报文中的标识字段和标准偏移字段,对同一分组中的分片报文进行组装。
为进一步验证上述技术方案的可行性,可以对真实网络环境中的分片报文进行统计,可以得出真实的网络环境中分片报文的数量很小,且上层平台对报文会进行过滤。当采用Smartbits软件在数据流中构造源IP地址、目的IP地址、源端口和目的端口变化的数据包来模拟大型网络时,还可以通过查看每个业务VCPU的报文统计量,比较三元组流分类方案和五元组流分类方案的性能差别。对于IP地址相同而端口变化的报文,五元组流分类方案对报文的分发更加均衡,而三元组流分类方案只能将报文在同一VCPU上处理;源/目的端口对换,以及源/目的IP地址对换的报文流在同一VCPU处理,相当于发送方和接收方在同一条通道上;IP地址变化而端口不变的三元组流分类方案和五元组流分类方案对报文的分发都比较均衡。因此,五元组流分类方案在真实的网络环境中更加合理,对处理海量网络报文更具有优越性。
本发明提出的技术方案综合三元组流分类方案和五元组流分类方案,改进了报文分流算法,对非分片报文采用五元组流分类,对分片报文动态切换到三元组流分类,解决了三元组流分类方案对大流量报文分发不平衡的缺陷,弥补了五元组流分类方案下分片报文缓存带来的性能下降的不足,报文在多VCPU上分发更加均衡,加快了报文处理速度,减小了丢包率;同一组分片报文在同一VCPU上处理,为上层分片报文的重组提供方便。
本发明在上述实施方式中提供了报文分流处理方法,相应地,本发明还提供了应用上述报文分流处理方法的装置。
如图3所示,为本发明中的一种报文分流处理装置结构示意图,应用于报文分流处理系统中,该装置包括:
提取模块310,用于提取报文的五元组信息。
其中,五元组信息包括源端口、目的端口、源IP地址、目的IP地址和协议内容。
判断模块320,用于根据所述报文的分片信息,判断所述报文是否为分片报文。
具体地,报文的分片信息可以为报文包含的标志字段。本发明中的报文结构包括4位版本字段、4位首部长度字段、8位服务类型字段、16位数据包总长度字段、16位标识字段、3位标志字段、13位标准偏移字段、8位TTL字段、8位协议字段、16位首部校验和字段、32位源IP地址和32位目的IP地址,其中,版本字段表示IP协议的版本,通信双方使用的IP协议版本必须一致,目前IP协议版本为Ipv4,因此,该字段通常为4;首部长度字段用于表示报头区包含的长度单位的个数;服务类型字段用于规定对本报文的处理方式,发送端可以利用该字段要求中途转发该报文的路由器使用低延迟、高吞吐率或高可靠性的线路发送;数据包总长度字段用于表示该报文的总长度,包括报头区和数据区的长度之和;标识字段为IP报文在源主机的网络层产生时所被加上的一个16位的唯一识别码;标志字段为用于描述报文分片状态的3位标志记号;标准偏移字段用于描述分片状态下的报文在原报文中的起始位置;TTL字段用于描述报文在网络中的有效存在时间,字段单位为跳站,一个跳站代表IP报文经过的一个路由器,每经过一个路由器,报文的TTL值减1,如果TTL值为0,则该报文被丢弃,避免死循环的发生;协议字段用于指明报文所携带的数据字段部分到达目的主机对应的高层协议;首部校验和字段用于检测报文在传输过程中,报文的头部信息是否被修改;源IP地址和目的IP地址在报文的传输过程中始终保持不变。
上述判断模块320,具体用于在所述标志字段的最后一位为0且标准偏移字段为0时,判断所述报文不是分片报文;在所述标志字段的最后一位为0且标准偏移字段不为0,或所述标志字段的最后一位为1时,判断所述报文是分片报文。
获取模块330,与判断模块320和提取模块310连接,用于在判断模块320判断所述报文为分片报文时,根据提取模块310提取的所述报文的源IP地址、目的IP地址和协议内容进行Hash运算,获取所述报文对应的VCPU;在判断模块320判断所述报文不是分片报文时,根据提取模块310提取的所述报文的源端口、目的端口、源IP地址、目的IP地址和协议内容进行Hash运算,获取所述报文对应的VCPU。
处理模块340,与获取模块330连接,用于通过获取模块330获取的VCPU处理所述报文。
当所述报文为分片报文时,上述处理模块340,具体用于通过同一VCPU处理同一分组中的所有分片报文。
当所述报文为分片报文时,上述处理模块340,还用于根据所述分片报文中的标识字段和标准偏移字段,对同一分组中的分片报文进行组装。
本发明提出的技术方案综合三元组流分类方案和五元组流分类方案,改进了报文分流算法,对非分片报文采用五元组流分类,对分片报文动态切换到三元组流分类,解决了三元组流分类方案对大流量报文分发不平衡的缺陷,弥补了五元组流分类方案下分片报文缓存带来的性能下降的不足,报文在多VCPU上分发更加均衡,加快了报文处理速度,减小了丢包率;同一组分片报文在同一VCPU上处理,为上层分片报文的重组提供方便。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台终端设备(可以是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。