基于SDN的Qos差异化服务-流量限速原理

SDN中你那个流量限速可以基于OpenFlow协议来实现

其原理大致为:

OpenFlow通过用户定义的流表来匹配和处理报文,

计量表项被流表项所引用,并为引用该计量表项的流表项提供报文限速的功能。

 

 

Meter表即计量表,任意流表项可以在它的指令集中定义一个计量,以测量和控制相关流的速率,可以实现一些简单的Qos,并且可以结合端口队列来实现复杂的Qos框架。每个计量表划分为多个连续的计量带,流的实时速率落在哪个计量带中,就会采取该计量带指定的处理策略。

计量表是由多个计量表项构成,每个计量表项定义每个数据分组的计量能力。基于此结构,OpenFlow Switch可以实现各种简单的QoS功能,比如速率限制等。一个计量表现可以衡量与它关联的数据包的速率,并进而可以控制其聚合速率。任何一个流表项都可以在其指令集里指定某一个计量表,从而控制与该流表项能够成功匹配的数据包的聚合速率。

计量表项的具体结构如下:

      Mete Ident ifier     Mete Bands      Counters

 

每个计量表项都是由其Meter Identifier来唯一定位,详情如下:

  1. Meter Identifier:一个32位无符号整数,作为一个Meter Entry的唯一标识;
  2. Counters:被该Meter Entry处理过的数据包的统计量;
  3. Meter Bands:一个无序的Meter Band集合,每个Meter Band指明了带宽速率以及处理数据包的行为;每一个计量表项都可能有一个或者多个Meter Bands,每个Meter Band指明了带宽速率以及对数据包的处理行为。数据包基于其当前的速率会被其中一个Meter Band来处理,其筛选策略是选择那个定义的带宽速率略低于当前数据包的测量速率的Meter Band 假若当前数据包的测试速率均低于任何一个Meter Band定义的带宽速率,那么不会筛选任何一个Meter Band。

OpenFlow协议在ODL中的实现

在ODL中,OpenFlow的实现分为OpenFlowJava和OpenFlowPlugin两部分,其中OpenFlowJava负责面向南向设备完成OpenFlow协议的序列化、反序列化、端口监听以及消息分发,而OpenFlowPlugin负责完成OpenFlow协议的状态管理、会话管理、事务处理等,向SAL层提供服务。整体框架如下:

OpenFlowPlugin实现了OpenFlow协议,它提供了REST API接口,这里需要关注添加流表项、添加计量表项等接口;OpenFlowPlugin提供了SalFlowService和SalMeterService服务,在这两个服务接口中定义了插入、删除和更新流表项、计量表项的方法。因此,流量限速插件可以通过组合这些基础功能完成限速功能。

 

 

你可能感兴趣的:(2019年暑假前实训)