【发明内容】
本发明要解决的技术问题是在DPI系统中,一般的TCP或UDP数据,可以通过IP五元组(源IP、目的IP、源端口、目的端口、传输层协议)作为同源同宿算法的依据,保障相同通信会话数据能够同源同宿到同一服务器上。而SCTP协议应用因为具备多归属的特性,导致同一应用可能通过不同IP对进行数据通信,此时一般的通过根据IP五元组保障应用数据同源同宿的算法就不能满足SCTP数据同源同宿的需求了。
本发明采用如下技术方案:
第一方面,一种保障SCTP协议多归属报文同源同宿的方法,收到SCTP协议报文时,分析payload中chunk信息的类型,方法包括:
当chunk type为INIT时,所述SCTP会话处于会话建立阶段,进行会话建立阶段的会话表项建立;
所述会话建立阶段的会话表项建立,包括根据INIT类型的SCTP报文的四元组信息进行hash计算,根据计算hash值确定输出接口,进而确定输出到相应目标DPI服务器;
在相应目标DPI服务器建立该SCTP会话的一对上下行会话表项,报文chunk信息中的Initiate tag作为该上下行会话表项下行方向的verification tag记录到该会话的会话表项中;上行方向的verification tag记录为空;
当SCTP协议报文的chunk type是INIT ACK时,则使用INIT ACK类型的SCTP报文中的S-port、D-port和verification tag进行历史建立的会话表项的匹配;
若匹配成功,则记录INIT ACK类型的SCTP报文中携带的chunk信息中的initiatetag到相应会话表项中空缺的上行方向的verification tag字段中;
后续接收到各SCTP报文均使用S-port、D-port和verification tag进行同宿同源的匹配依据。
优选的,若匹配不成功,则表明INIT ACK类型的SCTP报文所在会话的历史INIT类型的SCTP报文未被网络分流器正确捕获,根据所述INIT ACK类型的SCTP报文建立所述会话表项。
优选的,所述根据所述INIT ACK类型的SCTP报文建立所述会话表项,具体包括:
将INIT ACK类型的SCTP报文的四元组信息进行hash计算,汇聚分流设备根据hash计算值确定输出接口,并记录到对应相应SCTP会话的一对会话表项中;
所述INIT ACK类型的SCTP报文的SIP作为所述SCTP会话上行方向的SIP以及下行方向的DIP;所述INIT ACK类型的SCTP报文的DIP作为该会话上行方向的DIP以及下行方向的SIP;所述INIT ACK类型的SCTP报文的S-port作为所述SCTP会话下行方向的S-port以及上行方向的D-port;所述INIT ACK类型的SCTP报文的D-port作为该会话下行方向的D-port以及上行方向的S-port;所述INIT ACK类型的SCTP报文的verification tag作为所述SCTP会话表项中下行方向的verification tag;所述INIT ACK类型的SCTP报文chunk信息中的initiate tag作为上行方向的verification tag。
优选的,当SCTP报文chunk type不是INIT或者INIT ACK时,且所述SCTP报文的S-port、D-port和verification tag未能与网络分流器中历史建立的会话表项匹配时,所述方法还包括:
增加报文匹配字段,根据四元组信息SIP、DIP、S-port和D-port进行匹配;若能匹配,则证明所述SCTP会话的另一方向报文已经被捕捉和解析,此时该会话表项中缺少本方向的verification tag信息,需将本报文中的verification tag记录到会话表项中,并按照会话表项中所记录输出接口,输出该报文。
优选的,若根据所述四元组信息依旧无法匹配到对应的会话表项,则需要根据当前SCTP报文建立该SCTP会话的会话表项,方法包括:
根据四元组进行hash计算,根据计算结果确定输出接口,并记录在该会话的会话表项中;
所述SCTP报文的SIP作为所述SCTP会话表项本方向的SIP以及另一方向的DIP;所述SCTP报文的DIP作为所述SCTP会话表项本方向的DIP以及另一方向的SIP;所述SCTP报文的S-port作为所述SCTP会话表项本方向的S-port以及另一方向的D-port;所述SCTP报文的D-port作为所述SCTP会话表项本方向的D-port以及另一方向的S-port;所述SCTP报文的verification tag作为所述SCTP会话表项中本方向的verification tag;所述SCTP会话表项另一方向verification tag标记为空;
所述SCTP会话另一方向verification tag,在根据所述SCTP会话表项另一方向的SIP、DIP、S-port和D-port匹配到SCTP报文情况下,将相应SCTP报文中记载的verificationtag更新到历史标记为空的SCTP会话表项中的verification tag。
优选的,在有多个汇聚分流设备和/或DPI服务器时,所述方法还包括:
各汇聚分流设备对于自身所的SCTP会话表项中,所包含的上行方向的verification tag和下行方向的verification tag不全的,会将相应的信息不全的SCTP会话表项分发给各个汇聚分流设备,以便各汇聚分流设备在获取到SCTP报文时,能够根据来自网络中各个汇聚分流设备的待补全SCTP会话表项快速完成表项更新;
其中,各个汇聚分流设备维护自身建立起来的SCTP会话表项,而将相应表项中对应四元组的hash值,以及对应S-port、D-port和verification tag的hash值分发给其他汇聚分流设备。
优选的,所述建立该SCTP会话的一对上下行会话表项后,相应的上下行会话表项填写内容还包括:
将所述INIT类型的SCTP报文的SIP作为该会话上行方向的SIP以及下行方向的DIP;将所述INIT类型的SCTP报文的DIP作为该会话上行方向的DIP以及下行方向的SIP,S-port作为该会话上行方向的S-port以及下行方向的D-port,D-port作为该会话上行方向的D-port以及下行方向的S-port,记录到该会话的会话表项中。
优选的,所述四元组就具体为:源IP地址SIP、目的IP地址DIP、源端口号S-port和目的端口号D-port。
优选的,所述使用INIT ACK类型的SCTP报文中的S-port、D-port和verificationtag进行历史建立的会话表项的匹配,具体包括:
通过计算S-port、D-port和verification tag三者的hash值,并利用计算出的hash值进行历史建立的会话表项中相对应的hash值进行匹配。
第二方面,本发明还提供了一种保障SCTP协议多归属报文同源同宿的装置,用于实现第一方面所述的保障SCTP协议多归属报文同源同宿的方法,所述装置包括:
至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,用于执行第一方面所述的保障SCTP协议多归属报文同源同宿的方法。
第三方面,本发明还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,用于完成第一方面所述的保障SCTP协议多归属报文同源同宿的方法。
本发明解决了SCTP报文中同一偶联数据,通过不同IP地址传输时,报文在DPI系统中同源同宿的问题。SCTP大量的数据报文不需要进行IP地址的识别和计算,只需要对源端口,目的端口和verification tag进行解析和hash计算,就能够确定输出接口,降低了计算资源的损耗。
【具体实施方式】
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明的描述中,术语“内”、“外”、“纵向”、“横向”、“上”、“下”、“顶”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明而不是要求本发明必须以特定的方位构造和操作,因此不应当理解为对本发明的限制。
现有技术方案对SCTP协议报文的处理,缺少对多归属问题的解决方案,现有分流汇聚设备SCTP协议处理流程如图2所示,这里假设场景,Client与Server为SCTP通信的双向endpoint,endpoint之间所有的通信路径称为path,而初始建立SCTP连接的ClientIP1和ServerIP1的path称为primary path。该primary path上的SCTP数据会被汇聚分流设备镜像转发到DPI服务器1上,而其他path进行通信的数据会被镜像转发到DPI服务器2上。为保障SCTP偶联会话的完整性,需要通过一个技术方案,使其他path之间通信的数据能够被转发到DPI服务器1上。而本发明实施例正是针对上述的技术方案需求而提出的。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
实施例1:
网络分流器需要根据SCTP协议会话的不同阶段,执行不同的处理方案。SCTP完整会话过程主要为:会话建立,会话通信,会话完成三个阶段。流程如图3所示。在SCTP会话建立过程中,根据SCTP协议中的INIT,INIT ACK报文(在本发明实施例也将描述为INIT类型的SCTP报文和INIT ACK类型的SCTP报文),将SCTP会话信息加以处理和保存,为后续SCTP报文提供的转发路径提供参考。
本发明实施例提出了一种保障SCTP协议多归属报文同源同宿的方法,在收到SCTP协议报文时,分析payload中chunk信息的类型,如图4所示,方法包括:
在步骤201中,当chunk type为INIT时,所述SCTP会话处于会话建立阶段,进行会话建立阶段的会话表项建立。
在步骤202中,所述会话建立阶段的会话表项建立,包括根据INIT类型的SCTP报文的四元组信息进行hash计算,根据计算hash值确定输出接口,进而确定输出到相应目标DPI服务器。
所述四元组就具体为:源IP地址SIP、目的IP地址DIP、源端口号S-port和目的端口号D-port。
在步骤203中,在相应目标DPI服务器建立该SCTP会话的一对上下行会话表项,报文chunk信息中的Initiate tag作为该上下行会话表项下行方向的verification tag记录到该会话的会话表项中;上行方向的verification tag记录为空。
此时无法获取到上行方向的verification tag,因此设置为空;上下行的verification tag是不相同的,首先INIT报文是一个上行报文,其chunk信息中包含的initiate tag是作为下行方向的verification tag。
所述建立该SCTP会话的一对上下行会话表项后,相应的上下行会话表项填写内容还包括:将所述INIT类型的SCTP报文的SIP作为该会话上行方向的SIP以及下行方向的DIP;将所述INIT类型的SCTP报文的DIP作为该会话上行方向的DIP以及下行方向的SIP,S-port作为该会话上行方向的S-port以及下行方向的D-port,D-port作为该会话上行方向的D-port以及下行方向的S-port,记录到该会话的会话表项中。
在步骤204中,当SCTP协议报文的chunk type是INIT ACK时,则使用INIT ACK类型的SCTP报文中的S-port、D-port和verification tag进行历史建立的会话表项的匹配。
例如:通过计算S-port、D-port和verification tag三者的hash值,并利用计算出的hash值进行历史建立的会话表项中相对应的hash值进行匹配。
在步骤205中,若匹配成功,则记录INIT ACK类型的SCTP报文中携带的chunk信息中的initiate tag到相应会话表项中空缺的上行方向的verification tag字段中。
INIT ACK报文是一个下行方向的报文,是对上行方向INIT报文的一个应答,其chunk信息中包含的initiate tag,与上行方向的verification tag相等。这里才能把会话记录表项中缺失的上行方向的verification tag补齐。
在步骤206中,后续接收到各SCTP报文均使用S-port、D-port和verification tag进行同宿同源的匹配依据。
本发明实施例解决了SCTP报文中同一偶联数据,通过不同IP地址传输时,报文在DPI系统中同源同宿的问题。SCTP大量的数据报文不需要进行IP地址的识别和计算,只需要对源端口,目的端口和verification tag进行解析和hash计算,就能够确定输出接口,降低了计算资源的损耗。
当SCTP的偶联数据,在Primary Path通道出现故障,如某一endpoint的某一物理接口失效而数据通过其他Path通信时,因会话仅需通过S-port,D-port和verificationtag与会话表项进行匹配,进而确定该数据的输出接口,保障在SCTP会话通过不同IP地址,即不同Path通信的数据,也能够同源同宿。
对于本发明实施例中对应于步骤205的判断分支,还存在一种情况,如图5所示,在步骤207中,若匹配不成功,则表明INIT ACK类型的SCTP报文所在会话的历史INIT类型的SCTP报文未被网络分流器正确捕获,根据所述INIT ACK类型的SCTP报文建立所述会话表项。
其中,所述根据所述INIT ACK类型的SCTP报文建立所述会话表项,具体包括:
将INIT ACK类型的SCTP报文的四元组信息进行hash计算,汇聚分流设备根据hash计算值确定输出接口,并记录到对应相应SCTP会话的一对会话表项中;
所述INIT ACK类型的SCTP报文的SIP作为所述SCTP会话上行方向的SIP以及下行方向的DIP;所述INIT ACK类型的SCTP报文的DIP作为该会话上行方向的DIP以及下行方向的SIP;所述INIT ACK类型的SCTP报文的S-port作为所述SCTP会话下行方向的S-port以及上行方向的D-port;所述INIT ACK类型的SCTP报文的D-port作为该会话下行方向的D-port以及上行方向的S-port;所述INIT ACK类型的SCTP报文的verification tag作为所述SCTP会话表项中下行方向的verification tag;所述INIT ACK类型的SCTP报文chunk信息中的initiate tag作为上行方向的verification tag。
在本发明实施例实现过程中,考虑到上述基于INIT类型的SCTP报文和INIT ACK类型的SCTP报文仅在会话建立时候才出现,那么根据实际可能发生的情况,有可能会错过或者丢失上述会话建立过程中实现SCTP会话表项的建立。因此,结合本发明实施例作为完整可能性实现方案而言,还存在一种扩展实现内容,具体的:当SCTP报文chunk type不是INIT或者INIT ACK时,且所述SCTP报文的S-port、D-port和verification tag未能与网络分流器中历史建立的会话表项匹配时,所述方法还包括:
增加报文匹配字段,根据四元组信息SIP、DIP、S-port和D-port进行匹配;若能匹配,则证明所述SCTP会话的另一方向报文已经被捕捉和解析,此时该会话表项中缺少本方向的verification tag信息,需将本报文中的verification tag记录到会话表项中,并按照会话表项中所记录输出接口,输出该报文;
若根据所述四元组信息依旧无法匹配到对应的会话表项,则需要根据当前SCTP报文建立该SCTP会话的会话表项,方法包括:
根据四元组进行hash计算,根据计算结果确定输出接口,并记录在该会话的会话表项中;
所述SCTP报文的SIP作为所述SCTP会话表项本方向的SIP以及另一方向的DIP;所述SCTP报文的DIP作为所述SCTP会话表项本方向的DIP以及另一方向的SIP;所述SCTP报文的S-port作为所述SCTP会话表项本方向的S-port以及另一方向的D-port;所述SCTP报文的D-port作为所述SCTP会话表项本方向的D-port以及另一方向的S-port;所述SCTP报文的verification tag作为所述SCTP会话表项中本方向的verification tag;所述SCTP会话表项另一方向verification tag标记为空;
所述SCTP会话另一方向verification tag,在根据所述SCTP会话表项另一方向的SIP、DIP、S-port和D-port匹配到SCTP报文情况下,将相应SCTP报文中记载的verificationtag更新到历史标记为空的SCTP会话表项中的verification tag。
此时SCTP会话建立过程的报文已经缺失,因此无法确定报文的方向性,且此时报文的方向性已经不再重要,因此可以假定收到的报文为上行或下行方向报文都可以,并记录相应信息到会话表项中,之后根据四元组信息进行匹配后,可以获取到下行行或上行方向的verification tag。在上述描述中,实际上使用修改“本方向”和“另一方向”代替历史上的“下行”和“上行”的描述形式。
进一步,考虑一种存在的分布式复杂场景,在有多个汇聚分流设备和/或DPI服务器时,所述方法还包括:
各汇聚分流设备对于自身所的SCTP会话表项中,所包含的上行方向的verification tag和下行方向的verification tag不全的,会将相应的信息不全的SCTP会话表项分发给各个汇聚分流设备,以便各汇聚分流设备在获取到SCTP报文时,能够根据来自网络中各个汇聚分流设备的待补全SCTP会话表项快速完成表项更新;
其中,各个汇聚分流设备维护自身建立起来的SCTP会话表项,而将相应表项中对应四元组的hash值,以及对应S-port、D-port和verification tag的hash值分发给其他汇聚分流设备。从而保证分布式汇聚分流设备下的全网记录信息尽可能精简,且可全数据复盘。
实施例2:
本发明实施例2从更为容易理解的逻辑层面系统的将实施例1中相关扩展方案联系到一起来进行阐述,并结合举例的SCTP会话表项形成进行呈现。需要指出的是,在实施例1中的类似INIT类型的SCTP报文在本发明实施例中将简称为INIT报文。
情况1、当网络分流器收到SCTP协议报文后,首先分析payload中chunk信息的类型,当chunk type为INIT时,则该SCTP处于会话建立阶段,其用于同源同宿的会话表项应遵循如下方案:
步骤(1)、根据SCTP的INIT报文的四元组信息进行hash计算,汇聚分流设备根据计算结果确定输出接口,进而确定输出到哪一台DPI服务器。
步骤(2)、建立该SCTP会话的一对上下行会话表项,将该INIT报文的SIP作为该会话上行方向的SIP以及下行方向的DIP,DIP作为该会话上行方向的DIP以及下行方向的SIP,S-port作为该会话上行方向的S-port以及下行方向的D-port,D-port作为该会话上行方向的D-port以及下行方向的S-port,记录到该会话的会话表项中;该报文chunk信息中的Initiate tag作为该会话下行方向的verification tag记录到该会话的会话表项中;上行方向的verification tag记录为空;记录步骤(1)中所得输出接口到该SCTP会话的一对表项中。会话表项如下所示:
情况2、当SCTP协议报文的chunk type是INIT ACK时,则使用该报文的S-port、D-port和verification tag进行会话匹配。此时可能出现两类情况:
情况2.1、如匹配成功,则证明该会话已经通过INIT报文建立了会话表项,此时该会话表项缺失上行方向的verification tag,需记录INIT ACK报文chunk信息中的initiate tag作为上行方向的verification tag。
情况2.2、如匹配不成功,则证明该会话的INIT报文未被网络分流器正确捕获,需要根据INIT ACK建立会话表项。会话表项建立规则是:
报文的四元组信息进行hash计算,汇聚分流设备根据计算结果确定输出接口,并记录到该SCTP的一对会话表项中。
该INIT ACK报文的SIP作为该会话上行方向的SIP以及下行方向的DIP;该报文的DIP作为该会话上行方向的DIP以及下行方向的SIP;该报文的S-port作为所述SCTP会话下行方向的S-port以及上行方向的D-port;该报文的D-port作为该会话下行方向的D-port以及上行方向的S-port;该报文的verification tag作为该SCTP会话表项中下行方向的verification tag;该报文chunk信息中的initiate tag作为上行方向的verificationtag。以上信息记录到该会话的会话表项中。
情况3、当SCTP报文chunk type不是情况1、情况2中的情况时,且该报文的S-port、D-port和verification tag未能与网络分流器中现有会话表项匹配时,需要按照以下步骤进行处理:
步骤(1)、增加报文匹配字段,进行四元组信息的匹配,即以SIP、DIP、S-port和D-port进行匹配,此时若能匹配,则证明该会话的另一方向报文已经被捕捉和解析,此时该会话表项中缺少本方向的verification tag信息,需将本报文中的verification tag记录到会话表项中,并按照会话表项中所记录输出接口,输出该报文;
步骤(2)、如按照四元组信息依旧无法匹配到对应的会话表项,则需要根据本报文建立该SCTP会话的会话表项,建立规则如下:
根据四元组进行hash计算,根据计算结果确定输出接口,并记录在该会话的会话表项中;
该报文的SIP作为该会话上行方向的SIP以及下行方向的DIP;该报文的DIP作为该会话上行方向的DIP以及下行方向的SIP;该报文的S-port作为该会话下行方向的S-port以及上行方向的D-port;该报文的D-port作为所述SCTP会话下行方向的D-port以及上行方向的S-port;该报文的verification tag作为该SCTP会话表项中下行方向的verificationtag;该会话上行方向verification tag标记为空。
当有该会话另一方向报文被捕获是,则按照上述情况3进行处理。
通过情况1、情况2、情况3SCTP会话的不同阶段报文都能够在网络分流器中建立或匹配到会话表项,并根据会话表项确定输出接口。
当SCTP的偶联数据,在Primary Path通道出现故障,如某一endpoint的某一物理接口失效而数据通过其他Path通信时,因会话仅需通过S-port,D-port和verificationtag与会话表项进行匹配,进而确定该数据的输出接口,保障在SCTP会话通过不同IP地址,即不同Path通信的数据,也能够同源同宿。
实施例3:
如图6所示,是本发明实施例的保障SCTP协议多归属报文同源同宿的装置的架构示意图。本实施例的保障SCTP协议多归属报文同源同宿的装置包括一个或多个处理器21以及存储器22。其中,图6中以一个处理器21为例。
处理器21和存储器22可以通过总线或者其他方式连接,图6中以通过总线连接为例。
存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序和非易失性计算机可执行程序,如实施例1中的保障SCTP协议多归属报文同源同宿的方法。处理器21通过运行存储在存储器22中的非易失性软件程序和指令,从而执行保障SCTP协议多归属报文同源同宿的方法。
存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例1中的保障SCTP协议多归属报文同源同宿的方法,例如,执行以上描述的图4和图5所示的各个步骤。
值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。