背景技术
随着计算机网络的普及,网络安全已成为大众越来越关注的焦点。网络攻击、病毒文件传播、垃圾邮件泛滥等,严重影响了正常业务的开展。运营商、政府部门、企业用户等迫切需要防御设备以减小损失,于是各种网关如防火墙、病毒过滤、邮件过滤等设备应运而生。与防火墙不同,病毒过滤与邮件过滤网关需要依靠缓存数据包来实现其安全保护功能,如阻止病毒文件或垃圾邮件,对于经过检测的数据包,还需要转发至原目的地。
TCP协议提供一种面向连接的、可靠的字节流服务,客户端与服务器端在彼此交换数据前必须先建立一个TCP连接。基于TCP协议的数据传输模式普遍使用于数据传输应用中,Internet上文件传输、电子邮件等应用,在传输层几乎都是采用TCP协议。
TCP协议普遍使用滑动窗口协议,即发送方不必每发送一个数据包后就停下来等待确认。首部中的窗口大小字段表明的是接收方希望接收的字节数,发送方可以一次发送不大于窗口大小的字节数。该字段是2字节的无符号数,能表示的最大值为65535,通过修改TCP选项还能增大。使用该协议可以加速数据传输。
在网关设备上缓存和转发数据包的一现有技术,是利用已有的TCP连接,只缓存最近收到的若干个数据包,并保证缓存大小小于窗口大小。该方案包括以下步骤:
(11)预先设定需要缓存的TCP连接的四元组,包括源IP地址、源端口、目的IP地址、目的端口,并根据窗口大小设定数据包的最大缓存个数;
(12)接收并解析经过网关设备的数据包,提取出该数据包的四元组;
(13)判断提取出的四元组是否等于预先设定的四元组,如果不是,回到步骤(12);
(14)判断当前四元组中已经缓存的数据包个数;
(15)如果小于设定值,缓存该数据包,并修改已经缓存的数据包个数,回到步骤(12);
(16)如果等于设定值,缓存该数据包的同时,转发已缓存数据包中序号字段最小的,回到步骤(12)。
该方案在保证已缓存的数据包的个数少于窗口大小的情况下,接收方始终能够收到新的数据包,于是会回复确认报文给发送方,发送方在收到确认报文后便可以不间断的发送新数据包(字节),因此连接不会中断。
发明人在实现本发明的过程中,发现上述现有技术存在以下缺陷:
11)不能完全满足各种应用需要。由于缓存的数据包数量有限,在很多应用中都存在限制。例如,应用在邮件过滤网关中,判断出当前邮件满足过滤条件,需要删除或者在邮件标题中加入提示信息时,由于前面的数据包已经放过,这些处理方法并不能实现。又比如,应用在病毒过滤网关中,当发现某文件携带病毒时,可能已经放过了该文件的大部分。虽然可以不转发后续的数据包给用户,用户接收到的是不完整或格式损坏的文件,但如果使用文件修复工具进行修复,用户仍然有可能打开一个携带病毒的文件。
12)可能对正常的TCP连接造成影响。TCP连接在建立时,都会指定该连接上的最大数据包长度(Maximum Segment Size,简称MSS)。如果接收方的窗口等于MSS,那么发送方的一个数据包就能够填满窗口。收到确认报文之前,发送方不会继续发送新的数据包。由于数据包被网关设备缓存,接收方不会回复确认报文,因此,TCP连接会在发送方的若干次重传之后中断。另外,如果缓存数据包的个数设定不当,导致缓存的长度超过窗口,也会造成同样的后果。
在网关设备上缓存和转发数据包的另一现有技术,是利用socket。socket封装了TCP协议栈,收到数据包时能主动回复确认报文,并能根据收到的确认报文控制数据包的发送。具体实现是,当需要缓存的TCP连接经过网关时,并不让它通过,而是利用socket,在网关与发送方、接收方之间,分别建立一个TCP连接,并在两个连接之间交换数据。交换数据是指如果其中一个TCP连接收到了携带净荷,或者携带重置(Reset,简称RST)标志位、终止(Finish,简称FIN)标志位的数据包时,将净荷部分或有相同标志位的数据包交由另一个TCP连接,转发至另一方,如果是确认报文则直接丢弃而不转发。通过分析净荷,发现是需要缓存的数据包后暂不中转,即达到了缓存的目的。在该方案中,发送方和接收方之间并不存在真正的连接,网关在其间起到了中转的作用。该方案包括以下步骤:
(21)预先设定需要缓存的TCP连接的四元组,包括源IP地址、源端口、目的IP地址、目的端口;
(22)接收并解析经过网关设备的数据包,提取出该数据包的四元组;
(23)判断提取出的四元组是否等于预先设定的四元组,如果不是,回到步骤(22);
(24)如果是连接建立数据包,丢弃,并在网关上新建socket,利用socket对该数据包进行回复,同时新建与原接收方之间的另一个socket,如果建立失败,则断掉与发送方之间的连接。回到步骤(22);
(25)如果数据包未携带净荷或RST、FIN标志位,丢弃,回到步骤(22);
(26)分析净荷,如果缓存尚未开始,将此净荷或有相同标志位的数据包交由另一个连接发送,否则暂不发送,等到缓存、处理完毕再发送。回到步骤(22)。
发明人在实现本发明的过程中,发现上述现有技术存在以下缺陷:
21)对于每一个需要缓存的TCP连接,都需要在网关上新建两个socket,占用内存、CPU等资源较多;对连接中每个携带净荷的数据包都回复后转发,至少存在两次内存拷贝操作,即,先将净荷从一个连接的socket缓冲区拷贝到内存,再从内存拷贝到另一个连接的socket缓冲区,增加了网关的处理,严重降低了性能。
22)由于网关代替回复连接建立数据包,即使接收方并未开启相应服务,发送方也会显示连接已经建立成功。网关与真正的接收方建立连接失败后,才能通知发送方。此时,连接发起方的显示结果会是连接建立后又立即中断,与正常的表现不符。
23)由于socket封装了TCP协议栈,不能通过传输层,因而不能达到控制数据包缓存和提高转发速度的目的。
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
图1为本发明网关设备上缓存及转发数据包的方法实施例一的流程图。所述网关设备上缓存及转发数据包的方法包括:
步骤101、网关设备确认第一设备发送的数据包是否需要缓存,如果需要缓存,在当前TCP连接上向第一设备回复确认报文,并缓存该数据包;
步骤102、网关设备将缓存的数据包转发至第二设备,并拦截第二设备回复的确认报文。
该实施例中,网关设备对需要缓存的数据包进行缓存,由于网关设备无需对所有经过网关设备的数据包进行缓存,降低了网关设备的处理负荷,实现高效的缓存所有需要缓存的数据包;同时网关设备对需要缓存的数据包进行缓存并回复确认报文,由于网关设备接收到需要缓存的数据包时,由网关设备及时向发送方回复确认报文,这样就可以保证接收方及时收到确认报文进行后续数据包的发送;另外网关设备将缓存的数据包转发到接收方时,拦截接收方回复的确认报文,由于网关设备对接收方回复的针对缓存的数据包的确认报文进行拦截,而不回送至接收方,这样可以避免由于接收方再次收到缓存的数据包的确认报文而进行后续报文的重发;综上分析,该实施例既降低了网关设备的处理负荷,高效的缓存所有需要缓存的数据包,又不会对发送方与接收方之间正常的TCP连接造成影响。
图2为本发明网关设备上缓存及转发数据包的方法实施例二的流程图。该实施例与上一实施例的区别在于还包括:上层应用按照预设需求对网关设备中缓存的数据包进行处理,处理完毕后将经过处理的数据包进行转发。如图2所示,所述方法包括:
步骤201、网关设备确认第一设备发送的数据包是否需要缓存,如果需要缓存,在当前TCP连接上向第一设备回复确认报文,并缓存该数据包。
步骤202、上层应用按照预设需求对网关设备中缓存的数据包进行处理。
步骤203、网关设备将缓存的数据包转发至第二设备,并拦截第二设备回复的确认报文。
该实施例中,由于上层应用按照预设需求能够直接对网关设备中所有缓存的数据包进行处理,处理后再将缓存的数据包进行转发,该方法能够保证对缓存的数据包的完整处理,尤其应用在邮件过滤网关以及病毒过滤网关等中,能够保证对需要处理的缓存的数据包进行完整处理,从而真正体现邮件过滤以及病毒过滤的功能。
图3为本发明网关设备上缓存及转发数据包的方法实施例三的流程图。该实施例中所述网关设备确认第一设备发送的数据包是否需要缓存具体为:分析当前TCP连接上的数据包是否出现缓存开始的特征或缓存结束的特征,当出现缓存开始的特征时,确认当前TCP连接上第一设备发送的数据包需要缓存;当出现缓存结束的特征时,确认当前TCP连接上第一设备发送的数据包不需要缓存。如图3所示包括:
步骤301、网关设备判断当前TCP连接上的数据包是否出现缓存开始的特征,当出现缓存开始的特征时,执行步骤302;否则,执行步骤303。
步骤302、网关设备在当前TCP连接上向第一设备回复确认报文,并缓存该数据包。
步骤303、网关设备将当前TCP连接上的数据包转发至第二设备,然后返回执行步骤301,继续判断当前TCP连接上的数据包是否出现缓存开始的特征。
步骤304、网关设备判断当前TCP连接上的数据包是否出现缓存结束的特征,当出现缓存结束的特征时,执行步骤305;否则,执行步骤302。
步骤305、停止缓存。
图4为本发明网关设备上缓存及转发数据包的方法实施例四的流程图。该实施例中,所述网关设备设有用于表示缓存开始状态或缓存结束状态的状态标志位信息。当网关设备中设有用于表示缓存开始状态或缓存结束状态的状态标志位信息时,网关设备确认第一设备发送的数据包是否需要缓存还可以具体为:分析网关设备中的状态标志位信息是否为缓存开始状态或缓存结束状态,当状态标志位信息为缓存开始状态时,确认当前TCP连接上第一设备发送的数据包需要缓存;当状态标志位信息为缓存结束状态时,确认当前TCP连接上第一设备发送的数据包不需要缓存。如图4所示包括:
步骤401、网关设备判断网关设备中的状态标志位信息是否为缓存开始状态,当状态标志位信息为缓存开始状态,执行步骤402;否则,执行步骤403。
步骤402、网关设备在当前TCP连接上向第一设备回复确认报文,并缓存该数据包。
步骤403、网关设备将当前TCP连接上的数据包转发至第二设备,然后返回执行步骤401,继续判断网关设备中的状态标志位信息是否为缓存开始状态。
步骤404、网关设备判断网关设备中的状态标志位信息是否为缓存结束状态,当状态标志位信息为缓存开始状态,执行步骤405;否则,执行步骤402。
步骤405、停止缓存。
该实施例中,当网关设备接收到来自第一设备的数据包时,分析网关设备中的状态标志位信息是否为缓存开始状态或缓存结束状态,当状态标志位信息为缓存开始状态时,便可以直接确认当前TCP连接上第一设备发送的数据包需要缓存,而无需通过判断TCP连接上出现缓存开始的特征时,来确定当前TCP连接上第一设备发送的数据包需要缓存,从而能够进一步降低了网关设备的处理负荷;当状态标志位信息为缓存结束状态时,便可以直接确认当前TCP连接上第一设备发送的数据包无需缓存,而无需通过判断TCP连接上出现缓存开始的特征,来确定当前TCP连接上第一设备发送的数句包不需要缓存,从而能够进一步降低了网关设备的处理负荷。
该实施例中的状态标志位信息可以人为设定,也可以由网关设备根据当前TCP连接上的数据包出现的缓存开始的特征或缓存结束的特征进行自动设定。网关设备根据当前TCP连接上的数据包出现的缓存开始的特征或缓存结束的特征进行自动设定状态标志信息的步骤具体包括:
分析网关设备中的状态标志位信息是否为缓存开始状态或缓存结束状态,若状态标志位信息为缓存开始状态时,则当网关设备检测到当前TCP连接上出现缓存结束的特征时,将状态标志位信息转换为缓存结束状态;若状态标志位信息为缓存结束状态时,则当网关设备检测到当前TCP连接上出现缓存开始的特征时,将状态标志位信息转换为缓存开始状态。TCP协议中,进行通信的双方,其中连接的一方在收到新的数据包后,需要发送确认报文以通知另一方。另一方根据接收的确认报文报文继续后续数据包的发送。具体本发明的实施例,在数据包的缓存流程中,第一设备在向网关设备发送数据包时,需要根据接收的确认报文继续后续的发送。
本发明实施例通过在网关设备上实现TCP协议栈,利用已有的TCP连接,对于不需要缓存的数据包,让其直接通过,而对于需要缓存的,由网关设备冒充作为接收方的第二设备向作为发送方的第一设备回复确认报文。等到缓存、处理完毕后,向第二设备转发缓存的数据包,当第二设备收到网关设备转发的缓存的数据包时,向网关设备发送确认报文,由于网关设备在缓存该数据包时,已经向第一设备发送了确认报文,因此网关设备无需将第二设备发送的关于该数据包的确认报文转给第一设备,第二设备发送的确认报文被网关设备拦截而无需转发给第一设备。
确认报文的生成需要分析数据包的序号字段。发送方在发送时,序号字段是依次递增的,但是在传输过程中,由于延时、路由等原因,导致到达网关时可能失序。如果确认报文丢失导致发送方重传,还可能收到重复数据包。因此网关设备接收到第一设备发送的当前数据包有三种类型:
顺序数据包:当前数据包的序号字段等于已经连续接收的数据包的序号字段;
乱序数据包:当前数据包的序号字段大于已经连续接收的数据包的序号字段;
重叠数据包,又包括部分重叠数据包和完全重叠数据包:当前数据包的序号字段小于已经连续接收的数据包的序号字段,但加上当前数据包的净荷长度后超过已经连续接收的数据包的序号字段,为部分重叠;当前数据包的序号字段小于已经连续接收的数据包的序号字段,但加上其净荷长度后仍未超过已经连续接收的数据包的序号字段,为完全重叠。
依据TCP协议,确认不同类型的数据包,确认报文是不同的。根据当前数据包的以上不同类型,网关设备向第一设备回复确认报文具体包括:
当网关设备接收到的当前数据包为顺序数据包或部分重叠数据包时,向第一设备回复当前数据包的确认报文;
当网关设备接收到的当前数据包为乱序数据包或完全重叠数据包时,向第一设备回复前一数据包的确认报文。其中对于完全重叠数据包,网关设备在向第一设备回复前一数据包的确认报文之后还包括:丢弃该完全重叠数据包。
上述网关设备上缓存及转发数据包方法实施例中,网关设备将缓存的数据包转发至第二设备具体包括:网关设备分析第二设备回复的确认报文,根据滑动窗口协议,将缓存的数据包发送至第二设备直至缓存的数据包发送完毕。按照滑动窗口协议,网关设备不必每发送一个缓存数据包后就停下来等待确认,首部中的窗口大小字段表明的是第二设备希望接收的字节数,网关设备一次发送给第二设备的数据包的长度不大于窗口大小的字节数。
TCP协议中,进行通信的双方,其中连接的一方在收到新的数据包后,需要发送确认报文以通知另一方。另一方根据接收的确认报文继续后续数据包的发送。具体本发明的实施例,在缓存的数据包的转发流程中,网络设备在向第二设备发送数据包时,需要根据接收的确认报文继续后续的发送。
本发明实施例通过在网关设备上实现TCP协议栈,利用已有的TCP连接,对于不需要缓存的数据包,让其直接通过,而对于需要缓存的,由网关设备冒充第二设备向第一设备回复确认报文。等到缓存、处理完毕后,再由网关设备冒充第一设备,根据收到的确认报文来转发缓存的数据包,从而达到在不影响原TCP连接的情况下,缓存所有需要缓存的数据包的目的。而且,缓存的是原始数据包,而不仅是净荷部分,因此除了各种具体应用在修改净荷部分后,需要重新调整首部的序号、校验和等字段外,转发时可以直接转发,不存在任何的内存拷贝。
依据TCP协议,确认不同类型的数据包,确认报文是不同的。根据当前数据包的以上不同类型,第二设备向网关设备发送确认报文时,也要判断当前接收的数据包是顺序数据包、部分重叠数据包、乱序数据包、完全重叠数据包中的哪种类型。第二设备向网关设备回复确认报文具体包括:
当第二设备接收到的当前数据包为顺序数据包或部分重叠数据包时,向网关设备回复当前数据包的确认报文;
当第二设备接收到的当前数据包为乱序数据包或完全重叠数据包时,向网关设备回复前一数据包的确认报文。其中对于完全重叠数据包,第二设备在向网关设备回复前一数据包的确认报文之后还包括:丢弃该完全重叠数据包。
以上网关设备上缓存及转发数据包方法的实施例中,网关设备收到了第二设备发送的某数据包的确认报文时,即得知第二设备收到了该数据包后,可以将确认报文所确认的数据包进行释放以进一步降低了网络设备的缓存负荷。
各种基于TCP的常见协议,数据传输往往发生在一系列的命令交互之后。例如POP3协议,在正式接收邮件体之前,会先对接收者账户、密码等进行验证。命令交互不需要缓存,不必由网关设备代替回复确认报文,可以直接放过。以下分别通过基于具体的应用场景的网关设备上缓存及转发数据包的方法的实施例三、实施例四及实施例五来分别说明本发明网关设备上缓存及转发数据包的方法。
图5为本发明网关设备上缓存及转发数据包的方法实施例五的信令流程图。该实施例具体应用在邮件过滤网关中,以SMTP协议为例。[Caceres etal.1991]说明,所有TCP连接中大约一半是用于简单邮件传送协议SMTP的。
在最常见的SMTP协议交互中,有如下6个命令:1、helo:客户用于标识自己。2、mail from:标识邮件的发起人。3、rcpt to:标识邮件的接收方,如果有多个接收方,可以发多个此命令。4、data:标识邮件内容开始发送。5、“.”:标识邮件末尾。6、quit:结束邮件的发送。
对应以上命令,作为接收方的第二设备都有相应回复码。邮件正文部分(Mail body)在data命令和“.”命令之间发送。该实施例中分别以data的回复码作为缓存开始的特征,以及以“.”命令作为缓存结束的特征。在一个SMTP连接中,方案具体如下:
步骤(501)、data命令及之前的数据包直接通过邮件过滤网关发送到第二设备,相应地,第二设备直接通过邮件过滤网关将data命令之前的数据包的回复码及data命令的回复码回复给第一设备。邮件过滤网关在转送这些数据时,相当于透传,不对这些数据进行任何操作。
步骤(502)、邮件过滤网关解析到缓存开始的特征,即data命令的回复码,如“354”,缓存开始。
步骤(503)、第一设备向邮件过滤网关发送邮件正文“Mail body”。
步骤(504)、邮件过滤网关向第一设备回复确认报文“Ack”。
步骤(505)、第一设备向邮件过滤网关发送缓存结束的特征,即“.”命令时,缓存结束。
步骤(506)、邮件过滤网关向第一设备回复确认报文“Ack”。
步骤(507)、检测邮件正文。
步骤(508)、邮件过滤网关向第二设备发送邮件正文“Mail body”。
步骤(509)、第二设备向邮件过滤网关回复确认报文“Ack”。
图6为本发明网关设备上缓存及转发数据包的方法实施例六的信令流程图。该实施例具体应用在邮件过滤网关中,以POP3协议为例。与SMTP协议相似,POP3协议同样属于邮件协议,不同的是,POP3协议是用于收取邮件的。
在最常见的POP3命令交互中,有如下4个命令:1、USER:指定邮箱。2、PASS:口令。3、RETR:接收指定邮件。4、“.”:标识邮件末尾。
与SMTP协议类似,对应以上命令,作为接收方的第二设备都有相应回复码,邮件正文部分在RETR命令和“.”命令之间发送,该实施例中以RETR的回复码作为缓存开始的特征,以及以“.”命令作为缓存结束的特征。在一个POP3连接中,方案如下:
步骤(601)、RETR命令及之前的数据包直接通过邮件过滤网关发送至第二设备,相应地,第二设备直接通过邮件过滤网关将RETR命令之前的数据包的回复码及RETR命令的回复码回复给第一设备。邮件过滤网关在转送这些数据时,相当于透传,不对这些数据进行任何操作。
步骤(602)、邮件过滤网关解析到缓存开始的特征,即RETR命令的回复码时,如RETR命令的“OK”回复码时,邮件过滤网关中状态标志位信息设置为缓存开始状态,缓存开始,对之后接收的数据包进行缓存。
步骤(603)、第一设备向邮件过滤网关发送邮件正文“Mail body”。
步骤(604)、邮件过滤网关向第一设备回复确认报文“Ack”。由于邮件过滤网关中的状态标志位信息为缓存开始状态,因此邮件过滤网关对第一设备发送邮件正文“Mail body”进行缓存。
步骤(605)、第一设备向邮件过滤网关发送缓存结束的特征,即“.”命令。
步骤(606)、邮件过滤网关中状态标志位信息设置为缓存结束状态,缓存结束,对之后的接收的数据包不进行缓存。
步骤(607)、邮件过滤网关向第一设备回复确认报文“Ack”。由于邮件过滤网关中的状态标志位信息为缓存开始状态,因此邮件过滤网关对第一设备发送邮件正文“Mail body”进行缓存。
步骤(608)、检测邮件正文。
步骤(609)、邮件过滤网关向第二设备发送邮件正文“Mail body”。
步骤(610)、第二设备向邮件过滤网关回复确认报文“Ack”。
图7为本发明网关设备上缓存及转发数据包的方法实施例七的信令流程图。该实施例具体应用在FTP过滤网关中,以FTP协议为例。FTP协议是用于文件传输的协议。与邮件传输不同的是,FTP协议的命令交互和文件传输不是由同一个TCP连接完成。用于文件传输的TCP连接又称为数据通道,在数据通道中,只有文件传输,而没有命令交互。在数据通道时,缓存开始和缓存结束的特征分别是第一个携带净荷的数据包和FIN报文。在FTP文件传输中,方案如下:
步骤(701)、对于由数据通道建立的数据包在经过病毒网关时直接通过。
步骤(702)、解析到连接建立后第一个携带净荷的数据包时,缓存开始。
步骤(703)、第一设备向病毒网关网关发送携带净荷的数据包。
步骤(704)、病毒网关向第一设备回复确认报文“Ack”。
步骤(705)、第一设备向病毒网关发送缓存结束的特征,如FIN报文。
步骤(706)、病毒网关向第一设备回复确认报文“Ack”。
步骤(707)、检测携带净荷的数据包。
步骤(708)、病毒网关向第二设备发送携带净荷的数据包。
步骤(709)、第二设备向病毒网关回复确认报文“Ack”。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图8为本发明网关设备实施例一的结构示意图。包括协议分析模块100,确认报文回复模块200、缓存模块300及转发模块400。
协议分析模块100,用于确认第一设备发送的数据包是否需要缓存,如果需要缓存,通知确认报文回复模块200在当前TCP连接上向第一设备回复确认报文,并通知缓存模块200缓存该数据包;
转发模块400,用于将缓存模块300中缓存的数据包转发至第二设备,并拦截第二设备回复的确认报文。网关设备将缓存的数据包转发至第二设备具体包括:网关设备分析第二设备回复的确认报文,根据滑动窗口协议,当网关设备接收到第二设备发送的窗口信息时,根据窗口信息中指定的希望接收的字节数信息,将缓存模块中缓存的数据包转发至第二设备。
图9为本发明网关设备实施例二的结构示意图。该实施例中的网关设备还包括上报模块500,与缓存模块300连接,用于将缓存模块300中缓存的数据包上报至上层应用处理单元,所述上层应用处理单元用于按照预设需求对网关设备中缓存的数据包进行处理。
图10为本发明网关设备实施例三的结构示意图。所述协议分析模块100包括第一分析模块111,用于分析当前TCP连接上的数据包是否出现缓存开始的特征或缓存结束的特征,当出现缓存开始的特征时,确认当前TCP连接上第一设备发送的数据包需要缓存,当出现缓存结束的特征时,确认当前TCP连接上第一设备发送的数据包不需要缓存。
图11为本发明网关设备实施例四的结构示意图。该实施例中协议分析模块100包括:
状态标志位模块122,用于存储表示缓存开始状态或缓存结束状态的状态标志位信息;
第二分析模块121,与状态标志位模块122连接,用于分析状态标志位模块122中的状态标志位信息是否为缓存开始状态或缓存结束状态,当状态标志位信息为缓存开始状态时,确认当前TCP连接上第一设备发送的数据包需要缓存;当状态标志位信息为缓存结束状态时,确认当前TCP连接上第一设备发送的数据包不需要缓存。
图12为本发明网关设备实施例五的结构示意图。该实施例中转发模块400包括释放模块401,用于当转发模块400接收到第二设备的确认报文时,释放缓存模块300中该确认报文所确认的数据包。综上所述,本发明网关设备上缓存及转发数据包的方法的实施例及网络设备的实施例,具有以下优点:
(1)通过在网关设备上实现TCP协议栈,利用原有TCP连接,由网关设备对需要缓存的数据包进行回复,不需要缓存的数据包直接通过,并在缓存完毕,根据作为接收方的第一设备的确认报文转发缓存数据包,从而在不影响连接的情况下达到缓存的目的。其中,只对需要缓存的数据包进行缓存并回复,而对不需要缓存的数据包,让其直接通过,能够减少网关的处理。
(2)网关设备监控需要缓存的TCP连接,在收到需要缓存的数据包后,代替接收方回复确认报文,使得作为发送方的第二设备误认为接收方已经收到。在缓存、处理完毕后,代替发送方转发缓存的数据包,使得接收方误认为是发送方在发送,缓存与转发过程中,发送方和接收方始终只有一个连接,从而达到不影响连接的情况下实现缓存的目的。
(3)整个过程中,发送方和接收方之间始终只有一个连接。而且,缓存的是原始数据包,并不只是净荷部分,IP、TCP首部和净荷部分始终存在,除因上层处理导致的必要修改外,除了各种具体应用在修改净荷部分后,需要重新调整首部的序号、校验和等字段外,可以直接转发,不存在任何的内存拷贝,因此提高了转发效率。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。