一种资源分配方法及装置的制造方法

文档序号:9372031阅读:279来源:国知局
一种资源分配方法及装置的制造方法
【技术领域】
[0001] 本发明涉及网络通信技术领域,尤其涉及一种资源分配方法及装置。
【背景技术】
[0002] 传输控制 / 网际协议(TCP/IP,Transfer ControlnProtocol/Internet Protocol) 参考模型是一个抽象分层模型,模型中所有的TCP/IP系列网络协议都被归类到4个抽象的 〃层〃中。每一层建立在低一层提供的服务上,为高一层提供服务。如图1所示,TCP协议 位于TCP/IP参考模型的传输层。
[0003] 使用TCP进行数据通信的通信双方在进行业务数据传输前需要建立TCP连接,具 体地,建立TCP连接的过程包含3次报文的交互,如图2所示,包括下述步骤:
[0004] 步骤1、客户端向服务器端发出同步(SYN,synchronous)报文;
[0005] 步骤2、服务器端向客户端回应SYN+ACK报文;
[0006] 步骤3、客户端向服务器端回应确认(ACK,Acknowledgment Number)报文;
[0007] 上述三次报文交互即为TCP连接的三次握手,握手成功后,客户端和服务器端双 方即可开始业务数据传输。如果只发生了上述步骤1和步骤2,而上述步骤3并没有发生, 那么可以称客户端和服务器端完成了半连接,此时服务器会为该半连接分配相应的连接资 源(例如:重传定时器,IP地址和端口号,确认序列号和序列号等),而当上述三个步骤均发 生时,可以称客户端和服务器端完成了全连接,此时服务器会为该全连接分配相应的连接 资源(例如:发送缓冲区,接收缓冲区,发送缓冲区指针和接收缓冲区指针等)。
[0008] 发生在半连接阶段的TCP洪水(flood)攻击可以称为半连接洪水攻击。由于在半 连接阶段,服务器会为客户端分配半连接对应的连接资源,恶意客户端(攻击者)可以不停 地向服务器端发送SYN数据包,而在接收到服务器端回应的SYN+ACK数据包之后,不回应 ACK包,这样,服务器端为每个半连接分配对应的连接资源,消耗大量的半连接资源,当服务 器端的半连接资源耗尽时,正常用户的SYN请求无法被服务器端处理,导致正常用户不能 与服务器端建立TCP连接,进而不能为正常用户服务,导致拒绝服务攻击的发生。如图3所 示,虚线表征大量恶意SYN报文,实线表示正常用户的SYN报文,大量恶意的SYN报文301 接入服务器端,服务器端向恶意客户端回应对应的SYN+ACK报文302,并为这些恶意的SYN 报文301分配大量的半连接资源,导致后续正常用户的SYN报文303不能被处理。
[0009] 现有技术中,很多服务系统为保证服务器免受TCP洪水攻击,在服务器和客户端 之间使用防火墙。具体地,使用防火墙作为TCP代理,使防火墙与客户端建立TCP连接,并 在防火墙与客户端完成TCP连接的建立之后,防火墙再与服务器建立TCP连接,并转发后续 的业务数据。如图4所示,以文件传输协议(FTP, File Transfer Protocol)服务器为例, 在FTP服务器401与客户端402之间部署防火墙403,当客户端402需要与FTP服务器401 建立TCP连接时,由防火墙403作为FTP服务器401的TCP代理,与客户端402建立TCP连 接,并在防火墙403与客户端402之间完成TCP全连接之后,防火墙403再与FTP服务器401 建立TCP连接。如果防火墙403与客户端402之间只完成了半连接,那么防火墙403就不 与FTP服务器401建立TCP连接,从而保护了 FTP服务器401免受TCP半连接攻击。如图4 所示,防火墙403在接收到客户端发送的SYN报文1之后,向客户端回复SYN+ACK报文,并 在接收到回复该SYN+ACK报文的ACK报文1之后,将SYN报文1转发给FTP服务器401,接 收FTP服务器401发送的SYN+ACK报文,并将ACK报文1转发给FTP服务器401,而对于接 收的SYN报文2,回复了 SYN+ACK报文之后,并没有接收到客户端回复的针对该SYN+ACK报 文的ACK报文2,因此,不将SYN报文2转发给FTP服务器401。
[0010] 但是,现有技术中的上述解决方案具有如下缺点:尽管使用防火墙403作为FTP服 务器401的代理,防火墙403在与客户端402建立了 TCP半连接之后,也会为客户端402分 配半连接资源,相当于将半连接攻击从FTP服务器401转移到防火墙403,尽管防火墙403 所在设备通常比服务器具有更丰富的资源,使得防火墙403抗TCP半连接攻击能力比FTP 服务器401强,只要攻击者发送的SYN数据包足够多,还是会被TCP半连接攻击攻陷,导致 正常客户无法连接FTP服务器401。

【发明内容】

[0011] 本发明实施例提供了一种资源分配方法及装置,用以解决现有技术中当发生TCP 半连接洪水攻击时,被攻击服务器无法提供正常服务的问题。
[0012] 第一方面、提供一种资源分配方法,包括:
[0013] 当接收到客户端发送的SYN数据包时,为所述SYN数据包所属TCP连接分配用于 表征该TCP连接的、与已分配序号不重复的序号;
[0014] 对分配的所述序号进行第一运算,将得到的结果作为SYN+ACK数据包中SEQ字段 的值,并向所述客户端回复所述SYN+ACK数据包;
[0015] 当接收到ACK数据包时,基于所述ACK数据包中ACK字段的值,确定所述ACK数据 包所回复的SYN+ACK数据包中SEQ字段的值;并
[0016] 对确定的SEQ字段的值进行第一运算的逆运算,并将经过第一运算的逆运算得到 的第一查询值在已分配的各序号中进行查询;
[0017] 将查询到的所述第一查询值对应的序号所表征的TCP连接标识为完成三次握手;
[0018] 为完成TCP连接三次握手的客户端分配本次TCP连接中传输业务数据所需的资 源。
[0019] 结合第一方面,在第一种可能的实现方式中,在为完成TCP连接三次握手的客户 端分配本次TCP连接中传输业务数据所需的资源之前,还包括:当接收到第一个业务数据 包时,基于所述业务数据包中ACK字段的值,确定所述业务数据包对应TCP连接中SYN+ACK 数据包中SEQ字段的值;并对确定的SEQ字段的值进行第一运算的逆运算,并将经过第一运 算的逆运算得到的第二查询值在已分配的各序号中进行查询;为完成TCP连接三次握手的 客户端分配本次TCP连接中传输业务数据所需的资源,具体包括:当确定查询到的所述第 二查询值对应的序号所表征的TCP连接被标识为完成三次握手时,为所述第二查询值对应 的序号表征的TCP连接分配传输业务数据所需的资源。
[0020] 结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,当接收到 客户端发送的SYN数据包时,还包括:对所述SYN数据包中SEQ字段的值进行预设运算;为 所述SYN数据包所属TCP连接分配用于表征该TCP连接的、与已分配序号不重复的序号,具 体包括:为所述预设运算得到的标识值分配连接请求表的空闲表项存储该标识值,并使用 所分配空闲表项的序号表征所述SYN数据包所属TCP连接;对分配的所述序号进行第一运 算,将得到的结果作为SYN+ACK数据包中SEQ字段的值,具体包括:对存储所述标识值的表 项的序号进行第一运算,将得到的结果作为SYN+ACK数据包中SEQ字段的值;将经过第一运 算的逆运算得到的第一查询值在已分配的各序号中进行查询,具体包括:将经过第一运算 的逆运算得到的第一查询值作为表项的序号对所述连接请求表进行查询;将查询到的所述 第一查询值对应的序号所表征的TCP连接标识为完成三次握手,具体包括:将查询到的所 述第一查询值对应的所述连接请求表表项的序号表征的TCP连接标识为完成三次握手;将 经过第一运算的逆运算得到的第二查询值在已分配的各序号中进行查询,具体包括:将经 过第一运算的逆运算得到的第二查询值作为表项的序号对所述连接请求表进行查询;为所 述第二查询值对应的所述连接请求表的表项序号表征的TCP连接分配本次TCP连接中传输 业务数据所需的资源,还需要满足以下条件:根据所述第一个业务数据包中SEQ字段的值 确定所述第一个业务数据包对应的TCP连接中SYN数据包中SEQ字段的值;并对确定的SYN 数据包中SEQ字段的值进行所述预设运算,得到的结果与该表项存储的标识值一致。
[0021] 结合第一方面的第一种可能的实现方式,或者结合第一方面的第二种可能的实现 方式,在第三种可能的实现方式中,采用如下方式确定接收到的业务数据包为该业务数据 包对应TCP连接的第一个业务数据包:当接收到业务数据包时,根据接收到的业务数据包 对应的TCP连接的指定指标值查询全连接表;当所述全连接表中不存在与所述接收到的业 务数据包对应的所述指定指标值对应的表项时,确定所述接收到的业务数据包为该业务数 据包对应TCP连接的第一个业务数据包,其中,所述全连接表用于为分配了传输业务数据 所需资源的TCP连接存储指定指标值,所述指定指标值包括:TCP连接的源IP地址、目的IP 地址、源端口号、目的端口号。
[0022] 结合第一方面,或者结合第一方面的第一种可能的实现方式,或者结合第一方面 的第二种可能的实现方式,在第四中可能的实现方式中,还包括:针对每个存储有标识值的 表项,在为该表项序号表征的TCP连接分配了传输业务数据所需的资源之后,将该表项清 空;或者当连接请求表中,存储有标识值的表项数量达到预设最大表项数量,且接收到新的 SYN数据包时,将最先存入标识值的表项清空,并使用清空的空闲表项存储所述新的SYN数 据包所属TCP连接对应的标识值;或者针对连接请求表中每个存储有标识值的表项,当该 表项对应的定时器计时达到预设时长时,将该表项清空,其中,所述定时器用于当该定时器 对应的表项存入标识值时开始计时;或者针对连接请求表中预先划分的各子表,当所述各 子表包含的所有表项均存储有标识值,且接收到新的SYN数据包时,将最先被存满的子表 清空,并使用清空的子表中的表项存储所述新的SYN数据包所属TCP连接对应的标识值,其 中,所述连接请求表中的各子表用于按照预设顺序顺次使用所述各子表进行标识值存储, 并在当前子表被存满时,启用下一个子表进行标识值存储。
[0023] 第二方面、提供一种资源分配装置,包括:
[0024] 接收模块,用于接收客户端发送的数据包;
[0025] 第一分配模块,用于当所述接收模块接收到客户端发送的SYN数据包时,为所述 SYN数据包所属TCP连接分配用于表征该TCP连接的、与已分配序号不重复的序号;
[0026] 运算模块,用于对所述第一分配模块分配的所述序号进行第一运算;
[0027] 发送模块,用于将所述运算模块得到的运算结果作为SYN+ACK数据包中SEQ字段 的值,并向所述客户端回复所述SYN+ACK数据包;
[0028] 确定模块,用于当所述接收模块接收到ACK数据包时,基于所述ACK数据包中ACK 字段的值,确定所述ACK数据包所回复的SYN+ACK数据包中SEQ字段的值;
[0029] 查询模块,用于对所述确定模块确定的SEQ字段的值进行第一运算的逆运算,并 将经过第一运算的逆运算得到的第一查询值在已分配的各序号中进行查询;
[0030] 标识模块,用于将所述查询模块查询到的所述第一查询值对应的序号所表征的 TCP连接标识为完成三次握手;
[0031] 第二分配模块,为所述标识模块标识的完成TCP连接三次握手的客户端分配本次 TCP连接中传输业务数据所需的资源。
[0032] 结合第二方面,在第一种可能的实现方式中,所述确定模块,还用于在所述第二分 配模块在为完成TCP连接三次握手的客户端分配本次TCP连接中传输业务数据所需的资源 之前,当所述接收模块接收到第一个业务数据包时,基于所述业务数据包中ACK字段的值, 确定所述业务数据包对应TCP连接中SYN+ACK数据包中SEQ字段的值;所述查询模块,还用 于对所述确定模块确定的SEQ字段的值进行第一运算的逆运算,并将经过第一运算的逆运 算得到的第二查询值在已分配的各序号中进行查询;所述第二分配模块,具体用于当确定 所述查询模块查询到的所述第二查询值对应的序号所表征的TCP连接被标识为完成三次 握手时,为所述第二查询值对应的序号表征的TCP连接分配传输业务数据所需的资源。
[0033] 结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述运算 模块,还用于当所述接收模块接收到客户端发送的SYN数据包时,对所述SYN数据包中SEQ 字段的值进行预设运算;所述第一分配模块,具体用于为所述运算模块通过预设运算得到 的标识值分配连接请求表的空闲表项存储该标识值,并使用所分配空闲表项的序号表征所 述SYN数据包所属TCP连接;所述运算模块,具体用于对所述第一分配模块分配的存储所述 标识值的表项的序号进行第一运算;所述查询模块,具体用于将经过第一运算的逆运算得 到的第一查询值作为表项的序号对所述连接请求表进行查询;以及将经过第一运算的逆运 算得到的第二查询值作为表项的序号对所述连接请求表进行查询;所述标识模块,具体用 于将所述查询模块查询到的所述第一查询值对应的所述连接请求表表项的序号表征的TCP 连接标识为完成三次握手;所述第二分配模块,具体用于为所述第二查询值对应的所述连 接请求表的表项序号表征的TCP连接分配本次TCP连接中传输业务数据所需的资源,还需 要满足以下条件:根据所述第一个业务数据包中SEQ字段的值确定所述第一个业务数据包 对应的TCP连接中SYN数据包中SEQ字段的值;并对确定的SYN数据包中SEQ字段的值进 行所述预设运算,得到的结果与该表项存储的标识值一致。
[0034] 结合第二方面的第一种可能的实现方式,或者结合第二方面的第二种可能的实现 方式,在第三种可能的实现方式中,所述确定模块,还用于采用如下方式确定所述接收模块 接收到的业务数据包为该业务数据包对应TCP连接的第一个业务数据包:当接收到业务数 据包时,根据接收到的业务数据包对应的TCP连接的指定指标值查询全连接表;当所述全 连接表中不存在与所述接收到的业务数据包对应的所述指定指标值对应的表项时,确定所 述接收到的业务数据包为该业务数据包对应TCP连接的第一个业务数据包,其中,所述全 连接表用于为分配了传输业务数据所需资源的TCP连接存储指定指标值,所述指定指标值 包括:TCP连接的源IP地址、目的IP地址、源端口号、目的端口号。
[0035] 结合第二方面,或者结合第二方面的第一种可能的实现方式,或者结合第二方面 的第二种可能的实现方式,在第四中可能的实现方式中,还包括:清空模块;
[0036] 所述清空模块,用于针对每个存储有标识值的表项,在为该表项序号表征的TCP 连接分配了传输业务数据所需的资源之后,将该表项清空;或者当连接请求表中,存储有标 识值的表项数量达到预设最大表项数量,且接收到新的SYN数据包时,将最先存入标识值 的表项清空,并使用清空的空闲表项存储所述新的SYN数据包所属TCP连接对应的标识值; 或者针对连接请求表中每个存储有标识值的表项,当该表项对应的定时器计时达到预设时 长时,将该表项清空,其中,所述
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1