CN103999431A - 软件定义的网络中灵活的并且可扩展的流处理*** - Google Patents
软件定义的网络中灵活的并且可扩展的流处理*** Download PDFInfo
- Publication number
- CN103999431A CN103999431A CN201280063821.9A CN201280063821A CN103999431A CN 103999431 A CN103999431 A CN 103999431A CN 201280063821 A CN201280063821 A CN 201280063821A CN 103999431 A CN103999431 A CN 103999431A
- Authority
- CN
- China
- Prior art keywords
- stream table
- definition
- header
- keyword
- grouping
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/24—Traffic characterised by specific attributes, e.g. priority or QoS
- H04L47/2441—Traffic characterised by specific attributes, e.g. priority or QoS relying on flow classification, e.g. using integrated services [IntServ]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
- H04L67/63—Routing a service request depending on the request content or context
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
用于灵活的和可扩展的流处理的***包含在软件定义的网络内起到控制器的作用的第一网络装置。第一网络装置接收处理定义,转换处理定义来创建解析器配置包并且将解析器配置包传送到多个转发元件,并且传送数据来填充多个转发元件内的流表。***还包含第二和第三网络装置,每个起到启用流交换的转发元件的作用并且能够从第一网络装置接收解析器配置包。第二网络装置将解析器配置包编译成机器代码,机器代码在处理器上执行来执行分组处理。第三网络装置包含协处理器来执行解析器配置包以执行分组处理。解析器配置包包含报头、表定义和栈指令的表示。
Description
技术领域
本发明的实施例涉及连网领域;并且更具体地,涉及软件定义的网络的灵活的并且可扩展的流处理架构。
背景技术
几十年来,传统的基于电路的通信网络的使用已经倾向于可以是更灵活的、有效率的和安全的基于分组的网络。其结果是,基于分组的连网的增加的普及已经引起基于分组的网络装置的需求的增长。此需求主要由制造商来满足,这些制造商创建越来越大的整体式路由器来处理网络业务的增加的容量和复杂性。然而,此模型正接近其技术和经济的极限。用传统的路由器设计越来越难以满足增加的性能要求,并且,随着低成本数据中心硬件的出现,路由器供应商难以对相同性能的硬件的较高成本做出解释。同时,对接入和聚集网络中的路由和交换控制平面的需求正变得更复杂。运营商想要定制路由(用于处理接近边缘的具体类型的业务流)、配置跨越聚集网络的定制服务、并且实现多层集成的能力,而没有当前网络的典型详细低级配置。
这些趋势导致路由架构的不同方法(其中去耦合数据平面和控制平面)。利用此分离,控制平面可以是在逻辑上集中的并且由具有不同架构的各种硬件部件来实现。另外,数据平面可以包括由在逻辑上集中的控制器配置的简化的交换机/路由器元件。此新的路由分割架构模型致力于来自转发和数据处理元件的控制的分割并且在软件定义的连网(SDN)核心处。软件定义的网络中的流处理的一个标准是OpenFlow,它定义用于在控制平面与转发平面之间传输消息的协议并且描述用于分组处理的模型。
此软件定义的网络的分割架构允许在逻辑上或物理上可以分组在一起的功能性之间的分离。例如,在公共控制实体与网络应用(例如,通用多协议标签交换(GMPLS)、边界网关协议(BGP)、因特网协议安全(IPSec)等)之间可以有分割或分离。类似地,在控制与转发/处理之间可以有分割或分离(即来自执行分组处理的网络装置的中央控制的分离)。也可以有数据转发功能性、数据处理功能性和数据生成功能性(例如,深度包检测(DPI);加密;操作、管理和维护(OAM)等)的分割或分离。
软件定义的网络呈现超过传统的整体式架构网络的许多优势。例如,实现重要的网络路由和交换功能性的控制平面应用与转发平面完全分离。因此,维持集中式控制平面允许高度定制和最优化的连网服务(它们可以被调整来适应具体用户需要)。集中式控制平面提供可高度扩展的、可靠的以及灵活的连网基础结构(可以迎合不同用户需要)。转发平面(或数据平面)装置可以是便宜以及可互换的商品连网装置,它降低了用户的整个配置和维护负担。此外,整个网络的单个管理和配置实体提升了用户的易用性体验。
然而,现有的SDN配置也遭受缺点。虽然***(例如,OpenFlow)确实提出有效方式来规定分组处理模型,但是问题存在于很难根据特定路由需要来扩展或定制此模型。例如,添加对于新协议的支持要求提出对OpenFlow规格的改变,希望采纳,以及等待实现。这样的改变涉及修改分组处理模型的解析、分类(因为必须改变将被解析的字段的数量)和动作(例如,用于修改新协议的报头)。
现有的SDN分组处理模型的另一缺点是处理规格需要将分组分类为属于基于一组静态协议报头字段的流。例如,分类可只是以元组的形式(例如,15个元组被提取并且用于分类)使用有限的一组提取的报头字段而发生。然而,随着新协议的开发,不能容易地更新此模型。此外,在一些环境中,应用可受益于只使用一小组元组的分组的仅局部分类。例如,利用MPLS分组,可仅对MPLS报头内的短路径标签的内容做出分组转发决定,而无需另外检查分组自身。在OpenFlow中,无法使用少于15个元组来分类这些分组,这在解析努力和流表存储器要求的方面是没有效率的。
最后,现有的SDN模型在处理隧道的多个等级(即封装和解封)中也很弱。例如,考虑在开放***互连(OSI)模型数据链路层报头(即,OSI层2、或L2)或网络层报头(即,OSI层3、或L3)的顶部上解封以太网分组的情况,当实现层2虚拟私有网(L2VPN)或伪线(PW)时这是经常做的。在此情况下,不可能使用在超过L2或L3的第一级的报头中找到的信息来执行更细粒度的分组处理。
发明内容
根据本发明的实施例,灵活的和可扩展的流处理***包含在软件定义的网络内起到控制器的作用的第一网络装置。此第一网络装置包含可操作来接收处理定义的定义接收模块。处理定义包含协议的可配置的定义(包含协议报头的有关的报头字段)、可配置的流表定义(包含基于第一多个有关的报头字段的关键字组分,其中每个流表定义的关键字组分识别为流表定义选择的一组一个或多个有关的报头字段)、以及可配置的逻辑(用于基于第二多个有关的报头字段在由可配置的流表定义而定义的流表之间选择)的第一表示。第一网络装置还包含转换器,可操作来转换处理定义以创建解析器配置包。解析器配置包包含可配置的流表定义和用于在流表之间选择的可配置的逻辑的第二表示。第一网络装置还包含分布模块,可操作来将解析器配置包分布到多个转发元件。此分布使多个转发元件中的每个基于每个可配置的流表定义来创建流表。每个流表包含由包含在流表所基于的流表定义中的关键字组分而识别的每个有关的报头字段的可配置的关键字列。每个流表还包含一个或多个动作列来存储转发决定。第一网络装置还包含流表填充模块,可操作来传送数据来填充在多个转发元件中的每个内创建的流表的可配置的关键字列和动作列。除第一网络装置以外,***还包含第二网络装置,其在软件定义的网络内起到启用流交换的转发元件的作用。第二网络装置用于接收来自分布模块的解析器配置包以及来自流表填充模块的数据。第二网络装置包含可操作来接收分组的网络接口,可操作来将解析器配置包编译成机器代码的编译器,以及处理器。处理器可操作来执行机器代码以创建流表以及为网络接口所接收的分组做出转发决定。处理器也可操作来根据来自流表填充模块的数据来填充流表的可配置的关键字列和动作列。***还包含第三网络装置,其在软件定义的网络内起到启用流交换的转发元件的作用。第三网络装置可操作来接收来自分布模块的解析器配置包以及来自流表填充模块的数据。第三网络装置包含可操作来接收分组的网络接口,可操作来执行解析器配置包来创建流表并且为网络接口所接收的分组做出转发决定的协处理器,以及可操作来根据来自流表填充模块的数据来填充流表的可配置的关键字列和动作列的处理器。
根据本发明的另一实施例,有形的非暂时性机器可读存储介质包含用于处理装置的至少一个处理器的指令,当该指令被处理器执行时,使处理器执行操作。有形的非暂时性机器可读存储介质包含报头指令,它规定协议的可配置的定义。每个协议的这些可配置的定义包含协议报头名称和该协议的一组一个或多个有关的报头字段的一组一个或多个字段声明。每个字段声明指示数据类型和有关的报头字段名称。有形的非暂时性机器可读存储介质还包含表定义指令。表定义指令基于第一多个有关的报头字段来规定包含关键字组分的可配置的流表定义。每个表定义指令定义流表,并且每个关键字组分识别为该流表定义选择的一组一个或多个有关的报头字段。每个表定义指令包含用于流表的唯一表ID、以及识别该流表的关键字组分的一组一个或多个字段声明。每个字段声明定义流表的关键字列的内容定义,其中内容定义将第一多个有关的报头字段中的至少一个识别为关键字列的有关的报头字段。每个字段声明也定义用于找到该关键字列内的流表的条目的内容与在该关键字列的有关的报头字段的分组内的内容之间的肯定的匹配的准则。有形的非暂时性机器可读存储介质还包含规定可配置的逻辑的栈指令,用于基于第二多个有关的报头字段来在由可配置的流表定义而定义的流表之间选择。可配置的逻辑规定协议报头如何彼此相关,如何检查协议报头来解析分组,以及如何在流表之间选择以用于分组分类。每个栈指令对应于报头指令中的一个并且包含来自该报头指令的协议报头名称。每个栈指令还包含关键字字段,其通过识别该报头指令内的有关的报头字段名称中的一个来识别从分组中选择有关的报头字段中的哪个。另外,每个栈指令还包含一组一个或多个规则,用于基于分组的关键字字段内的值来选择用于分组分类的一个流表或者下一应用的一个栈指令。每个规则包含与分组的关键字字段内的值比较的关键字值和下一报头名称,其中有效的匹配使解析继续由匹配的规则的下一报头名称而指示的栈指令,并且其中每个匹配的失败引起在该栈指令中规定其唯一表ID的流表中的一个的选择。
附图说明
通过参考用于图示本发明的实施例的下文的描述和附图可以最好地理解本发明。在图中:
图1图示根据本发明的一个实施例的示范性的灵活的和可扩展的流处理***;
图2图示根据本发明的一个实施例的解析模块内的处理配置的表示;
图3图示根据本发明的一个实施例的在软件定义的网络中起到控制器的作用的网络元件中的方法的流程图;
图4图示根据本发明的一个实施例的在软件定义的网络中起到转发元件的作用的网络元件中的方法的流程图;
图5图示根据本发明的一个实施例的用于做出转发决定的在软件定义的网络中起到转发元件的作用的网络元件中的方法的流程图;
图6图示根据本发明的一个实施例的用于识别流表条目的在软件定义的网络中起到转发元件的作用的网络元件中的方法的流程图;
图7图示根据本发明的一个实施例的解析过程和关键字生成的表示;
图8图示根据本发明的一个实施例的示范性的灵活的和可扩展的流处理***;以及
图9图示根据本发明的一个实施例的用于灵活的和可扩展的流处理***的处理配置的示范性表示。
具体实施方式
在下文的描述中,阐述许多具体细节。然而,要理解的是可实践本发明的实施例而没有这些具体细节。在其它实例中,没有详细示出熟知电路、结构和技术以便不模糊此描述的理解。利用包含的描述,本领域技术人员将能够实现适当的功能性而没有不适当的实验。
说明书中的对“一个实施例”、“实施例”、“示例实施例”等的提及指示描述的实施例可包含特定特征、结构或特性,但是每一个实施例可不必包含特定特征、结构或特性。此外,这样的短语不一定提及相同的实施例。另外,当结合实施例来描述特定特征、结构或特性时,这表示连同其它实施例(无论是否明确描述)来影响这样的特征、结构或特性是在本领域技术人员的知识内。
为易于理解,图中使用虚线和/或括号的文本来表明某些项目的可选性质(例如,本发明的给定实现所不支持的特征;给定实现所支持的特征,但是在一些情况中使用并且在其它情况中不使用)。
在下文的描述和权利要求中,可使用术语“耦合”和“连接”连同它们的衍生词。应该理解,这些术语不旨在作为彼此的同义词。“耦合”用于指示两个或者更多元件,它们可以或可以不彼此直接物理或电接触,彼此协作或交互。“连接”用于指示彼此耦合的两个或者更多元件之间的通信的建立。
如本文所使用的,网络元件(例如,路由器、交换机、网桥)是包含硬件和软件的连网设备,它在通信上互连网络上的其它设备(例如,其它网络元件、终端站)。一些网络元件是“多个服务网络元件”,它们为多个连网功能(例如,路由、桥接、交换、层2聚集、会话边界控制、服务质量和/或订户管理)提供支持,和/或为多个应用服务(例如,数据、语音和视频)提供支持。订户终端站(例如,服务器、工作站、膝上型设备、上网本、掌上电脑、移动电话、智能电话、多媒体电话、因特网语音协议(VOIP)电话、用户设备、终端、便携式媒体播放器、GPS单元、游戏***、机顶盒)接入在因特网上提供的内容/服务和/或在因特网上覆盖(例如,通过隧道)的虚拟私有网(VPN)上提供的内容/服务。内容和/或服务通常是由属于参与对等服务的服务或内容提供商或终端站的一个或多个终端站(例如,服务器终端站)来提供,并且可包含(例如)公用网页(例如,免费内容、商店前台页面、搜索服务)、私有网页(例如,提供电子邮件服务的用户名/密码接入的网页)、和/或VPN上的企业网络。通常,订户终端站是耦合到边缘网络元件(例如,通过耦合到接入网络(有线或无线地)的用户终端设备),边缘网络元件耦合到其它边缘网络元件(例如,通过一个或多个核心网络元件),其它边缘网络元件耦合到其它终端站(例如,服务器终端站)。
传统上,网络元件可以是将控制平面和数据平面(有时被称作转发平面或媒体平面)两者整合到相同的网络元件的多功能网络元件。在网络元件是路由器(或实现路由功能)的情况下,控制平面通常确定将如何路由数据(例如,分组)(例如,数据的下一跳和那个数据的外出端口),并且数据平面负责转发那个数据。例如,控制平面通常包含一个或多个路由协议(例如,边界网关协议(BGP)、内部网关协议(IGP)(例如,开放式最短路径优先(OSPF)、路由信息协议(RIP)、中间***到中间***(IS-IS))、标签分发协议(LDP)、资源保留协议(RSVP)),它们与其它网络元件通信来交换路由并且基于一个或多个路由指标来选择那些路由。备选地,网络元件可只实现数据平面(转发平面)或只实现所有或部分控制平面。此责任分离在分割架构网络模型中是常见的。术语“分割架构网络”在很大程度上是术语“软件定义的网络”(SDN)的同义,并且本文可互换使用这些术语。
路由和邻接存储在控制平面上的一个或多个路由结构(例如,路由信息表(RIB)、标签信息表(LIB)、一个或多个邻接结构)中。控制平面基于路由结构利用信息(例如,邻接和路由信息)来编程数据平面。例如,控制平面将邻接和路由信息编程为数据平面上的一个或多个转发结构(例如,转发信息表(FIB)、标签转发信息表(LFIB)、和一个或多个邻接结构)。当转发业务时,数据平面使用这些转发和邻接结构。
每个路由协议基于某些路由指标(不同的路由协议的指标可以是不同的)将路由条目下载到主RIB。每个路由协议可以将路由条目(包含没有下载到主RIB的路由条目)存储在本地RIB(例如,OSPF本地RIB)中。管理主RIB的RIB模块从由路由协议下载(基于一组指标)的路由中选择路由并且将那些选择的路由(有时被称作有效路由条目)下载到数据平面。RIB模块还可使路由在路由协议之间重新分配。
多功能网络元件可以包含一组一个或多个线路卡、一组一个或多个控制卡、以及可选地一组一个或多个服务卡(有时被称作资源卡)。这些卡是通过一个或多个机制(例如,耦合线路卡的第一全网孔和耦合所有卡的第二全网孔)而耦合到一起。一组线路卡组成数据平面,而一组控制卡通过线路卡用外部网络元件来提供控制平面和交换分组。一组服务卡可以提供特别处理(例如,层4到层7服务(例如,防火墙、IPsec、IDS、P2P)、VoIP会话边界控制器、移动无线网关(GGSN、演进型分组***(EPS)网关))。
不像整体式网络架构(它们需要将复杂的网络管理功能分布在遍及网络的多功能网络元件的控制平面中,并且还需要整合到相同的多功能网络元件中的复杂的数据和控制平面),基于流的软件定义的网络允许网络的数据平面与控制平面分离。数据平面可以被实现为遍及网络分布的简单的离散流交换机(转发元件),并且提供网络情报的控制平面是在监督流交换机的集中式流控制器中实现。通过从数据转发功能中解耦合控制功能,软件定义的连网简化修改网络控制逻辑的任务并且提供可编程接口(开发者可以在其上构造各种新的路由和协议管理应用)。这允许数据和控制平面独立地发展并且测量,同时减少数据平面网络部件的管理必要性。
在软件定义的网络的一个实施例中,控制平面在转发元件与控制器之间的安全和可靠的传输连接上通过控制平面信令协议来控制转发平面。控制器通常包含提供基本处理、I/O、以及连网能力的操作***。中间件层将软件定义的网络控制器的上下文提供到操作***并且使用控制平面信令协议来与各种转发平面元件通信。中间件层上的应用层提供各种网络操作所需要的情报(例如,协议、网络情况感知、以及用户界面)。在更抽象的层次上,应用层使用网络的逻辑观点来工作并且中间件层提供从逻辑观点到物理观点的转变。
在软件定义的网络范例的一实施例中,每个转发元件是启用流交换的网络装置。启用流交换的网络装置基于每个分组所属的流(而不是分组内的目的地IP地址,它们通常用于目前传统的分组交换IP网络)来转发分组。流可被定义为一组分组(它们的报头匹配位的给定图案)。在这个意义上,传统的IP转发也是基于流的转发,其中只由目的地IP地址来定义流。虽然,代替只考虑目的地IP地址或源IP地址,一般的流定义允许考虑分组报头中的许多字段(例如,10个或者更多)。
控制平面基于应用层计算和为每个流映射的中间件层来将有关的消息传送到转发元件。转发元件处理这些消息并且编程适当的流信息和其流表中的对应动作。转发元件基于这些流表来将分组映射到流并且转发分组。当然,流表可实现在各种数据结构中(例如,图、列表、数组、文件、表、关系数据库等)。另外,这些表内的列和行的讨论是任意的;而一个实现可选择将条目放在行中,相反修改数据结构来将条目放在列中是微不足道的。此外,转发元件可需要具有这样的输入操作(例如,DPI、NetFlow数据收集、OAM等)的数据处理和数据生成能力。
流处理的标准定义用于在控制平面与转发平面之间传输消息的协议并且描述分组处理的模型。流处理装置中的用于处理分组的此模型包含报头解析、分组分类、以及做出转发决定。
报头解析描述如何基于已知的一组协议(例如,以太网、虚拟局域网(VLAN)、多协议标签交换(MPLS)、IPv4等)来解释分组。报头的一些层包括包含关于如何解复用下一报头的信息的字段。例如,以太网报头包含描述在下一层中有什么类型的报头的字段。一些协议字段用于构造将在分组分类中使用的匹配结构(或关键字)。例如,第一关键字字段可以是源媒体接入控制(MAC)地址,并且第二关键字字段可以是目的地MAC地址。
分组分类包括在存储器中执行查找来分类分组(通过确定什么是基于匹配结构或关键字而对应于此分组的转发表中的最佳匹配流)。许多流可以对应于分组是有可能的;在此情况下***通常配置为根据定义的方案来从许多流中确定一个流。此外,表中的流条目可以定义如何匹配分组与条目。若干匹配准则存在,例如“精确”(关键字中的值必须精确地匹配表中的值)、“通配符”(关键字中的值可以是任何东西)、“最长前缀匹配”(通常用于匹配IP地址与路由条目)、“位掩码”(只有关键字中的一些位用于匹配)、和“范围”(关键字中的值需要在值的定义的界限范围内)。
做出转发决定并且执行动作是通过使用分组来执行动作,基于在分组分类的先前步骤中识别的流条目而发生。表中的每个流与为每个对应分组执行的一组动作关联。例如,动作可以是将报头推到分组上,使用特定端口转发分组,或简单地丢弃分组。因此,具有特定传送控制协议(TCP)目的地端口的IPv4分组的流条目可以包括规定应该丢弃这些分组的动作。
如何实现解析、分类、以及动作的执行的描述通常是记录在规格文档中。实现本规格文档的节点可以与彼此内部操作。
本发明的实施例的一个方面描述用于描述解析、匹配、和动作的新颖的抽象概念。将用高级语言(它将用于表示转发元件分组处理)来公开这些抽象概念。不像典型的软件定义的网络,这些抽象概念将用于在运行时并且不只在配置时间处编程转发元件。
本发明的实施例的另一方面将典型的分组解析和分组分类阶段联系在一起,它允许转发元件是协议无关的(通过具有灵活性来解析由抽象概念的表示提供的任何类型的分组来为流的分类生成匹配关键字)。解析和分类的此联系提供表达这样的关系的更简单方式。
本发明的实施例的附加方面包含新的处理模型,它使用定义的抽象基于处理的定义来提供转发元件的实现。在高级语言中规定的处理定义可被转变成将在分组处理的解析和动作阶段两者中使用的中间代码表示。具有简单的中间代码表示允许全异的转发元件使用相同的处理模型代码并且由此进一步降低用于管理具有变化的配置和能力的转发元件的控制器内所需的复杂性。
本发明的实施例的方面提出修改转发元件的行为的灵活方式,它没有被严格固定为正式的规格或在低级硬件实现细节内。因此,很容易快速适应模型来支持新协议或提供定制的分组处理方案。
概述
图1图示根据本发明的一个实施例的示范性的灵活的和可扩展的流处理***。在此图表中,控制器110和转发元件120A利用处理配置102的一些或所有部分的表示。虽然此图示模糊了一个或多个全异的转发元件120B-120N的内部工作,但是描绘的转发元件120A很大程度上代表了它们的特性(除非以其它方式提到)。
为了本公开的目的,可在某些情况下使用术语“转发元件”120A和“全异的转发元件”120B-120N。除非以其它方式提到或通过环境语言明确表示,关于转发元件120A描述的任何细节同样适用于全异的转发元件120B-120N,并且关于全异的转发元件120B-120N的细节类似地适用于转发元件120A。
处理配置102包含用于规定由转发元件120A实现的转发处理模型的三个主要抽象概念。一个抽象概念是包含协议报头的有关的报头字段的协议的可配置的定义104。这些可配置的定义104规定将由转发元件120A和网络内的其它全异的转发元件120B-120N解析的协议报头的类型。因此,可配置的定义104包含一组一个或多个分组协议报头定义,其中每个协议报头定义包含报头名称并且是根据协议规格根据报头内的一个或多个报头字段而定义。这些报头字段指示报头内的每个定义的字段的位置和数据类型。在本发明的实施例中,数据类型是简单的一般字段,并且此字段的长度被附加到协议报头定义。此外,在本发明的一实施例中,报头的可配置的定义104可不定义报头内的每一个可能的报头字段。在这样的实施例中,报头定义包含报头长度,它是用于基于报头的一个或多个报头字段内的值而计算报头的总长度的数学表达。例如,IPv4报头的字节中的报头长度可被定义为等于来自报头内的“hlen”字段乘以数字4的值。在此示例中,假设“hlen”字段内的值是5,报头长度会被计算为5*4字节、或20字节。
处理配置102中的第二抽象概念是包含关键字组分的可配置的流表定义108,它利用161包含协议报头的有关的报头字段的协议的可配置的定义104的方面。可配置的流表定义108用于定义将用于分组分类的流表140A-140N的数量以及用于匹配的每个表中的可配置的关键字列176的类型、大小、和数量。此外,可配置的流表定义108的表示也用于创建在转发元件120A内使用的关键字生成逻辑158,它规定如何使用分组的解析的协议报头字段来生成关键字。此关键字生成逻辑158可在这样的***内的各处(例如,基于解析器配置包117由控制器110或甚至个别转发元件(例如,120A)上的编译器114)创建。
包含关键字组分的可配置的流表定义108包含在转发元件120A中使用的每个流表140A-140N的表定义指令。每个表定义包含对应于特定流表(例如,140A)的唯一表标识符(ID),和一组一个或多个字段声明。每个字段声明包含字段ID(识别关键字内的关键字字段的相对位置(和/或流表140A内的可配置的关键字列176中的一个的相对位置))、匹配类型(指示如何比较关键字字段与可配置的关键字列来确定它们是否匹配)、和一个或多个关键字字段(指示哪个解析的协议报头字段被用作关键字字段以及指示表内的可配置的关键字列176的对应一个的类型和大小)。当比较关键字字段与可配置的关键字列时,匹配类型规定将使用的一个或多个匹配算法。例如,匹配算法可以是精确匹配、最长前缀匹配、掩码、或范围。字段声明的一个或多个关键字字段指示将使用哪个解析的报头字段来生成关键字的对应关键字字段部分。
如果精确地为字段声明定义一个关键字字段,则当生成对应于字段声明的关键字的部分时,使用那个关键字字段。然而,在本发明的一实施例中,多于一个关键字字段可被宣告用于字段声明。此配置允许关键字组分变量的使用。关键字组分变量指定不同的方式来基于存在于特定分组内的报头而构造关键字。因此,当解析两个不同的分组时,可使用来自每个分组的不同的报头字段来生成用于由表定义指令的表ID指示的流表内的匹配的关键字。
例如,考虑表定义包含具有字段ID“6”的字段声明并且两个关键字字段可能性取决于分组中的传输层(L4)报头的场景。如果所解析的分组包括TCP报头,则TCP报头字段将用于生成关键字内的第六字段。然而,如果分组改为包括用户数据报协议(UDP)报头,则UDP报头字段将用于生成关键字内的第六字段。在此场景中,一个关键字组分变量包含TCP报头字段,并且一个关键字组分变量包含UDP报头字段。不论哪个关键字组分变量用于构造关键字,相同的流表和可配置的关键字列将用于匹配。
如图1中表格那样表示了包含关键字组分的可配置的流表定义108的逻辑描绘。对于每个表定义(由表ID表示的),可有一个关键字组分(例如,表ID 1,关键字组分1)或在本发明的一些实施例中,有多于一个关键字组分,或多个关键字组分变量(例如,表ID 2,关键字组分2和2’)。
处理配置102中的第三抽象概念是用于在流表之间选择的可配置的逻辑106,它利用160包含协议报头的有关的报头字段的协议的可配置的定义104的方面。在本发明的实施例中,此可配置的逻辑106也在选择的流表的关键字组分变量之间选择。用于在流表之间选择的可配置的逻辑106定义将被解析的协议报头之间的关系和次序。这些关系可以在逻辑上表示为解析树的类型,其如果被物化则会根据定义的处理配置102来图示将被解析并且分类的可能分组(即,协议报头次序)。除定义协议报头之间的关系以外,用于在流表之间选择的可配置的逻辑106还基于分组中的协议报头的次序来定义哪个流表140A-140N将用于分组分类。因此,不同的解析路径可带来为分类选择的不同的表。例如,一个解析路径162可带来选择不同于其它解析路径163或164的表ID。在一实施例中,当构造所选择的流表的关键字时,这些解析路径也确定应该使用哪个关键字组分变量。
用于在流表之间选择的可配置的逻辑106定义协议报头次序关系并且使用栈指令来确定用于分类的表。每个栈指令对应于分组协议报头并且包含报头名称、关键字字段、和一组一个或多个规则,每个规则包含关键字值和下一报头名称。关键字字段是被检查的分组报头内的报头字段中的一个,它将与规则的关键字值比较来尝试确定将解析的下一报头。当关键字字段匹配规则的关键字值时,解析将继续到随后的分组报头(使用栈指令,它具有对应于由匹配的规则指示的下一报头名称的报头名称)。当关键字字段无法匹配规则的关键字值时,根据由栈指令指示的表ID来选择用于分组分类的流表。如果栈指令没有指示表ID,则用于在流表之间选择的可配置的逻辑106可指示将采取的纠正动作(例如,丢弃分组、将分组传送到控制器等)。
以处理定义112的形式创建处理配置102的表示150。控制器110可接收来自远程用户或装置的处理定义112,或它可创建处理定义112。在图1中图示的实施例中,控制器110包含定义接收模块111来接收处理定义112。处理定义112被提供151到转换器113来产生流表配置信息115A(它被提供154到并且被流表填充模块118用于用流表条目来填充流表140A-140N)。此外,转换器113将处理定义112提供到可产生152解析器代码116的编译器114。此解析器代码116(和可选地流表配置信息115B的版本)组成解析器配置包117。
部分地,转换器113的目的是将处理定义112转换成全异的转发元件120A-120N能够用于处理分组的解析器配置包117。因此,通过其编译器114的使用,通过从由处理定义112提供的正式的抽象(即,语法的类型)以解析器代码116的形式来生成分组解析器的代码,转换器113起到解析器生成器(即,编译器-编译器、或编译器生成器)的作用。转发元件(例如,120A)还可利用解析器代码116来对分组执行动作。因此,解析器代码116(它是解析器配置包117的一部分)合并协议的可配置的定义104、用于在流表之间选择的可配置的逻辑106、以及来自处理配置102的可配置的流表定义108的表示153。在一实施例中,解析器代码116是使用一小组指令(例如,加载、存储、增加、分支、比较等)以及一组定义的虚拟寄存器(当用分组执行动作时被用作临时数据存储)来规定的中间级代码。
在分组处理的解析阶段中使用的解析器代码116的一部分可在逻辑上表示为有向图。这样的有向图中的每个节点表示协议报头并且有向边表示基于报头的字段内的值而采取的路径。在图7中呈现这样的有向图的示例,它图示根据本发明的一个实施例的解析阶段700和关键字生成阶段701的表示,其中解析阶段700可操作来解析UDP、TCP、和MPLS分组。当解析以太网702的第一协议报头来识别其字段时,基于以太网报头702的ether_type字段值而发生分支决定。如果ether_type字段值是0x8847,则将被解析的下一报头是MPLS报头704。在一实施例中,基于MPLS报头704内的bos字段(栈的底部)的值而发生分支决定。当bos字段值是零时,解析将继续到下一报头,它也是MPLS报头704。当bos字段值不是零时,解析阶段700结束并且关键字生成701开始。在另一实施例中,到达MPLS报头704的分支决定依赖于bos字段值和key_is_matchable字段值两者,它发出其中更多的MPLS分组704可存在于分组内的事件信号,但是另外检查是不必要的,因为可已经生成分组分类的所希望的关键字。因此,当key_is_matchable字段值或bos字段值不为零时,解析阶段700结束并且关键字生成701开始。类似地,如果以太网报头702的ether_type字段值是0x8100(而不是0x8847),则分组的下一报头将被解析为IPv4报头708。在此点上,检查IPv4报头708的协议字段值:如果它是0x11,则解析将以UDP报头710为下一报头而继续,并且如果它是0x06,则解析将以TCP报头712为下一报头而继续。然后将解析UDP710或TCP712报头来识别其字段,并且解析阶段700结束并且关键字生成701开始。
转回图1,解析器配置包117内的解析器代码116也包括用于在全异的转发元件120B-120N内的分组处理的动作执行阶段期间对分组执行动作的指令。当在转发元件120A中***或修改流时,控制器110填充这些动作。动作的两个类别可以定义为独立于分组的协议的动作、和依赖于分组的协议的动作。协议独立的动作的示例包含将分组输出到端口、为分组设置队列、或丢弃分组。此外,独立的动作可包含将分组发送回到解析器,它通常在它已经被动作修改之后发生。
另外,通过利用协议的可配置的定义(包含处理配置102内的协议报头104的有关的报头字段并且表示在处理定义112内),可对分组执行协议依赖的动作。这通过分组处理技术的协议具体的定制而提供增加的灵活性,其中可以用细粒度的方式来修改具有某些协议报头的分组。例如,协议依赖的动作可被定义为将附加的报头推进分组或从分组弹出报头。另外,协议依赖的动作可以用简单或复杂的方式来改变某些分组报头内的字段。例如,可通过将时间递增或递减为实况(TTL)字段(通常在IPv4报头中找到的字段)在数学上修改字段,或基于字段中的原始值用完全不同的值来替换目的地地址值。此外,在这样的修改之后,动作可为报头或分组计算新的校验和。
当分组内有解析回路或递归时(例如,当分组中有相同类型(例如,MPLS等)的多个报头、或封装或隧道的业务(例如,以太网MPLS-MPLS以太网等)),通过支持所执行的细粒度动作,此配置允许分组处理的另外控制。在这样的情况下,动作可足够智能来修改、弹出、或推进分组内的目标的报头。然后可触发独立的动作来将分组重新发送回去用于进一步解析。当然,因为解析器代码116的特性,将对特定协议栈执行的这些定制的动作是可行的(因为转发元件120A自身对应该如何在分组中布局报头没有认识,而是仅仅跟随由解析器代码116定义的过程)。例如,转发元件120A不需要从根本上被设计为知道L3报头(例如,因特网协议(IP)、IPSec、内部网络分组交换(IPX)等)应该出现在L2报头(例如,地址解析协议(ARP)、异步传输模式(ATM)、点到点协议(PPP)等)之后,而是相反只需要盲目地信赖解析器代码116来通过分组的报头而移动。
除创造解析器代码116以外,转换器113还生成包含可配置的流表定义(包含关键字组分)108的表示的流表配置115A信息。流表配置115A的版本115B可包含在解析器配置包117内(被分发172到转发元件120A-120N)。当被转发元件(例如,120A)的解析器配置包117接收时,配置模块121则可利用流表配置115B来将信息167传送到流表管理模块126以指示它创建或修改流表140A-140N。例如,配置模块121使用流表配置115A以指示167流表管理模块126多少流表140A-140N是必要的,每个表的关键字组分(如何构造每个表的关键字列144A-144N),以及如何构造流表140A-140N中的条目179A-179N。此外,由转换器113创建的流表配置115A被提供154到流表填充模块118,它使用包含关键字组分的可配置的流表定义108的表示以便通过将数据173发送到流表管理模块126来正确填充全异的转发元件120A-120N的流表140A-140N中的流表条目179A-179N。
因此,控制器110(经由流表填充模块118)与转发元件120A交互173来维持必要的流表140A-140N的条目179A-179N。控制器110也经由配置模块121与转发元件120A交互167来创建或修改流表140A-140N。因此,流表140A-140N的所有这样的配置和管理通过流表管理模块126而发生。
每个流表包含可配置的关键字列176和动作列178。可配置的关键字列176实现关键字组分并且包含一个或多个关键字列144A-144N,因此通过将部分关键字匹配到关键字列144A-144N来允许分组分类。如图1中描绘的,这些可配置的关键字列176可包含字面值(例如,80、23、10、192等)或通配值(例如,“*”)。动作列178包含将对分类为属于那个对应流的分组执行的每个流条目的一个或多个动作146A-146N。如图1中描绘的,这些动作列178可包含多种动作,此处一些动作被一般图示为丢弃、输出、弹出、以及重新解析。在本发明的实施例中,这些列包含动作ID来识别位于别处的动作代码,并且可包含当执行动作时使用的变元值。
在一实施例中,流表还包含一个或多个流选择列177。一个可能的列是流ID列141,为了在转发元件120A内的模块之间和在转发元件120A与控制器110之间的通信的方便,它将唯一标识符分配到每个流条目。例如,当控制器110希望修改流表140A中的一个或多个动作146A-146N时,它可容易地传送流ID 141值来快速地识别将修改哪个条目。另一可能的列是优先级值列142,当分组的关键字匹配流表140A的多于一个条目时,它包含允许流优先级的值。当通配值在可配置的关键字列176内时,这通常发生。例如,给定图1中描绘的场景,具有对应于关键字列144A的值“80”和对应于关键字列144N的值“192”的分组关键字可能匹配流表140A中的两个流条目(第一描绘的条目179A和最后描绘的条目179D)。假设两个条目都匹配关键字,并且假设没有第一条目179A和最后条目179D的其它可配置的关键字列(例如,144B)是不同的,然后每个条目的优先级值142用于确定哪个流来分类分组。因为第一流条目179A具有优先级值142为“1”并且最后的条目179D具有优先级值142为“7”,本发明的一个实施例可认为具有最小的优先级值的记录是决定性的,并且因此分组会被分类为属于第一流条目179A。备选地,在认为具有最大优先级值的记录是决定性的另一实施例中,分组会被分类为属于最后的流条目179D。此配置需要控制器110以这样的方式维持流表140A-140N来防止优先级限制发生。这可以用各种方式来完成,例如将不同的优先级值142分配到每一个条目179A-179N,或只将相同的优先级值142分配到互相排斥的条目,意味着具有共享优先级值142的两个条目无法匹配一个关键字。在其它实施例中,在优先级值142限制的情况下,附加的决胜过程发生,例如选择表中更高的条目或具有最长前缀匹配或最精确匹配的条目(即,具有可配置的关键字列176内的最少通配符的条目)。
表1呈现根据本发明的一个实施例的流表的示例。表包含两个关键字列,一个用于第一MPLS标签和一个用于第二MPLS标签。表还包含流选择列:为表中的每一个条目存储唯一标识符的流ID列141,和存储用于实体选择的优先级值的优先级列。表还包含一个动作列,它存储对具有匹配两个关键字列并且由此被分类为属于特定流的关键字的分组执行的动作。
假设分组的解析选择如表1中图示的流表并且生成包括“2”作为第一MPLS标签(即MPLS标签0)和“2”作为第二MPLS标签(即MPLS标签1)的关键字,关键字将匹配由流ID“1”以及流ID“3”识别的流表的条目。在具有最低优先级值的匹配的条目表明流成员资格的一实施例中,分组将被分类为流ID“3”因为其优先级值“1”低于流ID“1”的优先级值“5”,并且因此可执行的动作指示将丢弃分组。在具有最高优先级值的条目表明流成员资格的一实施例中,分组被分类在流ID“1”下并且其可执行的动作指示将输出分组。备选地,在最早的条目表明流成员资格的一实施例中,分组将立即被分类为属于流ID“1”(因为分组的关键字与关键字列匹配)。在使用此“最早流表条目”配置的一实施例中,优先级值是不必要的,因为它是算法中固有的:一检测到具有匹配关键字的关键字列的第一条目,第一条目自动地被识别为匹配。
转回图1,在转换器113产生解析器配置包117之后,解析器配置包117被发送到148控制器110内的分布模块119,它另外将解析器配置包117传送172到软件定义的网络中的转发元件120A-120N。因为在可用于存储并且执行计算机代码资源中转发元件120A-120N可不同,所以分布模块119将描述解析器配置包的117解析器代码116的具体能力通信到每个转发元件120A-120N。例如,可通信具体能力(例如,解析器代码116的大小和解析器代码116所需要的虚拟寄存器的数量),并且每个转发元件120A-120N然后可根据它可用的资源来实现这些能力。因此,控制器110可以编程理解解析器配置包117而没有转发元件的内部或如何生成特定转发元件的本机代码的知识的任何转发元件。
转发元件(例如,120A)内的配置模块121接收由分布模块119发送的解析器配置包117。配置模块121将解析器代码116的表示从解析器配置包117分布到分组处理模块122的片段(它围绕转发元件120A的主分组处理管线)。例如,解析模块123接收解析器代码116的表示174,使它能解析分组来选择流表并且生成分组分类的关键字,它被发送166到匹配和动作模块124用于附加的分组处理。此外,为了用分组执行动作,匹配和动作模块124依赖于从配置模块121发送的解析器代码116的表示175。此外,配置模块123还使用来自解析器配置包117的信息(例如,流表配置115B或解析器代码116)来指示167流表管理模块126创建必要的流表140A-140N。
图2描绘处理配置102的表示可如何用于包含决定模块202和关键字生成模块204的解析模块123的一个实施例中。一接收到分组170,决定模块基于可配置的逻辑的表示157(用于在流表106和由可配置的逻辑106识别的分组的协议报头字段的值之间选择)来选择一个流表(例如,140A)。决定模块202将选择的流表140A标识符发送到关键字生成模块204。在本发明的实施例中,决定模块202也为当生成关键字时将使用的选择的流表140A选择关键字组分变量,并且将关键字组分变量连同表标识符一起发送203到关键字生成模块204。
关键字生成模块204根据包含关键字组分的可配置的流表定义108使用关键字生成逻辑158的表示来生成关键字。此关键字生成是基于选择的流表140A的关键字组分和由关键字组分识别的分组的协议报头字段的值。关键字生成模块204将此关键字连同选择的流表140A标识符一起发送166到匹配和动作模块124来继续分组处理。
在图7中另外描绘解析模块123的操作的方面。如以上所描述的,使用来自解析器配置包117的解析器代码116解析700分组来识别分组的协议报头字段并且选择用于分类的流表。在图2中描绘的实施例中,决定模块202执行包括分组处理的解析阶段700的此识别和选择。接着,在关键字生成阶段701中,根据选择的表的关键字组分来构造关键字。例如,当解析路径将分组识别为包括至少一个MPLS报头704时,将选择表“0”并且其关键字组分714用于基于在解析分组时识别的MPLS标签来生成关键字。在将分组识别为包含IPv4报头的另一示例中,将选择表“1”并且其关键字组分变量716中的一个将用于使用来自以太网、IPv4、以及分组的UDP或TCP报头的字段来生成关键字。在本发明的实施例中,将根据在以上解析700阶段中识别的报头来使用不同的关键字组分变量。如果分组包括UDP报头710,则使用包含UDP dst_port和src_port字段的第一关键字组分变量717A。备选地,如果分组包括TCP报头712,则使用包含TCP dst_port和src_port字段的第二关键字组分变量717B。在图2中描绘的实施例中,关键字生成模块204执行此关键字生成701阶段。
转回图1,虽然利用用于在流表之间选择的可配置的逻辑106的表示157来解析分组,但是在一实施例中解析模块123为它检查的分组识别每个识别的报头的每个定义的字段。这些字段的值(或指向这些字段或分组的位置的指针)持续存在于转发元件120A内的分组上下文存储区域,它允许分组管线中的每个模块在分组的处理期间快速接入此信息。当匹配和动作模块可需要使用需要分组的报头布局的知识的分组来执行动作(例如,弹出报头、编辑报头内的字段等)时,尤其是以后在分组处理管线中这是很有用的。
匹配和动作模块124接收并且使用选择的流表标识符和关键字来识别选择的流表140A的一个条目(至少基于比较168关键字与选择的流表140A的可配置的关键字列176中的填充关键字)。在识别流表140A的匹配条目之后,将来自动作列178的值返回到匹配和动作模块124。在一个实施例中,为了各种目的还将流选择列177中的一个或多个返回到匹配和动作模块124,例如,当多个条目(例如,179A、179D、以及179F)匹配关键字时选择一个流条目。在本发明的实施例中,当关键字不匹配选择的流表140A内的任何条目时,将分组传送回到控制器110。作为响应,控制器110可决定使用流表填充模块118在选择的流表140A中创建新的流表条目(例如,179N)。
利用由识别的条目规定的返回169的一个或多个动作146A-146N,匹配和动作模块124对分组执行动作。如以上所描述的,可执行多种类型的协议独立和协议依赖的动作,它可以引起分组被转发、丢弃、修改,或重新解析。此外,关键字(或其部分)可被发送到另一流表(例如,140B)来尝试匹配那里的流条目。
在图1中提出利用***的一种方式,它使用带圈的数字来指示用于读取图示的项目的次序以便本发明的理解。在圆圈1中,通过根据从配置模块121接收167的数据来定义由每个流表167的关键字组分规定的一个或多个可配置的关键字列176,流表管理模块126根据解析器配置包117内的每个可配置的流表定义108来创建流表140A-140N。利用定义的这些表,流表管理模块126根据从控制器110接收的数据173将一个或多个流表条目179A-179N填充165到一个或多个流表140A-140N(作为圆圈2)。随着这些任务完成,转发元件120A接收分组170(作为圆圈3),然后它进入解析模块123。解析模块123利用来自解析器配置包117的解析器代码116,它包含用于在流表之间选择的可配置的逻辑106和包含关键字组分的可配置的流表定义108的表示,来基于由可配置的逻辑106识别的分组的协议报头字段来选择一个流表(例如,140A)并且基于来自可配置的流表定义108的选择的流表140A的关键字组分和由可配置的逻辑106识别的分组的协议报头字段的值来生成关键字(作为圆圈4)。在圆圈5中,匹配和动作模块124利用168选择的表ID和关键字来至少基于比较关键字与选择的流表140A中的填充的关键字而识别选择的流表140A的一个条目(例如,179A)。在圆圈6中,将由识别条目179A规定的一个或多个动作从流表140A返回169到匹配和动作模块124并且执行这些动作。如果动作需要转发分组,在虚线圆圈7中分组和转发信息(例如,端口、组播或单播等)被发送171到将转发的出口模块。
图3图示根据本发明的一个实施例的在软件定义的网络中起到控制器110的作用的网络元件中的方法的流程图。将参考其它图表的示范性实施例来描述此流程图和其它流程图的操作。然而,应理解可以由不同于参考这些其它图表讨论的那些的本发明的实施例来执行流程图的操作,并且参考这些其它图表讨论的本发明的实施例可以执行不同于参考流程图讨论的那些的操作。
在图3中提出的实施例中,控制器110首先接收302处理定义112,其中处理定义112包含以下表示:协议的可配置的定义104(包含协议报头的有关的报头字段)、可配置的流表定义108(包含基于第一多个有关的报头字段的关键字组分,其中每个流表定义的关键字组分识别为流表定义选择的一组一个或多个有关的报头字段)、以及可配置的逻辑106(用于基于第二多个有关的报头字段在由可配置的流表定义定义的流表之间选择)。在一实施例中,用于在流表之间选择的可配置的逻辑106也在选择的流表的关键字组分变量之间选择。
然后控制器110转换304处理定义112来创建解析器配置包117,其中解析器配置包117包含可配置的流表定义108以及用于在流表之间选择的可配置的逻辑106的第二表示。在一实施例中,所包含的可配置的逻辑的表示用于在流表之间选择并且也用于在选择的流表的关键字组分变量之间选择。在一个实施例中,解析器配置包117还包含基于可配置的流表定义108的关键字生成逻辑的表示158。
利用编译的解析器代码116和可选的流表配置115B,控制器110将解析器配置包117分布306到多个转发元件120A-120N来使每个:1)基于每个可配置的流表定义108来创建流表(例如,140A),其中每个流表140A-140N包含由包含在那个流表所基于的流表定义中的关键字组分167而识别的每个有关的报头字段的可配置的关键字列176,并且其中每个流表140A-140N还包含一个或多个动作列178来存储转发决定;以及2)安装关键字生成逻辑158。在本发明的实施例中,解析器配置包117到多个转发元件120A-120N的分布306还可使每个创建、更新、或删除流表,而不是仅仅创造如上所述的流表。
利用配置流表140A-140N并且安装关键字生成逻辑158,控制器110传送308数据来填充在多个转发元件120A-120N中的每个内创建的流表140A-140N的可配置的关键字列176和动作列178,其中每个流表140A-140N的可配置的关键字列176的数据是区别那个流表的条目179A-179N的关键字。
在本发明的实施例中,控制器110可接收320对处理定义112的更新。利用这样的更新,控制器110转换更新的处理定义304来创建更新的解析器配置包117(它随后被分布306到转发元件120A-120N)。因为流表140A-140N已经存在于多个转发元件120A-120N内,解析器配置包117的分布306可使一个或多个转发元件120A-120N来创建、更新、或删除流表140A-140N以及安装关键字生成逻辑158。
图4图示根据本发明的一个实施例在软件定义的网络中起到转发元件(例如,120A)的作用的网络元件中的方法的流程图。此图至少图示用于分组处理的用于动态地配置并且更新转发元件120A的步骤。
转发元件120A在与软件定义的网络内的控制器装置的网络连接上接收402包含以下表示:可配置的流表定义108(基于协议报头的第一多个有关的报头字段的关键字组分,其中每个流表定义的关键字组分识别为那个流表定义选择的一组一个或多个有关的报头字段)、以及可配置的逻辑106(用于基于协议报头的第二多个有关的报头字段在流表之间选择)。在一实施例中,可配置的逻辑106也在选择的流表的关键字组分变量之间选择。
利用表示,转发元件120A也将基于每个可配置的流表定义108来创建404流表140A-140N,其中每个流表140A-140N包含由包含在那个流表所基于的流表定义中的关键字组分而识别的每个有关的报头字段的可配置的关键字列176,其中每个流表还包含一组一个或多个动作列来存储转发决定。转发元件120A也将利用表示来安装406用于在流表之间选择的可配置的逻辑106并且安装408关键字生成逻辑。在一实施例中,安装的可配置的逻辑106也在选择的流表的关键字组分变量之间选择。
因此转发元件120A能够接收410数据来填充流表140A-140N的条目179A-179N,其中每个条目包含关键字列144A-JX44N内的关键字和146A-146N中的一组一个或多个动作。利用此数据,转发元件120A根据所接收的数据来填充411一个或多个流表140A-140N的一个或多个条目179A-179N。
在一实施例中,转发元件120A可再次436接收410数据来填充流表140A-140N的条目179A-179N,其中每个条目包含关键字列144A-JX44N内的关键字和146A-146N中的一组一个或多个动作。因此,转发元件120A将根据所接收的数据来再次填充411一个或多个流表140A-140N的一个或多个条目179A-179N。
在一实施例中,转发元件120A将接收来自控制器110的更新。此更新可以是对可配置的流表定义412的更新和/或对可配置的逻辑414的更新的形式。
如果转发元件120A只接收442对可配置的流表定义108的更新412,则转发元件120A将随后438根据更新412来创建、更新、或删除一个或多个流表140A-140N。
如果转发元件120A只接收444对可配置的逻辑406的更新414,则转发元件120A将安装用于在流表之间选择的更新的可配置的逻辑106并且安装408关键字生成逻辑。在一实施例中,安装的更新的414可配置的逻辑106也在选择的流表关键字组分变量之间选择。
然而,如果从控制器110接收的更新同时包含446对可配置的流表定义108的更新412和对可配置的逻辑106的更新414,则转发元件120A将创建、更新、和/或删除流表404以及安装可配置的逻辑406和关键字生成逻辑408。
图5图示根据本发明的一个实施例的用于做出转发决定的在软件定义的网络中起到转发元件(例如,120A)的作用的网络元件中的方法的流程图。图5描绘用于从分组502的转发决定中选择的方法,在使用一个或多个协议的网络装置的网络接口上接收,根据用于在流表之间选择的可配置的逻辑106、流表140A-140N、和可配置的逻辑106所需要的有关的报头字段中的每个分组值来选择那个分组的一个流表并且为那个分组选择来自选择的流表的条目。转发元件120A将首先接收504分组来解析。分组可来自各种位置,包含转发元件的120A网络接口或分组处理管线中的另一模块(例如,匹配和动作模块124)。
利用分组,转发元件120A将基于用于在流表之间选择的可配置的逻辑106和用于选择的可配置的逻辑106所需要的多个有关的报头字段的某些中的分组的值来选择508一个流表(例如,140A)。在一实施例中,可配置的逻辑106也将为选择的流表140A选择关键字组分变量。
利用选择的流表140A和关键字,转发元件120A将至少基于比较选择的流表140A中的填充的关键字与从由选择的流表的关键字组分识别的有关的报头字段中的分组的值生成的关键字来识别512选择的流表140A的一个条目(例如,179A)。利用被识别的一个条目179A,转发元件120A将执行514在识别的条目179A的一组一个或多个动作列178中规定的一组一个或多个动作。
在一实施例中,一个执行的动作178可需要分组处理模块122重新解析分组。例如,当分组包括相同类型(例如,MPLS等)的连续报头时,当一个动作已经修改分组时,或当另一协议封装分组的协议报头时,这可发生。在这样的场景中,转发元件120A将再次选择一个流表508,识别选择的流表512的一个条目,并且执行由那个条目514规定的动作。
图6图示根据本发明的一个实施例的用于识别流表条目(例如,179A)的在软件定义的网络中起到转发元件(例如,120A)的作用的网络元件中的方法的流程图。
在已经选择流表(例如,140A)并且已经生成分组的关键字之后,转发元件120A将通过利用填充的关键字内提出的通配值的通配符匹配来比较604关键字与选择的流表140A中的填充的关键字。利用允许的通配符匹配,关键字将匹配多于一个流表条目的填充的关键字是可能的。所以,转发元件120A将确定606多少填充的关键字匹配关键字,它确定多少流表条目是匹配的。
如果正好匹配一个流表条目,则那个条目是识别的条目512。然而,如果匹配多于一个流表条目,则转发元件120A在一组匹配的条目内选择620一个条目。在一实施例中,此选择基于由一组匹配的条目的每个条目规定的优先级值而发生。例如,转发元件120A可选择具有集合中的最高优先级值的条目或具有集合中的最低优先级值的条目。在另一实施例中,条目的选择是基于关键字与匹配的条目之间的最精确匹配而发生。例如,转发元件120A可选择具有其可配置的关键字列176中的最少通配值的条目,指示它具有与关键字的对应部分共同的最字面上的关键字列144A-144N。然后选择的流表条目被用作识别的条目512。
然而,如果关键字不匹配任何流表条目,则转发元件120A必须采取纠正动作610。在一实施例中,其中可由***范围配置全局设置或以每一个流表为基础来设置要发生的动作的路径,发生决定点612。在一个配置中,在没有流表条目匹配时,转发元件120A将分组传送614到控制器110。这使控制器110能分析分组并且潜在地更新一个或多个转发元件120A-120N来使这样的分组能在未来匹配至少一个流表条目。在备选配置中,转发元件120A简单地丢弃分组616。在具有众所周知的业务类型和用户的网络中,此配置可防止网络接入到未授权的装置或防止未授权的业务(例如垃圾邮件、蠕虫、和黑客攻击)。
图8图示根据本发明的一个实施例的包含控制器110和全异的转发元件810A-810K的示范性灵活的和可扩展的流处理***。控制器110包含定义接收模块111,它接收处理定义112。处理定义112包含以下表示:协议的可配置的定义104(包含协议报头的有关的报头字段)、用于在流表之间选择的可配置的逻辑106,以及包含关键字组分的可配置的流表定义108。处理定义112被提供151到转换器113,转换器113使用编译器114来产生152成为解析器配置包117的一部分的解析器代码116。转换器113也产生流表填充模块118用来填充流表140A-140N的流表配置115A信息。流表配置115A的版本可包含在解析器配置包117中。解析器配置包117最终被每个全异的转发元件810A-810K用来创建必要的流表140A-140N并且执行分组处理。
解析器配置包117被提供148到分布模块119,它将解析器配置包117的相同拷贝156传送到全异的转发元件810A-810K。在此配置中,传送解析器配置包117的相同拷贝简化了控制器110(因为它不需要关注如何为网络内的各种网络元件生成本机代码)。备选地,控制器110可编程为生成并且传送一个或多个转发元件配置的硬件具体机器代码,在这种情况下接收方转发元件(例如,810A)将不需要编译器(例如,822)。
当配置并且填充每个全异的转发元件810A-810K内的流表时,利用由转换器113生成的流表配置115A-115B信息。利用来自提供148的解析器配置包117的流表配置115B(或在一实施例中,解析器代码116),每个转发元件810A-810K能够定义、创建、和/或修改每个流表的可配置的关键字列176(因为它知道必要的列的数量以及每个列的数据类型)。另外,控制器110的流表填充模块118能够利用提供154的流表配置115A来通过发送流表数据802A-802K而用流表条目179A-179N填充每个流表140A-140N。
不像传送156的解析器配置包117(它对每一个网络元件810A-810K是相同的),流表填充模块118用于将自定义的流表数据802A-802K发送到每个网络元件810A-810K。因此,控制器110可在每个网络元件上填充不同类型的流表条目。这在这样的软件定义的网络内提供处理分组的显著灵活性和能力。例如,边缘网络元件可容易地配置为处理不同于核路由器的业务。另外,利用通过此流表数据802A-802K的传送的动态更新,控制器110可以通过调整一个或多个全异的网络元件810A-810K的流表条目和对应可执行的动作而快速响应于网络内的业务的类型或频率的改变。
接收解析器配置包117和流表数据802A-802K的全异的网络元件810A-810K可利用不同的硬件配置并且因此以不同的方式实现分组处理逻辑。然而,所有网络元件810A-810K仍然接收相同的解析器配置包117。例如,网络元件810A包括具有编译器822和第一类型的处理器826的执行单元821。在接收到解析器配置包117时,编译器822在本机机器指令或第一类型的机器代码824(用于在网络元件的处理器826上的执行)中将解析器配置包117编译到分组解析器。此外,不同的转发元件810B包含具有用于不同类型的处理器846的不同类型的编译器842的执行单元841。不管这些差别,网络元件810B接收与第一网络元件810A相同的解析器配置包117,编译它来生成其自己的自定义机器代码844,并且在其处理器846上执行机器代码844来执行分组处理。
除在具有不同的处理器和编译器的网络元件(例如,810A-810B)上运行以外,还可在具有包含特殊协处理器、核、或集成电路的硬件实现的网络元件上执行相同的解析器配置包117。例如,除具有一般处理器864以外,网络元件810K具有包含能够直接解释所接收156的解析器配置包117的协处理器862的执行单元861。因为此协处理器可以直接解释解析器配置包117,编译器对它是不必要的。
图9图示根据本发明的一个实施例的用于灵活的和可扩展的流处理***的处理配置的示范性表示。此图包含三个各别的但是相互关联的信息类型:包含协议报头的有关的报头字段的协议的可配置的定义104的报头指令表示904、用于在流表之间以及在选择的流表906的关键字组分变量之间选择的可配置的逻辑的栈指令表示906、以及包含关键字组分的可配置的流表定义108的表定义指令表示902。以下详述根据本发明的一个实施例的这些表示的格式。
报头指令表示
报头指令表示904定义将为网络中的分组处理的每个协议报头的协议和有关的报头字段。这些报头指令表示904允许转发元件120A-120N动态地配置为认出特定协议报头并且因此从硬件的角度是协议无关的,它允许随着开发新协议的修改的方便。例如,如果开发新的点对点(P2P)协议,报头指令表示904可被轻易修改来定义协议的有关报头字段并且然后分布到网络中的转发元件120A-120N,允许适当地处理新协议的分组。此外,报头指令表示904允许每个报头内有用的(即,有关的)字段的集中声明,因为只有可用于进一步解析决定或用于关键字中的字段将被识别。这防止在处理分组的过程中是完全无用的报头字段的任何不必要的识别或提取。
在表2中呈现报头指令表示904的句法的一个实施例。指令的第一部分(它是字“header”)意味着指令是报头指令。“header_name”是表示报头的定义的名称的值。例如,在图9中第一报头指令表示904是用于以太网V2分组,并且header_name是“etherv2”。下一个是将马上描述的可选的“length”关键字。
在报头指令表示904的圆括号内是有关的报头字段的一个或多个字段声明。每个字段声明包括“field_type”和“field_name”。“field name”占位符表示报头内的特定字段的名称。例如,在图9中,报头“etherv2”的第一报头指令表示904包含表示字段包括目的地MAC地址的“dst_addr”的“field name”。“field_type”占位符是用于描述报头的字段的若干基本数据类型的一个。例如,“field_type”可以是描述无符号的整数的基本整数类型(例如,uint8_t、uint16_t、uint32_t、或uint64_t)。当然,也可以使用其它数据类型(例如,有符号的整数、字符、浮点数、或任何其它数据类型)。在图9中,第一报头指令表示904利用表示存储MAC地址的类型的“mac_addr_t”类型以及用于十六位有符号的整数的“int16_t”。可选地,“field_type”还可包括字“field”,其中字段声明还可包含可选的“field_size”。在此场景中,“field”的“field_type”指示报头字段的值包括位的“field_size”数量。例如,报头“vlan”的第二报头指令表示904包含三个位的“pcp”字段、一个位的“cfi”字段、和12个位的“vid”字段。这个具有“field_size”的一般性“field”也有助于将多个字段组合成一个字段声明,特别是如果字段将不用于后续分组处理。例如,考虑其中一些报头的前四个字段不被考虑为有关的,但是第五报头是有关的场景。假设此报头的前四个字段的每个是每8个位大小,并且这些前四个字段对于后续处理是不必要的,一个字段声明可通过使用“field”的“field_type”和32个位的“field_size”将四个字段组合在一起。
转回在第一圆括号之前的指令部分,可选的“length”关键字和“length_expr”占位符允许基于报头的一个或多个字段使用数学表达来定义报头的大小。例如,名为“ipv4”的第四报头指令表示904将字节中的每个“ipv4”报头的大小定义为存储在报头内的“hlen”字段中的值的四倍。此“length”关键字和数学表达的使用对于处理可变长度报头是特别有用的。此外,如果在报头的末端有不必要的(即不相干的)字段,则报头指令表示904可不包含它们并且反而使用length关键字和表达来定义报头的总长度。这防止分组处理模块122识别并且提取将不再使用的报头字段。当没有规定“length”关键字时,基于报头内的所有字段的长度总和来计算分组的长度。
栈指令表示
栈指令表示906组成用于在表之间和在选择的流表的关键字组分变量之间选择的可配置的逻辑106的核心。在定义协议报头如何相互关联并且在处理期间如何从一个报头流到下一报头中,栈指令表示906定义将解析哪个报头并且因此将识别什么字段。另外,栈指令表示906指示当基于分组的报头的次序而分类分组时将使用哪个流表并且另外指示哪个关键字组分将用于生成关键字。当处理分组时,分组处理模块122将识别分组的第一报头并且根据栈指令表示906而开始穿过分组的报头。
在表3中呈现栈指令表示906的句法的一个实施例。指令的第一部分“stack”意味着指令是栈指令。指令的下一部分是具有“key_field”的“header_name”。这些占位符指示栈指令将用于什么报头,以及当确定在生成关键字并且执行分类之前是否应解析另外的报头时将检查来自那个报头的哪个字段。例如,在图9中当解析以太网版本2(V2)报头时(header_name是“etherv2”),将使用第一栈指令表示906。另外,来自etherv2报头的“ether_type”key_field将是当决定是否继续解析附加的报头时所使用的字段。
接着是可选的“stackable”关键字和“stack_depth”值。可选的stackable关键字规定由此栈指令指示的报头的多个实例可以用连续序列堆叠在一起。因为多个重复的报头可出现在这样的场景中,所以此关键字对于描述利用隧道和封装的分组是特别有用的。可选地,可由stack_depth值来限制这样的重复的报头的检查深度。在图9中,“mpls”的第三栈指令表示906包含可选的stackable关键字但没有stack_depth值。因此,可重复解析连续的MPLS报头直到检测到新的、非MPLS报头或一些其它控制方法停止解析(例如,当MPLS分组的检查的“key_field”指示处理分组中的改变时)。
在圆括号内是两个类型的声明:表声明和规则。在一实施例中,这两个类型中的一个的至少一个声明必须存在于栈指令内。表声明开始于表关键字,并且接着是“table_id”(如果分组的报头的解析在此栈指令中终止,“table_id”指示用于分组分类(即查找)的唯一流表)。例如,在图9中,“ipv4”的第二栈指令表示906包含“table 1”声明,所以如果解析在检查此报头时完成,则由“1”识别的流表将用于分类。
接着,可包含可选的“recursion”关键字和“r_count”(递归计数)来指示可在分组解析期间返回由栈指示的报头。在返回特定类型的报头的此情况中,然后由“table_id”识别的流表将用于分类并且另外的报头解析将停止。当解析应该停止时,r_count指示报头遍历中的点。因此,1的r_count指示报头第一次再访问,报头解析应该停止并且分类应该开始。类似地,2的r_count指示报头第二次再访问,报头解析应该停止并且分类应该开始。例如,如果“table 1 recursion 1”的表声明存在于栈指令内,在第一次再访问栈指令时,报头解析会停止并且分类将开始使用由“1”值识别的流表。
栈指令内的第二类型的声明被称作规则并且包含具有字“next”和“header_name”的“key_value”。此规则声明提供用于在逻辑上确定报头解析是否以及如何应该继续的栈内的必要数据。分组的header_name.key_field内的值(由此栈指令的第一部分定义)与这些规则中的每个的每个key_value比较。如果key_field等于规则中的key_value,则解析将继续到分组的下一报头,它将是类型header_name,并且将分析对应的栈为了做出另外的决定。如果宣告多于一个规则,则将依次序检查每个规则,并且因此只有一个路径可用于分组。另外,如果key_field不匹配任何规则的key_value,并且如果没有为栈定义的表声明,将发生纠正动作。纠正动作的示例包含丢弃分组或将分组传送到控制器110。
例如,在图9中,“etherv2”的第一栈指令表示906包括两个规则,并且在处理etherv2报头中,将依次比较其ether_type字段的值与0x8847和0x0800。如果ether_type字段等于0x8847,则解析将继续到“mpls”报头。如果不是,则将比较ether_type字段与0x0800:如果它们是相等的,解析将继续到“ipv4”报头,但是如果它们不相等,分组可被丢弃或转发到控制器110。
“ipv4”的第二栈指令表示906提出其中每个“next”报头没有对应的栈指令的情况。例如,如果“proto”字段等于0x11,则处理将继续到“udp”报头。然而,因为没有udp栈指令表示906,所以将使用udp报头指令表示904来识别udp报头的字段,并且处理被认为和ipv4栈指令表示906一样完整,所以“table 1”将用于分类的目的。
此外,规则可包括代替key_value的通配符星号(*)。在此场景中,每一个key_field将匹配星号,因此解析将继续到如规则的“next header_name”部分指示的下一报头分组。
通过规则和表声明的使用,定义可识别的分组的解析路径并且这些路径选择用于分类的流表和在关键字生成期间将使用的和关键字组分变量。尽管结束栈内的解析并且指向用于分类的特定流表,导航栈的次序确定用于构造关键字的关键字组分变量。例如,在图9中,如果解析将在“ipv4”的第二栈指令表示906中结束,与“table 1”关联的流表将用于分类。然而,根据最终解析的报头是否是“udp”报头、“tcp”报头、或另一类型的报头,生成的关键字将不同,这是因为来自那些报头的字段可用在关键字中。因此,此解析次序将确定关键字组分变量,它将与以下描述的表定义指令表示902一起使用。
表定义指令表示
表定义指令表示902组成包含关键字组分的可配置的流表定义108的核心。这些指令规定用于分组分类的流表的类型和大小两者。另外,解析和分类阶段紧密结合(因为表定义指令表示902也规定用于索引流表的关键字组分和变量)。
在表4中呈现表定义指令表示902的句法的一个实施例。指令的第一部分包含字“table”和唯一“table_id”标识符,它们一起指示指令的类型和指令所属于的唯一流表。
在圆括号内是一个或多个字段声明,每个开始于字“field”和“field_id”。每个字段声明表示流表中的一个可配置的关键字列176和那个表的关键字的一部分。在一实施例中,field_id是表示关键字内的字段的位置的整数。接着,在附加的一组圆括号内是“matching_type”。当通过比较关键字与列来分类分组时,此值可包含在流表列内允许的匹配类型的一个或多个名称。例如,matching_type可包含用于要求精确匹配的“exact”、用于使用最长前缀匹配的“lpm”、用于使用特定掩码的“mask”、或“范围”(具有两个开始和结束论据)。例如,在图9中,“table 0”的第一表定义指令表示902包含两个字段声明,每个要求精确匹配。在“table 1”中,四个字段需要精确匹配而字段2和3允许24位的前缀匹配。在matching_type之后,每个字段声明包含“header_name”和“key_field”,它表示应该用于构造关键字的此部分的解析的报头。例如,在图9中,“table 1”的第二表定义指令表示902提供关键字的第一部分应该来自分组的“etherv2”报头的“dst”字段,并且关键字的第三部分应该来自分组的“ipv4”报头的“src_addr”字段。还可使用括号来规定header_name和key_field值以指示已经解析的特定报头或字段。这对于报头递归是特别有用的,其中括号详述列举值应该来自递归的哪一层的递归深度。类似地,当一个报头类型(或key_field)的多个实例位于接近彼此时,此记号允许特定报头(或字段)的选择。例如,在图9中,“table 0”的第一表定义指令表示902提供第一字段将来自第一解析的MPLS报头并且第二字段将来自第二解析的MPLS报头。
在表4中也呈现字段声明的可选修改。在利用问题标记和两个报头/字段备选(作为逻辑的三元运算符)中,两个关键字组分变量被定义为允许构造不同的关键字用于相同的表。例如,在图9中,由于字段4和5的字段声明,“table 1”的第二表定义指令表示902提供两个关键字组分变量。这些字段声明的每个基于如栈指令表示906定义的解析的路径来定义单独的关键字。如果解析“udp”报头,则字段4将利用“udp.dst_port”值并且字段5将利用“udp.src_port”值;如果反而解析“tcp”报头,则字段4将利用“tcp.dst_port”值并且字段5将利用“tcp.src_port”值。因此,此三元字段声明提供关键字组分变量,它们是基于用于在表之间和在选择的流表的关键字组分变量之间选择的可配置的逻辑106而选择。
可使用软件、固件、和/或硬件的不同组合来实现本发明的不同实施例。因此,可使用在一个或多个电子装置(例如,终端站、网络元件)上存储并且执行的代码和数据来实现图中示出的技术。这样的电子装置使用计算机可读媒体(例如,非暂时性计算机可读存储媒体(例如,磁盘、光盘、随机存取存储器、只读存储器、闪速存储器装置、相位改变存储器、三元内容可寻址存储器(TCAM)等)和暂时性计算机可读传送媒体(例如,电、光、听觉的或传播信号的其它形式(例如,载波、红外信号、数字信号)))来存储并且通信(内部的和/或与网络上的其它电子装置)代码和数据。此外,这样的电子装置通常包含耦合到一个或多个其它部件(例如,一个或多个存储装置(非暂时性机器可读存储媒体))、用户输入/输出装置(例如,键盘、触摸屏、和/或显示器)的一组一个或多个处理器(例如,现场可编程栅极阵列(FPGA)、图形处理单元(GPU)、网络处理单元(NPU)等)、以及网络连接。一组处理器和其它部件的耦合通常是通过一个或多个总线和网桥(也被称作总线控制器)、环、或片上网络。因此,给定电子装置的存储装置通常存储用于在那个电子装置的一组一个或多个处理器上执行的代码和/或数据。
例如,虽然图中的流程图示出由本发明的某些实施例执行的操作的特定次序,但是应该理解这样的次序是示范性(例如,备选实施例可以用不同的次序来执行操作、组合某些操作、重叠某些操作等)。此外,虽然已经在若干实施例方面描述本发明,但是本领域技术人员将认识到本发明不限于描述的实施例,可以在所附的权利要求的精神和范围内用修改和变更来实践本发明。因此描述被视为说明性的而不是限制性的。
Claims (20)
1.一种用于灵活的和可扩展的流处理的***,包括:
第一网络装置,在软件定义的网络内起到控制器的作用,包括:
定义接收模块,可操作来接收处理定义,其中所述处理定义包含以下的第一表示:
协议的可配置的定义,包含协议报头的有关的报头字段,
可配置的流表定义,包含基于第一多个所述有关的报头字段的关键字组分,其中每个所述流表定义的所述关键字组分识别对于所述流表定义选择的一组一个或多个所述有关的报头字段,以及
可配置的逻辑,用于基于第二多个所述有关的报头字段在由所述可配置的流表定义而定义的流表之间进行选择,
转换器,可操作来转换所述处理定义来创建解析器配置包,其中所述解析器配置包包含所述可配置的流表定义和用于在流表之间进行选择的所述可配置的逻辑的第二表示,
分布模块,可操作来将所述解析器配置包分布到多个转发元件来使每个转发元件:基于每个所述可配置的流表定义来创建流表,其中每个所述流表包含由包含在所述流表所基于的所述流表定义中的所述关键字组分识别的每个所述有关的报头字段的可配置的关键字列,其中每个所述流表还包含一个或多个动作列来存储转发决定,以及
流表填充模块,可操作来传送数据来填充在所述多个转发元件中的每个转发元件内创建的所述流表的所述可配置的关键字列和动作列;
第二网络装置,在所述软件定义的网络内起到启用流交换的转发元件的作用并且可操作来接收来自所述分布模块的所述解析器配置包以及来自所述流表填充模块的数据,包括:
网络接口,可操作来接收分组,
编译器,可操作来将所述解析器配置包编译成机器代码,以及
处理器,可操作来:
执行所述机器代码来创建所述流表以及为所述网络接口所接收的分组做出转发决定,以及
根据来自所述流表填充模块的数据来填充流表的可配置的关键字列和动作列;以及
第三网络装置,在所述软件定义的网络内起到启用流交换的转发元件的作用并且可操作来接收来自所述分布模块的所述解析器配置包以及来自所述流表填充模块的数据,包括:
网络接口,可操作来接收分组,
协处理器,可操作来执行所述解析器配置包来创建所述流表并且为所述网络接口所接收的分组做出转发决定,以及
处理器,可操作来根据来自所述流表填充模块的数据来填充所述流表的所述可配置的关键字列和动作列。
2.如权利要求1所述的***,其中:
所述定义接收模块还可操作来接收更新的处理定义,其中所述更新的处理定义包含以下的第三表示:
协议的可配置的定义,包含协议报头的有关的报头字段,
可配置的流表定义,包含基于第一多个所述有关的报头字段的关键字组分,其中每个所述流表定义的所述关键字组分识别对于所述流表定义选择的一组一个或多个所述有关的报头字段,以及
可配置的逻辑,用于基于第二多个所述有关的报头字段来在由所述可配置的流表定义而定义的流表之间进行选择;
所述转换器还可操作来转换所述更新的处理定义来创建更新的解析器配置包,其中所述更新的解析器配置包包含所述可配置的流表定义和用于在流表之间进行选择的所述可配置的逻辑的第四表示;
所述分布模块还可操作来将所述更新的解析器配置包分布到所述多个转发元件来使每个转发元件:基于每个所述可配置的流表定义来创建、更新或删除流表,其中每个所述流表包含由包含在所述流表所基于的所述流表定义中的所述关键字组分识别的每个所述有关的报头字段的可配置的关键字列,其中每个所述流表还包含一个或多个动作列来存储转发决定;以及
所述流表填充模块还可操作来传送数据来填充在所述多个转发元件中的每个内创建的或更新的所述流表的所述可配置的关键字列和动作列。
3.如权利要求1所述的***,其中:
所述解析器配置包还包含基于所述可配置的流表定义的关键字生成逻辑;以及
当将所述解析器配置包分布到多个转发元件时,所述分布模块还可操作来使所述多个转发元件中的每个转发元件安装所述关键字生成逻辑来从在所述转发元件的网络接口上接收的分组中的值来生成关键字,用于与所述转发元件的所述流表的条目进行比较。
4.如权利要求1所述的***,其中,当将所述解析器配置包分布到多个转发元件时,所述第一网络装置的所述分布模块还可操作来使所述多个转发元件中的每个转发元件创建基于所述可配置的流表定义的关键字生成逻辑,其中所述关键字生成逻辑将要从在所述转发元件的网络接口上接收的分组中的值来生成关键字,用于与所述转发元件的所述流表的条目进行比较。
5.如权利要求1所述的***,其中,当将所述解析器配置包分布到多个转发元件时,所述第一网络装置的所述分布模块还可操作来将解析器配置包元数据传送到所述多个转发元件中的每个转发元件。
6.如权利要求5所述的***,其中所述解析器配置包元数据包含由所述解析器配置包利用的虚拟寄存器的数量。
7.如权利要求1所述的***,其中:
所述第二网络装置可操作来通过以下步骤而为由其网络接口所接收的分组做出转发决定:
基于所述可配置的逻辑和在用于所述选择的所述可配置的逻辑所要求的所述第二多个有关的报头字段中的一些的每个分组的值来为每个分组选择所述流表中的一个,
从由所选择的流表的所述关键字组分识别的所述有关的报头字段中的所述分组的值来为每个分组生成关键字,
至少基于比较所述关键字与所选择的流表中的所填充的关键字来识别所选择的流表的一个条目,以及
执行由所识别条目规定的一组一个或多个行动;以及
所述第三网络装置可操作来通过以下步骤而为由其网络接口接收的分组做出转发决定:
基于所述可配置的逻辑和在用于所选择的所述可配置的逻辑所要求的所述第二多个有关的报头字段中的一些的每个分组的值来为每个分组选择所述流表中的一个,
从由所选择的流表的所述关键字组分识别的所述有关的报头字段中的所述分组的值来为每个分组生成关键字,
至少基于比较所述关键字与所选择的流表中的所填充的关键字来识别所选择的流表的一个条目,以及
执行由所识别的条目规定的一组一个或多个行动。
8.如权利要求7所述的***,其中:
所述第二网络装置配置为:当比较所述关键字与所选择的流表中的所填充的关键字时,响应于匹配所选择的流表的零条目,将所述分组传送到所述第一网络装置;以及
所述第三网络装置配置为:当比较所述关键字与所选择的流表中的所填充的关键字时,响应于匹配所选择的流表的零条目,将所述分组传送到所述第一网络装置。
9.如权利要求8所述的***,其中所述第一网络装置可操作来:
接收由所述多个转发元件中的一个传送的分组;以及
响应于来自所述多个转发元件中的一个转发元件的所述分组的所述接收,将数据传送到所述多个转发元件中的一个或多个来使每个转发元件修改一个或多个流表的一个或多个条目。
10.如权利要求9所述的***,其中所述多个转发元件中的所述一个或多个对一个或多个流表的一个或多个条目的所述修改将使每个转发元件:响应于再次接收所述分组,匹配所述流表中的一个流表的一个或多个条目。
11.一种有形的非暂时性机器可读存储介质,包括用于处理装置的至少一个处理器的指令,当所述指令被所述处理器执行时,使所述处理器执行操作,所述有形的非暂时性机器可读存储介质包括:
报头指令,规定协议的可配置的定义,其中每个协议的所述可配置的定义包含协议报头名称和所述协议的一组一个或多个有关的报头字段的一组一个或多个字段声明,每个所述字段声明指示数据类型和有关的报头字段名称;
表定义指令,基于第一多个所述有关的报头字段来规定包含关键字组分的可配置的流表定义,其中每个所述表定义指令定义流表,其中每个所述关键字组分识别对于所述流表定义选择的一组一个或多个所述有关的报头字段,其中每个所述表定义指令包含,
所述流表的唯一表ID,以及
一组一个或多个字段声明,识别所述流表的所述关键字组分,其中每个所述字段声明定义:
所述流表的关键字列的内容定义,其中所述内容定义将所述第一多个有关的报头字段中的至少一个识别为所述关键字列的有关的报头字段,以及
准则,用于找到所述关键字列内的所述流表的条目的内容与在所述关键字列的所述有关的报头字段处的分组内的内容之间的肯定的匹配;以及
栈指令,规定可配置的逻辑,用于基于第二多个所述有关的报头字段来在由所述可配置的流表定义而定义的所述流表之间进行选择,其中所述可配置的逻辑规定所述协议报头如何与彼此相关,如何检查所述协议报头来解析分组,以及如何在所述流表之间选择用于分组分类,每个所述栈指令对应于报头指令中的一个并且包含,
来自所述报头指令的所述协议报头名称,
关键字字段,通过识别所述报头指令内的所述有关的报头字段名称中的一个来识别从分组中选择所述有关的报头字段中的哪个,以及
一组一个或多个规则,用于基于分组的所述关键字字段内的值来选择用于分组分类的一个所述流表或者下一应用的一个所述栈指令,其中每个所述规则包含与分组的所述关键字字段内的值比较的关键字值和下一报头名称,其中有效的匹配使解析继续于由所述匹配的规则的下一报头名称而指示的所述栈指令,并且其中每个匹配的失败引起在所述栈指令中规定其唯一表ID的所述流表中的一个的选择。
12.如权利要求11所述的有形的机器可读介质,其中所述栈指令的关键字值能够是通配符,其中所述通配符匹配由所述关键字字段指示的分组的报头字段的每一个可能的值。
13.如权利要求11所述的有形的机器可读介质,其中栈指令还包含指示所述对应报头的多于一个实例出现在连续的序列中的可堆叠关键字。
14.如权利要求11所述的有形的机器可读介质,其中每个所述栈指令还包含表ID,其中所述表ID指示哪个流表用于匹配以及如果解析在所述栈中结束则哪个表定义指令用于构造关键字。
15.如权利要求14所述的有形的机器可读介质,其中每个所述栈指令还包含递归计数,其中所述递归计数指示在解析将停止之前在分组的解析期间返回所述对应报头的次数。
16.如权利要求11所述的有形的机器可读介质,其中一个或多个所述表定义指令的一组字段声明中的一个或多个的所述内容定义将所述第一多个有关的报头字段中的两个或者更多识别为作为所述关键字列的有关的报头字段的候选者。
17.如权利要求16所述的有形的机器可读介质,其中所述第一多个有关的报头字段中的所述两个或者更多中的一个是基于哪个报头存在于分组中而被选择作为所述关键字列的有关的报头字段。
18.如权利要求11所述的有形的机器可读介质,其中所述报头指令内的所述一组报头字段中的每个报头字段被排序来指示根据所述协议的所述报头内的每个报头字段的位置。
19.如权利要求18所述的有形的机器可读介质,其中所述报头指令中的一个或多个内的所述一组报头字段不完全定义根据所述协议的所述报头的所有报头字段。
20.如权利要求19所述的有形的机器可读介质,其中由所述报头指令中的一个或多个规定的协议的所述可配置的定义还包含长度,其中所述长度是用于基于所述报头的一个或多个字段而计算被解析的所述分组报头的总长度的数学表达。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/335903 | 2011-12-22 | ||
US13/335,903 US8521905B2 (en) | 2011-12-22 | 2011-12-22 | System for flexible and extensible flow processing in software-defined networks |
PCT/IB2012/057567 WO2013093860A1 (en) | 2011-12-22 | 2012-12-20 | System for flexible and extensible flow processing in software-defined networks |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103999431A true CN103999431A (zh) | 2014-08-20 |
CN103999431B CN103999431B (zh) | 2017-08-08 |
Family
ID=47714468
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280063821.9A Active CN103999431B (zh) | 2011-12-22 | 2012-12-20 | 软件定义的网络中灵活的并且可扩展的流处理*** |
Country Status (4)
Country | Link |
---|---|
US (1) | US8521905B2 (zh) |
EP (1) | EP2795872B1 (zh) |
CN (1) | CN103999431B (zh) |
WO (1) | WO2013093860A1 (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104580472A (zh) * | 2015-01-09 | 2015-04-29 | 杭州华三通信技术有限公司 | 流表项处理方法以及装置 |
CN105991338A (zh) * | 2015-03-05 | 2016-10-05 | 华为技术有限公司 | 网络运维管理方法及装置 |
CN106416132A (zh) * | 2014-06-03 | 2017-02-15 | 大交换机网络股份有限公司 | 使用控制器处的交换机建模接口控制网络交换机的***和方法 |
CN106465230A (zh) * | 2015-02-13 | 2017-02-22 | 华为技术有限公司 | 控制接入的装置、***和方法 |
CN106612217A (zh) * | 2015-10-27 | 2017-05-03 | 弗兰克公司 | 使用机器可读代码来测试通信网络的***和方法 |
CN107078960A (zh) * | 2014-11-25 | 2017-08-18 | 华为技术有限公司 | 基于流的网络功能链接的优化方法 |
CN107431666A (zh) * | 2015-03-23 | 2017-12-01 | 思科技术公司 | 用于在数据中心网络环境中实现低时延的技术 |
CN107851109A (zh) * | 2015-07-20 | 2018-03-27 | 施瓦哲工程实验有限公司 | 软件定义网络的配置 |
CN108028795A (zh) * | 2015-09-25 | 2018-05-11 | 瑞典爱立信有限公司 | 扩展gtp中的ie类型的机制 |
CN108701057A (zh) * | 2015-12-21 | 2018-10-23 | 亚马逊科技公司 | 实时管道模板-模板创建和可扩展性 |
CN111684769A (zh) * | 2017-11-06 | 2020-09-18 | 思想***公司 | 包括基于表的动作的匹配处理单元的网络*** |
CN112136108A (zh) * | 2018-10-31 | 2020-12-25 | 华为技术有限公司 | 一种报头解析装置及方法 |
CN114449030A (zh) * | 2021-12-27 | 2022-05-06 | 天翼云科技有限公司 | 一种互联网服务***、方法、电子设备及存储介质 |
Families Citing this family (125)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107071087B (zh) | 2011-08-17 | 2021-01-26 | Nicira股份有限公司 | 逻辑l3路由 |
AU2012296330B2 (en) | 2011-08-17 | 2016-03-17 | Nicira, Inc. | Hierarchical controller clusters for interconnecting different logical domains |
US9137107B2 (en) | 2011-10-25 | 2015-09-15 | Nicira, Inc. | Physical controllers for converting universal flows |
US9178833B2 (en) | 2011-10-25 | 2015-11-03 | Nicira, Inc. | Chassis controller |
US9203701B2 (en) | 2011-10-25 | 2015-12-01 | Nicira, Inc. | Network virtualization apparatus and method with scheduling capabilities |
US9288104B2 (en) | 2011-10-25 | 2016-03-15 | Nicira, Inc. | Chassis controllers for converting universal flows |
US8966024B2 (en) | 2011-11-15 | 2015-02-24 | Nicira, Inc. | Architecture of networks with middleboxes |
KR101887581B1 (ko) * | 2011-12-26 | 2018-08-14 | 한국전자통신연구원 | 플로우 기반의 패킷 전송 장치 및 그것의 패킷 처리 방법 |
US20130238470A1 (en) * | 2012-03-07 | 2013-09-12 | Z:Wordz, LLC | Substituting a user-defined word set in place of a formatted network resource address |
CN102624560B (zh) * | 2012-03-12 | 2016-06-29 | 深圳市天威视讯股份有限公司 | 一种分布式部署、集中式控制的有线电视网络宽带接入*** |
US9225635B2 (en) | 2012-04-10 | 2015-12-29 | International Business Machines Corporation | Switch routing table utilizing software defined network (SDN) controller programmed route segregation and prioritization |
CN104081734B (zh) | 2012-04-18 | 2018-01-30 | Nicira股份有限公司 | 利用事务使分布式网络控制***中的波动降至最小 |
US20140112142A1 (en) * | 2012-10-22 | 2014-04-24 | Electronics And Telecommunications Research Institute | Method of forwarding packet and apparatus thereof |
FI124397B (en) * | 2013-01-04 | 2014-08-15 | Tellabs Oy | A method and apparatus for defining a paging system for a network element of a software configurable network |
US9172604B1 (en) | 2013-02-25 | 2015-10-27 | Google Inc. | Target mapping and implementation of abstract device model |
US8976708B1 (en) * | 2013-02-25 | 2015-03-10 | Google Inc. | Parameterized device models for openflow |
US9166912B2 (en) | 2013-02-25 | 2015-10-20 | Google Inc. | Translating network forwarding plane models into target implementation using sub models and hints |
FI20135413L (fi) * | 2013-04-23 | 2014-10-24 | Tellabs Oy | Menetelmä ja laite ohjelmallisesti määriteltävän verkon verkkoelementti konfigurointijärjestelmän optimoimiseksi |
FI20135519A (fi) * | 2013-05-15 | 2014-11-16 | Tellabs Oy | Ohjelmallisesti määriteltävän verkon verkkoelementti |
TWI520530B (zh) * | 2013-05-17 | 2016-02-01 | 智邦科技股份有限公司 | 封包交換裝置及方法 |
WO2014186986A1 (zh) * | 2013-05-24 | 2014-11-27 | 华为技术有限公司 | 流转发方法、设备及*** |
US20140369363A1 (en) * | 2013-06-18 | 2014-12-18 | Xpliant, Inc. | Apparatus and Method for Uniquely Enumerating Paths in a Parse Tree |
US9571386B2 (en) | 2013-07-08 | 2017-02-14 | Nicira, Inc. | Hybrid packet processing |
US9282019B2 (en) | 2013-07-12 | 2016-03-08 | Nicira, Inc. | Tracing logical network packets through physical network |
US9197529B2 (en) | 2013-07-12 | 2015-11-24 | Nicira, Inc. | Tracing network packets through logical and physical networks |
US9407580B2 (en) | 2013-07-12 | 2016-08-02 | Nicira, Inc. | Maintaining data stored with a packet |
US20160173320A1 (en) * | 2013-07-26 | 2016-06-16 | Zte (Usa) Inc. | METHOD AND SYSTEM FOR AN ADAPTIVE SOFTWARE-DEFINED NETWORKING CONTROLLER (aSDNC) |
US9450823B2 (en) * | 2013-08-09 | 2016-09-20 | Nec Corporation | Hybrid network management |
EP3018867B1 (en) * | 2013-08-20 | 2020-01-08 | Huawei Technologies Co., Ltd. | Method for processing user message and forwarding plane device |
CN104426731B (zh) * | 2013-08-23 | 2018-01-12 | 新华三技术有限公司 | 一种生成树计算的方法和装置 |
WO2015027401A1 (zh) * | 2013-08-28 | 2015-03-05 | 华为技术有限公司 | 报文处理方法、设备及*** |
KR101569588B1 (ko) * | 2013-08-29 | 2015-11-16 | 주식회사 케이티 | 패킷 출력 제어 방법 및 이를 이용한 네트워크 장치 |
WO2015030503A1 (ko) * | 2013-08-29 | 2015-03-05 | 주식회사 케이티 | 패킷 출력 제어 방법 및 이를 이용한 네트워크 장치 |
US9680748B2 (en) * | 2013-09-15 | 2017-06-13 | Nicira, Inc. | Tracking prefixes of values associated with different rules to generate flows |
US9680738B2 (en) * | 2013-09-15 | 2017-06-13 | Nicira, Inc. | Tracking prefixes of values associated with different rules to generate flows |
US9602398B2 (en) * | 2013-09-15 | 2017-03-21 | Nicira, Inc. | Dynamically generating flows with wildcard fields |
US9686185B2 (en) * | 2013-09-15 | 2017-06-20 | Nicira, Inc. | Generating flows using common match techniques |
US9674087B2 (en) * | 2013-09-15 | 2017-06-06 | Nicira, Inc. | Performing a multi-stage lookup to classify packets |
CN105683937B (zh) | 2013-11-01 | 2018-07-10 | 慧与发展有限责任合伙企业 | 在软件定义网络拓扑结构中的协议无关存储访问 |
US9548924B2 (en) | 2013-12-09 | 2017-01-17 | Nicira, Inc. | Detecting an elephant flow based on the size of a packet |
US9967199B2 (en) | 2013-12-09 | 2018-05-08 | Nicira, Inc. | Inspecting operations of a machine to detect elephant flows |
US9569368B2 (en) | 2013-12-13 | 2017-02-14 | Nicira, Inc. | Installing and managing flows in a flow table cache |
US9996467B2 (en) | 2013-12-13 | 2018-06-12 | Nicira, Inc. | Dynamically adjusting the number of flows allowed in a flow table cache |
US10158546B2 (en) * | 2013-12-19 | 2018-12-18 | Dell Products L.P. | System and method for power reduction in network equipment |
US9825884B2 (en) | 2013-12-30 | 2017-11-21 | Cavium, Inc. | Protocol independent programmable switch (PIPS) software defined data center networks |
CN105247831B (zh) * | 2014-01-23 | 2018-10-30 | 华为技术有限公司 | 流表修改方法、流表修改装置和开放流网络*** |
WO2015117642A1 (en) * | 2014-02-05 | 2015-08-13 | Nokia Solutions And Networks Oy | Service offloading in communications |
KR101527377B1 (ko) * | 2014-03-31 | 2015-06-09 | 쿨클라우드(주) | Sdn 기반의 서비스 체이닝 시스템 |
US9385954B2 (en) | 2014-03-31 | 2016-07-05 | Nicira, Inc. | Hashing techniques for use in a network environment |
US9654395B2 (en) | 2014-03-31 | 2017-05-16 | Kulcloud | SDN-based service chaining system |
US9985896B2 (en) | 2014-03-31 | 2018-05-29 | Nicira, Inc. | Caching of service decisions |
WO2015152435A1 (ko) | 2014-03-31 | 2015-10-08 | 쿨클라우드㈜ | Sdn 기반의 분할 계층적 네트워크 시스템 |
US10193806B2 (en) | 2014-03-31 | 2019-01-29 | Nicira, Inc. | Performing a finishing operation to improve the quality of a resulting hash |
KR102184767B1 (ko) | 2014-04-01 | 2020-12-01 | 삼성전자주식회사 | 복수의 디바이스를 포함하는 네트워크의 통신 방법 및 장치 |
WO2015161404A1 (zh) * | 2014-04-21 | 2015-10-29 | 华为技术有限公司 | 隧道类型的选择方法及装置 |
CN103997513B (zh) * | 2014-04-21 | 2017-08-01 | 北京邮电大学 | 一种可编程虚拟网络服务*** |
US9407541B2 (en) | 2014-04-24 | 2016-08-02 | International Business Machines Corporation | Propagating a flow policy by control packet in a software defined network (SDN) based network |
US9871695B2 (en) | 2014-05-22 | 2018-01-16 | Coriant Oy | Network element and a controller for managing the network element |
US9628385B2 (en) | 2014-06-19 | 2017-04-18 | Cavium, Inc. | Method of identifying internal destinations of networks packets and an apparatus thereof |
US9635146B2 (en) | 2014-06-19 | 2017-04-25 | Cavium, Inc. | Method of using bit vectors to allow expansion and collapse of header layers within packets for enabling flexible modifications and an apparatus thereof |
US9531848B2 (en) | 2014-06-19 | 2016-12-27 | Cavium, Inc. | Method of using generic modification instructions to enable flexible modifications of packets and an apparatus thereof |
US10616380B2 (en) | 2014-06-19 | 2020-04-07 | Cavium, Llc | Method of handling large protocol layers for configurable extraction of layer information and an apparatus thereof |
US9961167B2 (en) | 2014-06-19 | 2018-05-01 | Cavium, Inc. | Method of modifying packets to a generic format for enabling programmable modifications and an apparatus thereof |
US9742694B2 (en) | 2014-06-19 | 2017-08-22 | Cavium, Inc. | Method of dynamically renumbering ports and an apparatus thereof |
US10050833B2 (en) | 2014-06-19 | 2018-08-14 | Cavium, Inc. | Method of reducing latency in a flexible parser and an apparatus thereof |
US9473601B2 (en) | 2014-06-19 | 2016-10-18 | Cavium, Inc. | Method of representing a generic format header using continuous bytes and an apparatus thereof |
US9438703B2 (en) * | 2014-06-19 | 2016-09-06 | Cavium, Inc. | Method of forming a hash input from packet contents and an apparatus thereof |
US9531849B2 (en) * | 2014-06-19 | 2016-12-27 | Cavium, Inc. | Method of splitting a packet into individual layers for modification and intelligently stitching layers back together after modification and an apparatus thereof |
US9516145B2 (en) | 2014-06-19 | 2016-12-06 | Cavium, Inc. | Method of extracting data from packets and an apparatus thereof |
US9497294B2 (en) * | 2014-06-19 | 2016-11-15 | Cavium, Inc. | Method of using a unique packet identifier to identify structure of a packet and an apparatus thereof |
US10261814B2 (en) | 2014-06-23 | 2019-04-16 | Intel Corporation | Local service chaining with virtual machines and virtualized containers in software defined networking |
US9596172B2 (en) * | 2014-06-27 | 2017-03-14 | International Business Machines Corporation | Mechanism for exchange of routing data between controllers |
EP3166265B1 (en) | 2014-08-06 | 2019-10-02 | Huawei Technologies Co., Ltd. | Method, apparatus and system for processing data packet in software defined network (sdn) |
WO2016023148A1 (zh) * | 2014-08-11 | 2016-02-18 | 华为技术有限公司 | 报文的控制方法、交换机及控制器 |
US9436443B2 (en) | 2014-08-28 | 2016-09-06 | At&T Intellectual Property I, L.P. | Software defined network controller |
US10644950B2 (en) | 2014-09-25 | 2020-05-05 | At&T Intellectual Property I, L.P. | Dynamic policy based software defined network mechanism |
US11178051B2 (en) | 2014-09-30 | 2021-11-16 | Vmware, Inc. | Packet key parser for flow-based forwarding elements |
US10469342B2 (en) | 2014-10-10 | 2019-11-05 | Nicira, Inc. | Logical network traffic analysis |
US9722935B2 (en) * | 2014-10-16 | 2017-08-01 | Huawei Technologies Canada Co., Ltd. | System and method for transmission management in software defined networks |
US9491683B2 (en) | 2014-10-31 | 2016-11-08 | At&T Intellectual Property I, L.P. | Mobile network with software defined networking architecture |
US9606781B2 (en) | 2014-11-14 | 2017-03-28 | Cavium, Inc. | Parser engine programming tool for programmable network devices |
US10135956B2 (en) | 2014-11-20 | 2018-11-20 | Akamai Technologies, Inc. | Hardware-based packet forwarding for the transport layer |
KR101707073B1 (ko) * | 2014-11-26 | 2017-02-15 | 쿨클라우드(주) | Sdn 기반의 에러 탐색 네트워크 시스템 |
US10594565B2 (en) | 2014-12-19 | 2020-03-17 | Hewlett Packard Enterprise Development Lp | Multicast advertisement message for a network switch in a storage area network |
US10015048B2 (en) | 2014-12-27 | 2018-07-03 | Intel Corporation | Programmable protocol parser for NIC classification and queue assignments |
GB2525701B (en) | 2015-01-08 | 2016-11-30 | Openwave Mobility Inc | A software defined network and a communication network comprising the same |
CN107005464B (zh) | 2015-01-31 | 2020-07-14 | 华为技术有限公司 | 一种业务流数据包的处理方法及装置 |
CN107251517B (zh) * | 2015-03-13 | 2020-10-16 | 华为技术有限公司 | 接入网***、处理数据包的方法及装置 |
US9967134B2 (en) | 2015-04-06 | 2018-05-08 | Nicira, Inc. | Reduction of network churn based on differences in input state |
US9674081B1 (en) * | 2015-05-06 | 2017-06-06 | Xilinx, Inc. | Efficient mapping of table pipelines for software-defined networking (SDN) data plane |
EP3266175A4 (en) * | 2015-05-29 | 2018-09-26 | Hewlett Packard Enterprise Development LP | Determining actions to be immediately performed on a network packet with an application specific integrated circuit |
CN106411820B (zh) * | 2015-07-29 | 2019-05-21 | 中国科学院沈阳自动化研究所 | 一种基于sdn架构的工业通信流传输安全控制方法 |
US9654424B2 (en) * | 2015-07-31 | 2017-05-16 | Nicira, Inc. | Managed forwarding element with conjunctive match flow entries |
US10348619B2 (en) | 2015-07-31 | 2019-07-09 | Nicira, Inc. | Generating conjunctive match flow entries |
US9825862B2 (en) * | 2015-08-26 | 2017-11-21 | Barefoot Networks, Inc. | Packet header field extraction |
WO2017053303A1 (en) | 2015-09-23 | 2017-03-30 | Google Inc. | Systems and methods for mobility management in a distributed software defined network packet core system |
US10204122B2 (en) | 2015-09-30 | 2019-02-12 | Nicira, Inc. | Implementing an interface between tuple and message-driven control entities |
CN106559339B (zh) * | 2015-09-30 | 2019-02-19 | 华为技术有限公司 | 一种报文处理方法及装置 |
US10649747B2 (en) * | 2015-10-07 | 2020-05-12 | Andreas Voellmy | Compilation and runtime methods for executing algorithmic packet processing programs on multi-table packet forwarding elements |
US10200235B2 (en) | 2015-10-31 | 2019-02-05 | Nicira, Inc. | Distributed database structure for logical and physical network data |
EP3366014A4 (en) * | 2015-12-17 | 2019-05-01 | Hewlett-Packard Enterprise Development LP | REDUCED SET OF ORTHOGONAL NETWORK POLICY SELECTIONS |
US9912774B2 (en) | 2015-12-22 | 2018-03-06 | Intel Corporation | Accelerated network packet processing |
US10911579B1 (en) * | 2016-03-01 | 2021-02-02 | Amazon Technologies, Inc. | Generating programmatically defined fields of metadata for network packets |
US11019167B2 (en) | 2016-04-29 | 2021-05-25 | Nicira, Inc. | Management of update queues for network controller |
US10397136B2 (en) * | 2016-08-27 | 2019-08-27 | Nicira, Inc. | Managed forwarding element executing in separate namespace of public cloud data compute node than workload application |
US11546266B2 (en) * | 2016-12-15 | 2023-01-03 | Arbor Networks, Inc. | Correlating discarded network traffic with network policy events through augmented flow |
US10419366B1 (en) | 2017-01-31 | 2019-09-17 | Barefoot Networks, Inc. | Mechanism for communicating to remote control plane from forwarding element |
US10805239B2 (en) | 2017-03-07 | 2020-10-13 | Nicira, Inc. | Visualization of path between logical network endpoints |
US10694006B1 (en) | 2017-04-23 | 2020-06-23 | Barefoot Networks, Inc. | Generation of descriptive data for packet fields |
US10397116B1 (en) * | 2017-05-05 | 2019-08-27 | Amazon Technologies, Inc. | Access control based on range-matching |
US10601732B1 (en) | 2017-07-23 | 2020-03-24 | Barefoot Networks, Inc. | Configurable packet processing pipeline for handling non-packet data |
US10623322B1 (en) | 2017-09-15 | 2020-04-14 | Juniper Networks, Inc. | Dynamic prefix list for route filtering |
US10771387B1 (en) | 2017-09-28 | 2020-09-08 | Barefoot Networks, Inc. | Multiple packet data container types for a processing pipeline |
US10608887B2 (en) | 2017-10-06 | 2020-03-31 | Nicira, Inc. | Using packet tracing tool to automatically execute packet capture operations |
EP3756315A1 (en) * | 2018-03-01 | 2020-12-30 | Huawei Technologies Co., Ltd. | Packet-programmable statelets |
US11283699B2 (en) | 2020-01-17 | 2022-03-22 | Vmware, Inc. | Practical overlay network latency measurement in datacenter |
US11196628B1 (en) | 2020-07-29 | 2021-12-07 | Vmware, Inc. | Monitoring container clusters |
US11570090B2 (en) | 2020-07-29 | 2023-01-31 | Vmware, Inc. | Flow tracing operation in container cluster |
US11558426B2 (en) | 2020-07-29 | 2023-01-17 | Vmware, Inc. | Connection tracking for container cluster |
US11736436B2 (en) | 2020-12-31 | 2023-08-22 | Vmware, Inc. | Identifying routes with indirect addressing in a datacenter |
US11336533B1 (en) | 2021-01-08 | 2022-05-17 | Vmware, Inc. | Network visualization of correlations between logical elements and associated physical elements |
US11687210B2 (en) | 2021-07-05 | 2023-06-27 | Vmware, Inc. | Criteria-based expansion of group nodes in a network topology visualization |
US11711278B2 (en) | 2021-07-24 | 2023-07-25 | Vmware, Inc. | Visualization of flow trace operation across multiple sites |
US11677645B2 (en) | 2021-09-17 | 2023-06-13 | Vmware, Inc. | Traffic monitoring |
CN113824747B (zh) * | 2021-11-25 | 2022-02-18 | 之江实验室 | 一种支持报文负载加密可定义的数据平面可编程实现方法 |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040167857A1 (en) * | 1995-12-20 | 2004-08-26 | Nb Networks | Systems and methods for prevention of peer-to-peer file sharing |
US5793954A (en) | 1995-12-20 | 1998-08-11 | Nb Networks | System and method for general purpose network analysis |
US6651102B2 (en) * | 1995-12-20 | 2003-11-18 | Nb Networks | Systems and methods for general purpose data modification |
EP1164753B1 (en) | 2000-06-15 | 2007-08-15 | Telefonaktiebolaget LM Ericsson (publ) | Method and arrangement for handling information packets via user selectable relay nodes |
US7526480B2 (en) * | 2001-06-08 | 2009-04-28 | Cisco Technology, Inc. | Method and apparatus for controlled access of requests from virtual private network devices to managed information objects using simple network management protocol and multi-topology routing |
JP3875107B2 (ja) | 2002-01-10 | 2007-01-31 | 株式会社エヌ・ティ・ティ・ドコモ | パケット交換システム、パケット交換方法、ルーティング装置、パケットデータ及びその生成方法 |
JP3936883B2 (ja) | 2002-04-08 | 2007-06-27 | 株式会社日立製作所 | フロー検出装置およびフロー検出機能を備えたパケット転送装置 |
US7394809B2 (en) | 2003-03-31 | 2008-07-01 | Intel Corporation | Method and apparatus for packet classification using a forest of hash tables data structure |
US7746793B2 (en) * | 2004-06-18 | 2010-06-29 | Cisco Technology, Inc. | Consistency between MPLS forwarding and control planes |
US7492763B1 (en) * | 2004-07-16 | 2009-02-17 | Applied Micro Circuits Corporation | User-specified key creation from attributes independent of encapsulation type |
US7583593B2 (en) * | 2004-12-01 | 2009-09-01 | Cisco Technology, Inc. | System and methods for detecting network failure |
KR100700717B1 (ko) | 2004-12-22 | 2007-03-27 | 한국전자통신연구원 | 컨텐트 구분에 의한 전송시스템의 클러스터링 장치 및 방법 |
US7447167B2 (en) * | 2005-03-28 | 2008-11-04 | Cisco Technology, Inc. | Method and apparatus for the creation and maintenance of a self-adjusting repository of service level diagnostics test points for network based VPNs |
US7599303B2 (en) * | 2005-07-26 | 2009-10-06 | Cisco Technology, Inc. | System and methods for sending trace messages |
KR100684326B1 (ko) | 2005-11-22 | 2007-02-16 | 한국전자통신연구원 | 휴대 인터넷 시스템에서 ip 패킷의 서비스 품질을분류하기 위한 장치 및 방법 |
US7912934B1 (en) * | 2006-01-09 | 2011-03-22 | Cisco Technology, Inc. | Methods and apparatus for scheduling network probes |
US7839847B2 (en) * | 2006-05-08 | 2010-11-23 | Cisco Technology, Inc. | Methods and apparatus providing VPN traffic matrix construction |
US7782790B1 (en) * | 2006-06-16 | 2010-08-24 | Cisco Technology, Inc. | Extensions to the path verification protocol to support link bundling constructs |
US7782859B2 (en) | 2007-05-07 | 2010-08-24 | Cisco Technology, Inc. | Enhanced packet classification |
CN100561947C (zh) * | 2007-07-05 | 2009-11-18 | 中兴通讯股份有限公司 | 根据代码进行业务流程处理的***和方法 |
US7808919B2 (en) * | 2008-03-18 | 2010-10-05 | Cisco Technology, Inc. | Network monitoring using a proxy |
US20090259577A1 (en) * | 2008-04-10 | 2009-10-15 | Cisco Technology, Inc. | Providing Billing Instructions Associated With a New Protocol in a Network Environment |
US8369325B2 (en) | 2009-06-30 | 2013-02-05 | Oracle America, Inc. | Method and apparatus for packet classification and spreading in a virtualized system |
US20120275466A1 (en) | 2010-10-21 | 2012-11-01 | Texas Instruments Incorporated | System and method for classifying packets |
US9001827B2 (en) | 2010-12-17 | 2015-04-07 | Big Switch Networks, Inc. | Methods for configuring network switches |
-
2011
- 2011-12-22 US US13/335,903 patent/US8521905B2/en active Active
-
2012
- 2012-12-20 CN CN201280063821.9A patent/CN103999431B/zh active Active
- 2012-12-20 WO PCT/IB2012/057567 patent/WO2013093860A1/en active Application Filing
- 2012-12-20 EP EP12823263.4A patent/EP2795872B1/en active Active
Non-Patent Citations (2)
Title |
---|
20091231: "Open Networking Foundation OpenFlow Switch Specification version", 《OPEN NETWORKING FOUNDATION(ONF)》 * |
韦兴军: "OpenFlow交换机模型及关键技术研究与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑(2010)》 * |
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106416132A (zh) * | 2014-06-03 | 2017-02-15 | 大交换机网络股份有限公司 | 使用控制器处的交换机建模接口控制网络交换机的***和方法 |
CN107078960A (zh) * | 2014-11-25 | 2017-08-18 | 华为技术有限公司 | 基于流的网络功能链接的优化方法 |
CN104580472A (zh) * | 2015-01-09 | 2015-04-29 | 杭州华三通信技术有限公司 | 流表项处理方法以及装置 |
CN104580472B (zh) * | 2015-01-09 | 2018-04-06 | 新华三技术有限公司 | 流表项处理方法以及装置 |
CN106465230B (zh) * | 2015-02-13 | 2019-07-23 | 华为技术有限公司 | 控制接入的装置、***和方法 |
CN106465230A (zh) * | 2015-02-13 | 2017-02-22 | 华为技术有限公司 | 控制接入的装置、***和方法 |
US10397188B2 (en) | 2015-02-13 | 2019-08-27 | Huawei Technologies Co., Ltd. | Access control apparatus, system, and method |
CN105991338A (zh) * | 2015-03-05 | 2016-10-05 | 华为技术有限公司 | 网络运维管理方法及装置 |
CN105991338B (zh) * | 2015-03-05 | 2019-11-12 | 华为技术有限公司 | 网络运维管理方法及装置 |
CN107431666A (zh) * | 2015-03-23 | 2017-12-01 | 思科技术公司 | 用于在数据中心网络环境中实现低时延的技术 |
CN107431666B (zh) * | 2015-03-23 | 2021-07-27 | 思科技术公司 | 用于在数据中心环境中实现低时延的方法、装置和介质 |
CN107851109A (zh) * | 2015-07-20 | 2018-03-27 | 施瓦哲工程实验有限公司 | 软件定义网络的配置 |
CN107851109B (zh) * | 2015-07-20 | 2019-06-11 | 施瓦哲工程实验有限公司 | 软件定义网络的配置 |
CN108028795A (zh) * | 2015-09-25 | 2018-05-11 | 瑞典爱立信有限公司 | 扩展gtp中的ie类型的机制 |
CN108028795B (zh) * | 2015-09-25 | 2020-10-23 | 瑞典爱立信有限公司 | 扩展gtp中的ie类型的机制 |
CN106612217A (zh) * | 2015-10-27 | 2017-05-03 | 弗兰克公司 | 使用机器可读代码来测试通信网络的***和方法 |
CN108701057A (zh) * | 2015-12-21 | 2018-10-23 | 亚马逊科技公司 | 实时管道模板-模板创建和可扩展性 |
CN108701057B (zh) * | 2015-12-21 | 2020-03-24 | 亚马逊科技公司 | 用于供应部署管道的计算机可读存储介质、***和方法 |
CN111684769A (zh) * | 2017-11-06 | 2020-09-18 | 思想***公司 | 包括基于表的动作的匹配处理单元的网络*** |
CN111684769B (zh) * | 2017-11-06 | 2023-03-24 | 思想***公司 | 包括基于表的动作的匹配处理单元的网络*** |
CN112136108A (zh) * | 2018-10-31 | 2020-12-25 | 华为技术有限公司 | 一种报头解析装置及方法 |
CN114449030A (zh) * | 2021-12-27 | 2022-05-06 | 天翼云科技有限公司 | 一种互联网服务***、方法、电子设备及存储介质 |
CN114449030B (zh) * | 2021-12-27 | 2024-03-12 | 天翼云科技有限公司 | 一种互联网服务***、方法、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US20130163427A1 (en) | 2013-06-27 |
CN103999431B (zh) | 2017-08-08 |
EP2795872A1 (en) | 2014-10-29 |
US8521905B2 (en) | 2013-08-27 |
EP2795872B1 (en) | 2015-09-23 |
WO2013093860A1 (en) | 2013-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103999431A (zh) | 软件定义的网络中灵活的并且可扩展的流处理*** | |
CN103999430A (zh) | 用于软件定义的网络中灵活及可扩展流处理的转发元件 | |
CN104012063B (zh) | 用于软件定义网络中的灵活和可扩展流处理的控制器 | |
CN105830406B (zh) | 用于支持软件定义网络中的灵活查找关键字的方法、设备和*** | |
US10817269B2 (en) | Network distributed programmable forwarding plane packet processor | |
CN101322341B (zh) | 提供边界网关协议转发信息库的优先级区分式递归解析的方法和装置 | |
CN103595647B (zh) | 一种基于OpenFlow的SDN虚拟化平台下行信令处理方法 | |
CN104704779A (zh) | 用于加速软件定义网络中的转发的方法和设备 | |
CN103098426A (zh) | 使用分层标记栈改进ldp收敛的方法和设备 | |
CN104881422A (zh) | 用于生成查找和进行判定的引擎、方法和软件定义网络 | |
CN103607348A (zh) | 一种基于OpenFlow协议的虚拟网络流量分类方法 | |
CN108600107B (zh) | 一种可自定义内容字段的流匹配方法 | |
CN108092914A (zh) | 网络流量负载均衡调度方法和装置 | |
CN104995879A (zh) | 通信***、通信方法、控制装置、控制装置控制方法和程序 | |
Enyedi | Novel algorithms for IP fast reroute | |
CN103916321A (zh) | 定义软件定义网络的网络元件的查找表实现的方法和设备 | |
US9432291B2 (en) | Method and a device for defining a look-up system for a network element of a software-defined network | |
CN112437065A (zh) | Sdn环境下基于图形表示的策略冲突检测及解决方法 | |
CN116346711B (zh) | 基于行为树的路由协议表征方法、介质及通信方法 | |
CN101146099B (zh) | 域间路由协议流量工程链路的自动生成和维护方法 | |
CN106330528A (zh) | 一种配置网络处理器的方法和装置 | |
CN117240807A (zh) | 报文处理方法、装置及存储介质 | |
CN109725918A (zh) | 一种配置升级方法及装置、控制器、存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |