见微知著-浅析数通交换机之五

前言

交换机是数通行业高速发展的一个缩影。“点石成金”的先驱们不懈的探索,使交换机产业迅猛发展。相比于时下的交换机,早期的产品,无论是性能还是功能都有很大差距,但每个产品的出现都有其时代意义。让我们进入时光隧道,跟随前辈的足迹,去探访垦荒的年代吧。
本文既非工程学术文档,亦非原厂文宣,乃见微知著,温故而知新,文笔粗拙,贻笑大方。

<续前文>

3.3.5 交换矩阵中的优先级

交换芯片可以为切换仲裁提供多个优先级。在此方案下,输入端口不仅针对特定的输出端口和请求类型发出请求,而且在指定的优先级发出请求。仲裁器使用请求优先级作为算法的输入,用于解析输出端口。对于同一端口,优先级较高的请求将先于优先级较低的请求获得。

仲裁器提供的优先级数量完全独立于交换机中的任何其他优先级机制(如分类优先级或输出队列服务类)。确定优先级的目的是以最快速度调度交换矩阵,以便将最重要的流量传输到输出端口。

3.4 输入队列与输出队列

不管交换矩阵如何设计,如果数据帧都能尽快到达输出队列的话,交换机都能发挥最佳效果。如果输出队列中存在数据帧且输出端口可用,则可以立即发送这些数据帧。

如果输出端口可用,但数据帧仍在交换矩阵的输入端等待,则输出端口将会处于不必要地空闲状态。此时无法发送仍位于输入队列中的数据帧。因此,如果数据帧必须等待,最好是在输出队列中等待,而不是在输入队列中等待。这样可以最大限度地提高输出端的通道利用率。

3.4.1 输入队列和共享内存交换矩阵

对于共享内存体系架构来说,实际上是没有任何与交换矩阵相关的输入队列的。数据帧以以下两种状态之一存储在内存中:

数据帧正在等待查找或分类引擎的处理:在这个节点上,还不知道需要将数据帧传输到的输出端口。内存正用于接收数据路径中的临时存储。此类数据帧不存在队头阻塞问题,因为它们尚未排队等待跨交换矩阵进行传输。

数据帧已插入到相应的输出队列中,正在等待传输:查找引擎完成其任务后,就会知道要将数据帧传输到的相应的输出端口。将此传输链接到目的端口的输出队列中会受到相应缓存区指针的影响。由于这可能是由查找引擎执行的操作,因此不会有数据帧等待在目的输出端口之间传输。虽然接收数据路径中会存在缓存区,但共享内存体系架构实际上不需要输入队列。

3.4.2 输入队列、输出队列和流控制

PAUSE流控机制允许设备请求发送方停止发送数据帧一段时间。之所以执行此操作,是因为交换机端口发现,如果数据帧继续到达,将立即出现缓存区溢出。一旦数据帧传输到交换机内的输出端口,使用PAUSE机制来防止缓存区溢出就变得相当困难。

输出队列上的数据帧通常来自多个不同的输入端口。当输出队列开始增长时,交换机知道在哪个输入端口上进行流控。PAUSE流控机制仅对维护交换矩阵的输入队列的体系架构有效。如果输入队列有溢出的危险,必须知道任何溢出都是由从输入端口到达的数据帧引起的,因此,可以在输入队列上应用高水位标记,并根据需要使用PAUSE流控机制。

即使使用输入排队系统,如果使用链路聚合,流控机制也会出现问题。由于交换矩阵仲裁机制和聚合器的数据帧收集器,通常都不知道链路用于在多个链路之间分发帧的算法,因此无法确定聚合中的哪个物理链路接收会最终导致队列溢出数据帧。除非限制由于单个流量密集型对话而导致的整个聚合,否则流控机制只能用于防止数据帧收集器中的单个物理链路队列,而不是交换矩阵的聚合输入队列。IEEE802.3x流量控制专门设计用于防止内存受限、输入排队的交换机在瞬态过载条件下出现缓存区溢出。

4.交换机数据传输路径功能

交换矩阵向每个输出端口提供数据帧流。这些数据帧可能已从单个输入或多个输入端口进入交换机。在将它们发送到物理链路之前,需要执行一些额外的检查和处理。下图描述了输出端口(传输)数据路径中的逻辑功能模块。

d029ba3e3d007f31_html_b85e4cbe47ef6431

以下各节将介绍在其中每个功能模块执行的操作。

4.1 输出过滤器

对于针对给定输出端口的数据帧,需要执行两个与VLAN相关的检测,然后才能进行实际排队传输。出口过滤器确定输出端口是否位于数据帧所属的VLAN的成员集合中。不能在不属于其关联VLAN的成员集合的端口上发送数据帧。在大多数情况下,数据帧是不会通过交换矩阵转发到VLAN成员集合的输出端口的。但由于筛选数据库中的静态表项不一致或共享VLAN学习的操作,数据帧可能会出现在不应在该端口上发送的输出处。出口过滤器会检测并防止这种情况。

对于应在输出端口上正确传输的每个数据帧,出口规则功能确定是否必须以标记或取消标记发送该数据帧。这是基于每个数据帧做出的,这是数据帧所属VLAN功能。对于此输出端口位于成员集合中的每个VLAN,将在管理控制下发送所有已标记或全部未标记的数据帧。出口规则的设置是基于标记感知设备是否必须在此输出端口连接到的链路上接收此VLAN的数据帧。

出口规则和出口过滤器可以通过使用简单的输出过滤器表同时使用,如下图所示:

d029ba3e3d007f31_html_817fe40e9154216e

对于VLAN标识符的4096个可能值中的每一个,表示端口是否在成员集合中(出口过滤器),指示数据帧是应标记还是取消标记(出口规则)。这是不需要复杂的查找机制的,内部交换机数据帧头中的VLAN标识符可用作直接进入输出过滤表的指针。此外,输出过滤表只需要1KB内存。

做出标记决定后,创建标记所需的所有信息都已存在于内部交换机数据帧头中。VLAN标识符、优先级和其他信息都是在接收数据帧时由分类引擎确定的。在此过程中,只需决定是否在传输的数据帧中包含这些字段。

在稳定状态下,筛选数据库的配置会防止交换机根据生成树协议的操作将数据帧转发到未处于转发状态的端口。但当筛选数据库尚未收敛到新的稳定状态时,可能存在瞬态状态,即不能始终依赖筛选数据库来实现生成树端口状态。出口过滤器可以防止数据帧意外传输到处于不恰当状态的端口上。如果端口被定义为不在任何VLAN的成员集合中,则通过交换矩阵转发的所有数据帧都将在输出端被丢弃。内部管理处理器仍可以采用将它们直接插入到出口过滤器之后的输出队列中的方法,提交BPDU以便在处于侦听或学习状态的端口上进行传输。

4.2 输出队列和优先级处理

在上述处理之后,从输出过滤器通过的数据帧被放入到该端口上的一个输出队列中。正是在输出队列中实现了交换机提供的各种服务类别CoS,每个CoS通常有一个队列。内部交换机数据帧头包含由分类引擎确定的每个数据帧的优先级。此优先级映射到CoS(以及输出队列)。

输出队列的数量通常在1到8的范围内。这是一种实现上的权衡。更多的输出队列在CoS中提供更大的颗粒度,但代价是内存数据结构更复杂,且会要有更大的总内存量。

数据帧取消排队,并根据输出队列调度程序中实现的优先级策略提交以进行传输。调度策略可能包括严格优先级、加权公平排队等。

不管采用怎样的策略,最终结果都是按优先级顺序在输出端口上传输单个数据帧流。内部管理处理器处理输出进程流中的本地源帧。即数据帧可以插入到其中一个优先级队列中,直接插入到单个优先级输出流中,甚至可以插入到链路聚合分发服务器之后的单个物理链路的输出队列中。更高层的应用程序流量(SNMP、HTTP、Telnet等)可以提交到与应用程序相对应的优先级的正常输出队列之中。生成树BPDU可以被优先级调度程序直接插入到输出流中。

链路聚合控制协议(LACP)消息可以根据需要插入到聚合链路的各个物理链路队列中。如果内部管理处理器在本地处理数据帧,则不需要通过输出过滤器进行检测。

4.3 链路聚合分发服务器

如果输出端口包含多个物理端口的聚合,则需要获取来自输出调度的数据帧流,并将每个数据帧分配给特定的物理接口。该选路是依据聚合器中的分发算法决定的。分发服务器确定每个数据帧所属的会话(基于会话映射规则),并将其分配给一个可用的物理接口。分发服务器还要代表自己将数据帧独立地定向到物理端口,如在将会话从一个物理端口传输到聚合中的另一个物理端口时,需要生成标记消息。

4.4 传输流控制

在正常情况下,传输流控制模块以透明方式将分发服务器(或输出调度程序)提交的数据帧传递到传输MAC。既不修改也不干扰数据帧的传输,除非接收流控制模块已检测、解析和解码了包含暂停时间参数的非零值的PAUSE帧。在这种情况下,传输流最初会暂停接口,不将数据帧提交到MAC,直到暂停计时器过期(或者通过接收暂停时间为0的PAUSE帧来清除)。用于停止帧流的方法依赖于实现。通常,某些内部机制(如DMA引擎或内存控制器)只会阻止其他数据帧缓存区指针链接到MAC控制器的传输队列中。

如果交换机需要确认向其伙伴进行流控,则无论数据帧转发是否已停止,它始终可以将PAUSE帧插入到传输流中。确认流控机制的信号可能来自内部管理处理器,也可能来自接口接收端的队列缓存区管理器(如链路聚合收集器或交换矩阵输入队列)。

4.5 时间戳

在最终发送数据帧之前,还需要进行资格检测。在输入端口,在到达时为每个数据帧添加时间戳。需要将该时间戳与当前时间进行比较,以查看该数据帧是否已超过其应出现的状态。网桥会对通过输出端口接收和转发之间的数据帧所经历的传输时延设定上限。除非可以保证此上限,否则时间戳机制可确保丢弃数据帧,而不是以过多的延迟来转发数据帧。

4.6 端口接口(传输)

系统一直在检查、限定、修改和操作数据帧,让它们通过输出端口,离开交换机。传输端口接口实现适用于此特定端口上使用的MAC和PHY功能。

在共享(半双工)信道上,传输MAC为正在使用的LAN技术执行必要的信道仲裁功能。在全双工链路上,无需与任何其他工作站争用信道,MAC可以在数据帧可用时传输数据帧。物理接口(PHY)将MAC发出的数据流转换为适合所用介质的电信号或光信号。

在典型的终端应用中,传输MAC会为所有传出数据帧生成正确的FCS。在交换机中,会有两种可能性:

转发的数据帧与接收的数据帧不同(逐位):由于插入、修改或剥离VLAN标记,或者由于输入和输出端口上不同LAN技术之间的数据帧格式转换,交换机可能在接收和传输之间修改了数据帧的内容。如果转发的数据帧与接收的数据帧不完全相同,则必须在传输之前计算新的FCS。通常,此功能将由传输MAC实体在硬件中执行。

转发的数据帧与接收的数据帧相同:如果转发的数据帧中的每个位都与接收的数据帧中的每个位完全相同,则原始FCS仍然有效。交换机不需要计算传输MAC中的FCS,而是简单地将数据帧与接收的FCS一起转发。这意味着传输MAC实体必须能够逐帧启用或禁用FCS生成。交换机端口可以通过检查内部交换机数据帧头中的标志位来确定是否已进行帧修改。

此时,数据帧就离开了交换机,完成了数据帧在交换机中的“一日游”。

结束语

本文通过数据帧在交换机中的流向,粗浅地讨论了数通交换机的基本功能。当然真实的交换机会复杂的多得多。“见微知著”,这正是本文的初心。

<全文结束>

希望本文能对了解数通网络设备提供一点粗浅的感性认识。
本文有关信息均来自公开资料。

滚动至顶部