一种用于软件定义网络的可编程队列配置方法及装置转让专利

申请号 : CN201610642549.X

文献号 : CN106254271A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄韬潘恬毛健炜杨帆刘江张娇谢人超刘韵洁

申请人 : 北京邮电大学

摘要 :

本发明实施例公开了一种用于软件定义网络的可编程队列配置方法及装置,应用于控制器,方法包括:接收外部程序通过北向接口传递的针对网络设备的各预定端口的队列配置参数,其中,各预定端口的队列配置参数包括端口标识参数,以及对应的队列调度规则参数;对各预定端口的队列配置参数进行解析,生成各预定端口对应的队列配置指令;通过南向接口,将所述各预定端口对应的队列配置指令发送给所述网络设备,以使所述网络设备根据所述队列配置指令进行队列配置。应用本发明实施例,网络设备根据各预定端口对应的队列配置指令直接对队列进行配置,可实现细粒度的配置队列。

权利要求 :

1.一种用于软件定义网络的可编程队列配置方法,应用于控制器,其特征在于,包括:接收外部程序通过北向接口传递的针对网络设备的各预定端口的队列配置参数,其中,所述各预定端口的队列配置参数包括端口标识参数,以及对应的队列调度规则参数;

对所述各预定端口的队列配置参数进行解析,生成各预定端口对应的队列配置指令;

通过南向接口,将所述各预定端口对应的队列配置指令发送给所述网络设备,以使所述网络设备根据所述队列配置指令进行队列配置。

2.根据权利要求1所述的方法,其特征在于,所述通过南向接口,将所述各预定端口对应的队列配置指令发送给所述网络设备,以使所述网络设备根据所述队列配置指令进行队列配置包括:通过南向接口,根据预设的南向接口协议,对所述各预定端口对应的队列配置指令进行封装,并将封装后的队列配置指令通过对应的各预定端口发送给所述网络设备,以使所述网络设备根据所述队列配置指令进行队列配置。

3.根据权利要求2所述的方法,其特征在于,所述封装后的队列配置指令包括四字节的协议头和业务数据。

4.根据权利要求1-3任一项所述的方法,其特征在于,所述控制器本地保存有各网络设备的标识与其状态信息和端口标识的对应关系;所述各预定端口的队列配置参数中包括的端口标识参数是所述外部程序根据所述控制器发送的所述网络设备的端口标识确定的,所述网络设备的端口标识是所述控制器根据所述网络设备的状态信息确定与所述网络设备连接正常时发送的;所述队列调度规则参数是所述外部程序接收用户输入参数获得的。

5.根据权利要求4所述的方法,其特征在于,所述通过南向接口,将所述各预定端口对应的队列配置指令发送给所述网络设备之前,所述方法还包括:根据所述网络设备的标识,以及本地保存的各网络设备的标识与其状态信息的对应关系,判断自身与所述网络设备是否连接正常;

如果是,通过南向接口,将所述各预定端口对应的队列配置指令发送给所述网络设备。

6.一种用于软件定义网络的可编程队列配置装置,应用于控制器,其特征在于,包括:接收模块,用于接收外部程序通过北向接口传递的针对网络设备的各预定端口的队列配置参数,其中,所述各预定端口的队列配置参数包括端口标识参数,以及对应的队列调度规则参数;

解析模块,用于对所述各预定端口的队列配置参数进行解析,生成各预定端口对应的队列配置指令;

发送模块,用于通过南向接口,将所述各预定端口对应的队列配置指令发送给所述网络设备,以使所述网络设备根据所述队列配置指令进行队列配置。

7.根据权利要求6所述的装置,其特征在于,所述发送模块,具体用于:

通过南向接口,根据预设的南向接口协议,对所述各预定端口对应的队列配置指令进行封装,并将封装后的队列配置指令通过对应的各预定端口发送给所述网络设备,以使所述网络设备根据所述队列配置指令进行队列配置。

8.根据权利要求7所述的装置,其特征在于,所述封装后的队列配置指令包括四字节的协议头和业务数据。

9.根据权利要求6-8任一项所述的装置,其特征在于,所述控制器本地保存有各网络设备的标识与其状态信息和端口标识的对应关系;所述各预定端口的队列配置参数中包括的端口标识参数是所述外部程序根据所述控制器发送的所述网络设备的端口标识确定的,所述网络设备的端口标识是所述控制器根据所述网络设备的状态信息确定与所述网络设备连接正常时发送的;所述队列调度规则参数是所述外部程序接收用户输入参数获得的。

10.根据权利要求9所述的装置,其特征在于,所述装置还包括:

判断模块,用于根据所述网络设备的标识,以及本地保存的各网络设备的标识与其状态信息的对应关系,判断自身与所述网络设备是否连接正常;如果是,触发所述发送模块。

说明书 :

一种用于软件定义网络的可编程队列配置方法及装置

技术领域

[0001] 本发明涉互联网技术领域,特别涉及一种用于软件定义网络的可编程队列配置方法及装置。

背景技术

[0002] 互联网应用种类飞速增加,个性化需求不断涌现,亟待网络提供细粒度的队列配置方法。现有的队列配置基于软件定义网络(Software Defined Network,SDN)的思想,将流量控制(Traffic Control,TC)命令集中起来在开源控制器(Open Network Operating System,ONOS)上进行编程,通过ONOS交互到开源软件定义网络交换机(Open vSwitch,OVS),然后OVS执行TC命令并触发内核进行队列配置。
[0003] 现有技术中,ONOS目前只为队列调度提供了针对分层令牌桶(Hierarchical Token Bucket,HTB)这一种队列调度策略设计的简单配置功能,能够支持OpenFlow、OF-CONFIG、NETCONF和OVSDB等南向协议,但这些协议自身在队列配置方面,仍很不完善。如,OpenFlow只负责对数据流进行指引和操作,它没有对网络设备配置的能力。它引导流量时所需的队列,需要由其伴侣协议OF-CONFIG事先代为配置。然而OF-CONFIG协议中仅仅允许指定速率、突发等常见的队列参数,无法使用到多种队列调度策略,配置粒度粗。对于NETCONF和OVSDB而言,都是通过抽象的协议语言对底层网络设备进行远程过程调用和数据库操作,没有明确的配置队列的能力指标,配置能力取决于具体网络设备和控制器的支持能力,其自身仅作为一种通信协议而存在。可见,现有技术中ONOS支持的南向协议无法支持细粒度的队列配置。
[0004] 另外,OVS自身没有实现端口队列配置的功能,如数据包分类、端口缓存、缓存调度等。在控制平面通过OF-CONFIG等南向协议提出了队列配置需求之后,OVS首先将配置写入自身的数据库,然后另一模块会根据数据库中的信息,调用TC的编程接口去配置好端口的队列资源。但是这个端口队列配置能力只解决了配置能力的有无问题,而队列配置能力是粗粒度的,难以应对大规模的网络环境和未来更复杂的业务场景。

发明内容

[0005] 本发明实施例公开了一种用于软件定义网络的可编程队列配置方法及装置,用于实现细粒度的队列配置。
[0006] 为达到上述目的,本发明实施例公开了一种用于软件定义网络的可编程队列配置方法,应用于控制器,其特征在于,包括:
[0007] 接收外部程序通过北向接口传递的针对网络设备的各预定端口的队列配置参数,其中,所述各预定端口的队列配置参数包括端口标识参数,以及对应的队列调度规则参数;
[0008] 对所述各预定端口的队列配置参数进行解析,生成各预定端口对应的队列配置指令;
[0009] 通过南向接口,将所述各预定端口对应的队列配置指令发送给所述网络设备,以使所述网络设备根据所述队列配置指令进行队列配置。
[0010] 较佳地,所述通过南向接口,将所述各预定端口对应的队列配置指令发送给所述网络设备,以使所述网络设备根据所述队列配置指令进行队列配置包括:
[0011] 通过南向接口,根据预设的南向接口协议,对所述各预定端口对应的队列配置指令进行封装,并将封装后的队列配置指令通过对应的各预定端口发送给所述网络设备,以使所述网络设备根据所述队列配置指令进行队列配置。
[0012] 较佳地,所述封装后的队列配置指令包括四字节的协议头和业务数据。
[0013] 较佳地,所述控制器本地保存有各网络设备的标识与其状态信息和端口标识的对应关系;所述各预定端口的队列配置参数中包括的端口标识参数是所述外部程序根据所述控制器发送的所述网络设备的端口标识确定的,所述网络设备的端口标识是所述控制器根据所述网络设备的状态信息确定与所述网络设备连接正常时发送的;所述队列调度规则参数是所述外部程序接收用户输入参数获得的。
[0014] 较佳地,所述通过南向接口,将所述各预定端口对应的队列配置指令发送给所述网络设备之前,所述方法还包括:
[0015] 根据所述网络设备的标识,以及本地保存的各网络设备的标识与其状态信息的对应关系,判断自身与所述网络设备是否连接正常;
[0016] 如果是,通过南向接口,将所述各预定端口对应的队列配置指令发送给所述网络设备。
[0017] 为达到上述目的,本发明实施例还一种用于软件定义网络的可编程队列配置装置,应用于控制器,其特征在于,包括:
[0018] 接收模块,用于接收外部程序通过北向接口传递的针对网络设备的各预定端口的队列配置参数,其中,所述各预定端口的队列配置参数包括端口标识参数,以及对应的队列调度规则参数;
[0019] 解析模块,用于对所述各预定端口的队列配置参数进行解析,生成各预定端口对应的队列配置指令;
[0020] 发送模块,用于通过南向接口,将所述各预定端口对应的队列配置指令发送给所述网络设备,以使所述网络设备根据所述队列配置指令进行队列配置。
[0021] 较佳地,所述发送模块,具体用于:
[0022] 通过南向接口,根据预设的南向接口协议,对所述各预定端口对应的队列配置指令进行封装,并将封装后的队列配置指令通过对应的各预定端口发送给所述网络设备,以使所述网络设备根据所述队列配置指令进行队列配置。
[0023] 较佳地,所述封装后的队列配置指令包括四字节的协议头和业务数据。
[0024] 较佳地,所述控制器本地保存有各网络设备的标识与其状态信息和端口标识的对应关系;所述各预定端口的队列配置参数中包括的端口标识参数是所述外部程序根据所述控制器发送的所述网络设备的端口标识确定的,所述网络设备的端口标识是所述控制器根据所述网络设备的状态信息确定与所述网络设备连接正常时发送的;所述队列调度规则参数是所述外部程序接收用户输入参数获得的。
[0025] 较佳地,所述装置还包括:
[0026] 判断模块,用于根据所述网络设备的标识,以及本地保存的各网络设备的标识与其状态信息的对应关系,判断自身与所述网络设备是否连接正常;如果是,触发所述发送模块。
[0027] 由上述技术方案可知,本发明实施例公开了一种用于软件定义网络的可编程队列配置方法及装置,应用于控制器,方法包括:接收外部程序通过北向接口传递的针对网络设备的各预定端口的队列配置参数,其中,所述各预定端口的队列配置参数包括端口标识参数,以及对应的队列调度规则参数;对所述各预定端口的队列配置参数进行解析,生成各预定端口对应的队列配置指令;通过南向接口,将所述各预定端口对应的队列配置指令发送给所述网络设备,以使所述网络设备根据所述队列配置指令进行队列配置。
[0028] 应用本发明实施例,相比于现有技术,网络设备可以根据各预定端口对应的队列配置指令直接对队列进行配置,而且各预定端口对应的队列配置指令在生成的过程中,可控制选择队列调度规则参数,由此实现了细粒度配置队列的目的。并且通过提供的北向接口,使队列配置能够被可编程,将队列配置的可编程能力对外开放。
[0029] 当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。

附图说明

[0030] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0031] 图1为本发明实施例所提供的一种用于软件定义网络的可编程队列配置方法中控制器的工作流程示意图;
[0032] 图2为本发明实施例所提供的一种用于软件定义网络的可编程队列配置方法的流程示意图;
[0033] 图3为本发明实施例中根据南向接口协议封装后的队列配置指令格式示意图;
[0034] 图4为本发明实施例所提供的一种用于软件定义网络的可编程队列配置装置的结构示意图;
[0035] 图5为对本发明实施例所提供的一种用于软件定义网络的可编程队列配置方法的实验拓扑图;
[0036] 图6为应用本发明实施例所提供的一种用于软件定义网络的可编程队列配置方法配置队列后用户发起普通流量的速率示意图;
[0037] 图7为应用本发明实施例所提供的一种用于软件定义网络的可编程队列配置方法配置队列后用户发起普通级服务质量QoS保障的速率示意图;
[0038] 图8为应用本发明实施例所提供的一种用于软件定义网络的可编程队列配置方法配置队列后用户发起顶级QoS保障的速率示意图;
[0039] 图9为应用本发明实施例所提供的一种用于软件定义网络的可编程队列配置方法配置队列后用户在顶级QoS保障下的观看效果图;
[0040] 图10为应用现有技术中的方法配置队列后的无QoS保障的速率示意图;
[0041] 图11为应用应用现有技术中的队列配置方法后用户在无QoS保障下的观看效果图。

具体实施方式

[0042] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0043] 本发明实施例公开了一种用于软件定义网络的可编程队列配置方法及装置,以下进行详细说明。
[0044] 需要说明的是,本发明实施例中的网络设备可以为开源软件定义网络交换机(Open vSwitch,OVS)、路由器、防火墙等网络设备中的任意一种。
[0045] 网络设备作为一个流量转发设备,主要的职责是匹配、转发数据包。为了能够实现控制器对网络设备端口的管理,可以预先为网络设备设计挂载模块QoS Agent模块,每个网络设备在启动时都同时开启一个QoS Agent模块,然后QoS Agent模块通过预设的南向接口与控制器进行交互,QoS Agent模块与控制器进行交互的时候遵循预设的南向接口协议。
[0046] QoS Agent模块通过预设的南向接口与控制器进行交互的过程中,遵循预设的南向接口协议,将负责与预设的南向接口进行协议通信以及提取队列配置指令的线程定义为协议通信线程,将负责队列配置指令的适配和队列资源的时间配置的线程定义为指令配置线程。协议通信线程和指令配置线程之间的信息传递符合生产者消费者模式,使用“锁+信号量”,即Mutex+Condition的方式来交互信息。这种交互信息方式可以同时达到多线程互斥存取和高效交互的效果,完全避免了消费者线程无休止等待的不可控状态和性能损失。
[0047] 在信息交互方面,借用了Linux C原生提供的粗略的队列实现,在QoS Agent模块中对该队列功能做了完善和封装,成为了一个队列子模块。
[0048] 在模块运行方面,使用shutdown标记协调QoS Agent模块各部分的安全结束,主要是协调双线程的工作。线程在执行可能会消耗相对较多时间的步骤之后,会及时地检查shutdown标记,进入清理退出步骤,提高了模块的响应速度。
[0049] 此外,QoS Agent模块内部自定义了一个统一的日志系统,区分INFO、WARNING、ERROR三个等级,每个网络设备都有自己的独立日志可供查阅,对于系统级的问题,也有专门的日志独立记录。
[0050] 控制器采用监听、发送、接收三线程协作机制管理和控制网络设备,其工作流程示意图可以如图1所示。
[0051] 具体地,当网络设备上线接入时,首先网络设备中的QoS Agent模块将与“监听线程DeviceCallable”进行协议交互:TCP握手互联和网络设备的ID上报。之后DeviceCallable将会在控制器本地保存的的设备子系统Device Subsystem中寻找这个网络设备的原生抽象Device,然后将这个原生抽象与ID编号绑定在一起,最终为这个网络设备生成我们模块定制化抽象的网络设备对象DeviceElement。同时,也保持了DeviceElement与控制器内部设备信息Device的关联一致。至此DeviceCallable的一个工作周期就完成了,同时,一个网络设备的上线注册工作完成。
[0052] 之后,QoS Agent模块将主动向控制器报告网络设备所有的端口标识以及回执运行状态,控制器的“接收线程RecvCallable”将会接收到“有数据待接收通知”。随后RecvCallable将会确认是哪一个网络设备有信息上送,然后向控制器的网络设备对象DeviceElement共享的线程池中提交一个与该网络设备绑定的接收任务。这样即完成了协议握手阶段,即完成了RecvCallable的一个工作周期。此外,RecvCallable还将处理实际的协议交互过程中的一些意外情况,并做必要的故障恢复或故障隔离,确保系统的稳定性。
[0053] 可以理解的是,通过DeviceCallable和RecvCallable,控制器的网络设备抽象中将保存有各网络设备的标识与其状态信息和端口标识的对应关系,其中,网络设备状态信息为网络设备与控制器之间的连接状态信息,各网络设备的标识与其状态信息和端口标识的对应关系可以如表1所示:
[0054] 表1
[0055]
[0056] 具体地,控制器采用监听、发送、接收三线程协作机制管理和控制网络设备的过程中,“发送线程SendCallable”主要服务于队列配置指令下发的过程。当发现有队列配置指令等待下发时,SendCallable先获取队列配置指令,然后从控制器的网络设备对象中找出对应的网络设备,获取该网络设备对应的协议通道,通过获取的协议通道,将队列配置指令下发到该网络设备中。至此SendCallable的一个工作周期就完成了。
[0057] 通过采用监听、发送、接收三线程协作机制管理和控制网络设备,可以并行执行通信任务,提高效率,能够异步收集网络事件,响应队列操作,而且通过集中式的控制获取各网络设备的端口标识以及运动状态,能够进行全局优化配置。
[0058] 本发明实施例公开了一种用于软件定义网络的可编程队列配置方法,应用于控制器,如图2所示,包括以下步骤:
[0059] 步骤S210,接收外部程序通过北向接口传递的针对网络设备的各预定端口的队列配置参数;
[0060] 具体地,外部程序和控制器运行在同一台主机上,外部程序通过北向接口,将针对网络设备的各预定端口的队列配置参数传递给控制器,其中,北向接口是预先设计好的。
[0061] 预定端口的队列配置参数包括对应网络设备预定端口的的端口标识参数,以及对应的队列调度规则参数。
[0062] 需要说明的是,控制器本地保存有各网络设备的标识与其状态信息和端口标识的对应关系。
[0063] 网络设备各预定端口的端口标识参数是外部程序根据控制器发送的网络设备的端口标识确定的,网络设备的端口标识是控制器根据网络设备的状态信息确定与网络设备连接正常时发送的。例如,各网络设备的标识与其状态信息和端口标识的对应关系可以如表1所示,控制器根据表1可以确定出控制器与网络设备1连接正常,则控制器将网络设备1的接口标识发送给外部程序,外部程序根据控制器发送的网络设备的端口标识,确定网络设备的预定端口参数。
[0064] 队列调度规则参数是外部程序通过接收用户输入的参数获得的,其中,队列调度规则参数可以包括通用参数和特定调度策略参数。通用参数可以包括配置的接口对象、配置类型、交换机DPID、带宽、最低保证速率和最高限制速率等,特定调度策略参数可以包括针对两类十种调度策略中每一种调度策略中的参数。
[0065] 可以理解的是,队列调度规则参数是人为决定的,用户可以根据经验确定相应的队列调度规则参数。
[0066] 需要说明的是,外部程序通过北向接口传递给控制器的的队列配置参数是针对各预定端口的,预定端口是外部程序根据控制器发送的网络设备的预定端口标识参数确定的。
[0067] 步骤S220,对所述各预定端口的队列配置参数进行解析,生成各预定端口对应的队列配置指令;
[0068] 具体地,控制器可以采用树状解析树对各队列配置参数进行解析,树状解析树是采用继承方式的建造者模式生成的。
[0069] 建造者模式是一个服务于对象创建的软件设计模式。建造者模式为类引入了一个新的对象,建造者。建造者会一步一步地接收每一个初始化参数,最终一次性返回那个构造好的类对象。
[0070] 建造者模式还可以用来生成那些包含了特殊数据的类对象,比如包含了HTML代码、SQL语句的对象。也就是说,数据的值不能被轻易地改动,否则整个对象就会错误。这类数据本身不能被一步步地编辑并且要求一次性编辑并生成。而使用“建造者”,便能灵活地构造它们。
[0071] 采用继承方式的建造者模式生成树状解析树,树状解析树的根节点是队列配置指令配置类的最高层抽象。下一层是队列配置指令中主要的两类元素,Qdisc和Class,作为次高层抽象。第三层是具体的配置对象,不同的配置对象对应着具体的调度规则,调度规则的具体参数就包含在其中。同时,一二层抽象包含着下层的通用属性。
[0072] 具体地,树状解析树中每一层抽象和对象,都由其自身的建造者负责构造。其中,第一层的建造者主要负责通用参数的注入,第二层主要负责队列配置指令中两类元素的注入,第三层的建造者主要负责特定调度规则的参数注入,同时负责队列配置指令配置对象的生成。也就是说,第一层解析通用参数,第二层解析这条队列配置指令属于classful还是classless,即是属于两类十种调度策略中的分类策略还是不分类策略,第三层解析特定调度策略参数。第三层解析的特定策略规则参数包括十种调度策略中针对每一种调度策略的参数。
[0073] 需要说明的是,为了保持建造者模式配置步骤的灵活性和配置结果的一致性,同时避免北向接口的使用者重复进行配置类的强制类型转换,第一层和第二层建造者采用模板类的方式设计。
[0074] 例如,在实际应用中,假设队列配置指令为“tc class add dev eth0parent 1:1 classid 1:20htb rate 3mbit ceil 6mbit burst 15k”,则外部程序通过北向接口传递给控制器的队列配置参数格式为:
[0075] ClassHtbObj h1=HtbObj.builder()
[0076] .add()
[0077] .setParent(h0)
[0078] .setHandleOrClassld(“1:20”)
[0079] .setDeviceID(dev0)
[0080] .setDevicelntfNumber(dev0.eth0)
[0081] .rate(3,QosObj.RATE_UNIT.MBIT)
[0082] .ceil(6,QosObj.RATE_UNIT.MBIT)
[0083] .burst(15,QosObj.SIZE_UNIT.KBYTE)
[0084] .build();
[0085] 采用上述树状解析树对队列配置参数进行解析,第一层解析parent、ID、device等通用参数,第二层解析这条队列配置指令属于classful,第三层解析调度策略HTB中的参数,则最终可解析出一条为“tc class add dev eth0parent 1:1 classid 1:20htb rate 3mbit ceil 6mbit burst 15k”的队列配置指令。
[0086] 步骤S230,通过南向接口,将所述各预定端口对应的队列配置指令发送给所述网络设备,以使所述网络设备根据所述队列配置指令进行队列配置;
[0087] 控制器将解析出来的网络设备各预定端口对应的队列配置指令,通过南向接口,发送给网络设备,以使网络设备根据控制器发送的队列配置指令进行队列配置。
[0088] 应用本发明实施例,相比于现有技术,网络设备可以根据各预定端口对应的队列配置指令直接对队列进行配置,而且各预定端口对应的队列配置指令在生成的过程中,可控制选择队列调度规则参数,由此实现了细粒度配置队列的目的。并且通过提供的北向接口,使队列配置能够被可编程,将队列配置的可编程能力对外开放。
[0089] 作为本发明实施例的一种优选方案,控制器通过南向接口,将各预定端口对应的队列配置指令发送给网络设备,以使网络设备根据队列配置指令进行队列配置时,具体地,控制器可以通过南向接口,根据预设的南向接口协议,对各预定端口对应的队列配置指令进行封装,并将封装后的队列配置指令通过对应的各预定端口发送给网络设备,以使网络设备根据控制器发送的队列配置指令进行队列配置。
[0090] 具体地,南向接口协议建立在TCP协议之上,使用TLS协议进行加密传输。南向接口协议通道的建立过程可以与控制器中的监听线程的工作过程一样,这里不再赘述。
[0091] 其中,根据预设的南向接口协议,进行封装后的队列配置指令包括:四字节的协议头和任意长度的业务数据,其格式可以如图3所示。其中,四字节的协议头是32位无符号整形数的网络字节序表示,代表了后续业务数据的长度。
[0092] 应用本实施例,通过根据预设的南向接口协议,将各预定端口对应的队列配置指令进行封装,且封装后的队列配置指令包括四字节的协议头和任意长度的业务数据,能够确保业务数据被协议对端完整接收,对于消息类的业务数据能够正确解析。
[0093] 作为本发明实施例的另一种优选方案,控制器通过南向接口,将各预定端口对应的队列配置指令发送给所述网络设备之前,其还可以根据网络设备的标识,以及本地保存的各网络设备的标识与其状态信息的对应关系,判断自身与该网络设备是否连接正常;如果是,则继续将队列配置指令发送给网络设备。
[0094] 具体地,控制器根据网络设备的标识,在本地保存的各网络设备的标识与其状态信息的对应关系中,查找控制器自身与该网络设备的连接状态,即自身与该网络设备是否连接,若自身与该网络设备连接,则认为自身与该网络设备连接正常,否则,认为连接不正常。
[0095] 应用本实施例,判断控制器与网络设备的连接状态后,再确定是否将各预定端口对应的队列配置指令发送给网络设备,即当控制器与网络设备连接正常的时候,才将各预定端口对应的队列配置指令发送给该网络设备,避免了控制器将队列配置指令发送给不与其连接的网络设备,提高了队列配置指令发送的准确性。
[0096] 本发明实施例还公开了一种用于软件定义网络的可编程队列配置装置,应用于控制器,如图4所示,包括:
[0097] 接收模块410,用于接收外部程序通过北向接口传递的针对网络设备的各预定端口的队列配置参数;其中,所述各预定端口的队列配置参数包括端口标识参数,以及对应的队列调度规则参数;
[0098] 解析模块420,用于对各队列配置参数进行解析,生成各预定端口对应的队列配置指令;
[0099] 发送模块430,用于通过南向接口,将所述各预定端口对应的队列配置指令发送给所述网络设备,以使所述网络设备根据所述队列配置指令进行队列配置。
[0100] 具体地,发送模块430,具体用于:
[0101] 通过南向接口,根据预设的南向接口协议,对各预定端口对应的队列配置指令进行封装,并将封装后的队列配置指令通过对应的各预定端口发送给所述网络设备,以使所述网络设备根据所述队列配置指令进行队列配置。
[0102] 其中,封装后的队列配置指令包括四字节的协议头和业务数据。
[0103] 具体地,控制器本地保存有各网络设备的标识与其状态信息和端口标识的对应关系;所述各队列配置参数中包括的端口标识参数是所述外部程序根据所述控制器发送的所述网络设备的端口标识确定的,所述网络设备的端口标识是所述控制器根据所述网络设备的状态信息确定与所述网络设备连接正常时发送的;所述队列调度规则参数是所述外部程序接收用户输入参数获得的。
[0104] 作为本实施例的一种优选方案,所述装置还可以包括:
[0105] 判断模块(图4中未示出),用于根据所述网络设备的标识,以及本地保存的各网络设备的标识与其状态信息的对应关系,判断自身与所述网络设备是否连接正常;如果是,触发发送模块430。
[0106] 应用本发明实施例,网络设备可以根据各预定端口对应的队列配置指令直接对队列进行配置,在生成队列配置指令的过程中,可控制选择队列调度规则参数,由此实现了细粒度配置队列的目的。并且通过提供的北向接口,使队列配置能够被可编程,将队列配置的可编程能力对外开放。
[0107] 下面通过一个具体实施例对本发明实施例所提供的一种用于软件定义网络的可编程队列配置方法进行详细说明。
[0108] 以用户01和用户02为例,实验拓扑图如图5所示。在图5中,包括用户01和用户02,以及Web文件下载服务器Web 05、Iperf模拟普通流量服务器General 06和流媒体直播服务器Stream 07,以及接入交换机sAccess 03和核心交换机sCore 04。
[0109] 需要说明的是,在图6、图7、图8以及图10中,均包括用户01和用户02,以及Web文件下载服务器Web 05、Iperf模拟普通流量服务器General 06和流媒体直播服务器Stream 07,以及接入交换机sAccess 03和核心交换机sCore 04。
[0110] 用户01作为实验组,应用本发明实施例所提供的队列配置方法进行队列配置,其中队列配置包括普通流量、普通级服务质量(Quality of Service,QoS)保障和顶级QoS保障的队列配置。用户02作为对照组,应用现有技术中的方法进行队列配置,无任何保障。
[0111] 对于实验组用户01,初始状态,触发普通流量,普通流量要求付费总带宽为18Mbps,供所有流量使用。当通过Web下载文件时,会触发普通级QoS保障,普通级QoS保障要求保障至少3Mbps、至多10Mbps的下载速率。当观看流媒体直播时,会触发顶级QoS保障。顶级QoS保障要求保障至少14Mbps、不设上限的下载速率,确保流畅的直播观看体验。
[0112] 对于对照组用户02,要求付费总带宽为18Mbps,所有流量共用,无任何保障。
[0113] 需要说明的是,应用本发明实施例所提供的一种用于软件定义网络的可编程队列配置方法进行队列配置的过程与上述实施例的过程一样,这里不再重复赘述。需要注意的是,外部程序通过北向接口传递的各预定端口的队列配置参数中,针对普通级QoS保障的队列配置参数中包括随机公平队列(Stochastic Fairness Queueing,SFQ)调度策略中的参数,针对顶级QoS保障的队列配置参数中包括先入先出(First Input First Outpu,BFIFO)调度策略中的参数。
[0114] 实验步骤如下:
[0115] 第一步,用户01只发起普通流量。此时,下载速率如图6所示,由图6可看到下载速率为17.51Mbps,接近理论峰值18Mbps。
[0116] 第二步,用户01开始通过Web下载文件,触发普通级QoS保障。
[0117] 应用本发明实施例所提供的一种用于软件定义网络的可编程队列配置方法配置队列后用户发起普通级QoS保障的速率如图7所示,从图7中可看到,Web下载速率保持在9.51Mbps左右,接近理论峰值10Mbps;普通流量约降速到14.78-9.51=5.27Mbps。
[0118] 第三步,用户01开始观看流媒体直播,触发顶级QoS保障。
[0119] 应用本发明实施例所提供的一种用于软件定义网络的可编程队列配置方法配置队列后用户发起顶级QoS保障的速率如图8所示,从图8中可看到,流媒体直播速率保持为14.01Mbps左右,速率与直播源码率相符,得到可靠保障;Web下载速率降至3.12Mbps左右,符合最低保障的3Mbps;普通流量降速到了1Mbps以下,降到389.12Kkps左右。
[0120] 图9为应用本发明实施例所提供的一种用于软件定义网络的可编程队列配置方法配置队列后用户在顶级QoS保障下的观看效果图,在图9中,右侧是直播服务器的画面,左侧是用户01的观看画面,二者无明显差别,观看体验得到保证。
[0121] 最后,单独地让用户02对Web文件下载服务器Web 05、Iperf模拟普通流量服务器General 06和流媒体直播服务器Stream 07进行业务访问。
[0122] 最终下载速率如图10所示,从图10中可以观察到:普通业务流量速率稳定为7.99Mbps左右,Web下载速率稳定为290.65Kbps左右,接收的直播流量速率大约稳定为
9.22Mbps(17.51Mbps-7.99Mbps-300Kbps=9.22Mbps),远低于13Mbps的直播源码率。
[0123] 图11为用户在无QoS保障下的观看效果图,在图11中,右侧是直播服务器的画面,左侧是用户02的观看画面,从图11中可以观察到,左侧的直播画面持续花屏,观看体验受到极大影响。
[0124] 通过本实施例可知,应用本发明实施例所提供的队列配置方法进行队列配置后,可实现流量调度的集中控制,保证用户体验。
[0125] 对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0126] 需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0127] 本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。
[0128] 以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。