具体实施方式
针对现有技术存在的上述问题,本发明实施例提供了一种socket资源分配方案用以满足不同业务模块对Socket资源的不同需求,实现Socket资源分配的灵活性,保证通信的连接,实现对Socket资源最大化的利用。
下面结合附图对本发明实施例进行详细描述。
如图1所示,为本发明实施例提供的网络设备各业务模块结构示意图,网络设备可以包括:内核模块(例如,LIPC板间通信)、Packet Socket模块、OSI Socket模块、UDP(User Datagram Protocol,用户数据报协议)模块以及与TCP相关的业务模块等模块。内核模块,用于确保系统的稳定性;Packet Socket模块和OSI Socket模块,用于进行报文的收发并上送CPU。相对于传统的网络设备对TCP模块不进行细化,本发明实施例根据各种报文类型对应的TCP端口号,将TCP模块划分为多个模块,例如,RawIP(原始IP协议)模块、SSH(Secure Shell,安全外壳协议)模块、BGP(Border Gateway Protocol,边界网关协议)模块、Telnet(远程登录协议)模块等。
本发明实施例中,新增Socket资源分配装置,Socket资源分配装置可以为软件模块,用于根据业务模块的优先级,为请求Socket资源的业务模块分配Socket资源。
用户可以根据业务模块的功能以及业务处理的需求,为各个业务模块设定初始优先级。优先级用于表示获得Socket资源的优先顺序,优先级等级数量也可以由用户根据应用场景以及业务需求自行决定,在本发明实施例中,优先级的数值越小,优先级等级越高。例如,可以设定16个优先级,1为最高优先级,16为最低优先级。
Socket资源分配装置在初始化时,按照上述优先级设定原则,为各个业务模块设置初始优先级。
参见图2,为本发明实施例提供的Socket资源分配流程示意图,Socket资源分配装置在初始化完成之后,该流程包括以下步骤:
步骤201,Socket资源分配装置接收Socket资源申请请求。
具体的,一个或多个业务模块向Socket资源分配装置发送Socket资源申请请求,其中,Socket资源申请请求中携带有模块标识,Socket资源分配装置接收Socket资源申请请求。优选的,Socket资源分配装置还可以记录Socket资源申请请求的接收时间。
步骤202,根据请求Socket资源的业务模块的优先级,对请求Socket资源的业务模块进行排序,得到分配队列。
具体的,Socket资源分配装置依据请求Socket资源的业务模块的优先级等级,将请求Socket资源的业务模块中非最低优先级的业务模块,按照优先级从高到低顺序排列,得到分配队列。
优选的,若有至少2个优先级相同的业务模块请求Socket资源,则按照Socket资源申请请求的接收时间先后,对该至少2个优先级相同的业务模块进行排序。例如,一个客户端发起不同的业务请求,例如BGP业务和SSH业务,若此时BGP模块和SSH模块的优先级相同,则按照Socket资源申请请求的接收时间先后,对BGP模块和SSH模块进行排序;或者,多个客户端发起同一业务的多个业务请求,例如,多个客户端都请求BGP业务,则按照Socket资源申请请求的接收时间先后,对对应多个客户端的BGP模块进行排序。
步骤203,根据分配队列,为请求Socket资源的业务模块分配Socket资源。
具体的,Socket资源分配装置从接收到的Socket资源申请请求中提取模块标识,并按照分配队列,为申请Socket资源的各业务模块分配Socket资源。例如,Socket资源分配装置接收到5个Socket资源申请请求,其中优先级为1的业务模块发出2个Socket资源申请请求,优先级为3的业务模块发出1个Socket资源申请请求,优先级为7的业务模块发出2个Socket资源申请请求,则Socket资源分配装置按照分配队列,为优先级为1的业务模块分配2个Socket资源,为优先级为3的业务模块分配1个Socket资源,为优先级为7的业务模块分配2个Socket资源。
根据业务模块优先级得到分配队列,并按照分配队列分配Socket资源,可以在各业务模块申请Socket资源发生冲突时,优先满足重要业务模块(优先级高的业务模块)的Socket资源需求,对Socket资源实现最大化的利用。
为了实现对Socket资源进行保护,还可以为各业务模块设定Socket资源数量阈值,不再为当前已分配较多Socket资源的业务模块继续分配Socket资源。在本发明另一实施例中,在步骤203中,Socket资源分配装置根据所述分配队列,为请求Socket资源的业务模块分配Socket资源,当为其中一个业务模块分配Socket资源之后,还执行以下步骤:
Socket资源分配装置判断该请求Socket资源的业务模块当前已分配到的Socket资源是否等于该模块的Socket资源阈值,若是,则将该业务模块的优先级设置为最低,并判断分配队列中是否存在与该业务模块类型相同的业务模块,若存在,则将相同类型的业务模块移出分配队列,用以实现在本次资源分配过程中,不再为相同类型的业务模块分配Socket资源。当首次为业务模块分配Socket资源时,启动与该业务模块对应的计数器,对获得的Socket资源进行计数,该业务模块每分配到一个Socket资源,计数器相应增加1。
当业务模块使用完为其所分配的Socket资源时,会自动释放该Socket资源,该Socket资源进入待分配的Socket资源中,以便在接收到Socket资源后,再根据队列情况进行分配。释放Socket资源后,Socket资源分配装置判断该业务模块是否为最低优先级,若是,则Socket资源分配装置将该业务模块的优先级设置为初始优先级;若该业务模块不是最低优先级,则保持现有的优先级。
例如,Telnet模块(对应TCP端口号23)的Socket资源数量阈值为20,若当前已为Telnet模块分配的Socket资源达到20时,Telnet模块的优先级自动降到16,即Socket资源分配装置不再分配给Telnet模块任何资源。若Telnet模块使用完为其所分配的2个Socket资源时,释放掉2个Socket资源,此时,Telnet模块当前已分配的Socket资源的数量小于阈值,则将Telnet模块的优先级从16恢复到初始优先级,以使其能够继续获得Socket资源。
通过为业务模块设置Socket资源数量阈值,可以保证优先级较低的业务模块也可以正常申请到Socket资源,而不是Socket资源只分配到某几个优先级较高的业务模块之中。
为了避免某个业务模块短时间内大量申请Socket资源对网络设备进行Socket攻击,实现短时间内Socket资源的申请保护,可以设计一个流程动态调整请求Socket资源的业务模块的优先级。在本发明另一实施例中,在步骤203之后执行以下步骤:
Socket资源分配装置根据为请求Socket资源的业务模块预设的初始优先级,以及以当前时刻为起点向前取设定时长的时间段内该业务模块申请Socket资源的数量,调整该业务模块的优先级,在将业务模块的优先级调整到最低优先级时,启动与该业务模块对应的定时器,并判断分配队列中是否存在与该业务模块类型相同的业务模块,若存在,则将相同类型的业务模块移出分配队列。
通过动态调整业务模块的优先级,可以将设定时长的时间段内已获得Socket资源的业务模块的优先级降低,保证其他业务模块能够有较大机会申请到Socket资源。
具体的,当Socket资源分配装置接收到业务模块发送的Socket资源申请请求时,按照公式(1),调整请求Socket资源的业务模块的优先级:F=ax2+b (1)
其中,a为自定义系数,可以根据应用场景或者业务需求的不同,自行为请求Socket资源的业务模块进行设置;b为请求Socket资源的业务模块的初始优先级;x为以当前时刻为起点向前取设定时长的时间段内该业务模块申请Socket资源的数量;F为该请求Socket资源的业务模块调整后的优先级。在本发明实施例中,设定时长的时间段通常取1秒钟。
若计算出的F的数值大于最低优先级的数值,则将F设置为最低优先级。
当Socket资源分配装置将优先级调整到最低优先级时,启动与该业务模块对应的定时器。在该业务模块对应的定时器超时时,将该业务模块的优先级设置为该业务模块的初始优先级。
例如,请求Socket资源的BGP模块的初始优先级为3,BGP模块的a取值0.5,在前1秒钟内,BGP模块申请了8个Socket资源,则根据公式(1)计算出F为35,则认为该模块存在Socket攻击的嫌疑,将F设置为最低优先级16,不再为该模块分配Socket资源,若分配队列中不存在BGP模块,则启动与该业务模块对应的定时器以便在5秒钟过后,再将该BGP模块的优先级恢复为初始优先级3;若分配队列中还存在BGP模块,则将所有BGP模块移出分配队列,同时启动与该业务模块对应的定时器。
需要说明的是,在定时器启动之后,预设的定时时间到达之前,若再次接收到该业务模块发送的Socket资源申请请求,不会触发该业务模块计算并调整优先级。
通过将超过最低优先级的F设置为最低优先级,可以将设定时长的时间段内已获得Socket资源的业务模块的优先级降低,暂时停止为该业务模块分配Socket资源,避免某一用户通过某个业务模块在短时间内大量申请Socket资源,进行TCP攻击,导致Socket资源耗尽,系统瘫痪,由此,增强了Socket资源的可靠性和可维护性。
通过上述Socket资源分配流程,实现了Socket资源的灵活分配,能够满足不同场景下各个业务模块对Socket资源的不同需求,能够保证通信的连接,对Socket资源实现最大化的利用。
需要说明的是,在本发明另一实施例中,在为请求Socket资源的业务模块分配Socket资源(步骤203)之后,可以既通过设定Socket资源阈值对Socket资源进行保护,又通过计算优先级进行动态调整的方式防止Socket资源受到攻击。上述两个过程的执行顺序不做限定。
通过为业务模块设置Socket资源数量阈值,以及动态调整申请Socket资源的业务模块的优先级,不但可以防止某个业务模块在短时间内对网络设备进行攻击,而且还可以在相对长的时间内,保证Socket资源得到最大限度的有效利用。
为更清楚的描述本发明的上述实施例,下面以网络设备作为核心路由设备为例,说明本发明实施例的具体实现过程。
设定16个优先级,并定义最低优先级为16,优先级为16的业务模块无法获得Socket资源。内核模块作为业务处理的核心,其初始优先级最高,为1;Packet Socket模块和OSI Socket模块进行报文的收发,资源需求大,其初始优先级第二,为2;本台网络设备是核心路由器,对BGP的需求比较高,因此BGP模块(对应的TCP的端口号为179)的初始优先级第三,为3;网络设备处理SSH用户登录比较多,因此SSH模块(对应的TCP的端口号为22)的初始优先级第四,为4;网络设备处理Telnet用户登录较少,或者没有Telnet业务访问,则Telnet模块(对应的TCP端口号23)的初始优先级最低,例如,为16(此时,就不再将Telnet模块排序在分配队列之中)。
Socket资源分配装置接收内核模块、OSI Socket模块、BGP模块、SSH模块、TCP模块、UDP模块以及Telnet模块的Socket资源申请请求,根据Socket资源申请请求中携带的标识(例如可以为客户端标识),记录相应的接收时间,并根据上述业务模块的初始优先级,对各业务模块进行排序,得到分配队列。其中,3个客户端向BGP业务模块发起Socket资源申请请求,则按照接收时间先后进行排序,得到的分配队列如下所示(请求Socket资源的客户端的标识未标示):
Socket资源分配装置根据分配队列,为上述业务模块分配Socket资源,并按照公式(1),对BGP模块的优先级进行调整,其中,a=0.5;BGP模块的初始优先级为3,即b=3;BGP模块(TCP端口号为179的模块)在前1秒内申请了2个Socket资源,即x=2,则F=0.5×22+3=5,即,将BGP模块的优先级从3调整到5。其他没有发起Socket资源申请请求的业务模块的优先级不变,再根据调整后的优先级得到分配队列,Socket资源分配装置按照该分配队列为BGP模块分配Socket资源。若在下一秒接收到BGP模块和SSH模块的Socket资源申请请求,SSH模块的优先级还是4,对BGP模块的优先级进行动态调整,调整后的优先级级别会低于5,因此,可以实现Socket资源分配装置优先为SSH模块分配资源。如此,在后续Socket资源申请过程中,就保证了其它业务模块,例如TCP端口号为22的SSH模块的优先级(优先级为4)高于BGP模块的优先级,从而可以顺利的申请到Socket资源。
若BGP模块在前一秒钟已申请8个Socket资源,则Socket资源分配装置根据公式(1)计算出F=0.5×82+3=35,则将F值设置为16,即,将BGP模块的优先级调整为最低,定时器启动,此时,Socket资源分配装置判断分配队列中是否还有BGP模块,若存在,则将BGP模块移出分配队列,不再为该模块分配Socket资源,5秒钟过后(定时器超时),将BGP模块的优先级F恢复为初始优先级3。
本发明实施例提供的Socket资源分配方案,根据请求Socket资源的业务模块的优先级,对所述请求Socket资源的业务模块进行排序,得到分配队列,并根据分配队列,为所述请求Socket资源的业务模块分配Socket资源,实现了Socket资源的灵活分配,能够满足不同场景下各个业务模块对Socket资源的不同需求,能够保证通信的连接,对Socket资源实现最大化的利用。
基于相同的技术构思,本发明实施例还提供了一种Socket资源分配装置,该Socket资源分配装置的结构示意图如图3所示,包括:
接收模块31,用于接收业务模块发送的Socket资源申请请求。
排序模块32,用于根据请求Socket资源的业务模块的优先级,对请求Socket资源的业务模块进行排序,得到分配队列。
分配模块33,用于根据排序模块32得到的分配队列,为请求Socket资源的业务模块分配Socket资源。
具体的,排序模块32用于,将所述请求Socket资源的业务模块中非最低优先级的业务模块,按照优先级从高到低顺序排列,得到分配队列。
优选的,该Socket资源分配装置还包括:
调整模块34,用于分配模块33为请求Socket资源的业务模块分配Socket资源之后,判断该请求Socket资源的业务模块当前已分配到的Socket资源是否等于该业务模块的Socket资源阈值,若是,则将该业务模块的优先级设置为最低,并判断所述分配队列中是否存在与该业务模块类型相同的业务模块,若存在,则将相同类型的业务模块移出所述分配队列;以及当该请求Socket资源的业务模块释放Socket资源时,若所述业务模块为最低优先级,则将所述业务模块的优先级设置为该业务模块的初始优先级。
优选的,该Socket资源分配装置还包括:
调整模块34,用于在分配模块33为所述请求Socket资源的业务模块分配Socket资源之后,根据为请求Socket资源的业务模块预设的初始优先级,以及以当前时刻为起点向前取设定时长的时间段内该业务模块申请Socket资源的数量,调整该业务模块的优先级,在将该业务模块的优先级调整到最低优先级时,启动与该业务模块对应的定时器,并判断分配队列中是否存在与该业务模块类型相同的业务模块,若存在,则将相同类型的业务模块移出分配队列;以及,当该业务模块对应的定时器超时时,将该业务模块的优先级设置为该业务模块的初始优先级。
具体的,优先级的数值越小,优先级等级越高。
调整模块34具体用于,按照以下公式调整请求Socket资源的业务模块的优先级:F=ax2+b;其中,a为该请求Socket资源的业务模块的自定义系数;b为该请求Socket资源的业务模块的初始优先级;x为以当前时刻为起点向前取设定时长的时间段内该业务模块申请Socket资源的数量;F为该请求Socket资源的业务模块调整后的优先级;若计算出的F的数值大于最低优先级的数值,则将F设置为最低优先级。
排序模块32具体用于,若有至少2个优先级相同的业务模块请求Socket资源,则按照Socket资源申请请求的接收时间先后,对该至少2个优先级相同的业务模块进行排序。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台终端设备(可以是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。