发明内容
有鉴于此,本发明的主要目的在于提供一种分布式流量控制方法、系统及装置,以提高资源利用率。
为达到上述目的,本发明提供的技术方案如下:
一种分布式流量控制方法,包括:
接收端获取各个发送端的状态信息,根据各个发送端的状态信息分别为各个发送端分配带宽资源,并将带宽分配结果发送给各个发送端,发送端根据接收端为自身分配的带宽资源进行流量发送。
其中,所述状态信息包括拥塞状态,所述接收端获取各个发送端的状态信息包括:发送端拥塞时向接收端发送拥塞通知报文,接收端根据收到的拥塞通知报文获取发送端的拥塞状态;
所述根据各个发送端的状态信息分别为各个发送端分配带宽资源包括:接收端根据获取的发送端的拥塞状态以及从各个发送端接收到的流量,分别为各个发送端分配带宽资源。
所述发送端拥塞时向接收端发送拥塞通知报文包括:
设置开始拥塞长度、中度拥塞长度和极度拥塞长度,且开始拥塞长度小于中度拥塞长度、中度拥塞长度小于极度拥塞长度,当发送端检测到自身队列长度达到开始拥塞长度时,向接收端发送拥塞通知报文;当发送端检测到自身队列长度达到中度拥塞长度时,再次向接收端发送拥塞通知报文;当发送端检测到自身队列长度达到极度拥塞长度时,定时向接收端发送拥塞通知报文。
所述拥塞通知报文单独发送,或者携带在数据报文中捎带发送。
所述将带宽分配结果发送给各个发送端包括:接收端将带宽分配结果携带在带宽分配报文中以组播形式发送给各个发送端。
所述带宽分配结果以每个令牌周期的令牌桶更新数HBPTC表示,所述带宽分配报文中携带每个发送端所对应的HBPTC,所述发送端根据带宽分配报文中携带的与自身对应的HBPTC进行流量发送。
该方法还包括:发送端收到来自接收端的带宽分配报文后,向接收端返回应答报文。
该方法还包括:接收端向未返回应答报文的发送端重传带宽分配报文。
该方法进一步包括:当接收端入口总带宽大于接收端CPU接收能力时,接收端向各个发送端发送关闭报文,通知发送端出端口拥塞,发送端收到关闭报文后,停止向接收端发送报文。
该方法进一步包括:出端口拥塞解除后,接收端向各个发送端发送打开报文,通知发送端出端口拥塞解除,发送端收到打开报文后,恢复向接收端发送报文。
该方法适用于分布式设备内部各个单板之间的多对一或多对多通信场景以及多个独立网络设备之间的多对一或多对多通信场景。
一种分布式流量控制系统,包括:多个发送端和一个接收端,其中,
接收端,用于获取各个发送端的状态信息,根据各个发送端的状态信息分别为各个发送端分配带宽资源,并将带宽分配结果发送给各个发送端;
发送端,用于根据接收端为自身分配的带宽资源进行流量发送。
所述状态信息包括拥塞状态,所述发送端拥塞时向接收端发送拥塞通知报文,所述接收端根据收到的拥塞通知报文获取发送端的拥塞状态,并根据获取的发送端的拥塞状态以及从各个发送端接收到的流量分别为各个发送端分配带宽资源。
所述接收端将带宽分配结果携带在带宽分配报文中以组播形式发送给各个发送端;
所述发送端在收到带宽分配报文后,向接收端返回应答报文。
所述接收端进一步用于向未返回应答报文的发送端重传带宽分配报文。
所述接收端进一步用于在入口总带宽大于自身CPU接收能力时,向各个发送端发送关闭报文,通知发送端出端口拥塞,并且,在出端口拥塞解除后,向各个发送端发送打开报文,通知发送端出端口拥塞解除;
所述发送端在收到关闭报文后,停止向接收端发送报文;在收到打开报文后,恢复向接收端发送报文。
一种流控装置,包括:带宽资源分配单元和分配结果发送单元,其中,
带宽资源分配单元,用于获取向该流控装置发送流量的各个发送端的状态信息,根据各个发送端的状态信息分别为各个发送端分配带宽资源,并将带宽分配结果发送给分配结果发送单元;
分配结果发送单元,用于将收到的带宽分配结果发送给所述各个发送端。
该流控装置进一步包括:拥塞调整单元,用于在该流控装置入口总带宽大于CPU接收能力时,向所述各个发送端发送关闭报文,通知发送端出端口拥塞,停止报文发送;并且,在出端口拥塞解除后,向所述各个发送端发送打开报文,通知发送端出端口拥塞解除,恢复报文发送。
由此可见,在本发明所提供的技术方案中,接收端通过收集各个发送端的状态信息,并且根据收集到的状态信息为各个发送端分别分配带宽资源,然后发送端根据接收端为自身分配的带宽资源进行流量发送的方式,使得整个出口带宽资源在多个发送端之间得到了合理划分,从而为分布式组网环境提供了一个合理的流量控制方案,提高了资源利用率。
具体实施方式
由背景技术描述可见,对于多对一的分布式组网环境,现有技术中并没有给出一个合理的流控方案。为了克服现有技术中的问题,下面提供一种分布式流量控制方法,其基本思想是:将接收端的出口带宽资源合理分配给多个入接口即发送端,以达到资源的有效利用。
为使本发明的目的、技术方案及优点更加清楚明白,下面参照附图并举实施例,对本发明作进一步详细说明。
图1示出了本发明中的分布式流量控制方法流程图,参见图1,该方法主要包括以下步骤:
步骤101:接收端获取各个发送端的状态信息。
步骤102:接收端根据获取的各个发送端的状态信息,对出口带宽资源进行重新分配,为各个发送端分别分配带宽资源,并将带宽分配结果发送给各个发送端。
步骤103:发送端根据接收端为自身分配的带宽资源进行流量发送。
其中,步骤101中的状态信息主要包括拥塞状态。当发送端拥塞时,发送端会给接收端发送拥塞通知(FCN,Flow Congestion Notification)报文,以告知接收端:本端拥塞,期望获得更多带宽。这里,可以根据发送端的报文排队队列长度定义几种不同的拥塞程度,比如定义以下三种拥塞程度:开始拥塞、中度拥塞和极度拥塞,它们对应的队列长度分别为:开始拥塞长度、中度拥塞长度和极度拥塞长度,且开始拥塞长度<中度拥塞长度<极度拥塞长度。当发送端检测到自身队列长度达到开始拥塞长度时,则给接收端发送FCN报文,通知接收端本端开始拥塞;如果拥塞继续恶化,队列长度达到中度拥塞长度,发送端则再给接收端发送一次FCN报文,通知接收端本端中度拥塞;当拥塞进一步加剧,队列长度达到极度拥塞长度时,发送端则定时向接收端发送FCN报文,通知接收端本端极度拥塞;如果拥塞还继续恶化,则发送端会进行丢包处理。图2示出了FCN报文流向示意图,接收端可以根据是否收到来自发送端的FCN报文来确定该发送端是否处于拥塞状态。
这里,为了节省控制信息占用带宽,可以对FCN这种控制报文进行捎带处理。比如,设定一个定时器,如果在定时器范围内有发往接收端的数据报文,发送端则进行捎带处理,将FCN控制信息携带在数据报文中发送给接收端,以节省带宽资源;如果在定时器范围内没有发往接收端的数据报文,发送端则需要单独向接收端发送FCN报文。在进行捎带处理时,为了保证控制报文低延时,可以将携带控制信息的数据报文的优先级置为最高,以保证控制信息能够及时得到发送,并且保留原数据报文的优先级。
在步骤102中,接收端根据获取的各个发送端的拥塞状态以及从各个发送端接收到的流量,按照某种分配算法对出口带宽资源进行分配,将有限的出口带宽资源合理分配给各个入接口即发送端。比如,假设共有8个发送端,其端口号分别为1~8,且假设接收端的出口总带宽为10Gbps。在初始配置带宽时,接收端按照公平配置的原则,将出口总带宽平均分配各个发送端,即各个发送端获得的带宽均为10Gbps/8=1.25Gbps。如果经过一段时间的流量传输后,接收端获知的各个发送端的状态分别如下:接收端从发送端1接收到的流量为100Mbps,从发送端2接收到的流量为200Mbps,从发送端3接收到的流量为2Gbps,从其它发送端接收到的流量为0,且发送端3向接收端发送FCN报文。为达到资源的有效利用,接收端在获知上述状态后,重新进行带宽分配:对于发送端1和发送端2,鉴于接收端从它们二者接收到的流量100Mbps和200Mbps要小于初始配置带宽1.25Gbps,且发送端1和发送端2没有发生拥塞,故接收端维持初始配置,依然为发送端1和发送端2分配1.25Gbps的带宽;对于发送端3,由于接收端从其处接收到的流量2Gbps要大于初始配置带宽1.25Gbps,且接收端收到发送端发来的FCN报文,故接收端按照实际流量为发送端3分配2Gbps的带宽,以缓解发送端3的拥塞状态;对于其它发送端,由于没有流量发往接收端,故接收端为它们分配0带宽。综上,此次带宽分配结果如下:发送端1,1.25Gbps;发送端2,1.25Gbps;发送端3,2Gbps;发送端4~8,0。如果用每个令牌周期的令牌桶更新数(HBPTC,Half Bit Per Token Circle)来表示带宽分配结果,则发送端1对应的HBPTC1=1.25Gbps/(0.5b/256ns)=640,发送端2对应的HBPTC2也为640,发送端3对应的HBPTC3=2Gbps/(0.5b/256ns)=1024,其它发送端的HBPTC为0,其中,0.5b/256ns为HBPTC的单位,256ns为一个令牌周期。
需要说明的是,关于接收端如何根据获取的状态信息进行带宽资源分配的过程,在实际应用中,可根据实际需求进行操作,而不限于本文所述的带宽分配方法。
带宽分配完毕后,接收端通过带宽分配(ALLOC)报文将带宽分配结果以组播形式通知到各个发送端,ALLOC报文中携带表1所示信息。ALLOC报文的流向参见图3所示。
端口号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
HBPTC |
640 |
640 |
1024 |
0 |
0 |
0 |
0 |
0 |
表 1
发送端收到来自接收端的ALLOC报文后,以自身端口号为索引,从ALLOC报文中读取与自身端口号相对应的HBPTC,然后根据读取的HBPTC控制本端的发送带宽,进行流量发送。并且,发送端在收到ALLOC报文后,还需要向接收端回复应答(ACK)报文,ACK报文流向如图4所示。如果接收端在限定时间内收到所有发送端返回的ACK报文,则此次带宽分配过程结束;如果接收端只收到部分发送端返回的ACK报文,接收端则启动重传机制,向没有回复ACK报文的发送端重传ALLOC报文,若重传次数超过预先设定的重传阈值(如3次)后,接收端仍未收齐所有发送端返回的ACK报文,则接收端默认发送端已回复ACK报文,此次带宽分配过程也宣告结束。
另外,当接收端的入口总带宽大于接收端的CPU接收能力时,即发送端发来的流量在接收端发生拥塞时,接收端可以以组播形式向所有发送端发送关闭(CLOSE)报文,告知所有发送端:出端口拥塞,没有资源可利用,需停止发送报文。图5示出了CLOSE报文流向示意图。发送端收到接收端发来的CLOSE报文后,停止向接收端发送报文。其中,出端口是否拥塞可以通过比较出口队列长度和预先设定的拥塞队列长度来判断,若出口队列长度大于拥塞队列长度,则判定出端口拥塞。另外,由于CLOSE报文从接收端发往发送端需要一定的传输时间,因此,设置拥塞队列长度时需要考虑容忍该段时间内各个发送端发送的报文数及其交换网缓存的报文数。
在接收端发出CLOSE报文、发送端停止报文发送后,出口队列的拥塞状况将逐步得到缓解。这里,可以预先设定一个恢复队列长度,当出口队列长度小于恢复队列长度时,接收端以组播形式向所有发送端发送打开(OPEN)报文,告知所有发送端:出端口拥塞状态解除,可以发送报文。图6示出了OPEN报文流向示意图。发送端收到OPEN报文后,恢复报文的发送。
本文中涉及到的控制报文包括:FCN报文、ALLOC报文、ACK报文、OPEN报文和CLOSE报文,下面举例对控制报文格式进行详细说明。比如,参见表2所示的控制报文格式,其中包括:1比特(bit)的控制/数据(C/D)报文指示位、1bit的FCN报文指示位、1bit的ALLOC报文指示位、1bit的ACK报文指示位、1bit的OPEN报文指示位、1bit的CLOSE报文指示位、2bit的原数据报文优先级(OCOS)、8bit的OPEN/CLOSE优先级(OCP)以及144bit的数据(DATA)。
bit |
1bit |
1bit |
1bit |
1bit |
1bit |
2bit |
8bit |
144bit |
C/D |
FCN |
ALLOC |
ACK |
OPEN |
CLOSE |
OCOS |
OCP |
DATA |
-- |
-- |
-- |
-- |
-- |
-- |
-- |
-- |
-- |
名称 |
位宽 |
描述 |
C/D |
1bit |
控制/数据报文指示:0表示数据报文,1表示控制报文,报文类型详见下面几个bit位指示。 |
FCN |
1bit |
FCN报文指示:1表示FCN报文,0表示非FCN报文。 |
ALLOC |
1bit |
ALLOC报文指示:1表示ALLOC报文,0表示非ALLOC报文。 |
ACK |
1bit |
ACK报文指示:1表示ACK报文,0表示非ACK报文。 |
OPEN |
1bit |
OPEN报文指示:1表示OPEN报文,0表示非OPEN报文。 |
CLOSE |
1bit |
CLOSE报文指示:1表示CLOSE报文,0表示非CLOSE报文。 |
OCOS |
2bit |
原COS值,数据报文捎带FCN处理时,需保留原数据报文的COS值。 |
OCP |
9bit |
OPEN/CLOSE优先级,0表示高优先级,1表示低优先级,8个bit分别对应8个端口。 |
DATA |
144bit |
报文内容:对于ALLOC报文,为HBPTC1~8,分别对应8个单板的令牌桶更新速率;对于其他控制报文,填充0;对于数据报文,为具体数据。 |
表2
其中,关于报文中各个字段的具体含义详见表2中的描述部分。如果控制报文为ALLOC报文,则只需将相应的ALLOC报文指示位置位即可,其它类型的控制报文同理。其中,OCP字段的位宽与入端口即发送端的数量有关,表2中的OCP字段为8bit,分别对应8个入端口。当发送端存在高优先级队列和低优先级队列两个队列时,OCP字段用以指示OPEN或CLOSE报文所针对的具体是哪个队列。比如,当控制报文为CLOSE报文且该报文中与入端口1相对应的OCP字段为1时,则表示入端口1的低优先级队列需要停止发送报文。
以上实施例对本发明提供的分布式流量控制方案作了详细阐述,下面从各个方面对该方案的可行性进行分析。
首先,在本发明所提供的技术方案中,即使控制报文在传输过程中丢失,也不会造成恶劣影响。比如,对于FCN报文,如果发送端第一次发送的FCN报文丢失,则此次拥塞状态接收端无法知晓,但队列拥塞还会进一步恶化到中度拥塞程度,会重新发送FCN报文,并且当队列拥塞继续恶化到极度拥塞程度时,发送端还会定时发送FCN报文;如果ALLOC报文丢失,则宣告此次带宽分配控制失效,但触发控制过程的因素仍然存在(如队列拥塞、流量变化),在下一个控制周期会重新触发新的ALLOC控制过程;如果ACK报文丢失,会重传ALLOC报文,且重传超过一定的次数时,则默认发送端已回复ACK报文。
其次,控制报文由控制平面产生,不需要参与数据报文排队,减少了控制报文的发送延迟;并且,控制报文优先级高于普通数据报文,在交换网内部能够得到优先处理,在非拥塞情况下的延迟即为交换网固定延迟+传输延迟,在拥塞情况下,也能保证优先发送,使延迟达到最小。
最后,由于控制报文的长度相对于普通数据报文来说较短,因此控制报文所占用的带宽也较少;并且,如果在发送数据报文时捎带发送控制报文,则控制报文所占带宽为0。
相应地,本发明还提供了一种分布式流量控制系统,其结构参见图7所示,包括:多个发送端和一个接收端,其中,
接收端,用于获取各个发送端的状态信息,根据各个发送端的状态信息分别为各个发送端分配带宽资源,并将带宽分配结果发送给各个发送端;
发送端,用于根据接收端为自身分配的带宽资源进行流量发送。
其中,所述状态信息包括拥塞状态,当发送端拥塞时,发送端会向接收端发送拥塞通知报文,接收端根据收到的拥塞通知报文获取发送端的拥塞状态,并根据获取的发送端的拥塞状态以及从各个发送端接收到的流量分别为各个发送端分配带宽资源。
其中,接收端将带宽分配结果携带在带宽分配报文中以组播形式发送给各个发送端;发送端在收到带宽分配报文后,向接收端返回应答报文。对于没有返回应答报文的发送端,接收端进行带宽分配报文重传。
当接收端的入口总带宽大于接收端的CPU接收能力时,接收端进一步向各个发送端发送关闭报文,通知发送端出端口拥塞;并且,在出端口拥塞解除后,向各个发送端发送打开报文,通知发送端出端口拥塞解除。发送端收到关闭报文后,停止向接收端发送报文;收到打开报文后,恢复向接收端发送报文。
另外,本发明还提供了一种流控装置,其结构参见图8所示,包括:带宽资源分配单元和分配结果发送单元,其中,
带宽资源分配单元,用于获取向该流控装置发送流量的各个发送端的状态信息,根据各个发送端的状态信息分别为各个发送端分配带宽资源,并将带宽分配结果发送给分配结果发送单元;
分配结果发送单元,用于将收到的带宽分配结果发送给所述各个发送端。
图8所示的流控装置还可进一步包括:拥塞调整单元,用于在该流控装置入口总带宽大于CPU接收能力时,向所述各个发送端发送关闭报文,通知发送端出端口拥塞,需停止向该网络设备发送报文;并且,在出端口拥塞解除后,向所述各个发送端发送打开报文,通知发送端出端口拥塞解除,可以向该网络设备发送报文。
以上实施例针对多个发送端对应一个接收端的应用场景作了详细阐述,需要说明的是,本发明同样适用于多个发送端对应多个接收端的应用场景,对于多对多的情况,可以看作是多个多对一情况的线性累加,其原理与多对一的情况一致,这里不再赘述。
另外,还需要说明的是,本发明所提供的技术方案不仅适用于分布式设备(如分布式路由器)内部的各个单板之间的多对一或多对多板间通信场景,同样也适用于多个独立网络设备之间的多对一或多对多通信场景。利用本发明所提供的技术方案,发送端和接收端可以直接进行精确的流量控制,无需发送端与接收端之间的中间交换部件进行流控处理,所述中间交换部件只需执行普通的交换功能即可。
以上所述对本发明的目的、技术方案和有益效果进行了进一步的详细说明,所应理解的是,以上所述并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。