发明内容
本发明实施例提供一种协议报文处理方法和设备,以避免TRILLhello报文发生丢包现象,继而可以避免TRILL邻居建立失败。
为了达到上述目的,本发明实施例提供一种协议报文处理方法,该方法包括以下步骤:
网络设备在检测到本网络设备的出端口发生链路拥塞时,利用协议类型特征从数据缓冲区中提取协议报文,将提取的协议报文上送中央处理器CPU进行处理,并在特征库中记录提取的协议报文的特征;其中,所述特征库用于记录协议报文特征,且利用报文中的特征信息匹配到所述特征库中记录的内容后,需要将报文上送CPU进行处理;
所述网络设备在收到协议报文之后,利用所述协议报文中的特征信息查询所述特征库;如果所述特征库中有所述特征信息对应的记录,则将所述协议报文上送CPU进行处理;如果所述特征库中没有所述特征信息对应的记录,则将所述协议报文存储到所述数据缓冲区中。
所述网络设备利用协议类型特征从数据缓冲区中提取协议报文,具体包括:当所述协议类型特征包括指定类型协议报文采用的组播目的介质访问控制MAC以及指定类型协议报文的协议类型时,所述网络设备从所述数据缓冲区中提取对应于所述组播目的MAC和所述协议类型的协议报文;或者,
当所述协议类型特征为报文中包含的能够区分协议报文和数据报文的五元组特征时,所述网络设备利用报文的五元组特征从所述数据缓冲区中提取协议报文;其中,五元组特征包括源IP地址、目的IP地址、源MAC地址、目的MAC地址、协议类型。
所述指定类型协议报文具体包括:基于多链路透明互联TRILL协议的hello报文。
所述特征库具体包括:包套接字PACKETSocket特征库,且所述PACKETSocket特征库中的每条表项用于记录协议报文的各个特征字段;
所述PACKETSocket特征库中包括网络设备支持协议的协议族以及网络设备不支持协议的协议族,所述网络设备上具有用于处理网络设备不支持协议的协议报文的应用模块以及PACKETSocket模块,且所述PACKETSocket模块支持应用程序对应的模块通过PACKETSocket接口向本PACKETSocket模块注册协议报文的特征;
所述网络设备在特征库中记录提取的协议报文的特征,具体包括:
所述应用模块通过所述PACKETSocket接口向所述PACKETSocket模块注册所述提取的协议报文的特征;
所述PACKETSocket模块在所述PACKETSocket特征库的网络设备不支持协议的协议族中记录所述提取的协议报文的特征。
所述方法进一步包括:
网络设备在检测到本网络设备的出端口发生链路拥塞时,开启协议报文提取功能,且在开启协议报文提取功能后,网络设备需要利用协议类型特征从数据缓冲区中提取协议报文;
网络设备在检测到本网络设备的出端口未发生链路拥塞时,如果当前开启了协议报文提取功能,则关闭协议报文提取功能,且在关闭协议报文提取功能后,网络设备不需要利用协议类型特征从数据缓冲区中提取协议报文。
本发明实施例提供一种网络设备,所述网络设备具体包括:
检测模块,用于检测本网络设备的出端口是否发生链路拥塞;
第一处理模块,用于在检测到发生链路拥塞时,利用协议类型特征从数据缓冲区中提取协议报文,将提取的协议报文上送中央处理器CPU进行处理,并在特征库中记录提取的协议报文的特征;其中,所述特征库用于记录协议报文特征,且利用报文中的特征信息匹配到所述特征库中记录的内容后,需要将报文上送CPU进行处理;
查询模块,用于在接收到协议报文之后,利用所述协议报文中的特征信息查询所述特征库;
第二处理模块,用于在所述特征库中有所述特征信息对应的记录时,将所述协议报文上送CPU进行处理;当所述特征库中没有所述特征信息对应的记录时,将所述协议报文存储到所述数据缓冲区中。
所述第一处理模块,具体用于当所述协议类型特征为指定类型协议报文采用的组播目的介质访问控制MAC和指定类型协议报文的协议类型时,从所述数据缓冲区中提取对应于所述组播目的MAC和所述协议类型的协议报文;或者,
当所述协议类型特征为报文中包含的能够区分协议报文和数据报文的五元组特征时,利用报文的五元组特征从所述数据缓冲区中提取协议报文;其中,五元组特征包括源IP地址、目的IP地址、源MAC地址、目的MAC地址、协议类型。
所述指定类型协议报文具体包括:基于多链路透明互联TRILL协议的hello报文。
所述特征库具体包括:包套接字PACKETSocket特征库,且所述PACKETSocket特征库中的每条表项用于记录协议报文的各个特征字段;
所述PACKETSocket特征库中包括网络设备支持协议的协议族以及网络设备不支持协议的协议族,所述网络设备的第一处理模块中具有用于处理网络设备不支持协议的协议报文的应用子模块以及PACKETSocket子模块,且所述PACKETSocket子模块支持应用程序对应的模块通过PACKETSocket接口向本PACKETSocket子模块注册协议报文的特征;
所述应用子模块,用于通过所述PACKETSocket接口向所述PACKETSocket子模块注册所述提取的协议报文的特征;
所述PACKETSocket子模块,用于在所述PACKETSocket特征库的网络设备不支持协议的协议族中记录所述提取的协议报文的特征。
所述检测模块,进一步用于在检测到本网络设备的出端口发生链路拥塞时,开启协议报文提取功能,且在开启协议报文提取功能后,需要利用协议类型特征从数据缓冲区中提取协议报文;
在检测到本网络设备的出端口未发生链路拥塞时,如果当前开启了协议报文提取功能,则关闭协议报文提取功能,且在关闭协议报文提取功能后,不需要利用协议类型特征从数据缓冲区中提取协议报文。
与现有技术相比,本发明实施例至少具有以下优点:本发明实施例中,通过在特征库,例如PACKETSocket(包套接字)特征库,中记录各协议报文的特征,从而保证各协议报文均能够上送CPU(CentralProcessingUnit,中央处理器)进行优先处理,以避免TRILLhello报文发生丢包现象,继而可以避免TRILL邻居建立失败;即避免网络设备由于不能优先调度TRILLhello,致使网络拥塞时TRILLhello报文被丢弃,TRILL邻居建立失败等情况。
具体实施方式
针对现有技术中存在的问题,本发明实施例提供一种协议报文处理方法,该方法的应用场景包括但不限于图1所示的TRILL网络,只要网络设备上会存在链路拥塞的场景均可以使用本发明实施例提供的技术方案;如:Internet分组交换网下,由于当前可供给链路资源小于正常转发需要链路资源所导致的链路拥塞场景;当前网络遭受大量异常报文攻击时,异常报文耗尽大量的链路资源所导致的链路拥塞场景等。如图2所示,该方法包括以下步骤:
步骤201,网络设备检测到本网络设备的出端口发生链路拥塞。
网络设备在收到自身能够识别的协议报文(如何确定协议报文是否为网络设备能够识别的协议报文将在后续过程阐述)时,将协议报文上送CPU进行处理,网络设备在收到自身不能够识别的协议报文(即需要直接透传的协议报文)或者数据报文时,需要将收到的不能够识别的协议报文或者数据报文存储到数据缓冲区(即缓冲器buffer)中进行缓存;当数据缓冲区已满时,后续需要存储到数据缓冲区的协议报文和数据报文将会被网络设备丢弃,从而导致需要直接透传的协议报文无法及时发送给下游网络设备。
本发明实施例中,网络设备检测本网络设备的出端口是否发生链路拥塞的方式,具体包括但不限于如下方式:
方式一、网络设备通过检测本网络设备的数据缓冲区中的数据量来判断本网络设备的出端口是否发生链路拥塞。具体的,当网络设备的数据缓冲区中的数据量在预设时间(可以根据实际经验值设置)内均大于预设缓冲门限(可以根据实际经验值设置)时,则说明网络设备的出端口发生链路拥塞,且网络设备可以依据数据缓冲区中的数据量大小来判断拥塞程度。否则,说明网络设备的出端口未发生链路拥塞。
方式二、当在数据缓冲区中基于端口队列来存储协议报文和数据报文时,网络设备通过检测本网络设备的端口队列中的当前队列使用率来判断本网络设备的出端口是否发生链路拥塞。具体的,当网络设备的端口队列中的当前队列使用率在预设时间(可以根据实际经验值设置)内均大于预设使用率门限(可以根据实际经验值设置,如30%)时,则说明网络设备的出端口发生链路拥塞;否则,说明网络设备的出端口未发生链路拥塞。
步骤202,网络设备在检测到本网络设备的出端口发生链路拥塞时,利用协议类型特征从数据缓冲区中提取协议报文。其中,如果网络设备在数据缓冲区中基于端口队列存储协议报文和数据报文,则网络设备从数据缓冲区中提取协议报文包括:网络设备从数据缓冲区的端口队列中提取协议报文。
本发明实施例中,网络设备在检测到本网络设备的出端口发生链路拥塞时,需要开启协议报文提取功能,以使网络设备从数据缓冲区中提取协议报文;此外,为避免CPU负担过重,网络设备在检测到本网络设备的出端口未发生链路拥塞时,如果当前开启了协议报文提取功能,则需要关闭协议报文提取功能,此时网络设备不需要从数据缓冲区中提取协议报文,以释放CPU。
在本发明实施例的一种优选实施方式中,协议类型特征可以为预先配置的能够识别出相应协议报文的特征。例如:协议类型特征可以通过二维数组[DMAC,TYPE]来匹配和表示,该DMAC(目的MAC)表示协议报文采用的组播目的MAC(MediaAccessControl,介质访问控制),该TYPE(类型)表示协议报文的协议类型,且网络设备能够通过该二维数组[DMAC,TYPE]区分出不同协议类型的协议报文。其中,通过预先配置能够识别出相应协议报文的特征,使得网络设备能够区分出协议报文和数据报文,且只需要配置一次能够识别出相应协议报文的特征,配置工作量较小。
基于此,本发明实施例中,网络设备利用协议类型特征从数据缓冲区中提取协议报文,具体包括但不限于:当协议类型特征包括指定类型协议报文采用的组播目的MAC以及指定类型协议报文的协议类型时,网络设备从数据缓冲区中提取对应于该组播目的MAC和该协议类型的协议报文。
本发明实施例的一种优选实施方式中,该指定类型协议报文具体包括:基于TRILL协议的hello报文。基于此,协议类型特征包括基于TRILL协议的hello报文采用的组播目的MAC以及对应的协议类型;如:基于TRILL协议的hello报文采用的组播目的MAC为0180-C200-0041,基于TRILL协议的hello报文的协议类型为22f4时,则基于TRILL协议的hello报文的协议类型特征通过二维数组[0180-C200-0041,22f4]来识别和区分,即网络设备从数据缓冲区中提取对应于二维数组[0180-C200-0041,22f4]的协议报文。
其中,网络设备在从数据缓冲区中提取对应于二维数组[0180-C200-0041,22f4]的协议报文时,还可以进一步将二维数组[0180-C200-0041,22f4]下发到ACL(AccessControlList,访问控制列表)中,并由网络设备基于ACL从数据缓冲区中提取对应于二维数组[0180-C200-0041,22f4]的协议报文。
在本发明实施例的另一种实施方式中,协议类型特征还可以为报文中包含的能够区分协议报文和数据报文的特征。例如:协议类型特征可以为报文中的五元组信息,该五元组信息为源IP地址、目的IP地址、源MAC地址、目的MAC地址、协议类型;基于报文中的五元组信息,网络设备能够区分协议报文和数据报文,继而能够从数据缓冲区中提取协议报文。在该实施方式下,不需要预先配置协议报文的特征,从而可以节省配置的工作量。
步骤203,网络设备将提取的协议报文(如基于TRILL协议的hello报文)上送CPU进行处理,并在特征库中记录提取的协议报文的特征。
其中,该特征库用于记录协议报文特征,且利用报文中的特征信息匹配到该特征库中记录的内容后,需要将报文上送CPU进行处理。
其中,网络设备在利用协议类型特征从数据缓冲区中提取协议报文之后,可以直接将提取的协议报文上送CPU进行优先处理,从而使得该协议报文不需要在数据缓冲区中等待发送;对于基于TRILL协议的hello报文来说,上述方式使得基于TRILL协议的hello报文能够上送CPU进行优先处理,以避免TRILLhello报文发生丢包现象,继而可以避免TRILL邻居建立失败。
其中,该特征库中记录的协议报文特征可以为协议报文的源IP地址、源MAC地址、目的IP地址、目的MAC地址、协议类型等。
在本发明实施例的一种优选实施方式中,该特征库具体包括但不限于:PACKETSocket特征库,该PACKETSocket特征库由一系列的表项组成,且该PACKETSocket特征库中的每条表项用于记录协议报文的各个特征字段。例如,该PACKETSocket特征库中的每条表项用于记录协议报文的源IP地址、源MAC地址、目的IP地址、目的MAC地址、协议类型等五元组信息。
对于PACKETSocket特征库来说,网络设备会将自身能够识别的协议报文(即本网络设备支持协议的协议报文)的特征(如源IP地址、源MAC地址、目的IP地址、目的MAC地址、协议类型)记录在PACKETSocket特征库中;在此基础上,本发明实施例中,网络设备会在PACKETSocket特征库中记录本网络设备从数据缓冲区中提取的协议报文(如基于TRILL协议的hello报文)的特征(如源IP地址、源MAC地址、目的IP地址、目的MAC地址、协议类型),以对PACKETSocket特征库进行动态更新,使得网络设备能够将自身不识别的协议报文(即本网络设备不支持协议的协议报文)的特征记录在PACKETSocket特征库中,即网络设备按照PACKETSocket特征库的表项形式在PACKETSocket特征库中记录自身不识别协议报文的特征。
其中,PACKETSocket特征库处在链路层中,如图3所示,为PACKETSocket特征库的位置关系的示意图,该PACKETSocket特征库包括自身支持协议的协议族,如图3中的ETH协议族、PPP(PointtoPointProtocol,点对点协议)协议族、FR(FrameRelay,帧中继)协议族等;在此基础上,本发明实施例中对PACKETSocket特征库进行了扩展,使得PACKETSocket特征库还包括自身不支持协议的协议族,如图3中的其它协议族。
此外,内核态的PACKETSocket模块支持应用程序对应的模块通过用户态的PACKETSocket接口向本PACKETSocket模块注册协议报文的特征。
例如,以太网应用程序对应的以太网模块通过PACKETSocket接口向本PACKETSocket模块注册以太网类型的协议报文的特征,由PACKETSocket模块在PACKETSocket特征库的ETH协议族中记录以太网类型的协议报文的特征;又例如,PPP应用程序对应的PPP通过PACKETSocket接口模块向本PACKETSocket模块注册PPP类型的协议报文的特征,由PACKETSocket模块在PACKETSocket特征库的PPP协议族中记录PPP类型的协议报文的特征;又例如,FR应用程序对应的FR模块通过PACKETSocket接口向本PACKETSocket模块注册FR类型的协议报文的特征,由PACKETSocket模块在PACKETSocket特征库的FR协议族中记录FR类型的协议报文的特征。
在此基础上,本发明实施例中,网络设备上提供用于处理本网络设备不支持协议的协议报文的应用模块,由该应用模块通过PACKETSocket接口向本PACKETSocket模块注册从数据缓冲区中提取的协议报文(如基于TRILL协议的hello报文)的特征,由该PACKETSocket模块在PACKETSocket特征库的其它协议族中记录该协议报文的特征。
基于上述过程维护的特征库,针对网络设备检测到本网络设备的出端口发生链路拥塞或者未发生链路拥塞的场景,该方法还可以包括以下步骤:
步骤204,网络设备在收到协议报文之后,利用协议报文中的特征信息查询特征库(如PACKETSocket特征库);如果特征库中有特征信息对应的记录,则执行步骤205;如果特征库中没有特征信息对应的记录,则执行步骤206。
步骤205,网络设备将协议报文上送CPU进行处理。
步骤206,网络设备将协议报文存储到数据缓冲区中。
其中,如果网络设备在数据缓冲区中基于端口队列存储协议报文和数据报文,则网络设备将协议报文存储到数据缓冲区中,具体包括:网络设备将该协议报文存储到数据缓冲区的端口队列中。
本发明实施例中,对于网络设备自身能够识别的协议报文,在PACKETSocket特征库中将记录有该协议报文的特征,即网络设备会将该协议报文上送CPU进行处理;对于网络设备自身不能够识别的协议报文(如基于TRILL协议的hello报文),基于上述处理后,在PACKETSocket特征库中也将记录有该协议报文的特征,即网络设备会将该协议报文上送CPU进行处理。
因此,在本网络设备的出端口发生链路拥塞时,网络设备能够将各协议报文(如基于TRILL协议的hello报文)上送CPU进行优先处理,实现QoS(QualityofService,服务质量)软转发,避免给网络设备增加负担。进一步的,上述方式还可以避免TRILLhello报文发生丢包现象,继而可以避免TRILL邻居建立失败,即避免网络设备由于不能优先调度TRILLhello,致使网络拥塞时TRILLhello报文被丢弃,TRILL邻居建立失败等情况。
基于与上述方法同样的发明构思,本发明实施例中还提供了一种网络设备,如图4所示,所述网络设备具体包括:
检测模块11,用于检测本网络设备的出端口是否发生链路拥塞;
第一处理模块12,用于在检测到发生链路拥塞时,利用协议类型特征从数据缓冲区中提取协议报文,将提取的协议报文上送中央处理器CPU进行处理,并在特征库中记录提取的协议报文的特征;其中,所述特征库用于记录协议报文特征,且利用报文中的特征信息匹配到所述特征库中记录的内容后,需要将报文上送CPU进行处理;
查询模块13,用于在接收到协议报文之后,利用所述协议报文中的特征信息查询所述特征库;
第二处理模块14,用于在所述特征库中有所述特征信息对应的记录时,将所述协议报文上送CPU进行处理;当所述特征库中没有所述特征信息对应的记录时,将所述协议报文存储到所述数据缓冲区中。
本发明实施例中,所述第一处理模块12,具体用于当所述协议类型特征为指定类型协议报文采用的组播目的介质访问控制MAC和指定类型协议报文的协议类型时,从所述数据缓冲区中提取对应于所述组播目的MAC和所述协议类型的协议报文;或者,当所述协议类型特征为报文中包含的能够区分协议报文和数据报文的五元组特征时,利用报文的五元组特征从所述数据缓冲区中提取协议报文;其中,五元组特征包括源IP地址、目的IP地址、源MAC地址、目的MAC地址、协议类型。
本发明实施例中,所述指定类型协议报文具体包括:基于多链路透明互联TRILL协议的hello报文。
本发明实施例中,所述特征库具体包括:包套接字PACKETSocket特征库,且所述PACKETSocket特征库中的每条表项用于记录协议报文的各个特征字段;
所述PACKETSocket特征库中包括网络设备支持协议的协议族以及网络设备不支持协议的协议族,所述网络设备的第一处理模块12中具有用于处理网络设备不支持协议的协议报文的应用子模块以及PACKETSocket子模块,且所述PACKETSocket子模块支持应用程序对应的模块通过PACKETSocket接口向本PACKETSocket子模块注册协议报文的特征;
所述应用子模块,用于通过所述PACKETSocket接口向所述PACKETSocket子模块注册所述提取的协议报文的特征;
所述PACKETSocket子模块,用于在所述PACKETSocket特征库的网络设备不支持协议的协议族中记录所述提取的协议报文的特征。
所述检测模块11,进一步用于在检测到本网络设备的出端口发生链路拥塞时,开启协议报文提取功能,且在开启协议报文提取功能后,需要利用协议类型特征从数据缓冲区中提取协议报文;
在检测到本网络设备的出端口未发生链路拥塞时,如果当前开启了协议报文提取功能,则关闭协议报文提取功能,且在关闭协议报文提取功能后,不需要利用协议类型特征从数据缓冲区中提取协议报文。
其中,本发明装置的各个模块可以集成于一体,也可以分离部署。上述模块可以合并为一个模块,也可以进一步拆分成多个子模块。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。