背景技术
SCTP代表流控传输协议,其是由IETF(Internet Engieering TaskForce)新近制定的协议,它提供了电信信令在IP网上的传输服务。与目前广泛应用于Internet网上的传统的TCP协议相比,SCTP更加强壮和可靠,SCTP已经被3G的标准化组织(3GPP)所采纳,应用于在IP网上传输7号信令(SS7)。
SCTP可应用于3G WCDMA(Wideband Code Division Multiple Address)系统中,与M3UA形成IP信令网的节点,位置与7号信令平行,由供应商根据实际情况进行选择。以保证数据快速可靠的传输,高效地完成SCTP协议的数据传输功能。
SCTP的基本操作对象是关联,类似于TCP中的连接,所不同的是每一个关联中可以有多个流,每个流能够按序传输数据,不同的流互不干扰。关联端点可以包含多个IP地址,所以在一个关联中存在多个路径,上层用户可以指定某条路径在某个流上发送按序传递的数据。同时SCTP对这些路径进行可达性管理,对于没有指定路径的数据,在主路径上发送。当主路径不可达时则选择下一可达的路径发送。SCTP最基本的传输单元是数据块,多个数据块可以与控制块捆绑在一个SCTP包中发送。
SCTP具备以下基本功能:
(1)关联的启动和关闭:完成关联的创建和释放;
(2)流内的数据按序传递:保证一个流内的数据按照顺序传递;
(3)用户数据分段重组:用户数据长度大于PMTU(Path Maximum TransferUnit)时需要分段,而在接收端需要重组分段数据,然后才能提交给上层用户;
(4)数据块应答及拥塞避免机制:在接收方用SACK控制块对收到的数据块进行选择性应答,发送方重传丢失的数据块。采用一种慢启动快降落的方法避免拥塞;
(5)块捆绑:在一个SCTP包中可以捆绑多个数据块和控制块;
(6)包的有效性检查:SCTP包的合法性检查;
(7)路径管理:路径可达性管理维护,需要进行路径可达性的心跳检测。
就目前的状况而言,SCTP协议对于关联的启动和关闭等方面有比较详细的说明,但是对于数据传输方面只有一个大概的基本规则,没有提供一个详尽的技术方案来实现SCTP协议功能,尤其在如何利用合理的队列结构和完善的队列管理方法提高SCTP的数据传输性能方面没有一个系统的技术方案。
SCTP在具体实现时还存在以下不足之处:
其一:缺少合理的队列结构和队列管理方法。SCTP协议在这一方面没有做出具体的规定,但是如果采用不合适的队列结构和队列管理方法,在数据接收和发送过程中会造成数据的排队时间过长或者数据丢失,流之间的队列设置不合理的话,也会产生头阻现象,也就是因某一个流中的某一数据的延迟导致其它流数据的不必要的延迟,大大降低SCTP的数据传输性能。
其二:在发生拥塞时没有通知上层,以便积极地控制上层拥塞源。当发生网络拥塞时,SCTP协议只是减少发送端发送的字节数,而没有限制SCTP上层应用的流量。这样会导致上层应用不了解底层的实际数据传输能力,盲目要求SCTP传输数据,从而发生数据丢失,或者数据传输延迟很长,达不到上层数据传输要求。
发明内容
本发明解决的技术问题在于,提供一种流控传输协议中数据传输实现方法及系统,以解决以上分析的SCTP协议中没有考虑的实现问题和基于软件实现上的传输性能问题。合理使用队列结构和队列管理以进行数据传输。并加强拥塞避免机制,实现高效的SCTP数据传输,防止拥塞现象趋向严重。
本发明的技术方案为:
一种流控传输协议中数据传输实现方法,其特征在于包括以下步骤:
为每一个SCTP关联设置发送队列,所述的发送队列接收上层请求发送的数据,并将该数据发送给所述的流接收队列;
在发送数据时须判断是否满足发送条件,如果否:则告警给上层,要求上层在警告解除之前停止发送新数据;如果是:则报告给上层告警解除,上层能够自由请求发送新数据;
设置待应答队列,所述的待应答队列从所述的发送队列选取队列元素发送出去之后,将该队列元素移入待应答队列;
当发送成功时:则从所述的待应答队列中删除该队列元素;当发送失败时:将该队列元素从所述发送队列转移到所述的重发队列;
设置重传队列,所述的重发队列接收所述的待应答队列转移的数据,并将该数据发送给所述的流接收队列;
设置重组队列,所述的重组队列暂存分片数据块,当分片数据块接收完整后,将所述的分片数据块重组成一个完整的数据块,并将重组后的数据块加入到相应的流接收队列中;
每一个流设置流接收队列,所述的流接收队列将接收到的数据上传给上层用户。
本发明还提供了一种流控传输协议中数据传输实现系统,其特征在于包括:数据发送处理模块、数据接收处理模块,其中:
所述的数据发送处理模块接收上层数据传输请求,对于按序传递的数据按序将数据发送到所述的数据接收处理模块;
所述的数据接收处理模块处理接收的数据块,重组分片的数据块,并且在每一个流内按序将收齐的数据上传给上层用户,根据需要产生选择性应答控制块,反馈给关联数据的所述的数据发送处理模块。
本发明的有益效果在于:
一个流设置一个流接收队列,保证了流之间数据上传互不干扰,避免因一个流的拥塞导致所有流数据拥塞的现象,使数据能尽快传递给上层协议用户;
发送队列设置两个门槛值,有效的将网络拥塞状况通知上层用户,及早在源头控制网络拥塞的产生,避免数据传输过程中过长的排队延迟,并有效避免网络拥塞;
完善的慢启动快降落拥塞避免机制缓解了突发数据造成的网络拥塞;
快速重传机制确保多次重传的数据尽快发送到对端,减少因网络拥塞和多次重传导致数据延迟过长。
在实践过程中,采用本方法能快速可靠地在IP信令网中传输信令数据。
具体实施方式
下面结合附图说明本发明的具体实施方式:
如图1、2所示,首先为每一个SCTP关联设置一个发送队列、待应答队列、重传队列、重组队列,为每一个流设置一个流接收队列,队列结构及数据流。
发送队列是一个按TSN(Transfer Serial Number)和SSN(Stream SerialNumber)顺序排列的先进先出队列,该队列设置两个门槛值(门槛值1<门槛值2),当该队列的元素超过了该门槛值2时就报告给上层队列告警,要求上层在告警解除之前停止发送新数据,否则不保证发送上层继续要求发送的新数据,如果发送队列的长度小于门槛值1,则报告给上层告警解除,上层应用可以自由请求发送新数据。
待应答队列也是一个按照TSN顺序排列的队列。从发送队列选取队列元素发送出去之后,将该队列元素移入待应答队列。当队列元素的TSN小于收到的SACK控制块携带的TSN时,从待应答队列中删除该队列元素;如果SACK控制块显示某个队列元素丢失时,将此队列元素从发送队列转移到重发队列,并标记重发次数。
重发队列是一个按照TSN排列的队列,每次可以发送数据时,优先发送重发队列中的数据块。
重组队列是一个按照TSN排序的队列,该队列主要是为了暂存没有接受完整的分片了的数据块,一旦分片数据块接收完整之后,就将它们组合成一个完整的数据块。每当重组队列中插入一个队列元素时,检查该队列中的队列元素是否能够重组,如果是,则将数据块重组,并将重组后的数据块加入到相应的流接收队列中。
流接收队列是一个按照SSN排序的队列,每一个流设置一个这样的队列,是为了避免流之间的相互干扰。等待SSN之前的所有数据块都收到了以后,才将具有SSN的数据块上传给上层用户,保证按序传递。
如图3、7所示,为本发明系统,其包括:数据发送处理模块、数据接收处理模块;其中:
所述的数据发送处理模块(如图3所示)接收上层数据传输请求,对于按序传递的数据按序将数据发送到所述的数据接收处理模块;
所述的数据接收处理模块(如图7所示)处理接收的数据块,重组分片的数据块,并且在每一个流内按序将收齐的数据上传给上层用户,根据需要产生选择性应答控制块,反馈给关联数据的所述的数据发送处理模块。
所述的数据发送处理模块包括:上层数据请求处理模块、发送端队列处理模块、数据成包发送模块、SACK(选择性应答)信号控制块处理模块;
其中:
上层数据请求处理模块:处理上层数据传输请求,进行上层数据分组;
发送端队列处理模块:将分组后的数据加入发送队列,根据条件上报用户网络拥塞状况;
数据成包发送模块:根据接收窗和拥塞窗状况从重发队列和发送队列中选择合适的数据块捆绑成SCTP包发送到接收端;
SACK信号控制块处理模块:处理接收端反馈的选择性应答控制块。
所述的数据接收处理模块包括:数据块接收处理模块、接收端队列处理模块、数据块重组模块、SACK反馈模块;
其中:
数据块接收处理模块:数据块合法性检查,并根据数据块的重组属性将它们加入到重组队列或者流接收队列,并调节接收窗口;
接收端队列处理模块:将流输入队列中的数据按序提交给上层;
数据块重组模块:重组在重组队列中的数据块,并将重组好的数据转移到相应的流接收队列;
SACK反馈模块:根据需要产生SACK控制块,将接收方的数据块接收情况反馈给发送端。
在具体实施时:
在发送端设有所述的数据发送处理模块,所述的数据发送处理模块包括:上层数据请求处理模块、发送端队列处理模块、数据成包发送模块、SACK信号控制块处理模块;
在接收端设有所述的数据接收处理模块,所述的数据接收处理模块包括:数据块接收处理模块、接收端队列处理模块、数据块重组模块、SACK反馈模块;
其中:
上层数据请求处理模块(如图4所示):处理上层数据传输请求,进行上层数据分组;其中发送端队列处理模块:将分组后的数据加入发送队列,发送队列是一个按TSN和SSN顺序排列的先进先出队列,该队列设置两个门槛值,且门槛值1<门槛值2,当该队列的元素超过了该门槛值2时就报告给上层队列告警,要求上层在告警解除之前停止发送新数据,否则不保证发送上层继续要求发送的新数据,如果发送队列的长度小于门槛值1,则报告给上层告警解除,上层应用可以自由请求发送新数据;待应答队列也是一个按照TSN顺序排列的队列;其从发送队列选取队列元素发送出去之后,将该队列元素移入待应答队列;当队列元素的TSN小于收到的SACK控制块携带的TSN时,从待应答队列中删除该队列元素;如果SACK控制块显示某个队列元素丢失时,将此队列元素从发送队列转移到重发队列,并标记重发次数;重发队列是一个按照TSN排列的队列,每次可以发送数据时,优先发送重发队列中的数据块;
数据成包发送模块(如图5所示):根据接收窗和拥塞窗大小从重发队列和发送队列中选择合适的数据块捆绑成一个SCTP包,通过IP接口发送到接收端;
SACK信号控制块处理模块(如图6所示):更新SACK中的状态信息;从待应答队列中删除TSN以下的队列元素;处理丢失的数据块和重复接收的数据块;
数据块接收处理模块(如图11所示):判断重组队列中的元素是否能重组;如果否:则返回;如果是:则重组这些队列元素;将重组后的数据加入到相应的流接收队列;将所述的数据从重组队列中删除;
接收端队列处理模块(如图8所示):判断流序号为SSN的流数据是否收到;如果否:则返回,如果是:则将所述的数据提交给上层;
数据块重组模块(如图9所示):进行数据块合法性检查,所述检查通过后判断数据块是否需要重组;如果是,则将该数据块加入重组队列;如果否,则将该数据块加入流接收队列;
SACK反馈模块(如图10所示):获取接收的重复数据块信息;获取接收的数据块位图信息;生成SACK控制块,将该SACK控制块反馈给发送端。
采用以上所述的SCTP队列管理和数据处理方法,有以下有益效果:
1)一个流设置一个流接收队列,保证了流之间数据上传互不干扰,避免因一个流的拥塞导致所有流数据拥塞的现象,使数据能尽快传递给上层协议用户;
2)发送队列设置两个门槛值,有效的将网络拥塞状况通知上层用户,及早在源头控制网络拥塞的产生,避免数据传输过程中过长的排队延迟,并有效避免网络拥塞;
3)完善的慢启动快降落拥塞避免机制缓解了突发数据造成的网络拥塞;
4)快速重传机制确保多次重传的数据尽快发送到对端,减少因网络拥塞和多次重传导致数据延迟过长。
在实践过程中,采用本方法能快速可靠地在IP信令网中传输信令数据。
SCTP作为IP信令承载,它关系到信令是否能及时可靠的发送到目的信令点,这又涉及到整个通讯系统的可靠性和稳定性,故如何有效地避免网络拥塞,快速可靠的传输数据是SCTP在实现过程中切实考虑的重要问题,本文提供了一种SCTP的队列管理和数据处理方法,它根据数据的属性和状态有区别的放入到不同的队列,配合恰当的拥塞处理方法,能有效的将数据快速可靠的传输到目的信令点。
以上具体实施方式仅用于说明本发明,而非用于限定本发明。