本发明主要涉及到SDN网络技术领域,特指一种自适应低代价SDN网络链路利用率测量方法。
背景技术:
网络链路利用率的测量是网络管理的重要内容,一方面其有助于及时发现链路瓶颈,为路由优化提供数据支撑,不仅可确保应用服务的性能质量,而且可实现运行商运营成本的降低;另一方面其有助于网络链路容量的合理规划,避免出现资源大量浪费或链路瓶颈状况频发等问题。因此,网络链路利用率的及时准确测量对提升网络管理效率具有重要意义。
对于SDN网络(如数据中心网络、大规模园区网等)而言,由于采用的是集中式的管理方式,控制器合理的管理决策往往依赖于对网络实际运行状态(包括网络链路利用率视图)细粒度地精准掌握,而且作为SDN的典型应用场景,云数据中心、大规模园区网等环境呈现出更加的复杂的变化:应用业务种类繁多、网络流量高度动态变化,这些都为网络链路利用率的准确实时测量带来了巨大挑战。在SDN网络环境下,如何准确实时地获取网络链路利用率视图、又能有效降低测量成本显得十分重要。
当前网络的链路利用率评估与计算方法主要有以下几种:
(1)基于SNMP协议的计算方法;
利用MIB信息由控制器主动向目标交换机请求端口吞吐量,包括值法、中间值计算法和最大流量计算方法等。对于传统IP网络而言,该方法通过周期性地查询可以较理想地实现对网络链路利用情况的真实反映,但是对于SDN网络,该方法难以实现测量粒度和测量成本间的平衡。
(2)基于变长报文VPS的计算方法;
探测主机向网络中发送大小不同的数据包,所经路径上的各个节点向源节点返回报文,通过分析探测数据包的发送速率和单向时延变化规律来估计带宽。对于SDN网络而言,通常会承载大量的上层应用,导致网络资源十分有限,而该方法在估算过程中测量开销过大。
(3)基于报文对/报文队列PPTD的计算方法;
当紧邻的两个数据包经过链路时,两者增大的时间间隔近似为第2个包的大小除以链路的带宽。该方法对网络不会产生过多的负载,但是其准确度完全依赖于整个路径上对此相邻数据包时间间隔的准确测量,这就存在两个不足之处:一是链路利用率的测量不够及时,缺乏灵敏度;二是要求背景干扰少,而SDN网络流量是高度动态变化的,环境不稳定。
(4)基于断层扫描的计算方法;
根据一定的测量策略获取端到端的测量数据,并通过建立线性数学模型,实现对网络内部链路利用率的推测。该方法与内部网络使用的网络协议无关,在测量过程也不需要内部网络的任何协作,很大程度上减小了测量所花费的开销,但由于其精确度依赖于所建立线性模型的准确度,所以通常测量误差较大。
综上所述,上述现有技术中的网络链路利用率评估计算方法存在以下不足:
1)依赖主动探测报文,会给网络带来较大的测量负载;
2)测量粒度大,不能满足诸如云数据中心、大规模园区网等的性能管理需求;
3)测量误差大,由于数据流高度动态变化,基于报文长度变化、报文间隔的方法具有局限性,而断层扫描基于统计学方法本身就存在误差。
技术实现要素:
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种原理简单、适用范围广、测量精度高的自适应低代价SDN网络链路利用率测量方法。
为解决上述技术问题,本发明采用以下技术方案:
一种自适应低代价SDN网络链路利用率测量方法,其步骤为:
S1:定义SDN网络链路利用率测量相关的参数;
S2:根据测量目标,依次初始化参数;假设Flow-Statistics的查询周期点为t;
S3:在t周期点的2μ时间窗口内侦听FlowRemoved报文;如果侦听到FlowRemoved报文,则利用FlowRemoved报文基于被动测量的方式计算链路利用率I_T_LinkUtil,跳转至步骤S4;如果未侦听到FlowRemoved报文,则利用FlowStatistics-Request报文基于主动测量的方式计算链路利用率I_T_LinkUtil,跳转至步骤S5;
S4:基于被动测量方式收集数据流的统计信息Flow-Statistics,侦听FlowRemoved报文;假设在2μ时间窗口内首次侦听到FlowRemoved报文的时刻为ζ,记录ζ时刻活跃的所有数据流I_T_ActiveFlow,并将其数量记录到I_T_ActiveNum;由Flow-Statistics提取及规则化模块依次侦听各活跃数据流所对应的FlowRemoved报文;
S5:基于主动测量方式收集数据流的统计信息Flow-Statistics,向交换机发送FlowStatistics-Request报文;记录周期点t+μ时刻活跃的所有数据流I_T_ActiveFlow,并将其数量记录到I_T_ActiveNum;向交换机发送FlowStatistics-Request报文,交换机响应并返回FlowStatistics-Response报文,并由Flow-Statistics提取及规则化模块侦听此报文;
S6:从FlowRemoved报文或FlowStatistics-Response报文中提取数据流统计信息FlowStatistics,记录到I_T_F_Statistics[];
S7:依次计算I_T_F_Statistics[]中各数据流对链路利用率的贡献率,记录到I_T_F_LinkUtil[],并判断能否计算最终的链路利用率I_T_LinkUtil;
S8:将I_T_F_LinkUtil[]各成员变量相加,计算得到interface接口在周期点对应的链路利用率I_T_LinkUtil,并记录到该interface接口对应的链路利用率集合I_LinkUtil[];
S9:计算本次与前一次链路利用率的变化量ΔLinkUtil,并依据I_T_ActiveNum和ΔLinkUtil调整Flow-Statistics的查询周期T。
作为本发明方法的进一步改进:所述步骤S1包括:
1.1数据流信息描述如下:I_T_ActiveFlow={interface,time,AF_list}为interface接口time时刻的活跃数据流集合,I_T_F_Statistics[]={interface,time,flow,statistics}为interface接口time时刻数据流flow的统计信息,I_T_ActiveNum={interface,time,num}为interface接口time时刻活跃数据流的数目;
1.2数据流统计信息Flow-Statistics收集时的各参数描述如下,T为Flow-Statistics的查询周期;(t-μ,t+μ)为周期点t侦听FlowRemoved报文的时间窗口;ζ为2μ时间窗口内侦听到FlowRemoved报文的时刻;W为链路利用率计算的最长等待时间;
1.3数据流统计信息Flow-Statistics查询周期调整时的各参数描述如下,α为增大Flow-Statistics收集周期的乘参数;β为减小Flow-Statistics收集周期的除参数;NFmax为设定的链路所能承载数据流数目的门限值参数;Δmax为链路利用率变化的上限值参数;Δmin为链路利用率变化的下限值参数;
1.4网络链路利用率参数描述如下,I_LinkUtil[]为interface接口对应的链路利用率集合;I_T_LinkUtil为interface接口time时刻对应的链路利用率;I_T_F_LinkUtil[]为各数据流对链路利用率I_T_LinkUtil的贡献率集合;ΔLinkUtil为链路利用率的变化。
作为本发明方法的进一步改进:所述步骤S4的流程为:
S4.1:在周期点的2μ窗口(t-μ,t+μ)内,侦听到FlowRemoved报文,假设具体时刻为ζ;
S4.2:查看ζ时刻目标链路活跃的数据流,并初始化I_T_ActiveFlow和I_T_ActiveNum;
S4.3:依次侦听所有活跃数据流对应的FlowRemoved报文,并从中解析出数据流的统计信息Flow-Statistics,记录至I_T_F_Statistics[]。
作为本发明方法的进一步改进:所述步骤S5的流程为:
S5.1:在周期点的2μ窗口(t-μ,t+μ)内,Flow-Statistics查询模块未侦听到FlowRemoved报文;
S5.2:查看t+μ时刻目标链路活跃的数据流,并初始化I_T_ActiveFlow和I_T_ActiveNum;
S5.3:向目标交换机发送FlowStatistics-Request报文;
S5.4:目标交换机响应FlowStatistics-Request,向控制器发送FlowStatistics-Response报文;
S5.5:侦听FlowStatistics-Response报文,并从中解析出数据流的统计信息Flow-Statistics,记录至I_T_F_Statistics[]。
作为本发明方法的进一步改进:所述步骤S9的流程为:
S9.1:确定当前链路活跃的数据流数目I_T_ActiveNum以及邻近两次链路利用率的变化量ΔLinkUtil;
S9.2:判断I_T_ActiveNum是否大于预设的链路所能承载数据流数目的门限值NFmax,如果大于,则缩小Flow-Statistics查询周期T=T/β;如果不大于,则跳转至S9.3;
S9.3:判断ΔLinkUtil是否大于预设的链路利用率变化的上限值Δmax,如果大于,则缩小Flow-Statistics查询周期T=T/β;如果不大于,则跳转至S9.4;
S9.4:判断ΔLinkUtil是否小于预设的链路利用率变化的下限值Δmin,如果小于,则增大Flow-Statistics查询周期T=T*α;如果不小于,则Flow-Statistics查询周期T保持不变;
S9.5:更新Flow-Statistics查询周期T。
作为本发明方法的进一步改进:所述步骤S7的流程为:
S7.1判断链路利用率的计算时限是否已超出;对于被动测量方式,即判断此刻是否已超出ζ+W;对于主动测量方式,即判断此刻是否已超出t+μ+W;如果超出,跳转至步骤S7.2;如果未超出,跳转至步骤S7.3;
S7.2判断所有活跃数据流的贡献率是否都已经计算,即判断当前I_T_F_LinkUtil[]的成员数量是否等于I_T_ActiveNum;如果相等,跳转至步骤S8;如果不相等,则由Flow-Statistics提取及规则化模块继续侦听后续的FlowRemoved报文或FlowStatistics-Response报文;
S7.3更新周期点t为当前时刻,复原各变量,跳转至步骤S5。
本发明进一步提供一种自适应低代价SDN网络链路利用率测量系统,包括:
Flow-Statistics查询模块,用来负责在每个周期点从交换机收集数据流统计信息Flow-Statistics,或者利用FlowRemoved报文基于被动测量的方式收集,或者利用FlowStatistics-Request报文基于主动测量的方式收集;具体采取哪种方式取决于该模块在(t-μ,t+μ)时间窗口内是否侦听到FlowRemoved报文,如果侦听到则采用被动测量方式,反之则采用主动测量方式;
Flow-Statistics提取及规则化模块,用来负责侦听来自交换机的FlowRemoved报文或FlowStatistics-Response报文,并从其中解析出数据流的统计信息Flow-Statistics,记录至I_T_F_Statistics[];
数据流对链路贡献率计算模块,用来根据I_T_F_Statistics[]的记录结果依次计算各数据流对链路利用率的贡献情况,并记录至I_T_F_LinkUtil[];
链路利用率计算模块,用来根据I_T_F_LinkUtil[]的记录结果计算最终的链路利用率,能否得到最终的链路利用率依赖于所有活跃数据流I_T_ActiveFlow的贡献率是否都已经计算,即I_T_F_LinkUtil[]成员数量是否等于I_T_ActiveNum,如果不相等,则由Flow-Statistics提取及规则化模块继续侦听FlowRemoved或FlowStatistics-Response报文,但是如果链路利用率计算时间超过了预设上限,则归零原来的Flow-Statistics查询,采取主动测量方式重新查询;
Flow-Statistics分析模块,用来负责计算邻近两次链路利用率的变化量ΔLinkUtil,以作为调整Flow-Statistics查询周期的依据之一;
Flow-Statistics查询周期调整模块,根据链路当前活跃流数量以及邻近两次链路利用率的变化量来调整更新Flow-Statistics查询周期。
作为本发明系统的进一步改进:所述Flow-Statistics查询模块还用来初始化I_T_ActiveFlow和I_T_ActiveNum。
作为本发明系统的进一步改进:所述Flow-Statistics分析模块用来负责分析Flow-Statistics及链路利用率信息,向上层管理应用提供有效的链路利用率视图。
与现有技术相比,本发明的优点在于:本发明的自适应低代价SDN网络链路利用率测量方法及系统,是一种基于主动和被动方式的SDN网络链路利用率测量方法,用以解决SDN网络(特别是云数据中心网络、大规模园区网等高性能网络)网络链路利用率计算过多依赖于主动探测报文、测量粒度不够精细、测量方案针对性不够导致测量误差偏大等问题;本发明具有原理简单、适用范围广、测量精度高等优点。
附图说明
图1是本发明方法的流程示意图。
图2是本发明在具体应用实例中Flow-Statistics被动查询的流程示意图。
图3是本发明在具体应用实例中Flow-Statistics主动查询的流程示意图。
图4是本发明在具体应用实例中Flow-Statistics查询周期调整的流程示意图。
具体实施方式
以下将结合说明书附图和具体实施例对本发明做进一步详细说明。
如图1所示,本发明的自适应低代价SDN网络链路利用率测量方法,是一种基于主动和被动方式的SDN网络链路利用率测量方法,它的步骤为:
S1:定义SDN网络链路利用率测量相关的参数。
1.1数据流信息描述如下:I_T_ActiveFlow={interface,time,AF_list}为interface接口time时刻的活跃数据流集合,I_T_F_Statistics[]={interface,time,flow,statistics}为interface接口time时刻数据流flow的统计信息,I_T_ActiveNum={interface,time,num}为interface接口time时刻活跃数据流的数目。
1.2数据流统计信息Flow-Statistics收集时的各参数描述如下,T为Flow-Statistics的查询周期;(t-μ,t+μ)为周期点t侦听FlowRemoved报文的时间窗口;ζ为2μ时间窗口内侦听到FlowRemoved报文的时刻;W为链路利用率计算的最长等待时间。
1.3数据流统计信息Flow-Statistics查询周期调整时的各参数描述如下,α为增大Flow-Statistics收集周期的乘参数;β为减小Flow-Statistics收集周期的除参数;NFmax为设定的链路所能承载数据流数目的门限值参数;Δmax为链路利用率变化的上限值参数;Δmin为链路利用率变化的下限值参数。
1.4网络链路利用率参数描述如下,I_LinkUtil[]为interface接口对应的链路利用率集合;I_T_LinkUtil为interface接口time时刻对应的链路利用率;I_T_F_LinkUtil[]为各数据流对链路利用率I_T_LinkUtil的贡献率集合;ΔLinkUtil为链路利用率的变化。
S2:根据测量目标,依次初始化I_T_ActiveFlow、I_T_FlowStatistics、T、μ、α、β、Δmax、Δmin、NFmax参数;假设Flow-Statistics的查询周期点为t。
S3:Flow-statistics查询模块在t周期点的2μ时间窗口内侦听FlowRemoved报文。如果侦听到FlowRemoved报文,则利用FlowRemoved报文基于被动测量的方式计算链路利用率I_T_LinkUtil,跳转至步骤S4;如果未侦听到FlowRemoved报文,则利用FlowStatistics-Request报文基于主动测量的方式计算链路利用率I_T_LinkUtil,跳转至步骤S5。
S4:基于被动测量方式(侦听FlowRemoved报文)收集数据流的统计信息Flow-Statistics。假设在2μ时间窗口内首次侦听到FlowRemoved报文的时刻为ζ,记录ζ时刻活跃的所有数据流I_T_ActiveFlow,并将其数量记录到I_T_ActiveNum;由Flow-Statistics提取及规则化模块依次侦听各活跃数据流所对应的FlowRemoved报文。
S5:基于主动测量方式(控制器向交换机发送FlowStatistics-Request报文)收集数据流的统计信息Flow-Statistics。记录周期点t+μ时刻活跃的所有数据流I_T_ActiveFlow,并将其数量记录到I_T_ActiveNum。Flow-statistics查询模块向交换机发送FlowStatistics-Request报文,交换机响应并返回FlowStatistics-Response报文,并由Flow-Statistics提取及规则化模块侦听此报文。为了降低获取Flow-Statistics对网络造成的巨大负载,交换机将多条数据流的FlowStatistics-Response进行合并,而后返回给控制器。
S6:Flow-Statistics提取及规则化模块从FlowRemoved报文或FlowStatistics-Response报文中提取数据流统计信息FlowStatistics,并根据统一格式进行规则化,而后记录到I_T_F_Statistics[]。
S7:数据流对链路贡献率计算模块依次计算I_T_F_Statistics[]中各数据流对链路利用率的贡献率,记录到I_T_F_LinkUtil[],并判断能否计算最终的链路利用率I_T_LinkUtil。
S8:将I_T_F_LinkUtil[]各成员变量相加,计算得到interface接口在周期点对应的链路利用率I_T_LinkUtil,并记录到该interface接口对应的链路利用率集合I_LinkUtil[]。
S9:计算本次与前一次链路利用率的变化量ΔLinkUtil,并依据I_T_ActiveNum和ΔLinkUtil调整Flow-Statistics的查询周期T。步骤S9的详细流程为:
S9.1判断I_T_ActiveNum是否大于预设的链路所能承载数据流数目的门限值NFmax。如果大于,则缩小Flow-Statistics查询周期T=T/β;如果不大于,则跳转至步骤S9.2。
S9.2判断ΔLinkUtil是否大于预设的链路利用率变化的上限值Δmax。如果大于,则缩小Flow-Statistics查询周期T=T/β;如果不大于,则跳转至步骤S9.3。
S9.3判断ΔLinkUtil是否小于预设的链路利用率变化的下限值Δmin。如果小于,则增大Flow-Statistics查询周期T=T*α;如果不小于,则Flow-Statistics查询周期T保持不变。
如图2所示,是Flow-Statistics被动查询流程图,即在具体应用实例中,本发明的上述步骤S4的详细流程为:
S4.1:在周期点的2μ窗口(t-μ,t+μ)内,Flow-Statistics查询模块侦听到FlowRemoved报文,假设具体时刻为ζ;
S4.2:查看ζ时刻目标链路活跃的数据流,并初始化I_T_ActiveFlow和I_T_ActiveNum;
S4.3:由Flow-Statistics提取及规则化模块依次侦听所有活跃数据流对应的FlowRemoved报文,并从中解析出数据流的统计信息Flow-Statistics,记录至I_T_F_Statistics[]。
如图3所示,是Flow-Statistics主动查询流程图,即在具体应用实例中,本发明的上述步骤S5的详细流程为:
S5.1:在周期点的2μ窗口(t-μ,t+μ)内,Flow-Statistics查询模块未侦听到FlowRemoved报文;
S5.2:查看t+μ时刻目标链路活跃的数据流,并初始化I_T_ActiveFlow和I_T_ActiveNum;
S5.3:由Flow-Statistics查询模块向目标交换机发送FlowStatistics-Request报文;
S5.4:目标交换机响应FlowStatistics-Request,向控制器发送FlowStatistics-Response报文,为了降低带给网络的负载,可将多个FlowStatistics-Response报文合并后再发送给控制器;
S5.5:由Flow-Statistics提取及规则化模块侦听FlowStatistics-Response报文,并从中解析出数据流的统计信息Flow-Statistics,记录至I_T_F_Statistics[]。
如图4所示,是本发明Flow-Statistics查询周期调整流程图,即在具体应用实例中,本发明的上述步骤S9的详细流程为:
S9.1:由Flow-Statistics分析模块确定当前链路活跃的数据流数目I_T_ActiveNum以及邻近两次链路利用率的变化量ΔLinkUtil;
S9.2:判断I_T_ActiveNum是否大于预设的链路所能承载数据流数目的门限值NFmax,如果大于,则缩小Flow-Statistics查询周期T=T/β;如果不大于,则跳转至S9.3;
S9.3:判断ΔLinkUtil是否大于预设的链路利用率变化的上限值Δmax,如果大于,则缩小Flow-Statistics查询周期T=T/β;如果不大于,则跳转至S9.4;
S9.4:判断ΔLinkUtil是否小于预设的链路利用率变化的下限值Δmin,如果小于,则增大Flow-Statistics查询周期T=T*α;如果不小于,则Flow-Statistics查询周期T保持不变。
S9.5:由Flow-Statistics查询周期调整模块更新Flow-Statistics查询周期T。
在具体应用实例中,本发明的上述步骤S7的详细流程为:
S7.1判断链路利用率的计算时限是否已超出。对于被动测量方式,即判断此刻是否已超出ζ+W;对于主动测量方式,即判断此刻是否已超出t+μ+W。如果超出,跳转至步骤S7.2;如果未超出,跳转至步骤S7.3。
S7.2判断所有活跃数据流的贡献率是否都已经计算,即判断当前I_T_F_LinkUtil[]的成员数量是否等于I_T_ActiveNum。如果相等,跳转至本发明的步骤S8;如果不相等,则由Flow-Statistics提取及规则化模块继续侦听后续的FlowRemoved报文或FlowStatistics-Response报文。
S7.3更新周期点t为当前时刻,复原各变量,跳转至本发明的步骤S5。
结合图1,本发明的自适应低代价SDN网络链路利用率测量系统,以模块的方式来完成对各个步骤的处理,其主要包括Flow-Statistics查询模块、Flow-Statistics提取及规则化模块、数据流对链路贡献率计算模块、链路利用率计算模块、Flow-Statistics分析模块、Flow-Statistics查询周期调整模块。其中:
Flow-Statistics查询模块负责在每个周期点从交换机收集数据流统计信息Flow-Statistics,或者利用FlowRemoved报文基于被动测量的方式收集,或者利用FlowStatistics-Request报文基于主动测量的方式收集,具体采取哪种方式取决于该模块在(t-μ,t+μ)时间窗口内是否侦听到FlowRemoved报文,如果侦听到则采用被动测量方式,反之则采用主动测量方式,该模块同时会初始化I_T_ActiveFlow和I_T_ActiveNum。
Flow-Statistics提取及规则化模块负责侦听来自交换机的FlowRemoved报文或FlowStatistics-Response报文,并从其中解析出数据流的统计信息Flow-Statistics,记录至I_T_F_Statistics[]。数据流对链路贡献率计算模块根据I_T_F_Statistics[]的记录结果依次计算各数据流对链路利用率的贡献情况,并记录至I_T_F_LinkUtil[]。
链路利用率计算模块根据I_T_F_LinkUtil[]的记录结果计算最终的链路利用率,能否得到最终的链路利用率依赖于所有活跃数据流I_T_ActiveFlow的贡献率是否都已经计算,即I_T_F_LinkUtil[]成员数量是否等于I_T_ActiveNum,如果不相等,则由Flow-Statistics提取及规则化模块继续侦听FlowRemoved或FlowStatistics-Response报文,但是如果链路利用率计算时间超过了预设上限,则归零原来的Flow-Statistics查询,采取主动测量方式重新查询。
Flow-Statistics分析模块负责计算邻近两次链路利用率的变化量ΔLinkUtil,以作为调整Flow-Statistics查询周期的依据之一,另外也负责分析Flow-Statistics及链路利用率信息,以便向上层管理应用提供有效的链路利用率视图。
Flow-Statistics查询周期调整模块根据链路当前活跃流数量以及邻近两次链路利用率的变化量来调整更新Flow-Statistics查询周期。
以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。