服务质量:关于输入和输出服务策略优先相同流量的问题

网络工程 服务质量
2021-07-11 09:21:53

此问题/实验是使用 Cisco 网络硬件创建的。我在其他地方问过这个问题没有回应。

我是 QoS 的新手,但最近几天我一直在研究,并且学到了很多东西。但是,我仍然无法完成我想要的任务。我正在尝试配置 QoS 以将两类流量优先于所有其他类型的流量(第一类将比第二类具有更高的优先级)。为了测试这个理论和我的配置,我设置了两台路由器、一台交换机和两台 PC。这是我使用的拓扑图...(我使用的是真实硬件,数据包跟踪器仅演示拓扑)

在此处输入图片说明 我的目标是让所有三台 PC 同时 ping R2,并使 PC0 具有最简单/最快的传输。我在 R1 和 R2 之间设置了一个阻塞点,这样我就可以测试并确保我的 PC0 数据包最不可能被丢弃。我将 R1-R2 链路配置为 10mbps、mtu 500,并将“输入”和“输出”的保持队列配置为 10 个数据包。然后我让 R1 ping R2 与大 ICMP 数据包和 R2 ping R1 也与大 ICMP 数据包。这个想法是 R1 的 ping、R2 的 ping 和 PC2 的 ping 都是常规流量,应该是队列已满时丢弃的流量。PC0 的 ping 不应该/很少被丢弃。

这是我的配置示例...

R1 配置

ip access-list extended class1-out_acl
  permit ip 192.168.1.0 0.0.0.255 any
  deny ip any any
ip access-list extended class2-out_acl
  permit ip 192.168.2.0 0.0.0.255 any
  deny ip any any
ip access-list extended class1-in_acl
  permit ip any 192.168.1.0 0.0.0.255
  deny ip any any
ip access-list extended class2-in_acl
  permit ip any 192.168.2.0 0.0.0.255
  deny ip any any

class-map match-all class1-out
  match access-group name class1-out_acl
class-map match-all class2-out
  match access-group name class2-out_acl
class-map match-all class1-in
  match access-group name class1-in_acl
class-map match-all class2-in
  match access-group name class2-in_acl

policy-map QOS-OUT
  class class1-out
    priority percent 20
    set precedence 5
  class class2-out
    priority percent 20
    set precedence 3
  class class-default
    fair-queue
    random-detect
    set precedence 0

policy-map QOS-IN
  class class1-in
    police 2000000 400000 400000 conform-action transmit exceed-action drop violate-action drop
  class class2-in
    police 2000000 400000 400000 conform-action transmit exceed-action drop violate-action drop
  class class-default
    police 5000000 1000000 1000000 conform-action transmit exceed-action drop violate-action drop

control-plane
  service-policy input QOS-IN

interface GigabitEthernet0/1
  mtu 500
  speed 10
  hold-queue 10 in
  hold-queue 10 out
  service-policy output QOS-OUT

除了 ACL 之外,R2 的配置完全相同。class1-out 的 ACL 变为 class1-in 的 ACL,反之亦然。这同样适用于 class2-in 和 class2-out ACL。这样做是为了让 class1 流量“优先”往返。

我将 PC0 和 PC3 设置为以 5000 大小的 ping ping R2 300 次(在此测试期间未使用 PC1)。我将 R1 设置为 ping R2,使用 5000 次大小的 ping 大约 15000 次,R2 ping R1 也是如此。

在测试过程中,两个路由器和两个 PC 都在丢弃数据包(正如我所料,PC0 丢弃数据包有点惊讶)。当我的测试完成时,我发现 PC2 的结果最好,平均 9 毫秒下降了 5%,而 PC0 下降了 10%,平均 11 毫秒。

我运行 [show policy-map interface] 并且我的 class1 数据包被从洪水中挑选出来,但它们似乎没有任何优先级。使用此命令,我还注意到所有数据包都被归类为 IP 优先级 0(例行程序)。这很奇怪,因为我将 class1 设置为 5。

正如我之前提到的,我是 QoS 的新手,所以我确定我在某个地方犯了错误。另外,有人可以解释一下设置“警察”值时要使用的好方法/策略吗?我稍微随意地选择了这些数字。

一旦我解决了任何配置错误,我的基本问题是……是否有一个标准或策略我可以遵循来“匹配”我的输入和输出服务策略,以便为流量类提供相同级别的 QoS。参考我上面的例子,我试图在出口接口上为 class1 使用 20% 的优先级百分比,同时还为 class1 将输入接口控制为 2mbps(10mbps 的 20%)。这是我尝试“排列”链接以使用相同的流量优先级(输入和输出)。我希望我可以对输入和输出服务策略都使用一个百分比,但我的研究让我认为这是不可能的。

1个回答

特尔;博士:

A. 不要使用 Ping,使用 UDP。

B.在入口端分类标记(匹配ACLs,Protocols等等),

C.在出口端进行排队/调度,只匹配 IP 报头的 ToS 字段中的 QoS 位。

稍微详细一点:

A) 使用 UDP,而不是 Ping

首先:ICMP 或 Ping 分别是一种特别不适合测试 QoS 设置的排队/调度部分的工具,原因有两个:

  • Ping 在相反方向生成相同的数据流,您几乎无法判断请求或回复数据包是否发生了“ping 丢失”。
  • 在寻找排队的影响时,Ping 报告的 RTT 也同样难以解释 - 如果由于缓冲而增加了延迟,您无法判断这是请求还是回复发生了这种情况。

在测试 QoS 设置的分类/标记部分时,ICMP 可能会做得不错。

因此,我建议选择一个生成单向UDP 流的工具,就像 iPerf(当然还有其他人)一样,并且我分别为每个方向运行测试用例。您可能想在 R2 后面的 LAN 中添加一台 PC 作为接收系统(使用 UDP 上的 iPerf,有趣的结果显示在接收器端,而使用 TCP,任一端都会显示有意义的结果)。

UDP 还有一个优点,你可以很容易地使用端口,使得类映射的 ACL 更容易编写(例如,端口 udp/5000 是默认值,5005 获得优先级 5,端口 5003 获得优先级 3)等等。

我不太确定您对配置的意图 - 特别是关于控制平面监管的作用,这是一个完全不同的球场。我建议把它放在一边;如果在生产网络上实施不当,CoPP 可能会造成巨大破坏。

使用 QoS 需要记住三件非常重要的事情:

  • QoS是一个单向的东西,在衡量QoS时,要时刻注意“感兴趣”流量的方向。配置可能是对称的,甚至共享相同的类映射/策略映射和 ACL。但是 QoS 在路由器上的运行方式对于每个方向都是完全独立的。因此,您希望拥有单向字符的测试场景。

  • QoS 排队/调度在接口(或父整形器)变得饱和之前不会真正发生

  • QoS 是一个管理不公平系统(不是我的引述,但为此,我不记得我从哪里得到的)。一旦链接饱和,每个流量类别都会受到一定程度的影响。QoS 只是设定了不公平的规则。

根据我在 QoS 设置方面的经验,我会根据我从您的帖子中掌握的内容,为您提供一些提示。

通常,您希望在入口接口上执行分类/标记,可能与一些监管一起。使用绑定到出口接口的策略映射进行分类/标记有时甚至是不可能的,或者只能以有限的方式进行。

B) 入口 QoS

让我们从入口开始(请注意,我是徒手创作的,而不是来自实际设备。给定平台上的语法或功能支持可能存在轻微错误)

  • 使用 ACL 定义类映射以识别流量 (1):

    class-map match-any CMAP_QOS_CLASS1, match access-group ACL_CLASS1-TRAFFIC class-map CMAP_QOS_CLASS2 match access-group ACL_CLASS2-TRAFFIC

  • 定义一个名为 PM_QOS_INGRESS 的策略映射,包含上述类映射

  • 在该策略映射中,只需设置优先级或 DSCP 值,可选择监管传入流量。

    policy-map PMAP_QOS_INGRESS class CMAP_QOS_CLASS1 set precedence 5 class CMAP_QUE_CLASS2 set precedence 3 class class-default set precedence 0

  • 结合该策略映射到所述接口,其中待QoS'd流量来(2)

现在,进入该路由器的数据包在 ToS 字节中获得了预期的标记。

C) 出口 QoS

现在是出口端。

  • 定义一组具有 ToS 字节标记(DSCP 或优先级)匹配标准的类映射。请勿在此处匹配 IP 地址(使用 ACL)、协议或端口。

    class-map match-any CMAP_QUE_CLASS1 match precedence 5 class-map match-any CMAP_QUE_CLASS2 match precedence 3

  • 定义一个策略映射来决定每个类 (3) 必须发生的事情:

    policy-map PMAP_QUE_EGRESS class CMAP_QUE_CLASS1 priority level 1 police <some upper limit you want to give to that class> class CMAP_QUE_CLASS2 priority level 2 policy <some upper limit you want to give to that class> class class-default random-detect precedence-based

  • 将该策略映射绑定到要进行 qos 的流量离开 R1 的接口。

然后,从所有三台 PC 启动一些流量(尚未使链路或监管上限饱和)。show policy map interface gig0/1 out在 R1 上使用以查看是否为不同的类获得非零计数器。

然后开始增加 udp 流的带宽,直到它们开始使您的阻塞点饱和。再次查看出口策略映射(这次查找每个类的丢弃计数器)并查看流接收器的丢失和抖动统计信息。一定要比较优先级的抖动和默认等级的抖动。

警告 您的 PC 和 R1 之间似乎有一个 Catalyst 2960。即使它在当前场景中无关紧要(分类/标记发生在 R1 上),我强烈建议......

  • (要么)绝对确保催化剂已mls qos禁用
  • (或者,如果启用了 mls qos)确保所有接受带有 QoS 标志(即 ToS 字节中的优先级或 DSCP 值)的流量的交换机端口都设置为 mls qos trust

否则,催化剂将使所有 IP 数据包的 ToS 字节无效(是的,即使它仅充当第 2 层交换机),您最终可能会出现意想不到的效果。

(1) 在 Cisco Nexus 平台上,用于(入口)分类和标记的类映射和策略映射是type qos,用于(出口)排队和调度的类映射和策略映射type queuing我碰巧喜欢这个,因为它提供了清晰性,因此我选择在其名称中反映预期使用的类/策略映射,即使在 IOS 上也是如此。当然,您的类/策略映射命名策略可能会有所不同。

(2)在校园网中,对PC所连接的接入交换机端口进行分类和标记。为便于练习,您可能希望在通往(源)PC 的路由器接口上执行此操作。

(3) 我将放弃带有父子策略映射的分层策略映射的示例如果需要,我会编辑答案。