一种实现Mux机的方法、设备及系统与流程

文档序号:16513433发布日期:2019-01-05 09:29阅读:315来源:国知局
一种实现Mux机的方法、设备及系统与流程

本申请涉及通信技术领域,尤其涉及一种实现复用(英文:mux)机的方法、设备及系统。更具体的,本申请涉及在运行链路聚合控制协议(英文:linkaggregationcontrolprotocol,缩写:lacp)的网络中实现mux机的技术。



背景技术:

lacp为实现数据交换的网络设备提供一种标准的协商方式,采用lacp聚合的两端网络设备可以根据自身配置自动形成聚合链路,并利用聚合链路收发数据。聚合链路形成后,聚合链路两端的网络设备负责维护链路状态,在聚合条件发生变化时,自动调整或解散链路聚合。

lacp状态机基于端口维护各个聚合端口及其对端聚合端口的信息,计算每个聚合端口的聚合状态,并与其它网络设备交换lacp报文,调用聚合端口进行聚合组以及聚合成员管理。lacp状态机包括接收状态机(英文:receivemachine,缩写:rxmachine)、周期发送机(英文:periodictransmissionmachine,缩写:ptxmachine)、选择逻辑(英文:selectionlogic)、mux机(英文:muxmachine)和发送机(英文:transmissionmachine,缩写:txmachine)。其中,mux机用于将聚合端口附接到选定的聚合器(英文:aggregator),将聚合端口从不选定的聚合器分离,和基于当前的协议信息打开或关闭聚合端口的收集和分发状态。

在实际的应用场景中,网络设备运行与所述网络设备的聚合端口相关联的mux机。在满足触发条件的情况下,所述网络设备将所述网络设备的所述聚合端口的mux机由附接(英文:attached)状态切换为收集分发(英文:collecting_distributing)状态。但是,所述网络设备无法确保所述网络设备的对端网络设备的聚合端口相关联的mux机处于collecting_distributing状态。因此,在实际的应用场景中,所述网络设备和所述对端网络设备之间的聚合链路可能出现一端聚合端口处于收集和分发状态,另一端聚合端口未处于收集和分发状态的情况,从而导致业务流量出现丢包。



技术实现要素:

有鉴于此,本申请实施例提供了一种实现mux机的方法、设备及系统,应用在运行lacp的网络中,实现mux机中的聚合链路的两端聚合端口状态的检测和处理,有助于减少业务流量在传输过程中产生的丢包。

本申请实施例提供的技术方案如下。

第一方面,提供了一种实现mux机的方法。所述方法应用于运行lacp的网络中,所述网络包括第一网络设备和第二网络设备,所述第一网络设备的第一聚合端口经由聚合链路与所述第二网络设备的第二聚合端口连接。所述第一网络设备在所述第一聚合端口的mux机中设置protect_waiting状态,所述protect_waiting状态用于标识所述第一聚合端口未处于收集和分发状态,但向其他网络设备通告的所述第一聚合端口的状态为收集和分发状态。当所述mux机处于所述protect_waiting状态时,所述第一网络设备确定所述第一聚合端口未处于收集和分发状态,并向所述二网络设备发送第一lacpdu报文,所述第一lacpud报文用于通告所述第二网络设备所述第一聚合端口处于收集和分发状态,并触发所述第二网络设备将所述第二聚合端口设置为收集和分发状态。然后,所述第一网络设备确定是否接收到来自所述第二网络设备的第二lacpdu报文,所述第二lacpdu报文用于指示所述第二聚合端口处于收集和分发状态。并且,当所述第一网络设备确定接收到所述第二lacpdu报文,所述第一网络设备将所述mux机由所述protect_waiting状态切换为collecting_distributing状态,并将所述第一聚合端口设置为收集和分发状态。

基于实施例提供的方案,所述第一网络在所述第一聚合端口的mux机中设置protect_waiting状态。当所述mux机处于所述protect_waiting状态时,所述第一网络设备确定所述第一聚合端口处于未处于收集和分发状态。然后,所述第一网络设备向所述二网络设备发送通告所述第一聚合端口处于收集和分发状态的第一lacpdu报文。并且,当所述第一网络设备确定接收到来自所述第二网络设备的、用于指示所述第二聚合端口处于收集和分发状态的第二lacpdu报文,所述第一网络设备将所述mux机由所述protect_waiting状态切换为collecting_distributing状态,并将所述第一聚合端口设置为收集和分发状态。本申请实施方式实现mux机中的聚合链路单端口up的检测和处理,从而有助于减少业务流量在传输过程中产生的丢包。

在第一方面的一种可能的实现方式中,在所述第一聚合端口的mux机处于protect_waiting状态之前,所述mux机处于attached状态,所述方法还包括,所述第一网络设备接收来自所述第二网络设备的第三lacpdu报文。当所述第一网络设备确定所述第一聚合端口处于选中状态,并且根据所述第三lacpdu报文确定所述第二聚合端口处于同步状态,以及根据所述第三lacpdu报文确定所述第二聚合端口未处于收集和分发状态时,所述第一网络设备将所述mux机由所述attached状态切换为所述protect_waiting状态。

基于上述实现方式,所述第一网络设备不仅通过所述第二lacpdu报文检测所述第二聚合端口的同步状态,还通过所述第二lacpdu报文检测所述第二聚合端口的收集和分发状态,从而确保在mux机进入protect_waiting状态后,启动对所述第二聚合端口从未处于收集和分发状态到处于收集和分发状态的检测。

在第一方面的又一种可能的实现方式中,所述第一网络设备根据所述第三lacpdu报文确定所述第二聚合端口处于同步状态,具体包括,所述第一网络设备确定所述第三lacpdu报文包括的第一信息与所述第一网络设备存储所述第一聚合端口的第二信息匹配,所述第一信息包括对端端口(英文:partner_port)、对端端口优先级(英文:partner_port_priority)、对端系统(英文:partner_system)、对端系统优先级(英文:partner_system_priority)、对端关键字(英文:partner_key)和对端状态聚合(英文:partner_state.aggregation),所述第二信息包括本端端口号(英文:actor_port_number)、本端端口优先级(英文:actor_port_priority)、本端系统(英文:actor_system)、本端系统优先级(英文:actor_system_priority)、本端操作端口关键字(英文:actor_oper_port_key)和本端操作端口聚合(英文:actor_oper_port_state.aggregation)。所述第一网络设备确定所述第三lacpdu报文包括的本端状态同步actor_state.synchronization处于同步状态。

在第一方面的再一种可能的实现方式中,所述方法还包括,当所述第一网络设备根据所述第三lacpdu报文确定所述第二聚合端口处于同步状态,并且根据所述第三lacpdu报文确定所述第二聚合端口处于收集和分发状态时,所述第一网络设备将所述mux机由所述attached状态切换为所述collecting_distributing状态,并将所述第一聚合端口设置为收集和分发状态。

基于上述实现方式,所述第一网络设备在确定所述第二聚合端口处于收集和分发状态时,快速的进入双端口收集和分发的状态,有助于减少业务流量在传输过程中产生的丢包。

在第一方面的再一种可能的实现方式中,所述方法还包括,所述第一网络设备接收来自所述第二网络设备的第四lacpdu报文,所述第四lacpdu报文用于指示所述第二聚合端口未处于收集和分发状态。当所述第一网络设备根据所述第四lacpdu报文确定所述第二聚合端口未处于收集和分发状态时,将所述mux机由所述collecting_distributing状态切换为所述protect_waiting状态。

基于上述实现方式,当所述第一网络设备收到指示所述第二聚合端口状态为未处于收集和分发状态的第三lacpdu报文后,及时将mux机切换为protect_waiting状态,有助于减少业务流量在传输过程中产生的丢包。

在第一方面的再一种可能的实现方式中,所述方法还包括,所述第一网络设备确定以下条件中至少一个条件成立时,将所述mux机由所述protect_waiting状态切换为所述attached状态:所述第一网络设备确定所述第一聚合端口处于不选中状态;所述第一网络设备确定所述第一聚合端口处于备用状态;和,所述第一网络设备接收来自所述第二网络设备的第五lacpdu报文,并根据所述第五lacpdu报文确定所述第二聚合端口未处于同步状态。

在第一方面的再一种可能的实现方式中,所述第一网络设备包括定时器,在所述第一聚合端口的mux机处于protect_waiting状态中,所述方法还包括,所述第一网络设备启动所述定时器;直到所述定时器超时,所述第一网络设备确定未接收到来自所述第二网络设备的所述第二lacpdu报文,所述第一网络设备将所述mux机由所述protect_waiting状态切换为attached状态。

在第一方面的再一种可能的实现方式中,所述方法还包括,当所述mux机处于protect_waiting状态,并且所述定时器超时时,所述第一网络设备将所述聚合链路设置为单端口up,所述单端口up用于指示所述聚合链路的一端聚合端口处于收集和分发状态,另一端聚合端口未处于收集和分发状态。

基于上述实现方式,可以避免所述mux的attached状态和protect_waiting状态之间的反复震荡。

在第一方面中,可选的,在分离(英文:detached)状态中,所述第一网络设备将所述单端口up标志位的值设置为false。

在第一方面中,可选的,所述定时器的时长大于等于3秒,并且所述定时器的时长小于等于90秒。

第二方面,提供了第一网络设备,所述第一网络设备具有实现上述方法中第一网络设备行为的功能。所述功能可以基于硬件实现,也可以基于硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。

在一个可能的设计中,第一网络设备的结构中包括处理器和接口,所述处理器被配置为支持第一网络设备执行上述方法中相应的功能。所述接口用于支持第一网络设备与第二网络设备之间的通信,向第二网络设备发送上述方法中所涉及的信息或者指令,或者从第二网络设备接收上述方法中所涉及的信息或者指令。所述第一网络设备还可以包括存储器,所述存储器用于与处理器耦合,其保存第一网络设备必要的程序指令和数据。

在另一个可能的设计中,所述第一网络设备包括:处理器、发送器、随机存取存储器、只读存储器以及总线。其中,处理器通过总线分别耦接发送器、随机存取存储器以及只读存储器。其中,当需要运行第一网络设备时,通过固化在只读存储器中的基本输入/输出系统或者嵌入式系统中的bootloader引导系统进行启动,引导第一网络设备进入正常运行状态。在第一网络设备进入正常运行状态后,在随机存取存储器中运行应用程序和操作系统,使得该处理器执行第一方面或第一方面的任意可能的实现方式中的方法。

第三方面,提供一种第一网络设备,所述第一网络设备包括:主控板和接口板,进一步,还可以包括交换网板。所述第一网络设备用于执行第一方面或第一方面的任意可能的实现方式中的方法。具体地,所述第一网络设备包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的模块。

第四方面,提供一种第一网络系统,所述第一网络系统包括控制器和第一转发设备。所述第一转发设备包括:接口板,进一步,还可以包括交换网板。所述第一转发设备用于执行第三方面中的接口板的功能,进一步,还可以执行第三方面中交换网板的功能。所述控制器包括接收器、处理器、发送器、随机存取存储器、只读存储器以及总线。其中,处理器通过总线分别耦接接收器、发送器、随机存取存储器以及只读存储器。其中,当需要运行控制器时,通过固化在只读存储器中的基本输入/输出系统或者嵌入式系统中的bootloader引导系统进行启动,引导控制器进入正常运行状态。在控制器进入正常运行状态后,在随机存取存储器中运行应用程序和操作系统,使得该处理器执行第三方面中主控板的功能。

第五方面,提供一种实现mux机的网络系统,所述网络系统包括第一网络设备和第二网络设备,所述第一网络设备和/或第二网络设备为前述第三方面或第四方面或第五方面中的第一网络设备。

第六方面,提供了一种计算机存储介质,用于储存为上述第一网络设备所用的程序、代码或指令,当处理器或硬件设备执行这些程序、代码或指令时可以完成上述方面中第一网络设备的功能或步骤。

通过上述方案,本申请实施例提供的用于实现mux机的方法、设备及系统。所述第一网络在所述第一聚合端口的mux机中设置protect_waiting状态。当所述mux机处于所述protect_waiting状态时,所述第一网络设备确定所述第一聚合端口处于未处于收集和分发状态。然后,所述第一网络设备向所述二网络设备发送通告所述第一聚合端口处于收集和分发状态的第一lacpdu报文。并且,当所述第一网络设备确定接收到来自所述第二网络设备的、用于指示所述第二聚合端口处于收集和分发状态的第二lacpdu报文,所述第一网络设备将所述mux机由所述protect_waiting状态切换为collecting_distributing状态,并将所述第一聚合端口设置为收集和分发状态。本申请实施方式实现mux机中的聚合链路单端口up的检测和处理,从而有助于减少业务流量在传输过程中产生的丢包。

附图说明

图1为本申请实施例的一种运行lacp的网络结构示意图;

图2为本申请实施例的一种mux机的状态图;

图3为本申请实施例的一种实现mux机的方法流程图;

图4为本申请实施例的另一种mux机的状态图;

图5为本申请实施例的第一网络设备的结构示意图;

图6为本申请实施例的第一网络设备的硬件结构示意图;

图7为本申请实施例的另第一网络设备的硬件结构示意图;

图8为本申请实施例的第一网络系统的硬件结构示意图。

具体实施方式

下面通过具体实施例,分别进行详细的说明。

本申请所涉及的lacp可以参见电气和电子工程师协会(英文:instituteofelectricalandelectronicsengineers,缩写:ieee)802.1ax和ieee802.3ad的说明,ieee802.1ax和ieee802.3a以全文引用的方式并入本申请中。在本申请实施例中,true表示“真”或“条件成立”,在计算机编码中,true的取值可以是“1”;false表示“假”或“条件不成立”,在计算机编码中,false的取值可以是“0”。在本申请实施例中,up表示端口打开或可用,即:允许端口发送和接收数据报文;down表示端口关闭或不可用,即:不允许端口发送和接收数据报文。在本申请实施例中,“确定”可以包括通过“设置”手段实现的方式,或者通过“保持”手段实现的方式。

图1为本申请实施例的一种运行lacp的网络结构示意。如图1所示,所述网络包括第一网络设备和第二网络设备。所述第一网络设备经由链路聚合组(英文:linkaggregationgroup,缩写:lag)与所述第二网络设备通信。所述lag包括至少一条聚合链路(英文:aggregationlink)。举例说明,所述lag包括聚合链路1,所述第一网络设备经由所述聚合链路1与所述第二网络设备通信。所述聚合链路1的一端为所述第一网络设备上的聚合端口(英文:aggregationport)11,所述聚合链路1的另一端为所述第二网络设备上的聚合端口21。所述第一网络设备上的聚合器(英文:aggregator)1和所述第二网络设备上的聚合器2与所述lag关联。所述聚合器1和聚合器2分别用于管理所述lag包括的聚合链路的聚合端口,例如aggregator1管理聚合端口11,aggregator2管理聚合端口21。

图1中示出了2台网络设备,应当理解,所述网络中包括的网络设备的数量不受限制,可以为2台或者3台或者更多数量。例如,所述网络还包括第三网络设备,所述第一网络设备经由lag1与所述第二网络设备通信,所述第一网络设备经由lag2与所述第三设备通信。经由lag连接的两个网络设备之间可以包括其他网络设备。例如,所述第一网络设备与所述第二网络设备之间的lag包括一台交换机。所述第一网络设备和所述第二网络设备可以是物理设备,所述物理设备包括路由器或交换机。所述第一网络设备和所述第二网络设备均可以连接其他网络设备。例如,所述第一网络设备连接客户机,所述第二网络设备连接服务器。所述客户端经由图1所示的网络与所述服务器通信。

本申请实施例中的lag、聚合链路、聚合端口和聚合器的定义可以参见ieee802.1ax中的说明,此处不进行赘述。其中,网络设备可以包括一个或多个聚合器。所述网络设备包括的聚合器的数量可以多于、少于或等于所述网络设备包括的聚合端口的数量。所述网络设备上的同一个聚合端口可以同时归属不同的聚合器。

在图1中,所述第一网络设备和所述第二网络设备分别运行lacp。具体的,所述第一网络设备和所述第二网络设备的每个聚合端口关联一个lacp状态机,例如,聚合端口11关联lacp状态机11,聚合端口21关联lacp状态机21。由于聚合端口与lacp状态机是一一对应的,因此lacp状态机可以理解为:所述第一网络设备和所述第二网络设备在每个聚合接口上实现的lacp状态机。所述lacp状态机包括接收状态机(英文:receivemachine,缩写:rxmachine)、周期发送机(英文:periodictransmissionmachine,缩写:ptxmachine)、选择逻辑(英文:selectionlogic)、mux机(英文:muxmachine)和发送机(英文:transmissionmachine,缩写:txmachine)。上述lacp状态机包括的5个子状态机的定义和实现原理可以参见ieee802.1ax中的说明,此处不进行赘述。所述第一网络设备和所述第二网络设备的每个聚合接口通过调用上述状态机,实现链路的聚合和解聚合。

以图1中的聚合链路1实现mux机为例进行说明。所述聚合链路1的一端为所述第一网络设备上的聚合端口11,所述聚合链路1的另一端为所述第二网络设备上的聚合端口21。在所述聚合端口11和所述聚合端口21上分别实现mux机。具体的,所述第一网络设备在所述聚合端口11上实现mux机,所述第二网络设备在所述聚合端口21上实现mux机。图2示出了一种耦合控制(英文:coupledcontrol)模式的mux机的状态图。如图2所示,所述mux机包括分离(英文:detached)、等待(英文:waiting)、附接(英文:attached)和收集分发(英文:collecting_distributing)4个状态。在图2中,在所述聚合端口11上实现的mux机中,所述第一网络设备被视为本端(英文:actor),所述第二网络设备被视为对端(英文:partner);在所述聚合端口21上实现的mux机中,所述第二网络设备被视为actor,所述第一网络设备被视为partner。图2中,“+”表示“或”,“*”表示“和”。

所述第一网络设备在所述聚合端口11上实现mux机,初始化时默认进入detached状态。当mux机处于detached状态时,所述第一网络设备进行以下处理:

将本端操作端口同步状态(英文:actor_oper_port_state.synchronization,缩写:actor.sync)确定为false,表示所述第一网络设备的聚合端口11未处于同步状态,或者可以认为是不同步状态。其中,所述actor.sync用于指示所述第一网络设备的聚合端口11的同步状态。

将本端操作端口分发状态(英文:actor_oper_port_state.distributing,缩写:actor.distributing)确定为false,表示所述聚合端口11未处于分发状态,或者可以认为是不分发状态。其中,所述actor.distributing用于指示所述聚合端口11的分发状态。

将本端操作端口收集状态(英文:actor_oper_port_state.collecting,缩写:actor.collecting)确定为false,表示所述聚合端口11未处于收集状态,或者可以认为是不收集状态。其中,所述actor.collecting用于指示所述聚合端口11的收集状态。

将需要传送(英文:needtotransmit,缩写:ntt)确定为true,所述ntt用于指示是否允许所述第一网络设备与所述第二网络设备之间传送链路聚合控制协议数据单元(英文:linkaggregationcontrolprotocoldataunit,缩写:lacpdu)报文。

在本申请的实施例中,可以使用两个字段分别指示本端操作端口的分发状态和收集状态,例如上述中的actor.collecting和actor.distributing;也可以使用一个字段指示本端操作端口的分发状态和收集状态,例如actor.collecting_distributing。同样的原则,可以使用两个字段分别指示对端操作端口的分发状态和收集状态,例如partner.collecting和partner.distributing;也可以使用一个字段指示本端操作端口的分发状态和收集状态,例如partner.collecting_distributing。在本申请实施例中,使用collecting和distributing字段分别指示的方式和使用collecting_distributing指示的方式均可以表述为“收集和分发状态”。即,使用collecting和distributing字段分别指示的方式和使用collecting_distributing指示的方式均是“收集和分发状态”的实现方式。

当所述第一网络设备确定所述聚合端口11处于选中(英文:selected)状态(如图2中所示,selected=selected)或备用(英文:standby)状态(如图2中所示,selected=standby),所述第一网络设备将mux机由detached状态切换为waiting状态。具体的,所述第一网络设备可以调用selectionlogic选择与所述聚合端口11相关联的聚合器,根据图1,该聚合器为聚合器1。所述selected状态用于指示合适的聚合器被选中。所述standby状态用于指示合适的聚合器被选中,并且,与聚合器相关联的端口不使能聚合功能。当mux机处于waiting状态时,所述第一网络设备进行以下处理:启动等待时间计时器(英文:wait_while_timer)。在waiting状态中,如果所述第一网络设备接收到触发事件,所述第一网络设备将所述聚合端口11确定为不选中(英文:unselected)状态(如图2中所示,selected=unselected),所述第一网络设备将mux机由waiting状态切换为detached状态。具体的,所述unselected状态可以由selectionlogic进行触发,也可以由rxmachine进行触发。

当所述聚合端口11被确定为selected状态,并且ready状态为true时,所述第一网络设备将mux机由waiting状态切换为attached状态。其中,如果在waiting状态中,所述聚合端口11处于selected状态,则所述wait_while_timer超时时,所述第一网络设备将ready状态确定为true。其中,ready状态被确定true表示所述wait_while_timer超时,并且等待聚合端口被附接到聚合器。如果在waiting状态中,所述聚合端口11的处于standby状态,则即使所述wait_while_timer超时,ready状态不会被确定为true,waiting状态也不会改变。在attached状态下,所述第一网络设备将所述聚合端口11附接到所述聚合器1,并且在完成附接过程后进行以下处理:将所述actor.sync确定为true,表示所述第一网络设备的聚合端口11处于同步状态。将所述actor.collecting确定为false,表示所述聚合端口11未处于收集状态。将所述actor.distributing确定为false,表示所述聚合端口11未处于分发状态。将所述ntt确定为true。

如果所述第一网络设备接收到触发事件,导致所述第一网络设备将所述聚合端口11的确定为unselected状态或standby状态,所述第一网络设备将mux机由attached状态切换为detached状态。mux机进入detached状态后,所述第一网络设备将所述聚合端口11从所述聚合器1中分离,并且,将聚合端口11的相应的状态信息确定为图2中detached状态中所指示的状态。

当所述聚合端口11的处于selected状态,并且,对端操作端口同步状态(英文:partner_oper_port_state.synchronization,缩写:partner.sync)被确定为true,所述第一网络设备将mux机由attached状态切换为collecting_distributing状态。其中,所述partner.sync被确定为true表示所述第一网络设备确定所述第二网络设备的聚合端口21处于同步状态,所述partner.sync用于指示所述第一网络设备确定所述聚合端口21的同步状态。具体的,所述partner.sync被确定为true可以被解释为:所述第一网络设备获知所述聚合端口21处于同步状态,并且,所述第一网络设备认可所述聚合端口21的同步状态。其中,所述第一网络设备根据从所述第二网络设备接收到的lacpdu报文,确定所述partner.sync的状态。当mux机处于collecting_distributing状态时,所述第一网络设备进行以下处理:将所述actor.collecting确定为true,表示所述聚合端口11处于收集状态。将所述actor.distributing确定为true,表示所述聚合端口11处于分发状态。将所述ntt确定为true。如此这样,mux机进入collecting_distributing状态后,所述第一网络设备根据所述聚合端口11处于收集和分发状态,将所述聚合端口11设置为up,从而,所述第一网络设备允许所述聚合端口11接收和发送数据报文。

如果所述第一网络设备接收到触发事件,导致所述聚合端口11的被确定为unselected状态或standby状态,或者导致所述partner.sync被确定为false,所述第一网络设备将mux机由collecting_distributing状态切换为attached状态。其中,partner.sync被确定为false表示所述第一网络设备确定所述第二网络设备的聚合端口21未处于同步状态。

图2示出的实现mux机的方法流程图中的各个状态的解释也可以参见ieee802.1ax中的说明。图2所示的mux机可以应用在所述第一网络设备和第二网络设备的每个聚合端口上。所述第一网络设备在所述聚合端口11上实现图2所示的mux机,并且所述mux机进入collecting_distributing状态后,所述第一网络设备无法确保所述第二网络设备的聚合端口21上实现的mux机也处于collecting_distributing状态。例如,如果所述第二网络设备存在异常,导致所述聚合端口21上的mux机不能进入collecting_distributing状态。这将导致聚合链路1的聚合端口11为up状态,可以接收和发送数据报文;聚合链路1的聚合端口21为down状态,不能接收和发送数据报文。从而,所述聚合链路1出现一端聚合端口处于收集和分发状态,另一端聚合端口未处于收集和分发状态的情况,或者可以认为是,聚合链路的一端聚合端口为up,另一端聚合端口为down。聚合链路上处于up的聚合端口发出的数据报文,无法被聚合链路上处于down的聚合端口接收,从而导致业务流量丢包。

在本申请实施例中,聚合链路的一端聚合端口处于收集和分发状态,另一端聚合端口未处于收集和分发状态的情况可以被称为单端口up(英文:single-port_up),也就是说,聚合链路的一端聚合端口为up,另一端聚合端口为down的情况可以被称为单端口up。其中,所述第二网络设备存在异常,可能是由于不同厂商网络设备的实现差异或者网络设备故障或者链路故障等导致的。

以图1为例说明,假设第一网络设备向第二网络设备发送的第一lacpdu报文是正确的,所述第二网络设备向所述第一网络设备发送的第二lacpdu报文存在错误。所述错误例如是所述第二lacpdu报文携带的本端系统(英文:actor_system)或本端接口(英文:actor_port)等出现错误。其中,所述第二lacpdu报文中的actor_system用于指示所述第二网络设备的系统标识,actor_port用于指示第二网络设备为聚合端口分配的端口号。所述第二lacpdu报文存在错误的原因可能包括:所述第一网络设备和所述第二网络设备之间链路上的其他网络设备因为故障造成所述第二lacpdu报文错误、所述第二网络设备在将所述第二lacpdu报文从控制平面下发到转发平面过程中因为故障造成所述第二lacpdu报文错误,或所述第一网络设备在将所述第二lacpdu报文从转发平面上报到控制平面过程中因为故障造成所述第二lacpdu报文错误。这样,所述第一网络设备根据第二lacpdu中的actor状态信息,保存错误的第二网络设备的状态信息,所述第一网络设备根据所述第二lacpdu报文识别出的partner不是所述第二网络设备,而是错误的第二网络设备;所述第二网络设备根据第一lacpdu中的actor状态信息,保存正确的第一网络设备的状态信息,所述第二网络设备根据所述第一lacpdu报文识别出的partner是正确的所述第一网络设备。根据lacp的实现,所述第一网络设备再次接收到来自所述第二网络设备的lacpdu报文(该lacpdu报文可能是正确的lacpdu报文,也可能是不同于第二lacpdu报文的另一错误的lacpdu报文),根据来自所述第二网络设备的lacpdu报文中的partner状态信息,将mux机的状态切换为collecting_distributing状态。所述第二网络设备再次接收到来自所述第一网络设备的lacpdu报文,根据来自所述第一网络设备的lacpdu报文中的partner状态信息(该信息为之前存储的错误的所述第二网络设备的状态信息),确定mux机的不进入collecting_distributing状态。从而,所述第一网络设备的聚合端口进入稳态的up状态,而聚合链路另一端的所述第二网络设备的聚合端口处于down状态,聚合链路出现了单端口up,导致业务流量丢包。

为了解决上述问题,本申请实施例对图2所示的mux机进行重新设计,并且,该mux机可以应用在图1所示的网络结构中。从而,所述第一网络在所述第一聚合端口的mux机中设置保护等待(英文:protect_waiting)状态。当所述mux机处于所述protect_waiting状态时,所述第一网络设备确定所述第一聚合端口处于未处于收集和分发状态。然后,所述第一网络设备向所述二网络设备发送第一lacpdu报文,所述第一lacpud报文用于通告所述第二网络设备所述第一聚合端口处于收集和分发状态,并触发所述第二网络设备将所述第二聚合端口设置为收集和分发状态。并且,当所述第一网络设备确定接收到来自所述第二网络设备的、用于指示所述第二聚合端口处于收集和分发状态的第二lacpdu报文,所述第一网络设备将所述mux机由所述protect_waiting状态切换为collecting_distributing状态,并将所述第一聚合端口设置为收集和分发状态。

本申请实施方式实现mux机中的聚合链路单端口up的检测和处理,有助于减少业务流量在传输过程中产生的丢包。具体mux机的实现方式请参见本申请后续实施例的说明。

图3为本申请实施例的一种实现mux机的方法流程图。图3所示的方法可以应用于图1所示的运行lacp的网络中。所述网络包括第一网络设备和第二网络设备,所述第一网络设备的第一聚合端口经由聚合链路与所述第二网络设备的第二聚合端口连接,所述第一网络设备在所述第一聚合端口上实现所述mux机。

在本实施例中,以图1中的lag中的聚合链路1为例进行说明,其中,所述第一网络设备的聚合端口11经由聚合链路1与所述第二网络设备的聚合端口21连接。应当理解,所述第一网络设备包括的所有聚合接口和所述第二网络设备包括的所有聚合接口均可以运行图3所示的方法。图4示出了申请实施例的一种mux机的状态图。图3所示的方法可以用于实现图4所示的mux机。图4中未示出detached状态、waiting状态和attached状态下的操作,以及,图4中未示出detached状态、waiting状态和attached状态之间的切换条件。相应的,图4中的detached状态、waiting状态和attached状态下的操作,以及上述3个状态之间的切换条件可以参见图2的相应部分,图4中不再进行赘述;并且,上述3个状态之间相互转换的解释可以参见前述实施例的描述,此处不进行赘述。另外,关于actor和partner,以及“+”和“*”的解释,图4与前述图2的描述相同,此处不进行赘述。在本申请实施例中,所述第一聚合端口对应举例说明中的聚合端口11,所述第二聚合端口对应举例说明中的聚合端口21。本实施例结合图1和图4对图3所示的方法进行说明,所述方法包括:

s102、所述第一网络设备在所述第一聚合端口的mux机中设置protect_waiting状态,所述protect_waiting状态用于标识所述第一聚合端口未处于收集和分发状态,但向其他网络设备通告的所述第一聚合端口的状态为收集和分发状态。

举例说明,所述第一网络设备在所述第一网络设备的聚合端口11上实现mux机。所述第一网络设备在所述mux机中设置protect_waiting状态,如图4所示。相比较图2所示的mux机,图4所示的mux机在attached状态和collecting_distributing状态之间增加了protect_waiting状态。当满足切换条件,所述第一网络设备可以实现所述聚合端口11的mux机的attached状态和protect_waiting状态之间的切换。并且,当满足切换条件,所述第一网络设备还可以实现所述聚合端口11的mux机的collecting_distributing状态和protect_waiting状态之间的切换。

所述protect_waiting状态用于标识所述聚合端口11未处于收集和分发状态,但向其他网络设备通告的所述聚合端口11的状态为收集和分发状态。也就是说,在protect_waiting状态中,所述第一网络设备会将所述聚合端口11确定为未处于收集和分发状态。所述第一网络设备将所述聚合端口11确定为未处于收集和分发状态包括:所述第一网络设备将所述聚合端口11保持为未处于收集和分发状态,或者,所述第一网络设备将所述聚合端口11设置为未处于收集和分发状态。具体的,在一种可能的实现方式中,所述第一网络设备检测到所述聚合端口11未处于收集和分发状态,则维持所述聚合端口11未处于收集和分发状态。例如,当所述聚合端口11的mux机由attached状态切换为protect_waiting状态时,所述聚合端口11未处于收集和分发状态。mux机进入protect_waiting状态后,所述第一网络设备保持所述聚合端口11的未处于收集和分发状态。在另一种可能的实现方式中,所述第一网络设备检测到所述聚合端口11处于收集和分发状态,则将所述聚合端口11设置为未处于收集和分发状态。例如,当所述聚合端口11的mux机由collecting_distributing状态切换为protect_waiting状态时,所述聚合端口11处于收集和分发状态。mux机进入protect_waiting状态后,所述第一网络设备将所述聚合端口11设置为未处于收集和分发状态。在又一种可能的实现方式中,所述第一网络设备不检测所述聚合端口11的状态,而是直接将所述聚合端口11设置为未处于收集和分发状态。

在protect_waiting状态中,所述第一网络设备将所述聚合端口11确定为未处于收集和分发状态后,所述第一网络设备向其他网络设备通告的所述聚合端口11的状态为收集和分发状态。所述其他网络设备包括与所述第一网络设备通过聚合链路通信的网络设备。所述第一网络设备向其他网络设备宣告:所述聚合端口11的状态为收集和分发状态。但实际上,所述聚合端口11的真实的状态为未处于收集和分发状态。

s104、当所述mux机处于所述protect_waiting状态时,所述第一网络设备确定所述第一聚合端口未处于收集和分发状态,并向所述二网络设备发送第一lacpdu报文,所述第一lacpud报文用于通告所述第二网络设备所述第一聚合端口处于收集和分发状态,并触发所述第二网络设备将所述第二聚合端口设置为收集和分发状态。

举例说明,当所述聚合端口11的mux机处于所述protect_waiting状态时,所述第一网络设备进行以下处理:将actor.collecting确定为false,表示所述聚合端口11未处于收集状态。将actor.distributing确定为false,表示所述聚合端口11未处于分发状态。向其他网络设备通告actor.collecting为true和actor.distributing为true,表示所述聚合端口11处于收集和分发状态。将所述ntt确定为true。

其中,上述actor.collecting和actor.distributing也可以由actor.collecting_distributing表示。例如,actor.collecting_distributing被确定为true,表示所述聚合端口11处于收集状态和分发状态;actor.collecting_distributing被确定为false,表示所述聚合端口11未处于收集状态和分发状态。在本申请实施例中,上述两种表示方式均被涵盖在“收集和分发状态”的范围内。所述第一网络设备将actor.collecting和actor.distributing确定为false的实现方式,可以参见前述s102的说明,此处不进行赘述。

所述第一网络设备还向所述二网络设备发送第一lacpdu报文,所述第一lacpud报文用于通告所述第二网络设备所述聚合端口11处于收集和分发状态。另外,所述第一lacpdu报文还用于触发所述第二网络设备将所述聚合端口21设置为收集和分发状态。具体的,所述第二网络设备接收到所述第一lacpdu报文后,根据所述第一lacpdu报文确定所述聚合端口11的状态为收集和分发状态,触发将所述聚合端口21设置为收集和分发状态的过程。

其中,所述第一lacpdu报文是由所述第一网络设备向所述第二网络设备发送的lacpdu报文。所述第一lacpdu报文携带有本端状态(英文:actor_state)字段,所述actor_state字段长度为1字节。所述actor_state字段包括collecting标志位和distributing标志位。所述collecting标志位和distributing标志位用于指示所述聚合端口11是否处于收集和分发状态。例如,当collecting标志位和distributing标志位均被置位为1时,表示聚合端口11处于收集和分发状态。其中,lacpdu报文和actor_state的格式也可以参见ieee802.1ax中图5-8和图5-9的说明。另外,所述第二网络设备可以调用rxmachine完成对所述第一lacpdu报文的接收和处理。

s106、所述第一网络设备确定是否接收到来自所述第二网络设备的第二lacpdu报文,所述第二lacpdu报文用于指示所述第二聚合端口处于收集和分发状态。

举例说明,如果所述第二网络设备被所述第一lacpdu报文触发成功,所述第二网络设备将生成所述第二lacpdu报文,并且将所述第二lacpdu报文向所述第一网络设备发送。或者,如果所述第二网络设备存在故障或异常,可能导致所述聚合端口21未处于收集和分发状态,从而,所述第二网络设备在接收到所述第一lacpdu报文的情况下,无法向所述第一网络设备发送所述第二lacpdu报文。

所述第一网络设备检测是否接收到来自所述第二网络设备的第二lacpdu报文,所述第二lacpdu报文用于指示所述聚合端口21处于收集和分发状态。从而,所述第一网络设备可以确定所述聚合链路1是否存在一端的聚合端口处于收集和分发状态,另一端的聚合端口未处于收集和分发状态(不收集和不转发状态)的情况。也就是说,所述第一网络设备可以检测所述聚合链路1是否存在单端口up的情况。具体的,所述第一网络设备检测聚合链路1是否为单端口up的实现方式是:如果所述第二网络设备的聚合端口21处于收集和分发状态,则所述聚合链路1不属于单端口up。如果所述第二网络设备的聚合端口21始终未处于收集和分发状态,则所述聚合链路1为单端口up。

其中,所述第二lacpdu报文是由所述第二网络设备向所述第一网络设备发送的lacpdu报文。所述第二lacpdu报文携带有actor_state字段,所述actor_state字段长度为1字节。所述actor_state字段包括collecting标志位和distributing标志位。所述collecting标志位和distributing标志位用于指示所述聚合端口21是否处于收集和分发状态。例如,当collecting标志位和distributing标志位均被置位为1时,表示聚合端口21处于收集和分发状态。其中,lacpdu报文和actor_state的格式也可以参见ieee802.1ax中图5-8和图5-9的说明。另外,所述第一网络设备可以调用rxmachine完成对所述第二lacpdu报文的接收和处理。

s108、当所述第一网络设备确定接收到所述第二lacpdu报文,所述第一网络设备将所述mux机由所述protect_waiting状态切换为collecting_distributing状态,并将所述第一聚合端口设置为收集和分发状态。

根据lacp,actor或partner的聚合端口发生状态信息的变化,可以通过lacpdu报文通知对方。例如,所述第二网络设备的聚合端口21的mux机由attached状态切换为collecting_distributing状态,所述第二网络设备将所述聚合端口21的收集状态切换为收集和将所述聚合端口21的分发状态切换为分发。如此这样,所述聚合端口21发生了状态信息的变化。所述第二网络设备将向所述第一网络设备发送第二lacpdu报文,所述第二lacpdu报文用于指示所述聚合端口21处于收集和分发状态。在图4所示的mux机中,所述第一网络设备确定是否接收到所述第二lacpdu报文。从而,第一网络设备可以根据所述第二lacpdu报文,确定所述聚合端口21是否处于收集和分发状态。

如果所述第一网络设备接收到所述第二lacpdu报文,则说明所述第二设备将聚合端口21的收集状态确定为收集和将聚合端口21的分发状态确定为分发。所述第一网络设备根据指示所述第二设备的聚合端口21处于收集和分发状态的所述第二lacpdu报文,将所述mux机由所述protect_waiting状态切换为collecting_distributing状态。具体的,所述第一网络设备根据所述第二lacpdu报文携带的actor_state字段中的collecting标志位为true,所述第一网络设备确定对端操作端口收集状态(英文:partner_oper_port_state.collecting,缩写:partner.collecting)的值为true。所述第一网络设备根据所述第二lacpdu报文携带的所述actor_state字段中的distributing标志位为true,所述第一网络设备确定对端操作端口分发状态(英文:partner_oper_port_state.distributing,缩写:partner.distributing)的值为true。所述第一网络设备根据partner.collecting=true和partner.distributing=true,将所述mux机由所述protect_waiting状态切换为collecting_distributing状态。

当所述聚合端口11的mux机处于collecting_distributing状态,所述第一网络设备将所述聚合端口11设置为收集和分发状态。从而,所述聚合端口11和聚合端口21均处于收集和分发状态。也就是说,所述聚合链路1的聚合端口11和聚合端口21均为up。即,所述第一网络设备允许所述聚合端口11接收和发送数据报文,并且,所述第二网络设备允许所述聚合端口21接收和发送数据报文。

图4所示的mux机通过增加protect_waiting状态,确保了聚合链路两端的聚合端口均up的情况下,将聚合端口的mux机切换到稳定的收集和分发状态。

通过上述实施方式,在运行lacp的网络场景中,所述第一网络在所述第一聚合端口的mux机中设置protect_waiting状态。当所述mux机处于所述protect_waiting状态时,所述第一网络设备确定所述第一聚合端口处于未处于收集和分发状态。然后,所述第一网络设备向所述二网络设备发送第一lacpdu报文,所述第一lacpud报文用于通告所述第二网络设备所述第一聚合端口处于收集和分发状态,并触发所述第二网络设备将所述第二聚合端口设置为收集和分发状态。并且,当所述第一网络设备确定接收到来自所述第二网络设备的、用于指示所述第二聚合端口处于收集和分发状态的第二lacpdu报文,所述第一网络设备将所述mux机由所述protect_waiting状态切换为collecting_distributing状态,并将所述第一聚合端口设置为收集和分发状态。本申请实施方式实现mux机中的聚合链路单端口up的检测和处理,从而有助于减少业务流量在传输过程中产生的丢包。

应当理解,本申请实施例的图3所示的方法是以所述第一网络设备的聚合端口实现mux机为例说明,图3所示的方法同样可以应用在所述第二网络设备的聚合端口中。而且,对于同一条聚合链路而言,所述聚合链路的两个聚合端口均实现图4所示的mux机。举例说明,图1所示的聚合链路1的聚合端口11在实现图4所示的mux机期间,聚合链路1的聚合端口21也在实现图4所示的mux机。并且,在所述聚合端口11的mux机中,所述第一网络设备被视为actor,所述第二网络设备被视为partner;在所述聚合端口21的mux机中,所述第二网络设备被视为actor,所述第一网络设备被视为partner。

可选的,所述第一网络设备包括定时器,在所述第一聚合端口的mux机处于protect_waiting状态中,所述方法还包括:所述第一网络设备启动定时器;直到所述定时器超时,所述第一网络设备确定未接收到来自所述第二网络设备的所述第二lacpdu报文,所述第一网络设备将所述mux机由所述protect_waiting状态切换为attached状态。

举例说明,所述第一网络设备中还设置有定时器,所述定时器与所述聚合端口11相关联。所述第一网络设备在计时器计时期间检测是否接收到来自所述第二网络设备的第二lacpdu报文。所述定时器可以由硬件计时器或者软件计时器实现。通过设置所述定时器,可以防止所述聚合端口11的mux机长时间处于所述protect_waiting状态。在一种可能的实现方式中,所述定时器的时长可以根据组网的实际场景和网络设备的性能要求进行设定,例如,3s≤t≤90s,其中t表示定时器的时长,s表示秒。

如果从所述定时器开始计时起,直到所述定时器超时,所述第一网络设备始终没有接收到所述第二lacpdu报文,所述第一网络设备确定所述聚合链路1为单端口up。也就是说,直到所述定时器超时,所述第一网络设备始终没有接收到所述第二lacpdu报文,所述第一网络设备可以确定所述聚合端口21未处于收集和分发状态。基于上述情况,所述第一网络设备会将所述聚合端口11的所述mux机由所述protect_waiting状态切换为attached状态(如图4所示)。其中,所述直到所述定时器超时,所述第一网络设备始终没有接收到所述第二lacpdu报文包括:从所述定时器开始计时起,直到所述定时器超时,所述第一网络设备没有接收到任何来自所述第二网络设备的lacpdu报文;或者,从所述定时器开始计时起,直到所述定时器超时,所述第一网络设备接收到来自所述第二网络设备的lacpdu报文,但该lacpdu报文并没有指示所述所述聚合端口21处于收集和分发状态。

可选的,所述方法还包括:当所述mux机处于collecting_distributing状态,并且所述定时器超时时,所述第一网络设备将所述聚合链路设置为单端口up,所述单端口up用于指示所述聚合链路的一端聚合端口处于收集和分发状态,另一端聚合端口未处于收集和分发状态

举例说明,所述第一网络设备还可以设置single-port_up。所述single-port_up用于指示聚合链路是否为单端口up。其中,所述single-port_up被部署在mux机中,根据所述定时器进行触发。具体的,在protect_waiting状态中,直到所述定时器超时,所述第一网络设备未接收到来自所述第二网络设备的所述第二lacpdu报文,所述第一网络设备将所述single-port_up标志位的值被设置为true,即single-port_up=true。其中,single-port_up标志位的值被设置为true表示所述聚合链路1存在单端口up的情况。因此,直到所述定时器超时,所述第一网络设备未接收到所述第二lacpdu报文,所述第一网络设备会将所述聚合端口11的mux机由protect_waiting状态切换为attached状态,并且,所述第一网络设备将所述single-port_up标志位的值被设置为true。

所述第一网络设备的聚合端口11的所述mux机进入attached状态后,由于所述single-port_up标志位的值为true,所述第一网络设备不会将所述mux由attached状态切换为protect_waiting状态。因此,进一步的有益效果是:所述single-port_up可以避免所述mux的attached状态和protect_waiting状态之间的反复震荡。

可选的,mux机处于detached状态时,所述第一网络设备将所述单端口up标志位的值设置为false。

所述detached状态可以被看作mux机的初始化阶段,在detached状态中,所述第一网络设备将single-port_up标志位的值设置为false(single-port_up=false),表示聚合链路1未处于单端口up。在本申请实施例中,所述未处于单端口up可能存在两种情况:所述聚合链路1的聚合端口11和聚合端口21均为down,或者,所述聚合链路1的聚合端口11和聚合端口21均为up(聚合端口11为up包括对外通告为up的情况)。在所述detached状态中,将single-port_up标志位的值设置为false,有助于避免旧的single-port_up标志位的值影响mux机的运行。

可选的,在s102或s104之前,所述第一聚合端口的mux机处于所述attached状态,所述方法还包括s1001和s1002,以便完成所述第一网络设备将所述mux机由attached状态切换为protect_waiting状态的过程,如图4所示。

s1001、所述第一网络设备接收来自所述第二网络设备的第三lacpdu报文;

s1002、当所述第一网络设备确定所述第一聚合端口处于选中状态,并且根据所述第三lacpdu报文确定所述第二聚合端口处于同步状态,以及根据所述第三lacpdu报文确定所述第二聚合端口未处于收集和分发状态时,所述第一网络设备将所述mux机由所述attached状态切换为所述protect_waiting状态。

举例说明,所述第一网络设备可以调用selectionlogic选择与所述聚合端口11相关联的聚合器,根据图1,该聚合器为聚合器1。所述selected用于指示合适的聚合器被选中。当所述selectionlogic完成所述聚合端口11相关联的聚合器的选择后,所述第一网络设备可以确定所述第一网络设备的聚合端口11处于选中状态(selected=selected)。

所述第一网络设备可以调用rxmachine,使用rxmachine完成对所述第三lacpdu报文的接收和处理。所述第三lacpdu报文是由所述第二网络设备发送的。所述第三lacpdu报文被用于确定所述聚合端口21是否处于同步状态,并且所述第三lacpdu报文还被用于确定所述聚合端口21是否处于收集和分发状态。当所述聚合端口11处于选中状态,并且所述第一网络设备根据所述第三lacpdu报文确定所述聚合端口21处于同步状态,以及根据所述第三lacpdu报文确定所述聚合端口21未处于收集和分发状态时,所述第一网络设备将所述聚合端口11的mux机由attached状态切换为protect_waiting状态。

其中,所述第三lacpdu报文中的用于指示所述聚合端口21的状态信息包括actor_state,所述actor_state包括collecting标志位和distributing标志位。所述第一网络设备确定所述第三lacpdu报文中所述actor_state包括的collecting标志位和distributing标志位是否被设置为true。当collecting标志位和distributing标志位被设置为false时,所述第一网络设备确定所述聚合端口21未处于收集和分发状态。

通过上述s1001和s1002的实现方式,所述第一网络设备的聚合端口11的mux机处于attached状态中,当所述第一网络设备确定所述聚合端口21处于同步状态和所述聚合端口21未处于收集和分发状态的情况下,所述第一网络设备将聚合端口11的mux机切换为protect_waiting状态。从而,确保在mux机进入protect_waiting状态后,启动对所述第二聚合端口从未处于收集和分发状态到处于收集和分发状态的检测。

在s1002中,进一步可选的,所述方法还包括s10021和s10022。s10021和s10022说明了所述第一网络设备根据所述第三lacpdu报文确定所述第二聚合端口处于同步状态的实现方式。

s10021、所述第一网络设备确定所述第三lacpdu报文包括的第一信息与所述第一网络设备存储所述第一聚合端口的第二信息匹配,所述第一信息包括partner_port、partner_port_priority、partner_system、partner_system_priority、partner_key和partner_state.aggregation,所述第二信息包括actor_port_number、actor_port_priority、actor_system、actor_system_priority、actor_oper_port_key和actor_oper_port_state.aggregation。

s10022、所述第一网络设备确定所述第三lacpdu报文包括的本端状态同步actor_state.synchronization处于同步状态。

所述第一网络设备根据所述第三lacpdu报文确定所述聚合端口21是否处于同步状态。具体的,所述第三lacpdu报文中的所述第一信息包括:对端端口(英文:partner_port)、对端端口优先级(英文:partner_port_priority)、对端系统(英文:partner_system)、对端系统优先级(英文:partner_system_priority)、对端关键字(英文:partner_key)和对端状态聚合(英文:partner_state.aggregation)。所述第一网络设备确定上述信息与所述第一网络设备存储的所述第二信息,即本端操作参数值(英文:correspondingoperationalparametervaluesfortheactor)是否匹配。所述第一网络设备存储的本端操作参数值包括:本端端口号(英文:actor_port_number)、本端端口优先级(英文:actor_port_priority)、本端系统(英文:actor_system)、本端系统优先级(英文:actor_system_priority)、本端操作端口关键字(英文:actor_oper_port_key)和本端操作端口聚合(英文:actor_oper_port_state.aggregation)。而且,所述第三lacpdu报文中的用于指示所述聚合端口21的状态信息包括本端状态同步(英文:actor_state.synchronization),所述actor_state.synchronization是所述第三lacpdu报文中的actor_state字段的synchronization标志位。所述第一网络设备确定所述第三lacpdu报文中actor_state.synchronization是否被设置为true。其中,上述各个信息的定义可以参见ieee802.1ax中的说明,此处不进行赘述。

其中,可选的,用于确定所述第二网络设备的聚合端口21的同步状态的信息和用于确定所述聚合端口21的收集和分发状态的信息可以被携带在不同的第三lacpdu报文中。例如,用于确定所述聚合端口21的同步状态的信息被携带在一个第三lacpdu报文中;用于确定所述聚合端口21的收集和分发状态的信息被携带在另一个第三lacpdu报文中。两个第三lacpdu报文被所述第二网络设备分别发送到所述第一网络设备。

所述第一网络设备确定所述第三lacpdu报文中包括的partner_port、partner_port_priority、partner_system、partner_system_priority、partner_key和partner_state.aggregation与所述第一网络设备存储的actor_port_number、actor_port_priority、actor_system、actor_system_priority、actor_oper_port_key和actor_oper_port_state.aggregation相匹配,并且,所述第一网络设备确定所述第三lacpdu报文中包括的actor_state.synchronization为true,所述第一网络设备确定所述聚合端口21处于同步状态,即所述第一网络设备将partner.sync确定为true。具体的,所述partner.sync被确定为true可以被解释为:所述第一网络设备获知所述聚合端口21处于同步状态(根据actor_state.synchronization=true),并且,所述第一网络设备认可所述聚合端口21处于同步状态(根据上述匹配的结果)。

可选的,所述方法还包括s1003,基于前述s1001中的第三lacpdu报文,以便完成所述第一网络设备将所述第一聚合端口的mux机由attached状态切换为collecting_distributing状态的过程,如图4所示。

s1003、当所述第一网络设备根据所述第三lacpdu报文确定所述第二聚合端口处于同步状态,并且根据所述第三lacpdu报文确定所述第二聚合端口处于收集和分发状态时,所述第一网络设备将所述mux机由所述attached状态切换为所述collecting_distributing状态,并将所述第一聚合端口设置为收集和分发状态。

举例说明,根据s1001,所述第一网络设备接收到所述第三lacpdu报文后,确定所述第三lacpdu报文中包括的partner_port、partner_port_priority、partner_system、partner_system_priority、partner_key和partner_state.aggregation与所述第一网络设备存储的actor_port_number、actor_port_priority、actor_system、actor_system_priority、actor_oper_port_key和actor_oper_port_state.aggregation相匹配,并且,所述第一网络设备确定所述第三lacpdu报文中包括的actor_state.synchronization为true,所述第一网络设备确定所述聚合端口21处于同步状态。所述第一网络设备还确定所述第三lacpdu报文中所述actor_state包括的collecting标志位和distributing标志位为true,从而,所述第一网络设备确定所述聚合端口21处于收集和分发状态。因此,所述第一网络设备可以根据上述确定结果,将所述mux机由所述attached状态切换为所述collecting_distributing状态。

s1003说明了在attached状态中,所述第一网络设备已经确认所述聚合端口21处于收集和分发状态,或者可以认为是,所述聚合端口21为up。因此,所述聚合端口11运行的mux机不再进入protect_waiting状态,而是由attached状态直接切换为collecting_distributing状态。进入collecting_distributing状态后,所述第一网络设备将所述聚合端口11设置为收集和分发状态。也就是说,所述actor.collecting和actor.distributing被确定为true,表示所述聚合端口11处于收集和分发状态。所述聚合端口11被设置为up,聚合链路1进入稳定的转发状态。

在s1003中,可选的,所述第一网络设备将所述single-port_up标志位的值设置为false。这样设置的目的是为了防止mux机中可能存在single-port_up=true的旧信息造成mux机的误操作。

通过上述s1003的实现方式,所述聚合端口11的mux机处于attached状态中,当所述第一网络设备确定所述聚合端口21处于同步状态和所述聚合端口21已经处于收集和分发状态的情况下,所述第一网络设备将所述聚合端口11上运行的mux机切换为collecting_distributing状态。基于上述实现方式,所述第一网络设备在确定所述第二聚合端口处于收集和分发状态时,快速的进入双端口收集和分发的状态,有助于减少业务流量在传输过程中产生的丢包。

可选的,所述方法还包括s1101和s1102,以便完成所述第一网络设备将所述第一聚合端口的mux机由collecting_distributing状态切换为protect_waiting状态的过程,如图4所示。

s1101、所述第一网络设备接收来自所述第二网络设备的第四lacpdu报文,所述第四lacpdu报文用于指示所述第二聚合端口未处于收集和分发状态;

s1102、当所述第一网络设备根据所述第四lacpdu报文确定所述第二聚合端口未处于收集和分发状态时,将所述mux机由所述collecting_distributing状态切换为所述protect_waiting状态。

根据前述实施例的描述,当所述聚合端口11的mux机处于collecting_distributing状态中,所述聚合端口11和所述聚合端口21均为收集和分发状态,聚合链路1的两端均为up,所述第一网络设备和所述第二网络设备经由所述聚合链路1互相转发数据报文。

根据lacp,actor或partner的聚合端口发生状态信息的变化,均会通过lacpdu报文通知对方。假设所述第二网络设备发生异常,导致所述聚合端口21收集状态由收集切换为不收集和所述聚合端口21分发状态由分发切换为不分发。所述第二网络设备向所述第一网络设备发送所述第四lacpdu报文,所述第四lacpdu报文中的actor_state包括collecting标志位和distributing标志位。其中,所述collecting被确定为false,表示所述聚合端口21未处于收集状态。所述distributing被确定为false,表示所述聚合端口21未处于分发状态。所述第一网络设备根据所述第四lacpdu报文携带的所述actor_state字段中的collecting标志位为false,所述第一网络设备确定partner.collecting的值为false。所述第一网络设备根据所述第四lacpdu报文携带的所述actor_state字段中的distributing标志位为false,所述第一网络设备确定partner.distributing的值为false。所述第一网络设备根据partner.collecting=false和partner.distributing=false,将所述mux机由collecting_distributing状态切换为protect_waiting状态。

通过上述s1101和s1102的实现方式,所述聚合端口11的mux机处于collecting_distributing状态中,当所述第一网络设备确定所述聚合端口21未处于收集和分发状态时,所述第一网络设备将聚合端口11的所述mux机由collecting_distributing状态切换为protect_waiting状态。基于上述实现方式,当所述第一网络设备收到指示所述第二聚合端口状态为未处于收集和分发状态的第四lacpdu报文后,及时将mux机切换为protect_waiting状态,有助于减少业务流量在传输过程中产生的丢包。

可选的,所述方法还包括s1201,以便完成所述第一网络设备将所述第一聚合端口的mux机由protect_waiting状态切换为attached状态的过程,如图4所示。

s1201、所述第一网络设备确定以下条件中至少一个条件成立时,将所述mux机由所述protect_waiting状态切换为所述attached状态:所述第一网络设备确定所述第一聚合端口处于不选中状态;所述第一网络设备确定所述第一聚合端口处于备用状态;和,所述第一网络设备接收来自所述第二网络设备的第五lacpdu报文,并根据所述第五lacpdu报文确定所述第二聚合端口未处于同步状态。

举例说明,当所述聚合端口11的mux机处于protect_waiting状态中,所述聚合端口11可能发生状态变化。例如,所述聚合端口11变更为不选择聚合器1,所述第一网络设备将聚合端口11的选中状态切换为unselected。又例如,所述第一网络设备的聚合端口11变更为选择聚合器1,但聚合端口11不使能聚合功能,所述第一网络设备将聚合端口11的选中状态切换为standby。基于所述聚合端口11处于unselected状态或standby状态,所述第一网络设备将所述聚合端口11的mux机由protect_waiting状态切换为attached状态。其中,所述unselected状态可以由selectionlogic进行触发,也可以由rxmachine进行触发;所述standby状态可以由selectionlogic进行触发。

当所述聚合端口11运行的mux机处于protect_waiting状态中,所述第一网络设备还可能接收来自所述第二网络设备的第五lacpdu报文,所述第五lacpdu报文被用于确定所述聚合端口21是否处于同步状态。所述第一网络设备根据所述第五lacpdu报文确定所述第二网络设备的聚合端口21未处于同步状态。其中,所述第一网络设备根据所述第五lacpdu报文确定所述第二网络设备的聚合端口21未处于同步状态的实现方式可以参见前述s10021和s10022的相应描述,此处不进行赘述。基于聚合端口21未处于同步状态,所述第一网络设备将所述聚合端口11的mux机由protect_waiting状态切换为attached状态。

可选的,所述方法还包括s1301,以便完成所述第一网络设备将mux机由collecting_distributing状态切换为attached状态的过程,如图4所示。

s1301、所述第一网络设备确定以下条件中至少一个条件成立时,将所述第一聚合接口的所述mux机由所述collecting_distributing状态切换为所述attached状态:所述第一网络设备确定所述第一聚合端口处于不选中状态;所述第一网络设备确定所述第一聚合端口处于备用状态;和,所述第一网络设备接收来自所述第二网络设备的第五lacpdu报文,并根据所述第五lacpdu报文确定所述第二聚合端口未处于同步状态。

所述第一网络设备根据触发条件,将所述聚合端口11的mux机由collecting_distributing状态切换为attached状态的实现方式可以参见前述s1201的相应描述,此处不进行赘述。

可选的,在s1301后,所述方法还包括:

s1302、所述mux机在attached状态中,所述第一网络设备停止所述定时器。

在protect_waiting状态中,所述第一网络设备启动了所述定时器。所述第一网络设备根据上述触发条件将所述mux机由所述protect_waiting状态切换为所述attached状态后,所述定时器仍然在计时。在attached状态中,为了防止所述定时器超时导致single-port_up=true,所述第一网络设备停止所述定时器的计时。

图5为本申请实施例的第一网络设备1000的结构示意图。图5所示的第一网络设备1000可以执行上述实施例的方法中第一网络设备执行的相应步骤。所述第一网络设备1000运行有lacp,所述第一网络设备1000的第一聚合端口经由聚合链路与所述第二网络设备的第二聚合端口连接。如图5所示,所述第一网络设备1000包括处理单元1002和发送单元1004。

所述处理单元1002,用于在所述第一聚合端口的mux机中设置protect_waiting状态,所述protect_waiting状态用于标识所述第一聚合端口未处于收集和分发状态,但向其他网络设备通告的所述第一聚合端口的状态为收集和分发状态;

所述处理单元1002还用于当所述mux机处于所述protect_waiting状态时,确定所述第一聚合端口未处于收集和分发状态;

所述发送单元1004,用于向所述二网络设备发送第一lacpdu报文,所述第一lacpud报文用于通告所述第二网络设备所述第一聚合端口处于收集和分发状态,并触发所述第二网络设备将所述第二聚合端口设置为收集和分发状态;

所述处理单元1002还用于确定是否接收到来自所述第二网络设备的第二lacpdu报文,所述第二lacpdu报文用于指示所述第二聚合端口处于收集和分发状态;

当所述处理单元1002确定接收到所述第二lacpdu报文,所述处理单元1002还用于将所述mux机由所述protect_waiting状态切换为collecting_distributing状态,并将所述第一聚合端口设置为收集和分发状态。

可选的,在所述第一聚合端口的mux机处于protect_waiting状态之前,所述mux机处于附接attached状态,所述第一网络设备还包括接收单元。所述接收单元用于接收来自所述第二网络设备的第三lacpdu报文。当所述处理单元1002确定所述第一聚合端口处于选中状态,并且根据所述第三lacpdu报文确定所述第二聚合端口处于同步状态,以及根据所述第三lacpdu报文确定所述第二聚合端口未处于收集和分发状态时,所述处理单元1002还用于将所述mux机由所述attached状态切换为所述protect_waiting状态。

可选的,所述处理单元1002根据所述第三lacpdu报文确定所述第二聚合端口处于同步状态,具体包括:所述处理单元1002还用于确定所述第三lacpdu报文包括的第一信息与所述第一网络设备存储所述第一聚合端口的第二信息匹配,所述第一信息包括partner_port、partner_port_priority、partner_system、partner_system_priority、partner_key和partner_state.aggregation,所述第二信息包括actor_port_number、actor_port_priority、actor_system、actor_system_priority、actor_oper_port_key和actor_oper_port_state.aggregation。所述处理单元1002还用于确定所述第三lacpdu报文包括的actor_state.synchronization处于同步状态。

可选的,当所述处理单元1002根据所述第三lacpdu报文确定所述第二聚合端口处于同步状态,并且根据所述第三lacpdu报文确定所述第二聚合端口处于收集和分发状态时,所述处理单元1002还用于将所述mux机由所述attached状态切换为所述collecting_distributing状态,并将所述第一聚合端口设置为收集和分发状态。

可选的,所述接收单元还用于接收来自所述第二网络设备的第四lacpdu报文,所述第四lacpdu报文用于指示所述第二聚合端口未处于收集和分发状态。当所述处理单元1002根据所述第四lacpdu报文确定所述第二聚合端口未处于收集和分发状态时,所述处理单元1002还用于将所述mux机由所述collecting_distributing状态切换为所述protect_waiting状态。

可选的,所述处理单元1002确定以下条件中至少一个条件成立时,所述处理单元1002还用于将所述mux机由所述protect_waiting状态切换为所述attached状态:所述处理单元1002还用于确定所述第一聚合端口处于不选中状态;所述处理单元1002还用于确定所述第一聚合端口处于备用状态;和,所述处理单元1002还用于根据接收到的来自所述第二网络设备的第五lacpdu报文确定所述第二聚合端口未处于同步状态。

可选的,在所述第一聚合端口的mux机处于protect_waiting状态中,所述处理单元1002还用于启动定时器。直到所述定时器超时,所述处理单元1002确定未接收到来自所述第二网络设备的所述第二lacpdu报文,所述处理单元1002还用于将所述mux机由所述protect_waiting状态切换为attached状态。

可选的,当所述mux机处于protect_waiting状态,并且所述定时器超时时,所述处理单元1002还用于将所述聚合链路设置为单端口up,所述单端口up用于指示所述聚合链路的一端聚合端口处于收集和分发状态,另一端聚合端口未处于收集和分发状态。

可选的,所述定时器的时长大于等于3秒,并且所述定时器的时长小于等于90秒。

图5所示的第一网络设备可以执行上述实施例的方法中第一网络设备执行的相应步骤。应用在运行lacp的网络中,实现mux机中的聚合链路的两端聚合端口状态的检测和处理,有助于减少业务流量在传输过程中产生的丢包。应当理解,所述图5中的结构同样适用于所述图1中的第二网络设备。

图6为本申请实施例的第一网络设备1100的硬件结构示意图。图6所示的第一网络设备1100可以执行上述实施例的方法中第一网络设备执行的相应步骤。

如图6所示,所述第一网络设备1100包括处理器1101、存储器1102、接口1103和总线1104。其中接口1103可以通过无线或有线的方式实现,具体来讲可以是网卡。上述处理器1101、存储器1102和接口1103通过总线1104连接。

所述接口1103具体可以包括发送器和接收器,用于第一网络设备与上述实施例中的第二网络设备之间收发信息。作为举例,所述接口1103用于支持与所述第二网络设备收发lacpdu报文。所述处理器1101用于执行上述实施例中由第一网络设备进行的处理。例如,所述处理器1101用于设置所述第一聚合端口的收集和分发状态;还用于确定所述第一聚合端口是否处于收集和分发状态;还用于启动或停止定时器;还用于确定是否接收到第二网络设备发送的lacpdu报文;还用于实现mux机各个状态之间的切换;和/或用于本文所描述的技术的其他过程。作为举例,所述处理器1101用于支持图3中的过程s102、s104、s106和s108。存储器1102包括操作系统11021和应用程序11022,用于存储程序、代码或指令,当处理器或硬件设备执行这些程序、代码或指令时可以完成方法实施例中涉及第一网络设备的处理过程。可选的,所述存储器1102可以包括只读存储器(英文:read-onlymemory,缩写:rom)和随机存取存储器(英文:randomaccessmemory,缩写:ram)。其中,所述rom包括基本输入/输出系统(英文:basicinput/outputsystem,缩写:bios)或嵌入式系统;所述ram包括应用程序和操作系统。当需要运行第一网络设备1100时,通过固化在rom中的bios或者嵌入式系统中的bootloader引导系统进行启动,引导第一网络设备1100进入正常运行状态。在第一网络设备1100进入正常运行状态后,运行在ram中的应用程序和操作系统,从而,完成方法实施例中涉及第一网络设备的处理过程。

可以理解的是,图6仅仅示出了第一网络设备1100的简化设计。在实际应用中,第一网络设备可以包含任意数量的接口,处理器或者存储器。另外,本实施例仅以第一网络设备为例进行说明,应当理解,第二网络设备,或者更多的网络设备具有与所述第一网络设备相同的功能,此处不再一一赘述。

图7为本申请实施例的另第一网络设备1200的硬件结构示意图。图7所示的第一网络设备1200可以执行上述实施例的方法中第一网络设备执行的相应步骤。

如图7所述,第一网络设备1200包括:主控板1210、接口板1230、交换网板1220和接口板1240。主控板1210用于完成系统管理、设备维护、协议处理等功能。交换网板1220用于完成各接口板(接口板也称为线卡或业务板)之间的数据交换。接口板1230和1240用于提供各种业务接口(例如,pos接口、ge接口、atm接口等),并实现数据包的转发。主控板1210、接口板1230和1240,以及交换网板1220之间通过系统总线与系统背板相连实现互通。接口板1230上的中央处理器1231用于对接口板进行控制管理并与主控板上的中央处理器进行通信。

接口板1230上的物理接口卡1233接收来自所述第二网络设备的lacpdu报文,并且,经由接口板1230上的中央处理器1231向主控板1210上的中央处理器1211上送所述lacpdu报文。主控板1210上的中央处理器1211用于获取所述lacpdu报文。

中央处理器1211还用于在所述第一聚合端口的mux机中设置protect_waiting状态,所述protect_waiting状态用于标识所述第一聚合端口未处于收集和分发状态,但向其他网络设备通告的所述第一聚合端口的状态为收集和分发状态。所述中央处理器1211还用于当所述mux机处于所述protect_waiting状态时,确定所述第一聚合端口未处于收集和分发状态。所述中央处理器1211还用于控制所述接口板1230向所述二网络设备发送第一lacpdu报文,所述第一lacpud报文用于通告所述第二网络设备所述第一聚合端口处于收集和分发状态,并触发所述第二网络设备将所述第二聚合端口设置为收集和分发状态。所述中央处理器1211还用于确定是否接收到来自所述第二网络设备的第二lacpdu报文,所述第二lacpdu报文用于指示所述第二聚合端口处于收集和分发状态。当所述中央处理器1211确定接收到所述第二lacpdu报文,所述中央处理器1211还用于将所述mux机由所述protect_waiting状态切换为收集分发collecting_distributing状态,并将所述第一聚合端口设置为收集和分发状态。

中央处理器1211还用于生成lacpdu报文。中央处理器1211将生成的lacpdu报文由经由接口板1230上的中央处理器1231向物理接口卡1233发送。接口板1230上的物理接口卡1233向所述第二网络设备发送所述lacpdu报文。

接口板1230上的转发表项存储器1234用于保存转发表项。接口板1230上的中央处理器1231用于控制网络存储器1232获取转发表项存储器1234中的转发表项,并且,中央处理器1231用于控制网络存储器1232经由物理接口卡1233完成流量的接收和发送。

应理解,本发明实施例中接口板1240上的操作与所述接口板1230的操作一致,为了简洁,不再赘述。应理解,本实施例的第一网络设备1200可对应于上述方法实施例所具有的功能和/或所实施的各种步骤,在此不再赘述。另外,本实施例仅以第一网络设备为例进行说明,应当理解,第二网络设备,或者更多的网络设备具有与所述第一网络设备相同的功能,此处不再一一赘述。

此外,需要说明的是,主控板可能有一块或多块,有多块的时候可以包括主用主控板和备用主控板。接口板可能有一块或多块,第一网络设备的数据处理能力越强,提供的接口板越多。接口板上的物理接口卡也可以有一块或多块。交换网板可能没有,也可能有一块或多块,有多块的时候可以共同实现负荷分担冗余备份。在集中式转发架构下,第一网络设备可以不需要交换网板,接口板承担整个系统的业务数据的处理功能。在分布式转发架构下,第一网络设备可以有至少一块交换网板,通过交换网板实现多块接口板之间的数据交换,提供大容量的数据交换和处理能力。所以,分布式架构的第一网络设备的数据接入和处理能力要大于集中式架构的设备。具体采用哪种架构,取决于具体的组网部署场景,此处不做任何限定。

图8为本申请实施例的第一网络系统1300的硬件结构示意图。图8所示的第一网络系统1300可以执行上述实施例的方法中第一网络设备执行的相应步骤。

第一网络系统1300的这种产品形态适用于基于控制与转发分离的网络架构(例如,软件定义网络(英文:softwaredefinednetwork,缩写:sdn))。在sdn中,如图7所示的第一网络设备1200的主控板1210从设备中分离出来,形成新的独立的物理设备(即如图8所示的控制器1210a),剩下的形成另一独立的物理设备(即如图8所示的第一转发设备1200a)。控制器1210a与第一转发设备1200a通过控制通道协议实现交互。控制通道协议可以是开放流(英文:openflow)协议、路径计算通信协议(英文:pathcomputationelementcommunicationprotocol,缩写:pcep)、bgp、路由系统接口(英文:interfacetotheroutingsystem,缩写:i2rs)等。也就是说,与上述图7所对应的实施例相比,本实施中的第一网络系统1300包括分离出去的控制器1210a和第一转发设备1200a。

控制器1210a可以是基于通用的物理服务器实现或者是专用的硬件结构实现,在一个设计示例中,所述控制器包括接收器、处理器、发送器、ram、rom以及总线(图中未示出)。其中,处理器通过总线分别耦接接收器、发送器、ram以及rom。其中,当需要运行控制器时,通过固化在rom中的bios或者嵌入式系统中的bootloader引导系统进行启动,引导控制器进入正常运行状态。在控制器进入正常运行状态后,在ram中运行应用程序和操作系统,使得该处理器执行上述图7中主控板1210的所有功能和步骤。

第一转发设备1200a可以是基于专用的硬件结构实现,其功能和结构与上述图7中的接口板1230、接口板1240和交换网板1220的功能和结构保持一致,执行相应的功能和步骤。也可以是基于通用的物理服务器和网络功能虚拟化(英文:netwrkfunctionvirtulization,缩写:nfv)技术实现的虚拟第一转发设备,所述虚拟第一转发设备为虚拟路由器。在虚拟第一转发设备的场景下,上述实体第一转发设备实施例中提到的该第一转发设备包括接口板、交换网板以及处理器在虚拟环境下可以认为是其所基于通用的物理服务器分配给该虚拟第一转发设备所使用的接口资源、网络资源以及处理资源。采用通用物理服务器实施该第一转发设备的功能或步骤,或者采用通用物理服务器并利用nfv技术实施该第一转发设备的功能或步骤具体可以参考图6的实施例。

应理解,本实施例中第一网络系统1300中的控制器1210a和该第一转发设备1200a可以实现方法实施例中的第一网络设备所实施的各种功能、步骤,为了简洁,在此不再赘述。另外,本实施例仅以第一网络设备为例进行说明,应当理解,第二网络设备,或者更多的网络设备具有与所述第一网络设备相同的功能,此处不再一一赘述。

另外,本申请实施例提供了一种计算机存储介质,用于储存为上述第一网络设备所用的计算机软件指令,其包含用于执行上述方法实施例所设计的程序。

如图1所示,本申请实施例还包括一种实现mux机的网络系统,所述网络系统包括第一网络设备和第二网络设备,所述第一网络设备和/或第二网络设备为前述图5或图6或图7;或者所述第一网络设备和/或第二网络设备为前述图8中的第一网络系统。

结合本申请公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、移动硬盘、cd-rom或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于asic中。另外,该asic可以位于用户设备中。当然,处理器和存储介质也可以作为分立组件存在于用户设备中。

本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。

以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明。所应理解的是,以上所述仅为本申请的具体实施方式而已。

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