前言
交换机是数通行业高速发展的一个缩影。“点石成金”的先驱们不懈的探索,使交换机产业迅猛发展。相比于时下的交换机,早期的产品,无论是性能还是功能都有很大差距,但每个产品的出现都有其时代意义。让我们进入时光隧道,跟随前辈的足迹,去探访垦荒的年代吧。
本文既非工程学术文档,亦非原厂文宣,乃见微知著,温故而知新,文笔粗拙,贻笑大方。
正文
本文将从如何把多种交换功能集成到真实的交换机中的角度来浅谈完整的交换机是如何设计的。本文行文思路是沿着报文的走向,从交换机的输入端口遍历到输出端口,来看交换机是如何设计的。在每个报文处理过程阶段,本文都将研究一下其必须执行的操作,特别是针对于那些最基本的功能而必须采取的操作。
限于篇幅,本文只聚焦于交换机的最基本的功能,如IEEE802.3x流控制,IEEE802.3ad,链路聚合IEEE802.1p,IEEE802.1Q,虚拟局域网,IEEE802.1p/Q优先级操作,网络管理等。真实的交换机实现,其功能远远不止这些,本文只是一个粗浅的讨论。
下图是交换机的顶层框架设计示意图:
本文将主要讨论:
- 从LAN端口上接收帧的路径到交换机决定帧应传输到哪个输出端口(输入流)的路径
- 交换矩阵:在交换机的多个端口之间传输帧的机制
- 交换矩阵与帧到LAN端口(输出流)的(可能)传输之间的路径
1.内部管理
交换机数据平面中的时间敏感型操作只能由专用硬件芯片完成。
除了最简单的、低成本的、SOHO级别的交换机外,在基于硬件的交换机中一般都要用上嵌入式CPU。虽然所有的fastpath快速路径功能都可以由专用硬件执行,但大部分的后台进程,支持功能,网络管理和控制协议,实际上如果用专用硬件实现的话,既不必要也不实用。
下图描述了内部管理子系统的常见配置:
该子系统包括一个标准CPU以及用于存储操作代码和帧缓存区的存储器。代码存储一般采用非易失性存储器,通常使用EEPROM或闪存ROM。这可以通过在设备初始化时提供内部管理功能,而无需下载代码或本地大容量存储设备,同时仍允许在不更改硬件的情况下进行代码修改、错误修复和软件升级。DRAM中提供了帧缓存区和其他易失性数据的存储。
系统一般还提供串行端口用于初始设备配置,安全,带外管理,系统调试和代码修改下载等。还必须有一些可以在交换机的端口和内部处理子系统之间交换数据(通常是帧缓冲区),以便接收和传输的方法。这种交换机数据接口通常是专用的。它可能从端口内存和内部RAM之间的直接内存访问(DMA)通道到专有的内部总线结构而有所不同。交换机控制接口同样允许内部管理处理器以特定的实现的方式(交换机结构控制寄存器、端口配置寄存器等)直接控制底层硬件。
1.1 内部管理功能
大部分的控制和管理功能将在交换机内部管理处理器上实现,这些功能包括:
生成树协议:生成树BPDU帧在接收到后,由内部管理处理器进行处理,将接收到的信息与当前生成树状态进行对比。在未处于禁用或阻塞状态的端口上,内部管理处理器可以定期将生成树BPDU作为根网桥或响应接收的BPDU进行传输。
链路聚合控制协议(LACP):用于自动配置和维护聚合链路的协议。该协议对性能要求较低,因此可以在嵌入式CPU上的软件中执行。在任何交换机端口上接收到的LACP消息都将传递到内部管理处理器上运行协议处理。LACP必须能够将帧发送到到链路聚合中的特定物理链路上,而不是将帧作为一个整体指向聚合,也就是说,它将帧插入到物理端口队列中,而不是将链路聚合的端口队列插入到聚合的端口队列中。
标记协议:当在链路聚合内的物理链路之间传输会话时,交换机可以通过使用链路聚合标记协议来加速传输。也可以使用内部管理处理器将标记消息插入帧流中。由于标记和标记响应机制比其他一些控制协议更具有时间敏感性,因此,如需要频繁运行,则交换机可以在专用硬件或单独的CPU中实现该标记功能。
网络管理:基本上绝大部分的交换机管理功能,都在内部管理处理器上实现,如TCP/IP协议栈,SNMP协议实现,MIB,远程登录,内部Web服务器功能,本地串口功能,用户界面等等。
内部诊断和维护:内部管理处理器将运行内部管理系统自检诊断功能,如设备初始化,上电自检,诊断和调试例程,ROM代码更新等。
具有3层交换功能的交换机除了上述功能外,还需要执行另一组非快速路径的内部管理功能,如路由协议(如RIP,OSPF等)、IP控制协议(如IGMP,ICMP等)和IP选项处理等,这些可能会增加处理负担并影响系统性能。
对于以太网流控制功能(PAUSE机制),由于它是由严格的时序限制的,所以通常一定要用硬件实现。
1.2 具体实现
很多著名的嵌入式CPU都被用来作为内部管理处理器使用。在早期,Inteli960被广泛使用,之后MIPS处理器比较流行,现在ARM和Intel处理器更多。这些处理器都有多种处理性能,配置档次和价位可供选择,可以对内部管理子系统进行深度定制,以满足交换机的特定需求。
一般来说,上述功能不会带来太多的性能负担,但所有功能叠加在一起后,对整体性能要求可能会很大。所以根据所实现功能的数量和复杂性、交换机端口的数量以及预期的帧到达速率,可能需要使用多个内部管理处理器来共同分担工作负载。
2.交换机数据接收路径
下图描述了从输入端口接收到的报文在交换机中所走的路径
2.1 端口接口
媒体访问控制(MAC)和物理层接收器(PHY)组成了传统的网络接口功能。在接收端,PHY从介质中获取电信号或光信号,并根据所使用的特定技术将其解码为位、半字节或字节流。对于不同的介质(如双绞线或光纤等)和不同的技术(如数据速率和LAN类型等),PHY通常会有所不同。MAC执行必要的成帧和有效性检查,以从PHY提供的数据流中重建正确形成的帧。
通常接收MAC将在从PHY接收数据时,实时计算帧检查序列(FCS)值。如果FCS无效,MAC将丢弃帧。除了可能出于管理目的而递增错误计数器之外,交换机无需继续处理错误接收的帧。接收MAC通常将维护基于端口的实时统计计数器信息(如,RMON以太网统计信息)。
接收MAC必须将传入帧存储在本地缓存区中。如果交换机使用共享内存结构,则可能只需将帧一次性存储到公共缓存池中,而不必在输入和输出端口之间执行任何缓存区复制操作。在这种情况下,交换机仅维护未完成的缓存区指针列表并调整各种端口队列数据结构,而不是真的将帧数据从一个端口移动到另一个端口。对于其他架构(如crossbar交换矩阵),通常需要为每个端口(或端口组)提供帧缓存存储器,并在交换矩阵之间传输帧数据。
一直以来,PHY和MAC器件都是作为单独的封装集成电路器件出现的。现代芯片功能允许水平或垂直集成,即PHY器件提供四通道、十六进制、八进制或者更密集的集成配置,适用于以太网和其他技术。
MAC和PHY器件也可用作半导体内核,可集成到除MAC和PHY接口之外的可能正在执行其他交换功能的设备中。根据目标最终产品的性质,可以将整个交换机系统集成到SoC(片上系统)上。
2.2 接收流控制
在接口的接收端,流控制模块检查输入的流量以找到PAUSE帧。收到有效格式的PAUSE命令后,此模块将按照收到的暂停时间值指示更新暂停计时器,并根据需要向传输流控制模块提供控制信号。如在收到暂停时间值为非零的PAUSE帧时,必须告知接口的传输端停止接受来自MAC客户端的帧(如链路聚合),直到暂停计时器过期。如果收到PAUSE帧的暂停时间值为零,接口的传输端可以重新启用以接收需要传输的帧。解析、解释和操作接收的PAUSE帧的功能总是在专用硬件中实现。接收PAUSE帧和停止传输帧流之间的时间长度是有非常严格的限制的(十兆或百兆接口为512位,千兆接口为1024位时间)。
2.3 链路聚合收集器
收集器模块是将多个物理接口聚合到单个逻辑接口中,实现帧收集功能。该模块收集从每个底层物理接口接收到帧,并向分类引擎提供单个组合流。收集器不需要采取任何特殊措施来确保从每个物理接口接收帧的顺序正确。收集器还实现了包括标记协议的功能。此功能可以用有限状态机或用软件实现。根据特定交换机的设计,可以使用通用内部管理处理器来生成标记响应,但必须确保要有非常快的响应时间。通常聚合链接另一端在等待标记响应,然后再将一个或多个会话从聚合中的一个物理链接转移到另一个物理链接。如果标记响应延迟,则来自这些对话的通信将中止。通常链路聚合控制协议(LACP)将在内部管理处理器中实现,因为它的操作比标记协议时间的关键性要小得多。LACP帧始终使用链接受限协议的保留范围内的组播目标地址,分类引擎会将这些地址标记为本地接收器并转到内部管理处理器上处理。
2.4 分类引擎
根据功能和复杂程度的不同,分类引擎可能是交换机中更复杂、性能要求更高的器件之一。该模块从输入端口获取接收的帧流,并根据需要对其进行解析。
2.4.1 保留组播地址的本地接收
交换机必须识别和标记为链路受限协议所保留范围内的目标地址的帧,以确保它们不会通过交换矩阵转发到任何其他输出端口。通常这些帧包含生成树BPDU、链路聚合控制PDU和类似的协议消息。虽然以太网流控制也使用这些保留的组播地址,但PAUSE帧将由接收流控制模块中的硬件来操作,而且不会传送到分类引擎上进行处理。
2.4.2VLAN入口规则
这是用于将给定帧与其所属的VLAN关联的规则。在交换机中,每个帧都必须根据VLAN成员身份进行分类。有两种方法可以确定帧所属的VLAN。如果帧带有VLAN标记,则分类引擎的任务很简单,标记中包含的VLAN标识符告诉交换机哪个帧属于哪个VLAN。当然,分类引擎必须解析帧以确定它是否确实包含标记。在以太网上,这意味着将”类型”字段与VLAN协议标识符进行比较。如果帧未标记,则必须通过将一组VLAN关联规则应用于帧的内容来确定其VLAN成员身份。根据交换机的功能和所应用的管理策略的性质,帧到VLAN的隐式映射可能非常复杂。VLAN成员资格可以基于MAC地址、协议类型、网络层地址信息,TCP端口或更高层应用程序数据,既可以单独使用,也可以组合使用。因此,分类引擎所需做的工作如下:
解析帧中的多个字段:VLAN成员可能基于MAC地址、协议类型或组合获取的其他信息的分类。
执行串行条件解析:可能需要首先解析帧以确定更高层的协议类型,然后根据封装的协议查看帧中更深层次的不同字段。例如,VLAN成员资格可以基于包含IP数据包的那些帧的IP子网信息,以及包含IPX数据包的那些帧的IPX网络标识符。由于第二个限定符将具有不同的语法,并且在每个封装协议的帧中处于不同的位置,所以解析必须按顺序完成。
处理可变长度字段:根据协议和感兴趣的字段,分类引擎可能需要实时计算帧中的字段偏移量,作为解析信息的函数。例如,如果IP报文包含选项,则IP协议包头的长度将是可变的。检查位于IP包头之后的任何字段都需要可变偏移量。
执行表查找以确定VLAN映射:根据VLAN关联规则,分类引擎会将MAC地址、协议类型或其他已解析的信息与存储的映射数据库进行比较。这意味着分类引擎可以访问某种查找表或本地缓存。无论其复杂度如何,最终结果都会为从1到4094范围内的每个帧分配一个VLAN标识符。如果存在多个策略(如应用程序、MAC地址和基于端口的VLAN关联规则),则必须通过策略建立优先级顺序。例如,基于应用程序的VLAN映射的优先级可能高先于基于MAC地址的映射,该映射也会呈现匹配项。在没有将帧内容与任何规定的管理策略进行匹配的情况下,将使用输入端口的默认VLAN,也就是说,仅当没有其他规则应用于给定帧时,才会使用基于端口的VLAN映射。
2.4.3 优先级评估
除了根据VLAN成员身份对每个帧进行分类外,分类引擎还确定每个帧的用户优先级值,该数值通常是从0到7。优先级值可以是:从VLAN或优先级标记中提取的由LAN特定的优先级信令指示。从工程实现的角度来看,会是比较难的工作,因为它意味着以类似于隐式VLAN分类的方式解析帧并将结果与策略进行比较。\
2.4.4 一次性操作并保存结果
分类引擎执行从交换机的角度来确定帧的显著特征所需的整个帧的解析和字段比较。通过其处理,交换机可以知道:帧是否必须受链接约束;与帧关联的VLAN标识符;帧所分配的优先级;帧到达的端口(通过将帧传递到分类引擎的物理端口或聚合器);帧到达的时间(通过在收到帧时采用时间戳的方法);帧在收到时是否被标记或未标记(来自VLAN和优先级解析进程);帧数据有效负载是按标准位顺序还是非标准位顺序排列;帧是否携带单播或组播目的地址;依此类推,收集完所有这些信息后,将分类结果与帧一起记录,以便其他交换模块可以简单地检查分类向量,而不必在采取操作之前,重新检查帧以确定其特征。因此,大多数交换机会为每个接收的帧创建一个内部交换机包头,该帧在后续处理过程中随帧一起携带。在通过任何输出端口进行实际传输之前,包头被剥离。因此,内部交换机包头的格式不必符合任何特定标准。它可以根据给定交换机的特定需求和工程实现进行定制。
下图展示了一种可能的内部交换机包头格式:
根据工程实现的不同,内部交换机包头实际上可能与帧内容一起存储,或者它可能与帧的队列条目相关联。也就是说,帧内容本身可以与包头分开存储,并使用缓存区指针链接。使用时间戳是为了让交换机可以确定帧在接收和通过输出端口的传输之间的传输延迟。通过这种方式,交换机可以强制实施IEEE802.1D/Q的最大传输延迟约束。一般而言,时间戳不需要高颗粒度或绝对意义(即,只关心接收和传输之间的时间差,而不是绝对时间)。因此,颗粒度约为数十甚至数百毫秒的简单计数器通常就足够了。理想情况下,当帧实际到达输入端口的MAC表时,就要应用时间戳。在现实使用中,实际上在分类引擎中应用时间戳通常就足够了。如果需要,可以针对MAC表接收与分类引擎后续处理之间的任何已知延迟对时间戳进行规范化。
<未完待续>
希望本文能对了解数通网络设备提供一点粗浅的感性认识。
本文有关信息均来自公开资料。