首页> 中国专利> 将分组拆分成各层以供修改且之后将层拼接的方法及装置

将分组拆分成各层以供修改且之后将层拼接的方法及装置

摘要

本公开涉及将分组拆分成各层以供修改且之后将层拼接的方法及装置。用于修改分组报头的装置的实施例涉及用于将分组拆分成各个层并且用于智能地将它们拼接回到一起的指针结构。指针结构包括指向N+1个协议报头的N+1个层指针。指针结构也包括所有报头的总大小。重写引擎使用层指针提取在分组内的前N个对应协议层以供修改。重写引擎使用层指针形成尾指针,该尾指针与所有报头的总大小一起与报头的正文关联。报头的正文是报头中的未被重写引擎修改的部分。在执行所有修改并且压缩经修改的报头之后,使用经修改的层指针来将经修改的报头与报头的正文拼接回到一起。

著录项

  • 公开/公告号CN105282137A

    专利类型发明专利

  • 公开/公告日2016-01-27

    原文格式PDF

  • 申请/专利权人 凯为公司;

    申请/专利号CN201510276426.4

  • 申请日2015-05-26

  • 分类号H04L29/06(20060101);H04L29/08(20060101);H04L12/931(20130101);

  • 代理机构11256 北京市金杜律师事务所;

  • 代理人王茂华;董典红

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-18 13:43:06

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-05-15

    专利权的转移 IPC(主分类):H04L29/06 登记生效日:20200424 变更前: 变更后: 申请日:20150526

    专利申请权、专利权的转移

  • 2020-03-17

    授权

    授权

  • 2018-12-21

    著录事项变更 IPC(主分类):H04L29/06 变更前: 变更后: 申请日:20150526

    著录事项变更

  • 2017-06-30

    实质审查的生效 IPC(主分类):H04L29/06 申请日:20150526

    实质审查的生效

  • 2016-01-27

    公开

    公开

说明书

技术领域

本发明涉及分组报头修改。更具体地,本发明涉及一种将分组拆分成各个层以供修改并且在修改之后智能地将层拼接回到一起的方法及其装置。

背景技术

网络分组经由因特网使用的协议、比如传输控制协议/网际协议/以太网协议(TCP/IP/以太网)承载数据。典型交换机能够在向目的地或者向另一交换机发送出分组之前修改传入的分组的各种字段。出于各种原因而修改传入的分组,比如分组将被转发到何处、目的地支持的协议、分组的优先级、协议报头的传入格式等。由于网络协议正在演变,协议报头的一个或者多个字段可以是可任选的,这使交换机的硬件变复杂,因为在协议报头内的给定的字段可能不总是处于固定的偏移。

在分组的修改期间,现有技术的交换机线性地处理分组中的每个协议层。这样的处理会产生与网络有关的性能问题,包括时延,这可能使实现方式过度提供处理资源。

发明内容

用于修改分组报头的装置的实施例涉及用于将分组拆分成各个层并且用于智能地将它们拼接回到一起的指针结构。指针结构包括指向N+1个协议报头的N+1个层指针。指针结构也包括所有报头的总大小。重写引擎使用层指针来提取在分组内的前N个对应协议层以供修改。重写引擎使用层指针来形成尾指针,该尾指针与所有报头的总大小一起与报头的正文关联。报头的正文是报头中的未被重写引擎修改的部分。在执行所有修改并且压缩经修改的报头之后,使用经修改的层指针来将经修改的报头与报头的正文拼接回到一起。

在一个方面中,提供一种重写引擎的方法。该方法包括针对每个分组维护指针结构。指针结构包括层指针和分组的所有报头的总大小。层指针中的每个层指针对应于分组中的关联层的起始定位。

在一些实施例中,指针结构包括N+1个层指针,并且重写引擎修改分组的N个层。在一些实施例中,层指针形成尾指针。具有总大小的尾指针指示报头的正文。报头的正文是报头中的未被重写引擎修改的部分。

该方法也包括基于层指针拆分分组的层以供层修改。在一些实施例中,拆分分组的层包括:从分组的协议报头检测缺失字段,基于检测,将协议报头扩展成用于对应协议的通用格式,以及使用来自通用命令集合的至少一个命令来修改经一般化的协议报头。

在一些实施例中,通用格式包括协议的所有可能字段。无论协议报头对应于协议的哪个变体,字段中的每个字段都具有相同偏移。

在一些实施例中,扩展协议报头包括:针对经一般化的协议报头维护位矢量,其中位矢量包括用于经一般化的协议报头的每个字节的每字节的位,针对每个有效字段的每个字节将位标注为可用,以及针对每个无效字段的每个字节将位标注为不可用。

在一些实施例中,使用至少一个命令包括在修改之后更新位矢量。

该方法也包括基于层修改来更新层指针。

该方法也包括基于经更新的层指针将层拼接回到一起。

在另一方面中,提供一种网络交换机的方法。该方法包括:在网络交换机的传入端口处接收分组;以及使用指针结构来分离分组的协议层。在一些实施例中,在使用指针结构之前,基于分组的经解析的数据来初始化指针结构。

在一些实施例中,指针结构包括指向分组的N+1个位置的N+1个层指针和分组的所有报头的总大小。位置包括协议层的起始定位。

该方法也包括使经分离的协议层一般化以供修改。在一些实施例中,使经分离的协议层一般化以供修改包括:针对每个层,提取层的大小以确定大小是否超过用于修改层的硬件能力。在一些实施例中,通过将指针结构中的两个相邻层指针相减来提取大小。基于确定,使用两个相邻层指针中的第一层指针并且形成正文。

该方法也包括:基于修改来更新指针结构,使用经更新的指针结构来智能地将经修改的协议层拼接回到一起,以形成新协议报头;以及经由网络交换机的传出端口发送出具有新协议报头的分组。

在又一方面中,提供一种网络交换机。网络交换机包括:输入端口和输出端口,用于接收和发送分组;解析器引擎,用于解析分组;以及指针结构,与分组关联。指针结构用由解析器引擎解析的数据来初始化。

在一些实施例中,指针结构包括层指针和分组的报头栈的总大小。每个层指针指向分组中的层。

网络交换机也包括重写引擎,用于使用指针结构来将分组拆分成各个层以进行经一般化的协议层的修改并且随后拼接经修改的层以形成新协议报头栈。

在一些实施例中,重写引擎在修改之后更新指针结构。在一些实施例中,新协议报头栈基于经更新的指针结构而形成。

在一些实施例中,网络交换机也包括存储器。在一些实施例中,存储器存储用于使各个层一般化的、协议的通用格式的由软件定义的映射的集合。在一些实施例中,存储器存储通用命令集合,其中通用命令集合被用于报头修改,而不管传入的报头如何。

在又一方面中,提供一种网络交换机。网络交换机包括用于接收分组的输入端口,其中分组包括正文和协议栈。网络交换机也包括用于发射经修改的分组的输出端口。

网络交换机也包括用于存储协议的通用格式的由软件定义的映射的集合和通用修改命令集合的存储器,其中通用命令集合被用于报头修改,而不管传入的报头如何。

网络交换机也包括用于解析分组的解析器引擎和与分组关联的指针结构。指针结构通常用由解析器引擎解析的数据来初始化。

网络交换机也包括重写引擎。重写引擎使用指针结构来基于协议层拆分分组,使得分组的每个协议层被分离。在一些实施例中,指针结构包括指向分组的N+1个位置的N+1个层指针和分组的所有报头的总大小。在一些实施例中,位置包括协议层的起始定位。

重写引擎基于来自由软件定义的映射的集合的由软件定义的映射将每个协议报头转换成通用格式。在一些实施例中,重写引擎也针对每个经转换的协议报头维护位矢量。位矢量包括针对经转换的协议报头的每个字节的每字节的位。

重写引擎使用通用修改命令集合来修改经转换的协议报头并且拼接经修改的协议报头以形成新协议报头栈。在一些实施例中,重写引擎向新协议报头栈附着正文以经由输出端口发射。

附图说明

前文将从如附图中所示本发明的示例实施例的以下更具体描述中变清楚,在附图中,相似标号贯穿不同视图指代相同部分。附图未必按比例、代之以着重于图示本发明的实施例。

图1图示分组的示例协议层组合。

图2图示根据本发明的一些实施例的本地协议表的示例结构。

图3图示根据本发明的一些实施例的网络交换机的示例方法。

图4图示根据本发明的一些实施例的网络交换机的另一示例方法。

图5图示根据本发明的一些实施例的将传入的分组的层进行报头扩展成通用格式的图。

图6A-6B图示根据本发明的一些实施例的协议报头的示例一般化。

图7A-7C图示根据本发明的一些实施例的协议报头的另一示例一般化。

图8A-8C图示根据本发明的一些实施例的协议报头的又一示例一般化。

图9A-9F图示根据本发明的一些实施例的协议报头的示例修改。

图10A-10E图示根据本发明的一些实施例的协议报头的另一示例修改。

图11图示根据本发明的一些实施例的重写引擎的方法。

图12图示根据本发明的一些实施例的网络交换机的又一方法。

图13图示根据本发明的一些实施例的网络交换机的又一方法。

图14图示根据本发明的一些实施例的网络交换机的又一方法。

图15图示根据本发明的一些实施例的网络交换机的又一方法。

图16图示根据本发明的一些实施例的重写引擎的另一方法。

图17图示根据本发明的一些实施例的网络交换机的又一方法。

图18图示根据本发明的一些实施例的重写引擎的又一方法。

图19图示根据本发明的一些实施例的网络交换机的又一方法。

图20图示根据本发明的一些实施例的层结构的示例图。

图21图示根据本发明的一些实施例的重写引擎交换机的又一方法。

图22图示根据本发明的一些实施例的网络交换机的又一方法。

具体实施方式

在以下描述中,出于说明的目的而阐述许多细节。然而,本领域普通技术人员将认识到,可以在不使用这些具体细节的情况下实施本发明。因此,本发明并不旨在于限于所示实施例,而是将被赋予与这里描述的原理和特征一致的最广范围。

引言

网络设备、比如网络交换机能够切换/路由网络流量。网络交换机包括用于接收和发送分组的至少一个输入/传入端口和至少一个输出/传出端口。在一些实施例中,网络交换机也包括解析器和重写器。解析器可以包括用于标识网络分组的内容的一个或者多个解析器引擎,并且重写器可以包括用于在分组从网络交换机被发送出之前修改它们的一个或者多个重写引擎。解析器引擎和重写引擎是灵活的并且在可编程基础上操作。

网络交换机也包括用于存储网络交换机使用的数据的存储器。例如存储器存储通用命令集合。简言之,通用命令通常被用来修改协议报头。对于另一示例,存储器也存储协议的通用格式的由软件定义的映射。简言之,根据对应协议特有的由软件定义的映射中的一个映射表示每个协议报头。如将变得清楚的那样,这些映射可以被用在协议的不同变体上以及用在包括新协议的不同协议上。对于又一示例,存储器也存储协议表。简言之,协议表包括被编程到协议表中的每个协议层组合的每个协议层的层信息。对于又一示例,存储器也存储计数器和统计量。

在以太网中,分组包括多个协议层。每个协议层承载不同信息。公知层的一些示例是:

·以太网

·PBB以太网

·ARP

·IPV4

·IPV6

·MPLS

·FCOE

·TCP

·UDP

·ICMP

·IGMP

·GRE

·ICMPv6

·VxLAN

·TRILL

·CNM

在理论上,协议层可以按照任何顺序出现。然而,这些层的仅一些公知组合出现。这些层的有效组合的一些示例是:

·以太网

·以太网、ARP

·以太网、CNM

·以太网、FCoE

·以太网、IPV4

·以太网、IPV4、ICMP

·以太网、IPV4、IGMP

唯一分组标识符

在一些实施例中,网络交换机支持17个协议和八个协议层。因此有817个可能协议层组合。图1图示分组的示例协议层组合。例如分组可以包括三协议层组合比如以太网、IPv4和ICMP。对于另一示例,分组可以包括七协议层组合比如以太网、IPv4、UDP、VxLAN、以太网和ARP。

虽然有817个可能协议层组合,但是这些层中的仅一些公知组合出现。所有已知协议层组合被唯一地标识和翻译成称为分组标识符(PktID)的唯一编号。在网络交换机的存储器中存储的协议表被编程为包括每个已知协议层组合的每层的层信息。在实践中,本地协议表包括少于256个协议层组合。在一些实施例中,这一本地表包括212个已知协议层组合。本地表被编程为包括或多或少协议层组合。

图2图示根据本发明的一些实施例的本地协议表200的示例结构。在本地表200中的使用PktID索引的每个协议层组合包括用于该协议层组合的每个协议层的信息,该信息被示出为层0信息、层1信息和层N信息。通过对PktID进行索引,可以访问或者获取用于分组的所有N层的信息。

用于每个协议层的信息至少包括以下信息:层类型、层数据偏移和杂项信息。然而,更多信息可以被存储在本地表200中。简言之,层类型是指协议层的关联协议(例如IP/TCP/UDP/以太网),层数据偏移提供协议层中的层数据的开始位置,并且杂项信息包括比如校验和和长度数据之类的数据。

通常,解析器引擎能够标识在网络交换机处接收的传入的分组的PktID。重写引擎使用PktID作为至协议表的关键字,该协议表向重写引擎提供为了使用于修改的分组的每个协议层一般化而需要的所有信息。换而言之,重写引擎使用PktID从协议表访问或者获取用于分组中的协议层中的每个协议层的信息,而不是从解析器引擎接收解析结果。

层类型。层类型和对分组的一个或者多个字段的哈希的唯一组合向重写引擎提供用于每个协议层的“通用格式”。在一些实施例中,这一唯一组合指定在存储器中存储的协议的通用格式的由软件定义的映射中的一个映射。通用格式由重写引擎用来扩展协议层并且使用软件命令来修改协议层。这一信息也向重写引擎告知每个协议层在分组内何处开始。

层数据偏移。重写引擎使用数据修改传入报头层。这一数据可以在分组中任何处被扩展。由于层大小可以变化,所以向重写引擎在修改期间需要使用的数据的偏移可以变化,这限制对重写引擎可以从何处拾取什么数据的硬件灵活性。

以分层方式布置来自传入的分组报头的提取的数据。布置提取的数据结构,使得层数据结构的开始偏移每PktID是唯一的。每层的层数据偏移用来标识用于修改的提取的数据的位置。由于通过分组的PktID标识在分组内的层的结构和来自层的提取的数据的位置,所以软件和硬件使用相同唯一标识符来管理提取的数据,这简化重写引擎中的命令。

杂项信息。比如校验和和长度数据之类的信息向重写引擎告知对于关联协议层的特殊处置要求,比如校验和重新计算以及报头长度更新。

分组一般化方案允许软件定义通用命令的小集合,该集合完全地基于给定的协议层并且独立于在这一协议层之前或者之后的层。分组一般化方案也提供硬件灵活性以使自身针对协议改变和添加而不会过时。

图3图示根据本发明的一些实施例的网络交换机的示例方法300。网络交换机通常包括解析器引擎和重写引擎。

在步骤305,解析器引擎检查传入的分组以标识分组的PktID。在一些实施例中,解析器引擎向重写引擎传递PktID,而不是向重写引擎传递分组的解析的数据。

在步骤310,重写引擎参考协议表,该协议表定义网络交换机接收的分组的不同分组结构。重写引擎使用PktID作为至协议表的关键字,以提取修改所必需的用于分组的每个协议层的信息。

在步骤315,重写引擎基于在协议表中存储的数据修改分组。通常,重写引擎在修改分组之前扩展分组的每个协议层。协议层扩展和修改在别处讨论。

图4图示根据本发明的一些实施例的网络交换机的另一示例方法400。网络交换机通常包括存储器和至少一个传入端口。

在步骤405,在存储器中存储协议表。协议表定义分组的不同分组结构。分组结构中的每个分组结构由PktID进行索引。分组结构中的每个分组结构表示协议层组合并且包括协议层组合的每个协议层的层信息。协议表可以被更新以添加表示新协议的新分组结构。协议表也可以被更新以响应于协议的改变来修改分组结构。

在步骤410,在传入端口处接收分组。

在步骤415,标识分组的PktID。在一些实施例中,解析器引擎标识分组的PktID。

在步骤420,访问用于分组的每个协议层的信息。通常,信息位于协议表中。在一些实施例中,信息被用来根据用于对应协议的通用格式使分组的协议报头一般化。通用格式在存储器中由软件定义。

如别处说明的那样,经一般化的协议报头可以通过将至少一个命令应用于经一般化的协议报头来修改。在一些实施例中,通过使用信息确定用来修改经一般化的协议报头的数据的位置,由此修改经一般化的协议报头。网络交换机的重写引擎通常使协议报头一般化并且修改经一般化的协议报头。

通用格式

如以上简要地说明的那样,重写引擎以对应协议特有的通用格式表示分组的每个协议报头,以实现分组的可编程修改,从而产生在修改分组报头时的硬件和软件灵活性。

图5图示根据本发明的一些实施例的将传入的分组的层进行报头扩展成通用格式的图500。在图5中,传入的分组包括八个协议层。每个协议层具有用于相应协议的报头。更多或者更少协议层如以上指示的那样是可能的。重写引擎能够如图5中所示从协议报头中的任何协议报头检测缺失字段并且将每个协议报头扩展成它的通用格式。规范层是指已经扩展成它的通用格式的协议层。简言之,每个规范层包括位矢量,该位矢量具有对于无效字段标注为0的位和对于有效字段标注为1的位。

图6A-8C图示根据本发明的一些实施例的重写引擎如何对以太网协议工作的示例。图6A-8C中所示示例证明,重写引擎能够对比如以太网协议之类的协议的不同变体工作。每个示例举例说明以太网协议的传入报头及其对应通用格式。虽然未讨论其它协议,但是注意重写引擎对其它协议相似地工作。

图6A图示传入的分组的示例以太网分组报头的格式600。以太网分组报头600是22字节并且包括五个字段:源地址(SA)字段、目的地地址(DA)字段、服务VLAN标记字段、客户VLAN标记字段和以太类型字段。SA字段和DA字段各自为6字节。服务VLAN标记字段和客户VLAN标记字段各自为4字节。以太类型字段为2字节。具有以太网分组报头600的分组是以太网分组的最大变体并且具有最大大小22字节。

重写引擎处理以太网分组报头600并且确定没有任何字段从以太网分组报头600缺失。以太网分组报头600的通用格式因此与以太网分组报头600的通用格式相同,因为以太网分组报头600包含所有可能字段。图6B图示表示图6A的以太网分组报头600的位矢量605。位矢量605的每个位对应于以太网分组报头600的22字节的一个字节。位矢量605包含所有1,因为以太网分组报头600的所有字段由于字段在以太网分组报头600中存在而都为有效或者具有值。因而,以太网分组报头600由通用格式{22'b111111_111111_1111_1111_11}表示。

图7A图示传入的分组的另一示例以太网分组报头的格式700。以太网分组报头700为18字节并且仅包括四个字段:SA字段、DA字段、客户VLAN标记字段和以太类型字段。以太网分组报头700缺失服务VLAN标记字段。具有以太网分组报头700的分组是以太网分组的另一变体。

重写引擎处理以太网分组报头700,并且确定服务VLAN标记字段从以太网分组报头700缺失,并且通过在以太网分组报头700的通用格式的适当位置处包括缺失的服务VLAN标记字段来将以太网分组报头700扩展成它的最大大小22字节。图7B图示扩展的以太网分组报头的通用格式700’。扩展的以太网分组报头700’包括以太网协议的包括缺失的服务VLAN标记字段的所有可能字段。在扩展的以太网分组报头700’中的有效字段是SA字段、DA字段、客户VLAN标记字段和以太类型字段,因为它们在以太网分组报头700中存在。在扩展的以太网分组报头700’中的无效字段是服务VLAN标记字段,因为它在以太网分组报头700中不存在、而是被添加在扩展的以太网分组报头700’中。

图7C图示表示图7B的扩展的以太网分组报头700’的位矢量705。位矢量705的每个位对应于扩展的以太网分组报头700’的22字节中的一个字节。位矢量705包含用于所有有效字段的1,这些字段是SA字段、DA字段、客户VLAN标记字段和以太类型字段。位矢量705包含用于所有无效字段的0,这些字段仅为服务VLAN标记字段。因而,以太网分组报头700由通用格式{22'b111111_111111_0000_1111_11}表示。

图8A图示传入的分组的另一示例以太网分组报头的格式800。以太网分组报头800为14字节并且仅包括三个字段:SA字段、DA字段和以太类型字段。以太网分组报头800缺失服务VLAN标记字段和客户VLAN标记字段。具有以太网分组报头800的分组是以太网分组的最小变体。

重写引擎处理以太网报头800,并且确定服务VLAN标记字段和客户VLAN标记字段从以太网分组报头800缺失,并且通过在以太网分组报头800的通用格式的适当位置处包括缺失的服务VLAN标记字段和缺失的客户VLAN标记字段来将以太网分组报头800扩展成它的最大大小22字节。图8B图示扩展的以太网分组报头的通用格式800’。扩展的以太网分组报头800’包括以太网协议的包括缺失的服务VLAN标记字段和缺失的客户VLAN标记字段的所有可能字段。在扩展的以太网分组报头800’中的有效字段是SA字段、DA字段和以太类型字段,因为它们在以太网分组报头800中存在。在扩展的以太网分组报头800’中的无效字段是服务VLAN标记字段和客户VLAN标记字段,因为它们在以太网分组报头800中不存在、而是被添加在扩展的以太网分组报头800’中。

图8C图示表示图8B的扩展的以太网分组报头800’的位矢量805。位矢量805的每个位对应于扩展的以太网分组报头800’的22字节中的一个字节。位矢量805包含用于所有有效字段的1,这些字段是SA字段、DA字段和以太类型字段。位矢量805包含用于所有无效字段的0,这些字段是服务VLAN标记字段和客户VLAN标记字段。因而,以太网分组报头800由通用格式{22'b111111_111111_0000_0000_11}表示。

如图6A-8C中所示,无论传入以太网报头的变化如何,一旦执行将以太网报头扩展成通用格式,字段偏移与最大大小的以太网报头(例如图6A的以太网分组报头600)相同。报头扩展有利地无论传入以太网报头如何都允许相同软件命令集合工作,因为以太网报头被扩展成最大大小的以太网报头。这样,例如修改以太类型字段的命令将无论接收到哪个以太网报头都总是指向相同偏移。

报头的通用格式产生在修改分组报头方面的硬件和软件灵活性。硬件能够修改分组报头,而不管字段在分组报头内驻留于何处。硬件可以通过软件被编程以支持新协议。软件在用于各种报头协议的硬件表中对通用格式进行编程。

假设1(传入的分组是单标记的以太网分组,传出的分组是无标记的以太网分组):假设网络交换机的输入以太网端口正在接收具有客户VLAN标记的分组,并且分组需要无标记地被转发到输出以太网端口。图9A图示在这一传入以太网端口处接收的分组的示例以太网分组报头的格式900。对于在这一传入以太网端口处接收的分组,软件将以太网报头的通用格式编程为{22'b111111_111111_0000_1111_11}。重写引擎接收报头协议层并且向存储器进行索引,该存储器向硬件告知用于这一报头协议的通用格式是{22'b111111_111111_0000_1111_11}。在这一情况下,硬件预期前12个连续字节(各自标注为1)和将被移位四个字节的接下来六个字节(各自标注为1)。与位矢量中标注为0的四个位对应的四个字节无效。

基于通用格式{22'b111111_111111_0000_1111_11},重写引擎将传入报头协议层扩展成图9B中所示的扩展的报头905并且维护针对扩展的报头层905的每个字节的每字节的位。在图9C中示出用于扩展的报头905的对应位矢量910。位矢量910向硬件告知哪些字节有效而哪些无效。

基于转发判决,在这一假设1中,需要无标记地转发分组。硬件基于传出以太网端口的出口端口类型向命令表进行索引,该命令表告知硬件删除客户VLAN标记。客户VLAN标记总是在固定的偏移、即16处开始。由于命令被应用于通用格式,所以用于删除客户VLAN标记的命令是“从位置16开始删除(客户VLAN标记的)4个字节”。硬件简单地标注这四个字节为无效并且删除它们。图9D图示在通用格式中的无标记的以太网报头915。图9E图示用于无标记的以太网报头915的位矢量920。在去除所有无效字节之后,硬件形成图9F中所示的新报头925。经由传出以太网端口发送出具有新报头925的分组。

假设2(传入的分组是双标记的以太网分组,传出的分组是无标记的以太网分组):假设网络交换机的输入以太网端口接收具有服务VLAN标记和客户VLAN标记的分组,并且分组需要无标记地被转发到输出以太网端口。图10A图示在这一传入以太网端口处接收的分组的示例以太网分组报头的格式1000。对于在这一传入以太网端口处接收的分组,软件将以太网报头的通用格式编程为{22'b111111_111111_1111_1111_11}。重写引擎接收报头协议层并且向存储器进行索引,该存储器向硬件告知用于这一报头协议的通用格式是{22'b111111_111111_1111_1111_11}。在这一情况下,硬件预期所有22个连续字节(各自标注为1)

基于通用格式{22'b111111_111111_1111_1111_11},重写引擎无需扩展传入报头协议层,因为报头协议已经处于它的最大大小。在图10B中示出用于报头1000的对应位矢量1005。位矢量1005向硬件告知哪些字节有效而哪些无效。

基于转发判决,在这一假设2中,需要无标记地转发分组。硬件基于传出以太网端口的出口端口类型向命令表进行索引,该命令表告知硬件删除客户VLAN标记和服务VLAN标记。客户VLAN标记总是在固定的偏移、即16处开始。相似地,服务VLAN标记总是在固定的偏移、即12处开始。由于命令被应用于通用格式,所以用于删除客户VLAN标记的命令是“从位置16开始删除(客户VLAN标记的)4个字节”,而用于删除服务VLAN标记的命令是“从位置12开始删除(服务VLAN标记的)4个字节”。硬件简单地标注这八个字节为无效并且删除它们。图10C图示通用格式中的无标记的以太网报头1010。图10D图示用于无标记的以太网报头1010的位矢量1015。在去除所有无效字节之后,硬件形成图10E中所示的新报头1020。经由传出以太网端口发送出具有新报头1020的分组。

假设3(传入的分组是无标记、单标记或者双标记的以太网分组,传出的分组是双标记的以太网分组):假设网络交换机的输入以太网端口正在接收无标记、具有服务VLAN标记、客户VLAN标记或者两个标记的分组,并且分组需要被作为双标记、但是具有新标记而转发到输出以太网端口。如果传入的分组是双标记的,则软件将以太网报头的通用格式编程为{22'b111111_111111_1111_1111_11}。如果传入的分组是无标记的,则软件将以太网报头的通用格式编程为{22'b111111_111111_0000_0000_11}。如果传入的分组是单标记的,则软件将以太网报头的通用格式编程为{22'b111111_111111_0000_1111_11}。

基于转发判决,在这一假设3中,需要双标记地转发分组。硬件基于传出以太网端口的出口端口类型向命令表进行索引,该命令表告知硬件替换客户VLAN标记和服务VLAN标记。客户VLAN标记总是在固定的偏移、即16处开始。相似地,服务VLAN标记总是在固定的偏移、即12处开始。对于这些情况中的每个情况,命令相同。由于命令被应用于通用格式,所以命令是“从层数据.位置X向开始位置=12复制4个字节(用于服务VLAN标记)”和“从层数据.位置Y向开始位置=16复制4个字节(用于客户VLAN标记)”,其中从层数据.位置X和层数据.位置Y指定的位置复制内容。

如在假设1-3中证明的那样,重写引擎在硬件上被简化并且保持存储器中的软件命令集合为小。因而,为了保持命令而需要的硬件存储器浅。

图11图示根据本发明的一些实施例的重写引擎的方法1100。在步骤1105,重写引擎从传入的分组的协议报头检测缺失字段。

在步骤1110,基于检测,重写引擎将协议报头扩展成用于对应协议的通用格式。通用格式包括协议的所有字段。字段中的每个字段无论协议报头对应于协议的哪个变体都具有相同偏移。重写引擎针对经扩展的协议报头维护位矢量,其中位矢量包括针对经扩展的协议报头的每个字节的每字节的位。重写引擎对于每个有效字段的每个字节标注位为可用,其中每个有效字段是在传入的分组的协议报头中存在的字段。重写引擎对于每个无效字段的每个字节标注位为无效,其中每个无效字段是在传入的分组的协议报头中不存在的字段。

在一些实施例中,对于传入的分组的每个协议层执行步骤1105和1110。

图12图示根据本发明的一些实施例的网络交换机的又一方法1200。在一些实施例中,网络交换机允许协议的通用格式的由软件定义的映射并且在网络交换机的存储器中存储由软件定义的映射。网络交换机包括用于使协议报头一般化的重写引擎。在步骤1205,在网络交换机的传入端口处接收分组。

在步骤1210,根据用于对应协议的通用格式来使分组的协议报头一般化。如以上说明的那样,硬件根据在网络交换机的存储器中存储的映射中的一个映射来扩展协议报头。用于经扩展的协议报头的位矢量向硬件告知哪些字节有效而哪些字节无效。

在步骤1215,通过将至少一个命令应用于经一般化的协议报头来修改经一般化的协议报头。如以上说明的那样,硬件基于传出以太网端口的出口端口类型向命令表进行索引,以确定用于向协议报头应用的至少一个命令。

在步骤1220,去除经修改的协议报头的所有无效字节以形成新报头。

在步骤1225,经由网络交换机的传出端口发送出具有新报头的分组。

图13图示根据本发明的一些实施例的网络交换机的又一方法1300。在步骤1305,网络交换机被配置为包括协议的通用格式的由软件定义的映射。在网络交换机的存储器中存储由软件定义的映射。

在步骤1310,在网络交换机的传入端口处接收分组。

在步骤1315,基于由软件定义的映射中的一个映射使分组的协议报头一般化。

在步骤1320,针对经一般化的协议报头维护位矢量。位矢量包括针对经一般化的协议报头的每个字节的每字节的位。

经一般化的协议报头的优化的表示

每个传入层可以包含任何数目的字节,比如64字节或者128字节或者甚至更大数目的字节。在以上示例中,扩展的以太网报头具有22字节。在位矢量中表示协议层的所有字节不是高效的,因为为最坏情况的协议的分配是存储器密集的。在现代片上系统(SOC)设计中,嵌入式存储器的面积和功率预算通常主导整个芯片预算。作为结果,高效地利用有限的存储器资源是关键的。

如果多数协议具有少数“空洞”或者无效字节,则用连续字节的计数器和表示非连续字节的更小位矢量表示通用格式报头是成本更低的。在一些实施例中,这一更小位矢量的大小通常是固定的,但是大小是可编程的。可以基于协议的统计量调整大小,这些统计量确定为了表示协议而必须存储的非连续字节的最大数目。

在一些实施例中,在使用包括两个字段的数据结构的优化方式中表示分组的每个通用格式报头:连续_字节字段和位矢量字段。连续_字节字段表示从协议层的开始起的连续有效字节的数目。位矢量字段是协议层的每字节的位表示。位矢量字段示出“空洞”或者无效字节。位矢量字段如果不能容纳所有协议则能够容纳多数协议。因此,优化的表示可以由{连续_字节,位矢量}表示。该数据结构独立于协议报头的大小。

例如图6B的位矢量605的紧凑表示是{22,00000000_0000_000},这表示从图6A的以太网分组报头600的开始起的22个连续字节。位矢量字段包含全0,因为没有无效字节。

对于另一示例,图7C的位矢量705的紧凑表示是{12,00001111_1100_000},这表示从图7B的扩展的以太网分组报头300’的开始起的12个连续字节、继而为四个无效字节、然后六个有效字节。

对于又一示例,图8C的位矢量805的紧凑表示是{12,00000000_1100_0000),这表示从图8B的扩展的以太网分组报头800’的开始起的12个连续字节、继而为八个无效字节、然后两个有效字节。

图14图示根据本发明的一些实施例的网络交换机的又一方法1400。在步骤1405,获得经扩展的协议报头。如以上讨论的那样,经扩展的协议报头是根据用于对应协议的通用格式而被一般化的传入的分组的协议报头。通常,重写引擎通过从协议报头检测缺失字段并且基于检测根据通用格式扩展协议报头来使协议报头一般化。通用格式包括协议的所有可能字段,其中无论协议报头对应于协议的哪个变体,字段中的每个字段都具有相同偏移。

在步骤1410,维护经扩展的协议报头的表示。该表示是包括连续_字节字段和位矢量字段的数据结构。

在步骤1415,将连续_字节字段设置成从经扩展的协议报头的开始起的连续有效字节的数目。

在步骤1420,针对在连续有效字节之后的每个无效字段的每个字节,将位矢量字段的位标注为不可用。每个无效字段是在传入的分组的协议报头中不存在的字段。

在步骤1425,针对在连续有效字节之后的每个有效字段的每个字节,将位矢量字段的位标注为可用。每个有效字段是在传入的分组的协议报头中存在的字段。

图15图示根据本发明的一些实施例的网络交换机的又一方法1500。在步骤1505,在网络交换机的传入端口处接收分组。

在步骤1510,根据用于对应协议的通用格式使分组的协议报头一般化。通常,重写引擎被配置为使协议报头一般化。

在步骤1515,在独立于协议报头的大小的数据结构中表示经一般化的协议报头。在一些实施例中,数据结构包括连续_字节字段和位矢量字段,其中连续_字节字段表示从协议报头的开始起的连续有效字节的数目,而位矢量字段是协议报头的每字节的位表示。

这一数据结构有助于使用于各种协议层的表示一般化并且去除对协议报头层的大小的依赖性。位矢量的紧凑表示有利地减少硬件成本。

用于报头修改的通用命令

修改使用向扩展的协议报头应用的通用命令的集合。所有命令因此通用,因为这些命令独立于传入报头(例如大小和协议)。

表1列举重写引擎用于协议报头修改的通用命令。通用命令的这一小集合被用于报头修改,无论传入的分组报头(例如大小、协议)如何,因为在修改之前分组报头被一般化。通常,通用命令表现为软件编程的微代码。

表1

DELETE命令通过使在当前经一般化的协议层内的从Start定位开始的Size个字节无效来删除这些字节。标注表示那些字节的位矢量的位为0。

COPY命令从Source的SourceOffset向当前经一般化的报头层的DestinationOffset复制Size个字节的数据。COPY命令根据数据的有效性在Source中是否有效来使得对应目的地字节有效或者无效。将表示无效字节的位矢量的位标注为0。将表示有效字节的位矢量的位标注为1。COPY命令也可以使用Bitmask用于位掩码操作。COPY命令也可以使用copyConstantBitMask和copyConstantData。如果copyConstantBitMask在位位置处包含“1”,则在对应定位处将来自copyConstantData中的对应定位的字节复制到当前经一般化的报头层中。在一些实施例中,在表中存储常数数据。在一些实施例中,常数数据是由软件定义的。

MOVE命令将当前经一般化的协议层内的Size个字节从StartOffset移动到DestinationOffset。MOVE命令根据数据的有效性在Source中是否有效来使对应目的地字节有效或者无效,并且使源字节无效。将表示无效字节的位矢量的位标注为0。将表示有效字节的位矢量的位标注为1。

通过使用至少一个计数器,针对执行的所有操作,对添加或者删除的字节的数目进行计数。至少一个计数器是硬件计数器。备选地,至少一个计数器是软件计数器。至少一个计数器出于统计目的和出于其它原因而保持跟踪计数。在一些实施例中,重写引擎对两个位矢量执行XOR操作——原有的位矢量和修改的位矢量——以向硬件告知多少位改变,这用于考虑删除或者添加的字节的数目。

图16图示根据本发明的一些实施例的重写引擎的另一方法1600。重写引擎是网络交换机的部分并且在分组从网络交换机被发送出之前修改它们。在步骤1605,根据用于分组的每个协议报头的通用格式使该协议报头一般化。通用格式包括协议的所有可能字段。这样,无论协议报头对应于协议的哪个变体,字段中的每个字段都具有相同偏移。每个经一般化的协议报头包括位矢量。位矢量包括针对经一般化的协议报头的每个字节的每字节的位。位矢量包括对于无效字段而被标注为0的位和对于有效字段而被标注为1的位。这里,无效字段是在接收的分组的协议报头中不存在的字段,而有效字段是在接收的分组的协议报头中存在的字段。

在步骤1610,使用来自在网络交换机的存储器中存储的通用命令集合的至少一个命令以修改至少一个经一般化的协议报头。对至少一个经一般化的协议报头的修改是基于网络交换机的传出端口的出口端口类型。对至少一个经一般化的协议报头的修改造成位矢量被更新。

由于不管传入的分组报头如何,通用命令集合都被用于报头修改,所以通用命令集合可以被用来修改协议的第一变体的分组报头和修改协议的第二变体的分组报头。相似地,通用命令集合可以被用来修改第一协议的分组报头和修改第二协议的分组报头。

图17图示根据本发明的一些实施例的网络交换机的又一方法1700。在步骤1705,在网络交换机的存储器中维护通用命令集合。

在步骤1710,在网络交换机的传入端口处接收分组。

在步骤1715,根据用于分组的每个协议报头的通用格式使该协议报头一般化。检测从分组的协议报头的缺失字段。基于检测,通过包括缺失字段来将协议报头扩展成通用格式。每个经一般化的协议报头包括位矢量,该位矢量具有对于无效字段被标注为0的位和对于有效字段被标注为1的位。这里,无效字段是在接收的分组的协议报头中不存在的字段,而有效字段是在接收的分组的协议报头中存在的字段。

在步骤1720,通过向经一般化的协议报头中的至少一个经一般化的协议报头应用来自通用命令集合的至少一个命令,来修改经一般化的协议报头,由此更新位矢量。

在步骤1725,基于更新的位矢量,形成新协议报头。

在步骤1730,经由网络交换机的传出端口发射具有新协议报头的分组。在一些实施例中,在发射具有新协议报头的分组之前,针对执行的所有操作,对添加或者删除的字节的数目进行计数。

使用位矢量来使经修改的协议报头塌缩

重写引擎不仅使用用于每个协议报头的位矢量来允许修改基于通用格式的协议报头的扩展,重写引擎也使用位矢量来允许将协议报头从通用格式塌缩成“规则”报头。通常,在位矢量中的每个位表示经一般化的协议报头的字节。在位矢量中被标注为0的位对应于无效字节,而在位矢量中被标注为1的位对应于有效字节。重写引擎使用位矢量来去除在已经对经一般化的协议报头操作所有命令之后的所有无效字节,以由此形成新协议报头。重写引擎因此使用位矢量来允许分组的协议报头的扩展和塌缩,由此通过使用通用命令集合而实现分组的灵活修改。

例如回顾假设1,图9E的位矢量920表示在已经向图9B的经一般化的协议报头905应用删除命令之后的图9D的修改的协议报头915。在这一假设1中,删除客户VLAN标记,由此使客户VLAN标记的四个字节无效。这样,将位矢量920中的与客户VLAN标记对应的位标注为0。在已经操作所有命令、即在假设1中的删除命令之后,重写引擎使用位矢量920来去除所有无效字节,由此使位矢量920塌缩。基于塌缩的位矢量形成新协议报头。图9F图示在去除所有无效字节之后的新协议报头925。经由传出以太网端口发送出具有新报头925的在假设1中的分组。

对于另一示例,回顾假设2,图10D的位矢量1015表示在已经向图10A的协议报头1000应用删除命令之后的图10C的修改的协议报头1010。在这一假设2中,删除服务VLAN标记和客户VLAN标记,由此使服务VLAN标记的四个字节和客户VLAN标记的四个字节无效。这样,将位矢量1015中的与服务VLAN标记和客户VLAN标记对应的位标注为0。在已经操作所有命令、即在假设2中的两个删除命令之后,重写引擎使用位矢量1015来去除所有无效字节,由此使位矢量1015塌缩。基于塌缩的位矢量形成新协议报头。图10E图示在去除所有无效字节之后的新协议报头1020。经由传出以太网端口发送出具有新报头1020的在假设2中的分组。

图18图示根据本发明的一些实施例的重写引擎的又一方法1800。重写引擎是网络交换机的部分并且在分组从网络交换机被发送出之前修改它们。在步骤1805,针对每个经一般化的协议报头维护位矢量。经一般化的协议报头是扩展成通用格式的分组的协议报头。通用格式包括协议的所有可能字段。无论协议报头对应于协议的哪个变体,字段中的每个字段都具有相同偏移。位矢量包括针对经一般化的协议报头的每个字节的每字节的位。

在步骤1810,基于对至少一个经一般化的协议报头的修改来更新位矢量。该修改使用来自在网络交换机的存储器中存储的通用命令集合的至少一个命令来修改至少一个经一般化的协议报头。

在步骤1815,使用经更新的位矢量来压缩至少一个经一般化的协议报头。在一些实施例中,在步骤1815之前,对位矢量和更新的位矢量执行XOR操作以确定多少位改变,这允许重写引擎考虑删除和添加的字节。

图19图示根据本发明的一些实施例的网络交换机的又一方法1900。在步骤1905,在网络交换机的传入端口处接收分组。

在步骤1910,根据用于分组的每个协议报头的通用格式使该协议报头一般化。检测从分组的协议报头的缺失字段。基于检测,通过包括缺失字段来将协议报头扩展成通用格式。

在步骤1915,针对每个经一般化的协议报头维护位矢量。位矢量包括对于无效字段而标注为0的位和对于有效字段而标注为1的位。

在步骤1920,修改经一般化的协议报头中的至少一个经一般化的协议报头,由此更新位矢量。该修改使用来自在网络交换机的存储器中存储的通用命令集合的至少一个命令以修改至少一个经一般化的协议报头。对至少一个经一般化的协议报头的修改是基于网络交换机的传出端口的出口端口类型。

在步骤1925,通过移位经更新的位矢量来去除在经更新的位矢量中的标注为0的每个位,由此使经更新的位矢量塌缩。

在步骤1930,基于塌缩的位矢量形成紧凑协议报头。经由网络交换机的传出端口发射至少具有紧凑协议报头的分组。在一些实施例中,在发射分组之前,对针对执行的所有操作而添加或者删除的字节数目进行计数。

指针结构

指针结构可以被用来提取在用于经一般化的传入的分组内的不同协议层并且在协议层的修改之后重建分组。指针结构包括N+1个层指针和分组的所有报头的总大小。通常,指针结构初始地用如下数据来更新,该数据由解析器引擎提供以供重写引擎用来将分组拆分成各个层并且随后智能地将它们拼接回到一起。在分组被拆分成各个层之后,重写引擎使协议报头一般化、修改经一般化的协议报头并且通过去除所有无效字段来压缩经一般化的协议报头。层指针在每个层被修改之后由重写引擎更新。这些更新的层指针被用来在从网络交换机发送出分组之前将不同协议层拼接回到一起。

图20图示根据本发明的一些实施例的层结构的示例图2000。假设传入的分组包括以下协议层:专有报头、以太网、IPv4、UDP、VxLAN和以太网。也假设网络交换机的解析器引擎能够解析上至八层而重写引擎仅能修改前N个、比如N=4个协议层(因为软件要求和/或硬件能力)。在一些实施例中,解析器引擎向重写引擎提供数据,诸如分组的每个协议报头的开始位置。

由于重写引擎能够修改分组的前四个协议层,所以重写引擎仅使用来自解析器引擎的相关数据、即关于如下前四个协议层的数据:专有报头、以太网、IPv4和UDP。使用这一数据,初始化用于分组的指针结构:设置为0的层指针0,这是在分组内的用于专有报头的起始位置(即层0),设置为16的层指针1,这是在分组内的用于以太网报头的起始位置(即层1),设置成36的层指针2,这是在分组内的用于IPv4报头的起始位置(即层2),设置成48的层指针3,这是在分组内的用于UDP报头的起始位置(即层3),以及设置成56的层指针4,这是用于重写引擎不修改的报头的剩余部分的起始位置。在一些实施例中,重写引擎计算报头的大小并且将报头大小(即所有报头的总大小)设置成223。

通过使用层指针,重写引擎如以上讨论的那样一般化前四个协议层(即专用报头、以太网、IPv4、UDP)以供修改。在修改之后,重写引擎通过去除所有无效字节来压缩修改的协议报头。通常,在修改协议报头之后更新层指针。

层指针形成尾指针。尾指针与报头大小一起与报头的正文关联,该正文是报头的未修改的并且向前输送的用于随后拼接的部分。在执行所有修改并且压缩修改的协议报头之后,修改的层指针用来将修改的报头与报头的正文拼接回到一起。

重写引擎可以限于重写引擎可以修改的层数。在一些实施例中,重写引擎也可以限于重写引擎可以将任何给定的协议层扩展成多少。在这样的实施例中,重写引擎通过将两个相邻层指针相减来提取协议层的大小。如果层大小超过重写引擎的硬件能力,则重写引擎简单地使用先前的层指针并且智能地形成正文。

假设协议层不能被扩展多于40字节,但是关联协议的最大变体是64字节。在一些实施例中,重写引擎将报头协议扩展成最大40字节以供修改。在修改之后,使用层指针,重写引擎能够相似地将剩余字节拼接到修改的字节。

使用层指针显著地减少硬件逻辑和复杂性,因为它仅需应对一个给定的协议层。硬件命令的范围限于给定的层。由于命令引擎对先前层和在它之后的层无依赖性,所以如果每层需要更多命令则可以用多通过方式使用命令硬件。换而言之,由于命令没有与命令关联的内部状态,所以可以并行地使用多个命令。相似地,可以并行地修改多层。

图21图示根据本发明的一些实施例的重写引擎的又一方法2100。重写引擎是网络交换机的部分并且在分组从网络交换机被发送出之前修改它们。在步骤2105,针对每个分组维护指针结构。指针结构包括层指针和分组的所有报头的总大小。层指针中的每个层指针对应于分组中的关联层的开始位置。

指针结构包括N+1个层指针。重写引擎修改分组的N个层。层指针形成尾指针。有总大小的尾指针指示报头的正文。报头的正文是报头的未被重写引擎修改的部分。

在步骤2110,基于层指针拆分分组的层以供层修改。检测从分组的协议报头的缺失字段。基于检测,将协议报头扩展成用于对应协议的通用格式。通用格式包括协议的所有可能字段。无论协议报头对应于协议的哪个变体,字段中的每个字段都具有相同偏移。每个经一般化的协议报头包括位矢量,该位矢量具有对于无效字段被标注为不可用或者0的位和对于有效字段被标注为可用或者1的位。使用来自通用命令集合的至少一个命令来修改经一般化的协议报头。通常,在修改之后更新位矢量。

在步骤2115,基于层修改来更新层指针。

在步骤2120,基于经更新的层指针将层拼接回到一起。

图22图示根据本发明的一些实施例的网络交换机的又一方法2200。在步骤2205,在网络交换机的传入端口处接收分组。

在步骤2210,使用指针结构来分离分组的协议层。指针结构包括指向分组的N+1个位置的N+1个层指针和分组的所有报头的总大小。位置包括协议层的起始定位。基于分组的解析的数据来初始化指针结构。

在步骤2215,使经分离的协议层一般化以进行修改。对于每层,提取层的大小以确定该大小是否超过用于修改该层的硬件能力。通过将在指针结构中的两个相邻层指针相减来提取该大小。基于该确定,使用两个相邻层指针中的第一层指针并且形成正文。

在步骤2220,基于修改来更新指针结构。

在步骤2225,使用经更新的指针结构来智能地将经修改的协议层拼接回到一起以形成新协议报头。

在步骤2230,经由网络交换机的传出端口发送出具有新协议报头的分组。

本领域普通技术人员将认识到,也存在其它使用和优点。尽管已经参照许多具体细节描述本发明,但是本领域普通技术人员将认识到,可以在其它具体形式中体现本发明而不脱离本发明的精神实质。因此,本领域普通技术人员将理解到,本发明不受前述示例细节限制,而是将由所附权利要求限定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号