DiffServ四要素
对于QoS区分服务模型(DiffServ),我们可以从以下四个要素展开理解:
- 流分类和标记(classification & marking)
- 基于QoS优先级流分类
- QoS优先级映射
- 基于报文五元组流分类
- MQC
- 限速之流量监管和整形(shaping & policing)
- 拥塞避免(congestion avoidance)
- 拥塞管理之队列(Congestion management)
报文标记QoS优先级的字段
报文中用于标记QoS优先级的字段有五类:
- 802.1q帧的Cos字段
- 对于VLAN帧(2层),可以根据VLAN帧头中的CoS(code of service)字段(802.1p优先级)进行流分类。
- VLAN帧头中的PRI字段(即802.1p优先级)标识了服务质量需求,VLAN帧中的PRI字段位置如下图所示。
在VLAN帧头中包含3比特长的PRI字段。PRI字段表示8个传输优先级,按照优先级从高到低顺序取值为7~0。
- MPLS的EXP字段
- 对于MPLS报文(2.5层),则一般是根据MPLS报文中的EXP域进行流分类。
- EXP域有3位,表示8个传输优先级,按照优先级从高到低顺序取值为7~0,通常作为MPLS报文的CoS域,与IP网络的ToS或DSCP域等效。
- IP Precedence优先级
- 对于IPv4数据包(三层),可以IPv4头部中TOS(type of service)字段进行流分类,如下图所示:
IPv4头部中TOS字段中前三位,可以表示8个传输优先级,按照优先级从高到低顺序取值为7~0。
- DSCP(Differential Services Code Point) 区分服务代码点
- 对于IPv4报文(三层),基于IPv4包首部中的ToS域的前6位(即DSCP域)来标记报文;
- 使用DSCP域可将报文最多分成64类,如下图所示:
- 比特0~2表示Precedence字段。
- D比特表示延迟要求(Delay,0代表正常延迟,1代表低延迟)。
- T比特表示吞吐量(Throughput,0代表正常吞吐量,1代表高吞吐量)。
- R比特表示可靠性(Reliability,0代表正常可靠性,1代表高可靠性)。
- C比特表示传输开销(Monetary Cost,0代表正常传输开销,1代表低传输开销)。
- 比特6和7保留。
- IPv6的TC字段
- 在IPv6报文头部中(三层),有两个字段与QoS有关,分别为流量类别TC(Traffic Class)和流标签FL(Flow Label)字段。
- 流量类别字段有8位,和IPv4的服务类型(ToS)字段功能相同,用于对报文的业务类别进行标识;
- 流标签字段有20位,用于标识属于同一业务流的包。
- 流标签和源、目的地址一起惟一标识了一个业务流。同一个流中的所有包具有相同的流标签,以便对有同样QoS要求的流进行快速、相同的处理。
区分服务的PHB(Per-Hop Behavior)逐跳行为
- 在每一个DS节点(区分服务域中的节点)上对分组的处理称为每跳行为PHB(Per-Hop Behavior)。
- PHB描述了DS节点对具有相同DSCP的分组采用的外部可见的转发行为。
- 协议定义了四种标准的PHB:
(1)类选择码CS(Class Selector),
- DSCP六个比特位格式是XXX000
- XXX最大值为8,一共有八种变化
- CS定义的DSCP=IP Precedence×8,比如CS6=6×8=48,CS7=7×8=56。
- CS代表的服务等级与在网络中使用的IP Precedence意义相同。
(2)加速转发EF(Expedited Forwarding),
- DSCP六个比特位格式是101110,十进制值为46
(3)确保转发AF(Assured Forwarding),
- DSCP六个比特位格式是XXXYY0
- XXX最大值是8,但是目前只用到4,也就是001~100(四种变化)
- YY最大值是3,从01~11(三种变化)
- XXX和YY组合在一起,一共12中格式(AF11-AF13,AF21-AF23,AF31-AF33,AF41-AF43)
- YY同时表示三种不同的丢弃概率,值越大,丢弃概率越高(01低、10中、11高)
(4)尽力而为BE(Best-Effort)。
- DSCP六个比特位值为全0(000000)
流分类方法
流分类是对进入DiffServ域的数据帧或者数据包进行分类,以便在网络中得到相应的合适处理。
基于报文中QoS优先级字段进行分类
可以根据报文所携带的QoS优先级位(COS、EXP、IP precedence、DSCP、TC),识别出不同优先级特征的流量,实现外部优先级和内部优先级之间的映射。
- QoS优先级映射
- 在报文进入设备时,将报文携带的QoS优先级统一映射到设备内部的服务等级Service Class(也叫做调度优先级PHB)和丢弃优先级(也叫颜色Color),
- 在设备内部,根据报文的服务等级进行拥塞管理,根据报文的颜色进行拥塞避免;
- 在报文离开设备时,需要将内部的服务等级和颜色映射为QoS优先级,以便后续网络设备能够根据QoS优先级提供相应的服务质量。
- 将QoS优先级映射到服务等级和颜色是在报文上行方向进行,而服务等级和颜色映射为QoS优先级则是在下行方向进行。
- 服务等级(Service Class)
- Service Class是指报文在设备内部的服务等级,支持8种取值,优先级从高到低依次为CS7、CS6、EF、AF4、AF3、AF2、AF1、BE。
- Service Class决定了报文在设备内部所属的队列类型。
- 而服务等级的高低取决于具体的队列调度算法配置:
(1)如果8种类型的队列都配置为PQ(优先级队列)调度,则CS7>CS6>EF>AF4>AF3>AF2>AF1>BE;
(2)如果BE配置为PQ调度,其余7种类型的队列配置为WFQ(加权公平队列)调度,则BE的优先级比其余7个都高;
(3)如果8种类型的队列都配置成WFQ调度,则相互之间无优先级高低之分。
- 丢弃优先级(Color)
- Color是指报文在设备内部的丢弃优先级,用于实现同一个队列内部,当队列发生拥塞时报文丢弃顺序。
- Color支持3种取值,IEEE定义的优先级从低到高依次为Green、Yellow、Red(优先级越高,丢弃可能性越大)。
- 丢弃优先级的高低具体取决于对应参数的配置,例如:配置Green最大只能使用70%缓存,Red最大可以使用100%缓存,则Green的丢弃优先级比Red高。
- 端口信任模式(port trust mode)
- 当报文在DiffServ域边界被分类之后,网络的中间节点可以根据分类结果对不同类别的流量给予差别服务。
- 如果下游接口选择使用上游节点的分类结果,则表示该节点信任上游节点的分类结果,即信任(trust)从连接上游节点的端口接收的报文所携带的QoS标记。
- 当设备在实现QoS优先级映射时,可以选择信任端口的上行报文携带的优先级标记(包括DSCP、IP Precedence、802.1p、MPLS Exp),这种模式称为端口信任模式。
- 优先级映射表
- 报文进入设备时,设备根据优先级映射表实现QoS优先级映射。
- 在DiffServ模型中,不同DS域允许有不同的PHB映射关系,以实现不同的服务提供策略,因此设备需要允许管理员定义DS域并针对不同的DS域设定不同的优先级关系。
- 设备除了允许管理员自定义DS域,同时系统预定义了如下两个域:
(1)Default域:描述了缺省情况下IP报文、VLAN报文、MPLS报文的外部优先级和服务等级、颜色之间的映射关系。
(2)5p3d域:描述了VLAN报文802.1p优先级和设备内部服务等级、颜色之间的映射关系,应用于仅支持5种服务等级(Service Class)和3种丢弃优先级的802.1ad局域网。
基于报文中五元组字段进行分类
问题背景
- 实际网络中,报文中标记QoS优先级字段可能不会被用户标记,基于报文中标记QoS优先级对流进行分类,难以实现
- 简单基于报文的QoS优先级字段无法对应用层的流量进行分类(比如web流量、Telnet流量,都是应用层的流量,只是端口号不同)
解决方法
可以基于报文中的五元组(源IP地址、源端口号、协议号码、目的IP地址、目的端口号)对流进行分类。
- 二层(链路层)流分类,以下匹配项可以任意组合:
- VLAN外层Tag的802.1p优先级(QinQ)
- VLAN内层Tag的802.1p优先级
- 源MAC地址
- 目的MAC地址
- 二层封装的协议字段
- MPLS流分类,以下匹配项可以任意组合:
- EXP优先级字段
- Label标签字段
- TTL跳数字段
- IPv4流分类,以下匹配项可以任意组合:
- DSCP优先级字段
- IP优先级
- 源IPv4地址
- 目的IPv4地址
- IPv4报文的分片
- TCP/UDP源端口
- TCP/UDP目的端口
- 协议号
- TCP同步标志
- IPv6流分类,以下匹配项可以任意组合:
- IPv6报文的DSCP优先级
- 协议号
- 源IPv6地址
- 目的IPv6地址
- TCP/UDP源端口
- TCP/UDP目的端口
- ACL复杂流分类,以下匹配项可以任意组合:
- DSCP优先级
- IPv4/IPv6优先级
- 源IPv4/IPv6地址
- 目的IPv4/IPv6地址
- IPv4报文的分片
- TCP/UDP源端口
- TCP/UDP目的端口
- 协议号
- TCP同步标志
MQC(模块化QoS命令行)
- 基于报文的五元组对流进行分类之后,一般将这些分类的流与可实施的流动作关联,形成流策略,并且将策略应用在接口上,这种模式被称为模块化QoS命令行配置(MQC)。
- MQC可以分为三步:
- 定义流量类型,对流进行分类,用if-match语句设定流分类的匹配规则。
- 为不同类别流量制定策略(流分类+流动作)。
- 将策略应用在接口下。