用于在网络设备中处理分组的方法和装置与流程

文档序号:17120587发布日期:2019-03-15 23:45阅读:218来源:国知局
用于在网络设备中处理分组的方法和装置与流程

本公开要求于2016年5月18日提交的名称为“用于交换设备中的分组处理的方法”的美国临时专利申请第62/338,340号的权益,其全部内容通过本文的引用合并于此。

本公开总体涉及诸如网络交换机、网桥、路由器等的网络设备,并且更具体地涉及在网络设备中处理分组。



背景技术:

诸如网桥和路由器网络设备(诸如网桥和路由器)基于分组中的地址通过网络转发分组。网络设备通常包括耦合到不同网络链路的多个端口。网络设备通常经由一个端口接收分组并且处理分组的报头中的地址信息以决定网络设备应该经由哪个或哪些其他端口来传输分组。然后,网络设备向所确定的一个或多个其他端口转发分组。在各种网络设备中,当网络设备接收到分组时,整个分组被存储在分组存储器中。使用来自分组的报头的信息处理分组以至少确定将分组转发到的一个端口或多个端口。然后,将分组入队到与所确定的一个或多个端口相对应的一个或多个传输队列中。随后,当分组被调度以用于传输时,从分组存储器取回分组以便转发到所确定的一个或多个端口。在从分组存储器取回分组之后,如果需要,则执行报头改变以修改分组的报头。然后,分组被转发到所确定的一个或多个端口以用于来自网络设备的分组的传输。

因为在从分组存储器取回分组以用于分组的传输之后执行报头改变,所以包括报头信息所需的信息的分组描述符通常被放置在传输队列中,并且然后当从传输队列中出队分组描述符并且从分组存储器取回相关联的分组以用于分组的传输时,该信息用于执行报头改变。



技术实现要素:

在一个实施例中,一种用于在网络设备中处理分组的方法包括:在网络设备的接收处理器处接收由网络设备经由网络接收的分组。该方法还包括:利用接收处理器在分组存储器中存储分组的第一部分,该第一部分至少包括分组的有效载荷。该方法还包括利用网络设备的分组处理器,基于来自分组的报头的信息来处理分组。该方法还包括:在处理分组之后,利用分组处理器在分组存储器中存储分组的第二部分,该第二部分包括分组的报头的至少一部分。该方法还进一步包括:当分组要被传输时,利用网络设备的传输处理器从分组存储器取回分组的第一部分和分组的第二部分,并且利用传输处理器组合从分组存储器取回的分组的第一部分和分组的第二部分,以生成传输分组。该方法还包括:利用传输处理器向网络设备的端口转发传输分组,以用于经由网络设备的端口的传输分组的传输。

在另一实施例中,网络设备包括接收处理器,该接收处理器被配置为:接收经由网络链路接收的分组,并且在分组存储器中存储分组的第一部分,该第一部分至少包括分组的有效载荷。该网络设备还包括分组处理器,该分组处理器被配置为:基于来自分组的报头的信息来处理分组,并且在处理分组之后,在分组存储器中存储分组的第二部分,该第二部分包括分组的报头的至少一部分。该网络设备还包括传输处理器,该传输处理器被配置为,当分组要被传输时,利用网络设备的传输处理器从分组存储器取回分组的第一部分和分组的第二部分,组合从存储器取回的分组的第一部分和分组的第二部分以生成传输分组,并且向网络设备的端口转发传输分组,以用于经由网络设备的端口的传输分组的传输。

附图说明

图1是根据实施例的示例网络设备的框图。

图2a是根据实施例的与分组相关联的第一分组描述符的框图,该第一分组描述符用于由图1的网络设备处理分组。

图2b是根据实施例的与分组相关联的第二分组描述符的框图,该第二分组描述符用于将分组入队到图1的网络设备的传输队列中。

图3是根据实施例的包括在图1的网络设备中的示例处理管线的框图。

图4是根据实施例的用于在网络设备中处理分组的示例方法的流程图。

图5是根据实施例的用于在网络设备中处理分组的另一示例方法的流程图。

具体实施方式

在本文描述的各种实施例中,当网络设备接收分组时,网络设备在分组存储器中存储分组的第一部分。在一个实施例中,分组的第一部分包括分组的尾部。例如,在一个实施例中,分组的第一部分至少包括分组的有效载荷。然后,网络设备基于来自分组的第二部分的信息来处理分组。在一个实施例中,分组的第二部分包括分组的头部。例如,在一个实施例中,分组的头部包括分组的报头的至少一部分。在一个实施例中,分组的第二部分最初不与分组的第一部分一起被存储在分组存储器中。在执行分组的至少一部分的处理之后,网络设备将分组的第二部分存储在分组存储器中。然后,当要从网络设备传输分组时,网络设备从分组存储器取回分组的第一部分和分组的第二部分,并且生成包括从分组存储器取回的第一部分和第二部分的传输分组。然后,在一个实施例中,从网络设备传输传输分组。

在各种实施例中,由网络设备执行的、在处理分组之后将分组的第二部分存储在分组存储器中允许与传统系统相比更有效和/或更灵活的分组的处理,在传统系统中,整个分组最初被存储在分组存储器中,并且随后从分组存储器取回整个分组以用于从网络设备传输。例如,在一个实施例中,在将分组的第二部分存储在分组存储器中之前,网络设备基于分组的处理结果来修改分组的第二部分(例如,修改分组的第二部分中包括的报头)。然后,网络设备将分组入队到传输队列中以用于来自网络设备的分组的随后传输。在一个实施例中,由于经修改的第二部分(例如,经修改的报头)在被入队到传输队列中之前被存储在分组存储器中,所以网络设备不需要将用于修改报头所需的信息存储在传输队列中。因此,在一个实施例中,为了将分组入队到传输队列中,与整个分组最初被存储在分组存储器中的传统系统相比,网络设备在传输队列中放置较少的信息,并且当从分组取回整个分组时执行报头修改。例如,在一个实施例中,为了将分组入队到传输队列中,网络设备在传输队列中放置“精简”分组描述符,该分组描述符包括从分组存储器取回分组所需的信息,诸如在分组存储器中存储分组的各部分的(多个)存储器位置的一个或多个指示符,并且省略了报头修改所需的至少一些信息,诸如报头修改所需的处理结果。在至少一些实施例中,在传输队列中存储较少的信息减少了网络设备中的传输队列所需的存储器的数量,降低了网络设备的功耗,减少了向传输队列发送信息所需的通信总线的宽度等。

图1是根据实施例的实现本文描述的有效的处理和/或排队技术的示例网络设备100的框图。网络设备100包括通信地耦合到多个网络链路(未示出)的多个端口104。尽管图1中示出六个端口104,但是在各种实施例中,网络设备100包括任何合适数目的端口104。在一个实施例中,由网络设备经由端口104接收的分组被提供给耦合到端口104的接收处理器108。尽管图1中仅示出了一个接收处理器108,并且该一个接收处理器108被示为仅耦合到一个端口104,但是在各种实施例中,网络设备100包括多个接收处理器108,并且多个处理器108中的每一个耦合到相应的一个或多个端口104。

接收处理器108被配置为将所接收的分组的至少第一部分存储在分组存储器110中。在一个实施例中,分组的第一部分包括分组的尾部。例如,在一个实施例中,分组的第一部分至少包括分组的有效载荷。在一个实施例中,分组的第一部分排除分组的第二部分。例如,在一个实施例中,分组的第一部分排除分组的报头的至少一部分。因此,在该实施例中,分组的报头的该至少一部分最初不被存储在分组存储器110中。在一个实施例中,接收处理器108将分组的第一部分存储在分组存储器110中的第一存储器位置处。在一些实施例中,接收处理器108确定分组存储器110中的第一存储器位置,在该第一存储器位置处存储分组的第一部分。在一些实施例中,接收处理器108响应于来自接收处理器108的写请求,从分组存储器110接收分组存储器110中的第一存储器位置的指示符(例如,地址,指针等),在该第一存储器位置处存储分组的第一部分。

在一个实施例中,网络设备100包括分组处理器126。尽管图1中仅示出了一个分组处理器126,但是在一些实施例中,网络设备100包括多个分组处理器126。在一个实施例中,接收处理器108被配置为向分组处理器126提供分组的第二部分以用于处理分组。例如,在一个实施例中,接收处理器108被配置为向分组处理器126提供分组的第二部分以用于处理分组,其中分组的第二部分包括分组的报头的至少一部分。在一个实施例中,接收处理器108向分组处理器126提供分组的报头的至少一部分,例如通过将分组的报头的至少一部分放置在包括在分组处理器126中或耦合到分组处理器126的缓冲器(未示出)中,将分组的报头的至少一部分提供给分组处理器126。另外,在一个实施例中,接收处理器108向分组处理器126提供分组的第一部分被存储在分组存储器110中的第一存储器位置的指示符。例如,接收处理器108向分组处理器126提供分组的第一部分被存储在分组存储器110中的第一存储器位置的地址、指针或另一合适的指示符。在一个实施例中,与分组相关联的第一分组描述符被生成并且被提供给分组处理器126以用于处理分组。在一个实施例中,接收处理器108被配置为生成与分组相关联的第一分组描述符。在其他实施例中,网络设备100内的另一合适的设备或模块被配置为生成与分组相关联的第一分组描述符。在一个实施例中,第一分组描述符包含来自分组的报头的信息,分组处理器126利用该信息来处理分组。在一些实施例中,与分组相关联的第一分组描述符包括分组的第一部分被存储在分组存储器110中的第一存储器位置的指示符。在一些实施例中,与分组相关联的第一分组描述符另外包括以下中的一个或多个:(i)分组的第二部分,(ii)分组的报头的至少一部分以及(iii)分组处理器126用于处理分组的其他信息。

在一个实施例中,与分组相关联的第一描述符经由将接收处理器108耦合到分组处理器126的第一通信总线127而被提供给分组处理器126。另外,在一个实施例中,接收处理器108向分组处理器126单独提供包括分组的报头的至少一部分的分组的第二部分,使得如将在下面更详细地描述的,如果需要,分组处理器126可以适当地修改分组的报头。例如,接收处理器108经由接收处理器108和分组处理器126之间的通信路径133向分组处理器126提供分组的第二部分。在一个实施例中,第二部分被存储在分组处理器126中的缓冲器(未示出)中,并且随后从缓冲器取回该第二部分以用于由分组处理器126处理和/或修改。在一些实施例中,分组的第二部分被包括在经由通信总线127提供给分组处理器126的第一分组描述符中。在一些这样的实施例中,接收处理器108不需要向分组处理器126单独提供分组的第二部分。因此,在至少一些这样的实施例中,从网络设备100省略接收处理器108的通信路径133。

在一个实施例中,分组处理器126被配置为基于被提供给分组处理器126的以下中的一个或多个来处理分组:(i)来自与分组相关联的第一分组描述符中包括的分组的报头的信息,(ii)分组的第二部分以及(iii)分组的报头的至少一部分。在一个实施例中,分组的处理至少包括确定分组将被转发到的一个端口或多个端口104。例如,分组处理器126包括转发引擎128,其被配置为基于报头信息来确定分组将被转发到的端口104中的一个或多个。在一个实施例中,转发引擎128包括或耦合到转发数据库(未示出),该转发数据库存储与地址(例如,媒体访问控制(mac)地址、互联网协议(ip)地址等)相关联的转发信息(例如,端口信息)和/或其他合适的信息。在一个实施例中,转发引擎128被配置为利用报头信息在转发数据库中查找指示分组将被转发到的一个或多个端口104的信息。

在一个实施例中,在至少一些情况下,分组的处理另外包括基于分组的处理结果来修改第二部分(例如,分组的报头的至少一部分)。在一个实施例中,分组处理器126包括报头改变引擎130,在一个实施例中,在至少一些情况下,该报头改变引擎130被配置为:基于分组的处理结果来修改分组的报头。在一些实施例中,分组处理器126确定是否和/或如何修改分组的报头,并且如果需要,则报头改变引擎130执行由分组处理器126所确定的报头改变。在一些场景中,报头改变引擎130修改分组的报头,例如,改变下一跳地址、添加封装报头、移除封装报头等。在一个实施例中,报头改变引擎130接收由接收处理器108提供给分组处理器126的报头,并且在一个实施例中,基于由在报头改变引擎130之前的一个或多个处理引擎执行的处理结果来修改报头。在一个实施例中,报头改变引擎130经由通信路径133从接收处理器108获得报头。在一个实施例中,接收处理器108将分组报头存储在报头缓冲器(未示出)中,并且报头改变引擎130从报头缓冲器取回报头。

在由分组处理器126执行分组的处理,并且如果必要的话,执行分组的报头的修改之后,分组处理器126将分组的第二部分存储在分组存储器110中,其中分组的第二部分包括未经修改的或经修改的分组的报头的至少一部分。在一些实施例中,分组处理器126还在将分组的第二部分存储在分组存储器110中之前,基于经修改的分组的报头来处理分组。例如,在各种实施例中,分组处理器108执行分组的出口分类,例如以确定分组所属的出口流、将出口访问控制列表(acl)规则应用于分组等。

在一个实施例中,分组处理器126将分组的第二部分存储在分组存储器110中的第二存储器位置处。在一个实施例中,第二存储器位置与分组的第一部分被存储在分组存储器110中的第一存储器位置分开并且独立于该第一存储器位置。在另一实施例中,存储分组的第二部分的第二存储器位置取决于和/或基于分组的第一部分被存储在分组存储器110中的第一存储器位置来确定。在一些实施例中,分组处理器126确定分组存储器110中存储分组的第二部分的第二存储器位置。在一些实施例中,分组处理器126响应于来自分组处理器126的写请求,从分组存储器110接收分组存储器110中存储分组的第一部分的第二存储器位置的指示符(例如,地址、指针等)。

如上所述,分组处理器126被配置为确定分组将被转发到的一个或多个端口104。在一个实施例中,在由分组处理器126执行分组的处理之后,分组处理器126将分组入队到一个或多个传输队列134中以用于随后将分组转发到所确定的一个或多个端口104。在一个实施例中,分组处理器126被配置为在分组的第二部分被存储在分组存储器110中之后将分组入队到一个或多个传输队列中。因为如果必要,在分组的第二部分被存储在分组存储器中之前执行第二部分(例如,分组的报头的至少一部分)的修改,所以当从传输队列中出队分组并且从分组存储器110取回分组以用于分组的传输时,不必执行第二部分的修改。因此,当由分组处理器126将分组入队到一个或多个传输队列134中时,需要保留修改分组的第二部分(例如,分组的报头的至少一部分)所需的信息。

在一个实施例中,为了将分组入队到传输队列134中,分组处理器126生成与分组相关联的第二分组描述符,并且向传输队列134提供第二分组描述符。在一个实施例中,在至少一些场景中,分组处理器126生成第二描述符的多个副本,并且在多个传输队列134中的相应的传输队列中提供第二分组描述符的多个副本中的相应的副本,例如用于经由端口104中的多个端口来多播或广播分组。在一个实施例中,第二分组描述符仅包括从分组存储器110取回分组并且将分组正确地转发到对应的一个或多个部分104所需的信息。在一个实施例中,第二分组描述符包括将分组存储器110中的分组的第一部分与分组的第二部分相联系的存储器位置信息。例如,在一个实施例中,分组的第一部分被存储在分组存储器110中的第一存储器位置的指示符、分组的第二部分被存储在分组存储器110中的第二存储器位置的指示符以及分组将被转发到的一个或多个端口104的指示。在一个实施例中,第二分组描述符另外包括与分组相关联的服务质量(qos)的指示。在一个实施例中,第二分组描述符通常省略用于处理分组的报头信息和/或省略用于修改分组的第二部分(例如,报头)的一些或全部处理结果。在生成与分组相关联的第二分组描述符时,分组处理器126丢弃被提供给分组处理器126以用于处理分组和/或用于由分组处理器126处理分组的以下中的一个或多个:(i)与分组相关联的第一分组描述符,(ii)分组的第二部分以及(iii)分组的报头的至少一部分。

在一个实施例中,与分组相关联的第二分组描述符包括比被提供给分组处理器126以用于处理分组的信息的数量更少的信息。在一个实施例中,与分组相关联的第二分组描述符是“精简”分组描述符,其比被提供给分组处理器126以处理分组的第一分组描述符小(例如,包括更少数目的比特)。在一个实施例中,与分组相关联的第二分组描述符比与分组相关联的第一分组描述符小(例如,包括更少数目的比特),该第一分组描述符与分组的第二部分和/或分组的报头的至少一部分一起被提供给分组处理器126以用于处理分组。在一个实施例中,分组处理器126经由将分组处理器126耦合到传输队列134的第二通信总线138向一个或多个传输队列134提供与分组相关联的第二分组描述符。在一个实施例中,第二通信总线比将接收处理器108耦合到分组处理器126的第一通信总线127窄(例如,包括更少的通信线路)。

当分组被调度为被转发到端口104以用于经由端口104的传输时,与分组相关联的第二分组描述符从对应的传输队列134中出队并且被提供给传输处理器140以用于随后经由端口104传输分组。尽管图1中仅示出一个传输处理器140,并且这一个传输处理器140被示为仅耦合到一个端口104,但是在各种实施例中,网络设备100包括多个传输处理器140,并且多个传输处理器140中的每一个耦合到相应的一个或多个端口104。传输处理器140使用包括在与分组相关联的第二分组描述符中的存储器位置信息从分组存储器110取回分组。在一个实施例中,传输处理器140使用包括在与分组相关联的第二分组描述符中的第一存储器位置的指示符从分组存储器110的第一存储器位置取回分组的第一部分,并且使用包括在与分组相关联的第二分组描述符中的第二存储器位置的指示符从分组存储器110的第二存储器位置取回分组的第二部分。在一个实施例中,传输处理器140生成传输分组,该传输分组包括从分组存储器110的第一存储器位置取回的分组的第一部分和从分组存储器110的第二存储器位置取回的分组的第二部分。在一个实施例中,传输处理器140向端口104转发传输分组,并且经由端口104从网络设备100传输传输分组。

通常,因为使用相关联的第二分组描述符将分组入队到队列134中,该第二分组描述符包括比被提供给分组126以用于处理分组的相关联的第一分组描述符少的信息,所以与在至少一些实施例中将用于处理分组的分组描述符入队到传输队列中的常规系统相比,传输队列134需要更少的存储器。此外,由于传输队列134需要较少的存储器,所以在一个实施例中,保持队列134的存储器消耗较少的功率。另外,如上所述,与其中需要向传输队列提供更大数量的信息以将分组入队到传输队列中的传统系统相比,使用较窄的通信总线将分组处理器126耦合到传输队列134。类似地,在至少一些实施例中,与其中在传输队列中存储更大数量的信息的传统系统相比,使用较窄的通信总线将传输队列134耦合到传输处理器140。

继续参考图1,在图1所示的更具体的示例实施例中,网络设备100例如经由端口104a接收分组120。分组120包括报头122和有效载荷124。在一个实施例中,报头120对应于协议栈的一个或多个层,并且在一些情况下,将对应的分组标识为属于特定的面向连接或无连接的数据流。在一些实施例中,报头122指的是在传输层上的有效载荷之前的所有信息,即,开放系统互连(osi)七层模型中的层四(l4)。然而,在各种实施例中,如果需要,报头122包括直到并且包括应用层报头的所有报头,或者相反地,包括少于osi模型的层二(l2)、层三(l3)和l4的报头。

接收处理器108将分组120的第一部分存储在分组存储器110中的第一存储器位置处。在所示的实施例中,接收处理器108存储在分组存储器110中的第一存储器位置处的分组120的第一部分包括分组120的有效载荷124并且省略分组120的报头122。接收处理器108向分组处理器126提供分组120的第二部分。在一个实施例中,接收处理器108向分组处理器126提供的分组120的第二部分包括分组120的报头122。在一个实施例中,接收处理器108生成与分组相关联的第一分组描述符,并且向分组处理器126提供第一分组描述符。第一分组描述符包括指示有效载荷124被存储在分组存储器110中的第一存储器位置的信息。另外,在一个实施例中,第一分组描述符包括分组120的报头122的至少一部分。例如,在一个实施例中,第一分组描述符包括来自报头122的处理分组120所需的一个或多个字段。在一个实施例中,第一分组描述符包括分组120的整个第二部分(例如,整个报头122)。

分组处理器126使用来自分组120的报头122的报头信息(例如,包括在第一分组描述符中的报头信息)来处理分组120。在一个实施例中,分组120的处理包括由分组处理器126的转发引擎128确定分组120将被转发到的一个端口或多个端口104。例如,在所示的实施例中,转发引擎128确定分组120将被转发到端口104f。在一个实施例中,转发引擎128更新与分组120相关联的第一分组描述符以包括进入第一分组描述符指示或所确定的分组120将被转发到的一个端口或多个端口的指示。

在一个实施例中,分组120的处理还包括修改分组120的报头122。在一个实施例中,分组处理器126基于处理报头信息和/或包括在与分组120相关联的第一分组描述符中的信息来确定是否和/或如何修改报头122。在一个实施例中,当分组处理器126确定要修改报头122时,报头改变单元130修改报头122以生成经修改的报头132。仅作为一些示例,在各种实施例中,报头改变引擎130修改报头122以改变报头122的字段中的下一跳地址、以将封装报头添加到头部122、以从报头122中移除封装报头等。

继续图1中所示的示例实施例,分组处理器126将经修改的报头132存储在分组存储器110中。在一个实施例中,分组处理器126将经修改的报头132存储在分组存储器110中的第二存储器位置处,第二存储器位置与第一存储器位置分开并且独立于第一存储器位置,分组120的有效负载124被存储在分组存储器110中的该第一存储器位置处。在另一实施例中,经修改的报头132被存储在分组存储器110中的第二存储器位置取决于和/或基于存储分组120的有效负载124被存储在分组存储器110中的第一存储器位置来确定。在一些实施例中,在将经修改的报头132存储在分组存储器110中之前,分组处理器126还使用经修改的报头132来处理分组120。例如,在各种实施例中,分组处理器126基于经修改的报头132执行分组120的出口分类,例如以确定分组120所属的出口流、基于经修改的报头132来标识将被应用于分组120的一个或多个出口访问控制列表(acl)规则等。

在一个实施例中,分组处理器126将分组120入队到传输队列134中,传输队列134与分组将被转发到的端口104f相对应。为了将分组120入队到对应于端口104f的传输队列134中,分组处理器126生成与分组120相关联的第二分组描述符,并且将第二分组描述符存储在与端口104f相对应的传输队列传输队列134中。第二分组描述符包括将存储与在分组存储器110中的有效载荷124与经修改的分组报头132相联系的存储器位置信息。在一个实施例中,存储器位置信息包括指示有效载荷124被存储在分组存储器110中的第一存储器位置的第一信息以及指示经修改的报头132被存储在分组存储器110中的第二存储器位置的第二信息。在一些实施例中,第二分组描述符包括调度和传输分组可能需要的附加信息。例如,在各种实施例中,包括在第二分组描述符中的附加信息包括:指示分组120将被转发到的一个端口或多个端口的信息、指示与分组120相关联的服务质量(qos)的信息等。在一个实施例中,第二分组描述符比被提供给分组处理器126以用于处理分组120的第一分组描述符更短(例如,包括更少数目的比特)。

分组处理器126经由总线138向与例如分组120将被转发到的端口104f相对应的合适的传输队列134提供与分组120相关联的第二分组描述符。随后,当调度分组120以被传输时,将第二分组描述符从传输队列134提供给传输处理器140。传输处理器140接收第二分组描述符,并且使用包括在第二分组描述符中的存储器位置信息,从分组存储器110取回有效载荷124和经修改的报头132。在一个实施例中,传输处理器140利用包括在第二分组描述符中的第一信息从分组存储器110的第一存储器位置取回有效载荷124,并且利用包括在第二分组描述符中的第二信息从分组存储器110的第二存储器位置取回经修改的报头132。传输处理器140生成传输分组142以包括从分组存储器110取回的有效载荷124和经修改的报头132。在所示的实施例中,传输处理器140向端口104f转发传输分组142,并且经由端口104f从网络设备100传输传输分组140。

图2a和图2b是分别示出根据一个实施例的第一数据结构和第二数据结构的框图,该第一数据结构被提供给分组处理器以用于处理分组,该第二数据结构被放置在传输队列中以将经处理的分组入队到传输队列中以用于分组的随后传输。更具体地,图2a和图2b分别是根据一个实施例的第一分组描述符200和第二分组描述符250的框图,该第一分组描述符200与分组相关联、被提供给分组处理器以用于处理分组,该第二分组描述符250与分组相关联、被放置在传输队列中以将分组入队到队列。参考图1,在一个实施例中,第一分组描述符200对应于与分组相关联、被提供给分组处理器126以用于处理分组的第一分组描述符,并且第二分组描述符250对应于与分组相关联、被放置在传输队列134中以将分组入队到传输队列134中的第二分组描述符。为了便于说明,参考图1的网络设备100描述第一分组描述符200和第二分组描述符250。然而,第一分组描述符200和第二分组描述符250与不同于图1的网络设备100的网络设备一起使用。类似地,在一些实施例中,图1的网络设备100利用与第一分组描述符200和第二分组描述符250不同的分组描述符。

首先参考图2a,在一个实施例中,当分组的第一部分(例如,有效载荷)被存储在分组存储器110中时,针对分组生成第一分组描述符200。在一个实施例中,第一分组描述符200被提供给分组处理器126以用于处理分组。在一个实施例中,第一分组描述符200包括部分202,该部分202包括来自由分组处理器126处理分组所需的分组的报头中的一个或多个字段。在一个实施例中,部分202包括分组的整个第二部分,其最初在分组的第一部分被存储在分组存储器110中时未被存储在分组存储器110中。例如,在一个实施例中,部分202包括分组的报头或分组的报头的一部分,其最初在分组的有效载荷被存储在分组存储器110中时未被存储在分组存储器110中。第一分组描述符200附加地包括字段204,该字段204包括分组的第一部分被存储在分组存储器110中的第一存储器位置的指示符(例如,地址、指针等)。在一些实施例中。第一分组描述符200还包括一个或多个附加字段206。例如,第一分组描述符200包括将在分组的处理期间由分组处理器126填充和/或更新的一个或多个附加字段206。

现在参考图2b,在将分组的第二部分存储在分组存储器100中之后,针对分组生成第二分组描述符250。第二分组描述符250包括字段252,其包括分组的第一部分被存储在分组存储器110中的第一存储器位置的指示符。第二分组描述符250另外包括字段254,其包括第二存储器位置的指示符(例如,地址、指针等),在由分组处理器126执行分组处理的至少一部分之后,分组的第二部分被存储在分组存储器110中的第二存储器位置处。在一些实施例中,第二分组描述符250包括一个或多个附加字段,诸如包括分组将被转发到的一个端口或多个端口104的一个指示符或多个指示符的字段256,以及指示与分组相关联的优先级或qos的字段258。如图2a至图2b所示,在一个实施例中,第二分组描述符250比第一分组描述符200短。例如,在一个实施例中,第二分组描述符200包含比第一分组描述符200中包含的比特数目少的比特数目。在一个实施例中,第二分组描述符省略了包括在第一分组描述符200中的部分202。类似地,在一个实施例中,第二分组描述符250省略了包括在第一分组描述符200中的一个或多个附加字段206。在一个实施例中,当针对分组生成第二分组描述符250时,不再需要第一分组描述符200中的信息,并且丢弃第一分组描述符200。

图3是根据实施例的包括在分组处理器(诸如图1的网络设备100的分组处理器126)中的处理管线300的框图。为了便于说明,参考图1的网络设备100来描述处理管线300。然而,在一些实施例中,处理管线300被配置为与不同于图1的网络设备100的网络设备一起使用。类似地,在一些实施例中,网络设备100被配置为采用与管线300不同的处理管线,或者在一些实施例中,采用与处理管线不同的处理架构(例如,并行处理架构)。

在一个实施例中,分组由网络设备100接收,并且分组的第一部分(例如,有效载荷)被存储在分组存储器110中。分组的第二部分(例如,报头)被提供给处理管线300以用于处理分组。在一个实施例中,生成与分组相关联的第一分组描述符(诸如图2a的第一分组描述符200)以包括分组的第二部分,并且第一分组描述符被提供给处理管线300以用于处理分组。在一个实施例中,处理管线300使用报头信息来处理分组。例如,在一个实施例中,处理管线300基于包括在与分组相关联的第一分组描述符中的报头信息来处理分组。

在一个实施例中,处理管线300包括转发引擎304、报头改变引擎306、出口策略控制引擎308、拥塞避免引擎310、出口操作、管理和维护(oam)引擎312、出口计量引擎314、出口重新标记引擎316、可编程报头改变引擎318和报头存储引擎320。在实施例中,转发引擎304被配置为确定分组将被转发到的一个端口或多个端口104。在一个实施例中,转发引擎304对应于图1的转发引擎128。在一个实施例中,转发引擎304包括或耦合到转发数据库(未示出),该转发数据库存储与地址(例如,mac地址、ip地址等)和/或其他合适的信息相关联的转发信息(例如,端口信息)。在一个实施例中,转发引擎304被配置为利用来自分组的报头的信息来查找转发数据库中指示分组将被转发到的一个端口或多个端口104的信息。在一个实施例中,转发引擎304更新与分组相关联的第一分组描述符以包括分组将被转发到的一个端口或多个端口的一个指示符或多个指示符。尽管在

图3中管线300被示为仅包括一个转发引擎304,但是在一些实施例中,管线300包括多个转发引擎304。

在一个实施例中,报头改变引擎306耦合到转发引擎304。在一个实施例中,如果需要这样的修改,则报头改变引擎306被配置为修改分组的第二部分(例如,报头)。例如,在一个实施例中,在至少一些情况下,报头改变引擎306基于分组的处理结果来修改分组的报头。在一些实施例中,处理管线300确定是否和/或如何修改分组的报头,并且在一个实施例中,如果需要,则报头改变引擎306执行由处理管线300所确定的报头改变。在一些场景中,报头改变引擎306修改分组的报头,例如,以改变下一跳地址、添加封装报头、移除封装报头等。

在一个实施例中,出口策略控制引擎308耦合到报头改变引擎306。出口策略控制引擎308被配置为基于分组的(经修改的或未经修改的)第二部分来进一步处理分组。例如,在一个实施例中,出口策略控制引擎308确定分组所属的出口流。在一个实施例中,出口策略引擎308更新与分组相关联的第一分组描述符以包括分组的出口流的指示符。作为另一示例,在一个实施例中,出口策略控制引擎308基于包括在分组的(经修改的或未经修改的)第二部分中的信息将一个或多个acl规则应用于分组。

在一个实施例中,拥塞避免引擎310被配置为实现拥塞避免,例如以控制到传输队列134的分组流从而避免传输队列134的溢出。oam引擎312被配置为处理oam分组,例如以监测或控制网络设备100在其中操作的网络的健康状况。在一个实施例中,出口计量引擎314被配置为例如通过递增与端口104相关联的一个或多个计数器来计入分组,端口104将传输由转发引擎304所确定的分组。在一个实施例中,出口重新标记引擎316被配置为将标记应用于分组的第二部分(例如,报头)中的qos字段。可编程报头改变引擎318被配置为执行分组的第二部分(例如,报头)的附加修改。例如,在一个实施例中,可编程报头改变引擎318被配置为执行由网络设备100的操作者可配置的一个或多个报头改变操作。在一个实施例中,可编程报头改变引擎318在需要时允许报头改变中的灵活性。在一个实施例中,报头存储引擎320被配置为将分组的(经修改的或未经修改的)第二部分存储在分组存储器110中。另外,在一个实施例中,报头存储引擎320被配置为生成与分组相关联的第二分组描述符,诸如图2b的第二分组描述符250,并且将第二分组描述符提供给适当的传输队列或队列134,以使分组入队到队列以用于经由转发引擎304确定的一个端口或多个端口104的分组的随后传输。

图4是示出根据实施例的用于在网络设备中处理分组的示例方法400的流程图。在一个实施例中,网络设备100实现方法400以处理由网络设备100接收的分组。因此,仅出于解释的目的参考网络设备100来描述方法400。在其他实施例中,方法400由另一合适的网络设备来实现。

在框402处,经由网络设备的端口接收的分组由网络设备的接收处理器来接收。在一个实施例中,图1的分组120由网络设备100的接收处理器108接收。在另一实施例中,接收与分组120不同的合适分组和/或由与图1的网络设备100的接收处理器108不同的合适接收处理器来接收分组。

在框404处,分组的第一部分被存储在分组存储器中。在一个实施例中,分组的第一部分被存储在图1的网络设备100的分组存储器110中。在另一实施例中,分组的第一部分被存储在与图1的网络设备100的分组存储器110不同的分组存储器中。在一个实施例中,分组的第一部分包括分组的有效载荷。在一个实施例中,分组的第一部分省略了分组的报头的至少一部分。

在框406处,基于来自分组的报头的信息来处理分组。在一个实施例中,分组由网络设备的分组处理器处理。在一个实施例中,分组由图1的网络设备100的分组处理器126和/或由图3的处理管线300处理。在其他实施例中,分组由与图1的网络设备100的分组处理器126不同的分组处理器和/或由与图3的处理管线300不同的处理架构处理。在一个实施例中,分组的处理包括确定分组将被转发的一个端口或多个端口。在一个实施例中,分组的处理还包括确定是否以及如何修改分组的报头,并且如果需要,则执行报头改变以修改分组的报头。

在框408处,将第二部分存储在分组存储器中,分组的第一部分在框404处被存储在该分组存储器中。在一个实施例中,分组的第二部分包括分组的报头的至少一部分。在一个实施例中,在框406处执行分组处理的至少一部分之后,在框408处执行将分组的第二部分存储在分组存储器中。例如,如果需要,则执行报头改变以在框408处将分组的第二部分存储在分组存储器中之前,在框406处修改分组的报头的至少一部分。在该实施例中,如果在将分组的第二部分存储在分组存储器之前执行报头改变,则被存储在分组存储器中的分组的第二部分包括经修改的分组的报头的至少一部分。

在一个实施例中,分组的第一部分在框404处被存储在分组存储器中的第一存储器位置中,并且分组的第二部分在框408处被存储在分组存储器中的第二存储器位置中。在一个实施例中,在框408处存储分组的第二部分的第二存储器位置与在框404处将分组的第一部分存储在分组存储器中的第一存储器位置分开并且独立于该第一存储器位置。在另一实施例中,在框408处存储分组的第二部分的第二存储器位置取决于和/或基于在框404处将分组的第一部分存储在分组存储器中的第一存储器位置确定。

在框410处,从分组存储器取回在框404处被存储在分组存储器中的分组的第一部分和在框408处被存储在分组存储器中的分组的第二部分。在一个实施例中,在完成框406处的分组的处理时,将分组(或与分组相关联的第二分组描述符)入队到与分组将被转发到的端口104相对应的传输队列中。然后,在分组从传输队列中出队并且被调度用于经由端口104的传输之后,执行框410。在框412处,从分组存储器取回的分组的第一部分和分组的第二部分被组合以生成传输分组。在框414处,在框412处生成的传输分组被转发到网络设备的端口,以用于经由网络设备的端口的传输分组的传输。

图5是示出根据实施例的用于在网络设备中处理分组的示例方法500的流程图。在一个实施例中,网络设备100实现方法500以处理由网络设备100接收的分组。因此,仅出于解释的目的参考网络设备100来描述方法500。在其他实施例中,方法500由另一合适的网络设备来实现。

在框502处,经由网络设备的端口接收的分组由网络设备的接收处理器接收。在一个实施例中,图1的分组120由网络设备100的接收处理器108接收。在另一实施例中,接收与分组120不同的合适的分组和/或由与图1的网络设备100的接收处理器108不同的合适的接收处理器接收分组。

在框504处,至少将分组的有效载荷存储在分组存储器中。在一个实施例中,至少将有效载荷存储在分组存储器中包括至少将有效载荷存储在分组存储器中的第一位置处。在一个实施例中,至少分组的有效载荷被存储在图1的网络设备100的分组存储器110中。在另一实施例中,至少分组的有效载荷被存储在与图1的网络设备100的分组存储器110不同的分组存储器中。

在框506处,基于来自分组的报头的信息来处理分组。在一个实施例中,分组由网络设备的分组处理器处理。在一个实施例中,分组由图1的网络设备100的分组处理器126和/或由图3的处理管线300处理。在其他实施例中,分组由与图1的网络设备100的分组处理器126不同的分组处理器和/或由与图3的处理管线300不同的处理架构来处理。在一个实施例中,分组的处理包括确定分组将被转发到的端口。在一个实施例中,分组的处理还包括确定如何修改分组的报头,以及修改报头以生成经修改的报头。在一个实施例中,生成图1的经修改的报头132。在另一实施例中,生成与图1的经修改的报头132不同的合适的经修改的报头。

在框508处,将经修改的报头存储在分组存储器中。在一个实施例中,将经修改的报头存储在分组存储器中包括将经修改的报头存储在分组存储器中的第二位置处。

在框510处,将与分组相关联的分组描述符入队到传输队列中。在一个实施例中,入队到传输队列中的分组描述符是精简分组描述符,其省略了基于其在框506处修改报头的信息中的至少一些信息。在一个实施例中,在框510处入队到传输队列中的分组描述符是图2b的第二分组描述符250。在另一实施例中,在框510处入队到传输队列中的分组描述符是与图2b的第二分组描述符250不同的数据结构。

在框512处,从分组存储器取回分组的经修改的报头和至少分组的有效载荷。在一个实施例中,当分组被调度用于传输并且分组描述符从传输队列中出队时,执行框512。在一个实施例中,使用在分组描述符中的分组存储器中存储经修改的报头的第二存储器位置和分组存储器中至少存储有效载荷的第一存储器位置的指示,从分组存储器取回分组的经修改的报头和至少分组的有效载荷。

在框514处,在框512处从分组存储器取回的经修改的报头和至少有效载荷被组合以生成传输分组。在一个实施例中,生成图1的传输分组142。在另一实施例中,生成与图1的传输分组142不同的合适的传输分组。在框414处,在框412处生成的床送分组被转发到网络设备的端口以用于经由网络设备的端口的传输分组的传输。

在一个实施例中,一种用于在网络设备中处理分组的方法包括:在网络设备的接收处理器处接收由网络设备经由网络接收的分组。该方法还包括:利用接收处理器在分组存储器中存储分组的第一部分,该第一部分至少包括分组的有效载荷。该方法还包括:利用网络设备的分组处理器,基于来自分组的报头的信息来处理分组。该方法还包括:在处理分组之后,利用分组处理器在分组存储器中存储分组的第二部分,该第二部分包括分组的报头的至少一部分。该方法还进一步包括:当分组要被传输时,利用网络设备的传输处理器,从分组存储器取回分组的第一部分和分组的第二部分,并且利用传输处理器组合从分组存储器取回的分组的第一部分和分组的第二部分,以生成传输分组。该方法还包括:利用传输处理器向网络设备的端口转发传输分组,以用于经由网络设备的端口的传输分组的传输。

在其他实施例中,该方法还包括以下特征中的一个,或以下特征中的两个或更多个的任何合适组合。

该方法还包括:在存储分组的第二部分之前,基于分组的处理结果来修改分组的报头以生成经修改的报头,其中存储分组的第二部分包括:至少将经修改的报头存储在分组存储器中。

修改分组的报头以生成经修改的报头包括:使用一个或多个可配置的报头改变操作来修改报头。

在分组存储器中存储分组的第一部分包括:将分组的第一部分存储在分组存储器中的第一存储器位置处。

在分组存储器中存储分组的第二部分包括:将第二部分存储在分组存储器中的第二存储器位置处,该第二存储器位置与第一存储器位置分开。

从分组存储器取回分组的第一部分和分组的第二部分包括:使用指示分组存储器中的第一存储器位置的信息,从分组存储器中的第一存储器位置取回分组的第一部分,以及使用指示分组存储器中的第二存储器位置的信息,从分组存储器中的第二存储器位置取回分组的第二部分。

处理分组包括:使用与分组相关联的第一分组描述符来处理分组,其中第一分组描述符包括来自分组的报头的信息,并且其中该方法还包括:在存储分组的第二部分之后,生成与分组相关联的第二分组描述符,该第二分组描述符省略来自分组的报头的信息中的至少一些信息。

生成第二分组描述符包括:生成第二分组描述符以包括存储器位置信息,该存储器位置信息将分组存储器中的分组的第一部分与分组存储器中的分组的第二部分相联系。

从分组存储器取回分组的第一部分和分组的第二部分包括:使用存储器位置信息来取回分组的第一部分和分组的第二部分。

生成第二分组描述符以包括存储器位置信息包括:生成第二分组描述符以包括第一信息和第二信息,该第一信息指示分组的第一部分被存储在分组存储器中的第一存储器位置,该第二信息指示第二部分被存储在分组存储器中的第二存储器位置。

生成第二分组描述符包括:生成比第一分组描述符短的第二分组描述符。

该方法还包括将第二分组描述符入队到传输队列中以用于分组的随后传输。

该方法还包括经由第一通信总线在分组处理器处接收第一分组描述符,并且其中将第二分组描述符入队到传输队列中包括:经由第二通信总线向传输队列提供第二分组描述符,该第二通信总线比第一条通信总线窄。

在另一实施例中,一种网络设备包括:接收处理器,该接收处理器被配置为接收经由网络链路接收的分组并且在分组存储器中存储分组的第一部分,该第一部分至少包括分组的有效载荷。该网络设备还包括分组处理器,该分组处理器被配置为基于来自分组的报头的信息来处理分组,并且在处理分组之后,在分组存储器中存储分组的第二部分,该第二部分包括分组的报头的至少一部分。该网络设备还包括传输处理器,该传输处理器被配置为:当分组要被传输时,利用网络设备的传输处理器从分组存储器取回分组的第一部分和分组的第二部分,组合从存储器取回的分组的第一部分和分组的第二部分以生成传输分组,并且向网络设备的端口转发传输分组,以用于经由网络设备的端口的传输分组的传输。

在其他实施例中,网络设备还包括以下特征中的一个或以下特征中的两个或更多个的任何合适组合。

分组处理器还被配置为:在存储分组的第二部分之前,基于分组的处理结果来修改分组的报头以生成经修改的报头,其中存储分组的第二部分包括:至少将经修改的报头存储在分组存储器中。

分组处理器包括可编程报头改变引擎,该可编程报头变更引擎被配置为:作为修改所述分组的所述报头以生成所述经修改的报头的一部分,来执行一个或多个可配置的报头改变操作。

接收处理器被配置为:将分组的第一部分存储在分组存储器中的第一存储器位置处。

分组处理器被配置为:将分组的第二部分存储在分组存储器中的第二存储器位置处,该第二存储器位置与第一存储器位置分开。

传输处理器被配置为:使用指示分组存储器中的第一存储器位置的信息,从分组存储器中的第一存储器位置取回分组的第一部分,以及使用指示分组存储器中的第二存储器位置的信息,从分组存储器中的第二存储器位置取回分组的第二部分。

分组处理器被配置为使用与分组相关联的第一分组描述符来处理分组,其中第一分组描述符包括来自分组的报头的信息,并且在存储分组的第二部分之后,生成第二分组描述符,该第二分组描述符省略来自分组的报头的信息中的至少一些信息。

分组处理器被配置为:生成第二分组描述符以包括存储器位置信息,该存储器位置信息将分组存储器中的分组的第一部分与分组存储器中的分组的第二部分相联系。

传输处理器被配置为:接收第二分组描述符,并且从分组存储器取回分组的第一部分和分组的第二部分包括:使用被包括在第二分组描述符中的存储器位置信息。

分组处理器被配置为:通过生成第二分组描述符以包括第一信息和第二信息来生成第二分组描述符以包括存储器位置信息,该第一信息指示分组的第一部分被存储在分组存储器中的第一存储器位置,该第二信息指示第二部分被存储在分组存储器中的第二存储器位置。

分组处理器被配置为:生成第二分组以比第一分组描述符短。

分组处理器还被配置为:将第二分组描述符入队到传输队列中,以用于经由网络设备的对应端口的分组的随后传输。

网络设备还包括:第一通信总线,该第一通信总线被配置为向分组处理器提供第一分组描述符,以及第二通信总线,该第二通信总线被配置为向传输队列提供第二分组描述符,其中第二通信总线比第一通信总线窄。

利用硬件、执行固件指令的处理器、执行软件指令的处理器或其任何组合,可以实现上述的各种框、操作和技术中的至少一些。

当以硬件实现时,硬件可以包括以下中的一个或多个:分立组件、集成电路、专用集成电路(asic)、可编程逻辑器件(pld)等。

当利用执行软件或固件指令的处理器实现时,软件或固件指令可以被存储在任何计算机可读存储器中,诸如在磁盘、光盘或其他存储介质上,在ram或rom或闪存存储器、处理器、硬盘驱动器、光盘驱动器、磁带驱动器中等。软件或固件指令可以包括机器可读指令,当该指令由一个或多个处理器执行时,使得一个或多个处理器执行各种动作。

尽管已经参考具体实施例描述了本发明,这些实施例仅旨在说明而不是对本发明的限制,在不脱离本发明的范围的情况下,可以对所公开的实施例进行改变、添加和/或删除。例如,上述的方法或技术的一个或多个部分可以以不同的顺序(或同时)执行,并且仍然实现期望的结果。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1