我有以下拓扑结构,其中两个站点的 Internet 服务提供商都提供 10Mbps 连接:
站点之间有一条 GRE 隧道,我想确保即使在连接拥塞的情况下,这条隧道也能正常运行。第一个措施是面向 LAN 的接口在两个方向上将 CAR 设置为 9.5Mbps。但是,我想确保 GRE 保持连接消息在到达 Fa0/0 接口 Rx 环形缓冲区后尽快得到处理。实现这一目标的方法有哪些?我想我应该在 Fa0/0 端口上使用一些其他的 Rx 队列策略而不是 FIFO?
我有以下拓扑结构,其中两个站点的 Internet 服务提供商都提供 10Mbps 连接:
站点之间有一条 GRE 隧道,我想确保即使在连接拥塞的情况下,这条隧道也能正常运行。第一个措施是面向 LAN 的接口在两个方向上将 CAR 设置为 9.5Mbps。但是,我想确保 GRE 保持连接消息在到达 Fa0/0 接口 Rx 环形缓冲区后尽快得到处理。实现这一目标的方法有哪些?我想我应该在 Fa0/0 端口上使用一些其他的 Rx 队列策略而不是 FIFO?
我建议从老式 CAR 迁移到 CBWFQ 的现代配置。当您这样做时,您可以将 QoS 策略嵌套在一起以完成更复杂的 QoS 场景。根据此 Cisco 文档,GRE 保活标记为 CS6。保活也是 GRE 数据包的一部分,而不是正在发送的内部 IP 数据包(源)。
class-map CM-CS6
match cs6
!
policy-map PM-FA0/0-QUEUE-OUT
class CM-CS6
priority percent 5
!
policy-map PM-FA0/0-SHAPER-OUT
class class-default
shape average 9500000
service-policy PM-FA0/0-QUEUE-OUT
!
interface tunnel 100
qos pre-classify
!
interface Fa0/0
service-policy output PM-FA0/0-SHAPER-OUT
!
首先,我们创建一个类映射来匹配我们的 GRE 保活。请注意,这实际上会过度匹配并包括所有 CS6 流量。这可能包括其他路由/桥接协议。不一定是坏事,因为路由控制平面的故障会使路径完全中断。您还可以考虑为控制平面或语音优先考虑其他高 CS 类。
接下来,我们为 Fa0/0 创建一个排队策略映射。这将控制在拥塞期间如何处理每一类流量。在这种情况下,我们为其定义策略的唯一类是 CS6(GRE 保活和其他控制平面流量)。我们说 CS6 流量在优先队列中分配了 5% 的可用带宽。这意味着如果有 CS6 流量排队,它将始终首先在链路上发送(最多 5% 的链路带宽)。任何超过 5% 的流量都将与其余流量一起尽最大努力发送。(有关优先级与带宽分配的更多信息,请参阅此文档。)
现在是时候更换您的 1962 年老式 Pinto 汽车了!创建用于在 Fa0/0 上进行整形的策略映射。我们希望这个 shaper 应用于所有流量,所以我们只为 class-default 定义了一个策略。形状为 9.5 Mbps。然后嵌套我们的排队策略。这意味着只要有可用带宽,流量就会被发送到 FIFO。一旦流量达到 95Mbps,路由器将开始对数据包进行排队,并根据 PM-FA0/0-QUEUE-OUT 将它们出列。
接下来,我们做一些面向未来的工作。默认情况下,接口上的服务策略将检查已封装的流量。路由器会将 DSCP 标记从内部 IP 数据包复制到外部 GRE 标头中,因此您仍然可以读取它们。但是,如果您实现了更复杂的类映射(使用访问列表或 NBAR),路由器将对 GRE 数据包的内部内容视而不见。“qos pre-classify”在封装之前制作数据包的副本,并将其用于 QoS 检查而不是 GRE 封装的数据包(更多阅读)。
最后,您的完整 QoS 策略应用于物理接口(而不是隧道!)。应用整形器可确保您的流量以 9.5 Mbps 的速度排队,并且根据您设置的队列策略处理任何排队的流量。
旁注:对入站流量进行速率限制没有任何好处。您只连接到另一个端点,并且您知道它的整形速度为 9.5Mbps。假设您的拓扑没有更多内容,最好不要尝试控制入站流量。
希望这可以帮助!