具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,下面结合附图,并举实施例,对本发明的技术方案进行详细说明。
本发明中,为了实现隧道快速转发,当本端设备与远端设备建立隧道时,CPU转发平面会收集隧道信息,生成隧道的隧道口对应的隧道表项,并将生成的隧道口对应的隧道表项下发到硬件转发平面。这里,所述隧道表项中可以包括隧道模式,隧道传输协议、隧道乘客协议、隧道的源IP地址和目的IP地址等信息。根据隧道口对应的隧道表项,可以对报文进行相应的封装和解封装。
当需要通过隧道传输报文时,在隧道的两端,分别需要对报文进行隧道封装和解隧道封装,下面分别结合图2、图3对本发明实施例隧道报文封装过程进行说明,结合图4、图5对本发明实施例实现隧道报文解封装过程进行说明。
图2是本发明实施例隧道报文封装的过程示意图,如图2所示,当在入接口接收到报文时,首先判断是否存在报文的关键字段对应的关联于报文的入接口的上行流表,如果否,则说明该报文是首包报文,将报文上送到CPU转发平面进行封装和转发处理,CPU转发平面在处理报文的过程中会生成相应的上行流表和下行流表(若没有下行业务,则不生成下行流表),将处理过程中生成的上行流表和下行流表下发到硬件转发平面,如果是,则说明该报文是后续报文,硬件转发平面根据CPU转发平面下发的隧道口对应的隧道表项,以及在处理首包报文时下发的上行流表、下行流表,通过二次查表的方式对报文进行封装和转发处理。
图3是本发明实施例隧道报文转发方法的流程示意图,对应于图2所示的隧道报文封装过程,包括以下步骤:
步骤301、接收需要进行隧道封装的报文。
步骤302、不存在报文的关键字段对应的关联于报文的入接口的上行流表,上送到CPU,CPU转发平面建立报文的关键字段对应的关联于报文的入接口的上行流表,确定报文的隧道出接口,在该上行流表中保存报文的隧道出接口信息,并将该上行流表下发到硬件转发平面;根据报文的隧道出接口信息封装报文,将报文的隧道出接口作为封装报文的入接口,建立封装报文的关键字段对应的关联于封装报文的入接口的上行流表,确定封装报文的出接口,在该上行流表中保存封装报文的出接口信息,并将该上行流表下发到硬件转发平面,若封装报文的出接口是物理出接口,则将封装报文从该物理出接口发送出去,若封装报文的出接口是隧道出接口,则CPU转发平面再一次对封装报文进行封装和转发处理。
本步骤中,由于不存在报文的关键字段对应的关联于报文的入接口的上行流表,说明接收到的首包报文,需要由CPU转发平面对报文进行封装和转发处理。CPU转发平面可以通过查找路由表确定报文的隧道出接口,以及确定封装报文隧道出接口或物理出接口。
在报文的关键字段对应的关联于报文的入接口的上行流表中保存的隧道出接口信息可以是隧道出接口的索引,隧道口的索引与隧道口对应的转发表项一一对应。
在对报文进行封装得到封装报文后,若封装报文的出接口是物理出接口,则在封装报文的关键字段对应的关联于封装报文的入接口的上行流表中保存的出接口信息可以是保存了报文的出接口相关信息的fib表的地址,根据该fib表地址可以确定fib表,进而可以根据该fib表中的出接口相关信息确定报文的出接口。
在对报文进行封装得到封装报文后,若封装报文的出接口是隧道出接口,则在封装报文的关键字段对应的关联于封装报文的入接口的上行流表中保存的出接口信息可以是封装报文的隧道出接口的索引。另外,当封装报文的出接口仍然是隧道出接口时,说明是报文对应的隧道是嵌套隧道,还需要再次对封装报文进行封装和转发处理,直到经多次封装后的报文的出接口为物理出接口。
对于封装报文来说,报文的隧道出接口也就是封装报文的入接口,因此,可以将封装报文看作是以该隧道出接口为入接口的新接收的报文,CPU转发平面对报文执行封装和转发处理具体包括:根据报文的隧道出接口信息封装报文,将报文的隧道出接口作为封装报文的入接口,建立封装报文的关键字段对应的关联于封装报文的入接口的上行流表,确定封装报文的出接口,在该上行流表中保存封装报文的出接口信息,并将该上行流表下发到硬件转发平面,若封装报文的出接口是物理出接口,则将封装报文从该物理出接口发送出去,若封装报文的出接口是隧道出接口,则CPU转发平面再一次对封装报文进行封装和转发处理。
步骤303、存在报文的关键字段对应的关联于报文的入接口的上行流表,硬件转发平面根据报文的关键字段对应的关联于报文的入接口的上行流表确定报文的隧道出接口,根据报文的隧道出接口对应的隧道表项封装报文,将报文的隧道出接口作为封装报文的入接口,根据封装报文的关键字段对应的关联于封装报文的入接口的上行流表确定封装报文的出接口,若封装报文的出接口是物理出接口,则将封装报文从该物理出接口发送出去,若封装报文的出接口是隧道出接口,则硬件转发平面再一次对封装报文进行封装和转发处理。
本步骤中,由于存在报文的关键字段对应的关联于报文的入接口的上行流表,说明接收到的后续报文,只需硬件转发平面根据CPU转发平面在处理对应的首包报文时下发的上行流表和下行流表对报文进行封装和转发处理。
这里,由于报文的关键字段对应的关联于报文的入接口的上行流表保存有报文的隧道出接口信息,因此可以确定隧道出接口,进而可以根据隧道出接口对应的隧道表项封装报文。封装报文后,可以将报文的隧道出接口作为封装报文的入接口,继续根据封装报文的关键字段对应的关联于封装报文的入接口的上行流表确定封装报文的出接口,当封装报文的出接口是物理出接口时,可以从物理出接口转发报文,当封装报文的出接口是隧道出接口时,说明是报文对应的隧道是嵌套隧道,还需要再次对封装报文进行封装和转发处理,直到经多次封装后的报文的出接口为物理出接口。
对于封装报文来说,报文的隧道出接口也就是封装报文的入接口,因此,可以将封装报文看作是以该隧道出接口为入接口的新接收的报文,硬件转发平面对报文执行封装和转发处理具体包括:根据报文的隧道出接口对应的隧道表项封装报文,将报文的隧道出接口作为封装报文的入接口,根据封装报文的关键字段对应的关联于封装报文的入接口的上行流表确定封装报文的出接口,若封装报文的出接口是物理出接口,则将封装报文从该物理出接口发送出去,若封装报文的出接口是隧道出接口,则硬件转发平面再一次对封装报文进行封装和转发处理。
由上述对报文的处理和转发过程中可以看出,如果用于传输报文的隧道是非嵌套隧道,则只需对报文进行一次隧道封装;如果用于传输报文的隧道是嵌套隧道,则需要对报文进行多次隧道封装,每次封装报文后,均会将封装后的报文作为以封装前的报文的隧道出接口为入接口的新接收到的报文,再次对新接收到的报文进行封装和转发处理。
在实际应用中,报文的封装和转发处理过程会受各种因素影响,例如,业务变化,可能会导致报文的封装和转发处理过程发生变化。这种情况下,CPU转发平面会对相应受到影响的流表进行失效处理(例如置位),若硬件转发平面根据报文的关键字段查找到被置位的流表,则可确定该流表失效,这时,硬件转发平面需要将报文上送到CPU转发平面进行处理。
因此,在步骤303中,所述将报文的隧道出接口作为封装报文的入接口之后,根据封装报文的关键字段对应的关联于封装报文的入接口的上行流表确定封装报文的出接口之前,进一步包括:判断是否存在封装报文的关键字段对应的关联于封装报文的入接口的上行流表,如果是,则根据封装报文的关键字段对应的关联于封装报文的入接口的上行流表确定封装报文的出接口并执行后续动作,否则,将报文上送到CPU转发平面,由CPU转发平面确定封装报文的出接口,建立封装报文的关键字段对应的关联于封装报文的入接口的上行流表,在该上行流表中保存封装报文的出接口信息,并将该上行流表下发到硬件转发平面,若封装报文的出接口是物理出接口,则将封装报文从该物理出接口发送出去,若封装报文的出接口是隧道出接口,则CPU转发平面对封装报文进行后续的封装和转发处理。这里,CPU转发平面对封装报文进行后续的封装和转发处理与步骤302中CPU转发平面对封装报文的封装和转发处理的方法相同。
图3所示本发明实施例中,如果报文的入接口上可能会配置有上行业务,这种情况下,还需要执行报文的入接口上配置的上行业务。
因此,CPU转发平面在建立报文的关键字段对应的关联于报文的入接口的上行流表时,还可以进一步包括:如果报文的入接口上配置有上行业务,则执行报文的入接口上配置的上行业务,并在该上行流表中保存报文的入接口上配置的上行业务。相应地,硬件转发平面在根据报文的关键字段对应的关联于报文的入接口的上行流表确定报文的出接口之后,还可以进一步包括:如果该上行流表中保存有报文的入接口上配置的上行业务,则执行该上行流表中保存的报文的入接口上配置的上行业务。
另外,将报文进行隧道封装得到封装报文后,对于封装报文来说,报文的隧道出接口就是封装报文的入接口,如果封装报文的入接口上配置有上行业务,则还需要执行封装报文的入接口上配置的上行业务。
因此,CPU转发平面在建立封装报文的关键字段对应的关联于封装报文的入接口的上行流表时,还可以进一步包括:如果封装报文的入接口上配置有上行业务,则执行封装报文的入接口上配置的上行业务,并在该上行流表中保存封装报文的入接口上配置的上行业务。相应地,硬件转发平面在根据封装报文的关键字段对应的关联于封装报文的入接口的上行流表确定封装报文的出接口之后,还可以进一步包括:如果该上行流表中保存有封装报文的入接口上配置的上行业务,则执行该上行流表中保存的封装报文的入接口上配置的上行业务。
此外,确定报文的出接口后,根据报文的出接口对报文进行下一步的处理之前,如果报文的出接口上配置有下行业务,则还需要执行报文的出接口上配置的下行业务,如果是CPU转发平面处理报文,则还需要建立相应的下行流表,以保存该下行业务。这里,报文的出接口既可以是物理出接口,也可以是隧道出接口。
具体来说,CPU转发平面在确定报文的出接口是物理出接口之后,将报文从该物理出接口转发出去之前,还可以进一步包括:如果该物理出接口上配置有下行业务,则执行该物理出接口上配置的下行业务,建立报文的关键字段对应的关联于该物理出接口的下行流表,并在该下行流表中保存该物理出接口上配置的下行业务,将该下行流表下发到硬件转发平面。相应地,硬件转发平面在确定报文的出接口是物理出接口之后,将报文从该物理出接口转发出去之前,还可以进一步包括:如果该物理出接口配置有下行业务,则执行报文的关键字段对应的关联于该物理出接口的下行流表中保存的该物理出接口上配置的下行业务。
同样的道理,CPU转发平面在确定报文的出接口是隧道出接口之后,根据该隧道出接口信息封装报文之前,还可以进一步包括:如果该隧道出接口上配置有下行业务,则执行该隧道出接口上配置的下行业务,建立报文的关键字段对应的关联于该隧道出接口的下行流表,在该下行流表中保存该隧道出接口上配置的下行业务,将该下行流表下发到硬件转发平面。相应地,硬件转发平面确定报文的隧道出接口之后,根据该隧道出接口对应的隧道表项封装报文之前,进一步包括:如果该隧道出接口上配置有下行业务,则执行报文的关键字段对应的关联于该隧道出接口的下行流表中保存的该隧道出接口上配置的下行业务。
当相应接口配置有业务时,CPU转发平面对报文执行封装和转发处理以及硬件转发平面对报文执行封装和转发处理进一步包括与业务相对应的内容。
以上结合图2、图3对本发明实施例隧道报文封装过程进行了详细说明,下面结合图4、图5对本发明实施例实现隧道报文解封装过程进行详细说明。
图4是本发明实施例实现隧道报文解封装的过程示意图,如图4所示,当在入接口接收到封装报文时,首先判断是否存在封装报文的关键字段对应的关联于封装报文的入接口的上行流表,如果否,则说明该报文是首包报文,将报文上送到CPU转发平面进行解封装和转发处理,CPU转发平面在处理报文的过程中会生成相应的上行流表和下行流表(如果出接口没有业务,则不生成下行流表),并将处理过程中生成的上行流表和下行流表下发到硬件转发平面,如果是,则说明该报文是后续报文,硬件转发平面根据CPU转发平面下发的隧道口对应的隧道表项,以及在处理首包报文时下发的对应的上行流表、下行流表,通过二次查表的方式对报文进行解封装和转发处理。
图5是本发明实施例实现隧道报文接收方法的流程示意图,对应于图4所示的报文解封装过程,包括以下步骤:
步骤501、接收需要进行解隧道封装的封装报文。
步骤502、不存在封装报文的关键字段对应的关联于封装报文的入接口的上行流表,则CPU转发平面解析封装报文绑定的隧道口,建立封装报文的关键字段对应的关联于封装报文的入接口的上行流表,在该上行流表中保存封装报文绑定的隧道口信息并设置隧道标志,并将该上行流表下发到硬件转发平面,解封装报文,将封装报文绑定的隧道口作为报文的入接口,解析并判断报文是否绑定了隧道口,若是,则再一次对报文执行解封装和转发处理,若否,则建立报文的关键字段对应的关联于报文的入接口的上行流表,确定报文的出接口,在该上行流表中保存报文的出接口信息,并将该上行流表下发到硬件转发平面,根据报文的出接口转发报文。
本步骤中,由于不存在封装报文的关键字段对应的关联于封装报文的入接口的上行流表,说明接收到的是首包报文,需要由CPU转发平面对报文进行解封装和转发处理。CPU转发平面可以通过解析封装报文的内容,从而确定封装报文绑定的隧道口。
CPU转发平面在封装报文的关键字段对应的关联于封装报文的入接口的上行流表中保存有隧道口信息以及隧道标志,从而使得硬件转发平面可以在对后续的封装报文进行处理时,根据该上行流表中的隧道标志确定后续封装报文绑定了隧道口,并且可以根据该上行流表中的隧道口信息确定后续封装报文绑定的隧道口。这里,所述的隧道口信息可以是隧道口的索引,隧道口的索引与隧道口对应的转发表项一一对应。
对封装报文进行解封装得到报文(也即解封装的报文)后,可以将封装报文绑定的隧道口作为报文的入接口,继续解析报文的内容,判断报文是否绑定了隧道口,如果没有绑定隧道口,则说明本次解封装后得到的报文是已经完全解封装了的报文,可以确定报文的出接口并根据报文的出接口转发报文,并且在根据报文的出接口转发报文之前,还需要建立报文的关键字段对应的关联于报文的入接口的上行流表,用以保存报文的出接口;如果绑定了隧道口,则说明本次解封装后得到的报文仍然是封装报文,因此,还需要再次对解封装的报文进行解封装和转发处理,直到经过多次解封装后的报文不再绑定有隧道口。
对于解封装后得到的报文来说,封装报文绑定的隧道口也就是报文的入接口,如果报文上也绑定了隧道口,则可以将报文看作是以封装报文绑定的隧道口为入接口的新接收的封装报文。CPU转发平面对封装报文进行解封装和转发处理具体包括:解析封装报文绑定的隧道口,建立封装报文的关键字段对应的关联于封装报文的入接口的上行流表,在该上行流表中保存封装报文绑定的隧道口信息并设置隧道标志,并将该上行流表下发到硬件转发平面,解封装报文,将封装报文绑定的隧道口作为报文的入接口,解析并判断报文是否绑定了隧道口,若是,则再一次对报文执行解封装和转发处理,若否,建立报文的关键字段对应的关联于报文的入接口的上行流表,则确定报文的出接口,在该上行流表中保存报文的出接口信息,并将该上行流表下发到硬件转发平面,根据报文的出接口转发报文。
需要说明的是,本步骤中,若确定对封装报文解隧道封装后得到的报文未绑定隧道口,则可以确定报文的出接口,并根据报文的出接口转发报文。这里,确定的报文的出接口可能是物理出接口,也可能是隧道出接口。如果报文的出接口是物理出接口,则可以从物理出接口转发报文,如果报文的出接口是隧道出接口,则需要按照图3所示本发明实施例中步骤302的处理过程对该报文进行封装和转发处理。这种先解封装再加封装的情况,实际上是报文从一个隧道传输到当前设备,由当前设备将报文解隧道封装后,再将解封装后报文重新进行封装后从另一个隧道转发。
步骤503、存在封装报文的关键字段对应的关联于封装报文的入接口的上行流表,则硬件转发平面根据封装报文的关键字段对应的关联于封装报文的入接口的上行流表中的隧道口信息确定封装报文绑定的隧道口,根据封装报文绑定的隧道口对应的隧道表项解封装报文,将封装报文绑定的隧道口作为报文的入接口,根据报文的关键字段对应的关联于报文的入接口的上行流表中的隧道标志判断报文是否绑定了隧道口,若是,则硬件转发平面再一次对报文进行解封装和转发处理,若否,则根据报文的关键字段对应的关联于报文的入接口的上行流表确定报文的出接口,根据报文的出接口转发报文。
本步骤中,由于存在封装报文的关键字段对应的关联于封装报文的入接口的上行流表,说明接收到的后续报文,只需硬件转发平面根据CPU转发平面在处理对应的首包报文时下发的上行流表和下行流表对报文进行解封装和转发处理。
这里,由于封装报文的关键字段对应的关联于封装报文的入接口的上行流表保存有隧道标志,因此可以确定封装报文绑定了隧道口,进而可以根据该上行流表中的隧道口信息确定封装报文绑定的隧道口,进而可以根据隧道口对应的隧道表项解封装报文。
对封装报文进行解封装得到报文(也即解封装的报文)后,可以将封装报文绑定的隧道口作为报文的入接口,继续根据报文的关键字段对应的关联于报文的入接口的上行流表中的隧道标志确定报文是否绑定了隧道口,如果报文未绑定隧道口,则说明本次解封装后得到的报文是已经完全解封装了的报文,可以根据报文的关键字段对应的关联于报文的入接口的上行流表中的出接口信息确定报文的出接口和转发报文;如果报文绑定了隧道口,则说明本次解封装后得到的报文仍然是封装报文,因此,还需要再次对解封装的报文进行解封装和转发处理,直到经过多此解封装后的报文不再绑定隧道口。
对于解封装后得到的报文来说,封装报文绑定的隧道口也就是报文的入接口,如果报文上也绑定了隧道口,则可以将报文看作是以封装报文绑定的隧道口为入接口的新接收的封装报文。硬件转发平面对封装报文(这里的封装报文,既可以是从物理入接口接收到的封装报文,也可以是经解封装后需要再次进行解封装的封装报文)进行解封装和转发处理具体包括:根据封装报文的关键字段对应的关联于封装报文的入接口的上行流表中的隧道口信息确定封装报文绑定的隧道口,根据封装报文绑定的隧道口对应的隧道表项解封装报文,将封装报文绑定的隧道口作为报文的入接口,根据报文的关键字段对应的关联于报文的入接口的上行流表中的隧道标志判断报文是否绑定了隧道口,若是,则再一次对报文进行解封装和转发处理,若否,则根据报文的关键字段对应的关联于报文的入接口的上行流表确定报文的出接口,根据报文的出接口转发报文。
需要说明的是,本步骤中,若确定对封装报文解隧道封装后得到的报文未绑定隧道口,则可以确定报文的出接口,并根据报文的出接口转发报文。这里,确定的报文的出接口可能是物理出接口,也可能是隧道出接口。如果报文的出接口是物理出接口,则可以从物理出接口转发报文,如果报文的出接口是隧道出接口,则需要按照图3所示本发明实施例中步骤303的处理过程对该报文进行封装和转发处理。这种先解封装再加封装的情况,实际上是报文从一个隧道传输到当前设备,由当前设备将报文解隧道封装后,再将解封装后报文重新进行封装后从另一个隧道转发。
由上述对封装报文的解封装处理和转发过程中可以看出,如果用于传输报文的隧道是非嵌套隧道,则只需对报文进行一次解隧道封装;如果用于传输报文的隧道是嵌套隧道,则需要对报文进行多次解隧道封装,每次解封装报文后,均会将解封装后的报文作为以解封装前的报文绑定的隧道口为入接口的新接收到的报文,再次解析并判断新接收到的报文是否绑定隧道口。
图5所示本发明实施例中,基于和图3所示本发明实施例相同的理由,封装报文的转发也会受业务变化等因素影响,会存在硬件转发平面对报文进行处理的过程中查找到被置位的流表,确定该流表失效的情况,这时,硬件转发平面需要将报文上送到CPU转发平面进行处理。
因此,在步骤503中,硬件转发平面在将封装报文绑定的隧道口作为报文的入接口之后,根据报文的关键字段对应的关联于报文的入接口的上行流表中的隧道标志判断报文是否绑定了隧道口之前,还可以进一步包括:判断是否存在报文的关键字段对应的关联于报文的入接口的上行流表,如果是,则根据报文的关键字段对应的关联于报文的入接口的上行流表中的隧道标志判断报文是否绑定了隧道口,否则,将报文上送到CPU转发平面,并由CPU转发平面解析并判断报文是否绑定了隧道口并执行后续动作,若是,则CPU转发平面对报文进行后续的解封装和转发处理,若否,则确定报文的出接口,建立报文的关键字段对应的关联于报文的入接口的上行流表,在该上行流表中保存报文的出接口信息,并将该上行流表下发到硬件转发平面,根据报文的出接口转发报文。这里,CPU转发平面对报文进行后续的解封装和转发处理与步骤502中CPU转发平面对报文的解封装和转发处理的方法相同。
图5所示本发明实施例中,封装报文的入接口上可能会配置有上行业务,这种情况下,还需要执行封装报文的入接口上配置的上行业务。
因此,CPU转发平面在建立封装报文的关键字段对应的关联于封装报文的入接口的上行流表时,还可以进一步包括:如果封装报文的入接口上配置有上行业务,则执行封装报文的入接口上配置的上行业务,并在该上行流表中保存封装报文的入接口上配置的上行业务。相应地,硬件转发平面在根据封装报文的关键字段对应的关联于封装报文的入接口的上行流表中的隧道口信息确定封装报文绑定的隧道口之后,还可以进一步包括:如果该上行流表中保存有封装报文的入接口上配置的上行业务,则执行该上行流表中保存的封装报文的入接口上配置的上行业务。
同样的道理,CPU转发平面在建立报文的关键字段对应的关联于报文的入接口的上行流表时,还可以进一步包括:如果报文的入接口上配置有上行业务,则执行报文的入接口上配置的上行业务,并在该上行流表中保存报文的入接口上配置的上行业务。相应地,硬件转发平面在根据报文的关键字段对应的关联于报文的入接口的上行流表中的隧道口信息确定报文绑定的隧道口之后,进一步包括:如果该上行流表中保存有报文的入接口上配置的上行业务,则执行该上行流表中保存的报文的入接口上配置的上行业务。
此外,当封装报文经过一次或多次解封装后,会得到未绑定隧道口的报文,这时,可以确定该未绑定隧道口的报文的出接口,并根据报文的出接口对报文进行转发处理,在此过程中,如果报文的出接口上配置有下行业务,则还需要执行报文的出接口上配置的下行业务,如果是CPU转发平面处理报文,则还需要建立相应的下行流表,以保存该下行业务。这里,报文的出接口既可以是物理出接口,也可以是隧道出接口。
因此,图5所示本发明实施例中,CPU转发平面在确定报文的出接口之后,根据报文的出接口转发报文之前,还可以进一步包括:如果报文的出接口上配置有下行业务,则执行报文的出接口上配置的下行业务,并建立报文的关键字段对应的关联于报文的出接口的下行流表,在该下行流表中保存报文的出接口上配置的下行业务。相应地,硬件转发平面在根据报文的关键字段对应的关联于报文的入接口的上行流表确定报文的出接口之后,根据报文的出接口转发报文之前,还可以进一步包括:如果报文的出接口上配置有下行业务,则执行报文的关键字段对应的关联于报文的出接口的下行流表中保存的报文的出接口上配置的下行业务。
当相应接口配置有业务时,CPU转发平面对封装报文执行解封装和转发处理以及硬件转发平面对封装报文执行解封装和转发处理进一步包括与业务相对应的内容。
图3和图5所示本发明实施例中,本端设备与远端设备建立的隧道可以是:IPv4 over IPv4隧道、IPv4 over IPv6隧道、IPv6 over IPv4隧道、IPv6 overIPv6隧道、或GRE隧道。当所述隧道是IPv4 over IPv4隧道时,所述隧道模式是IPv4 over IPv4,所述隧道表项中的隧道传输协议是IPv4协议,隧道乘客协议是IPv4协议;当所述隧道是IPv4 over IPv6隧道时,所述隧道模式是IPv4 over IPv6,所述隧道表项中的隧道传输协议是IPv6协议,隧道乘客协议是IPv4协议;当所述隧道是IPv6 over IPv4隧道时,所述隧道模式是IPv6 overIPv4,所述隧道表项中的隧道传输协议是IPv4协议,隧道乘客协议是IPv6协议;当所述隧道是IPv6 over IPv6隧道时,所述隧道模式是IPv6 over IPv6,所述隧道表项中的隧道传输协议是IPv6协议,隧道乘客协议是IPv6协议;当所述隧道是通用路由封装(GRE)隧道时,所述隧道模式是GRE,所述隧道表项中的隧道传输协议是IPv4协议,隧道乘客协议是GRE协议。
图3和图5所示本发明实施例中,报文的关键字段,是指报文的五元组、七元组、或八元组等。
以上对本发明实施例隧道报文转发方法和隧道报文接收方法进行了详细说明,本发明还提供了一种隧道报文转发装置和一种隧道报文接收装置。
参见图6,图6是本发明实施例隧道报文转发装置的结构示意图,该装置包括:第一接收模块601、第一CPU转发模块602、第一硬件转发模块603、第一发送模块604;其中,
第一接收模块601,用于接收需要进行隧道封装的报文,判断是否存在报文的关键字段对应的关联于报文的入接口的上行流表,如果是,则将该报文发送到第一硬件转发模块603,否则,则将该报文上送到第一CPU转发模块602;
第一CPU转发模块602,用于建立与远端设备间隧道时,生成该隧道的隧道口对应的隧道表项并下发到第一硬件转发模块603,所述隧道表项包括隧道传输协议、隧道乘客协议、隧道的源IP和目的IP;用于接收所述第一接收模块601上送的报文,建立报文的关键字段对应的关联于报文的入接口的上行流表,确定报文的隧道出接口,在该上行流表中保存报文的隧道出接口信息,并将该上行流表下发到第一硬件转发模块603;根据报文的隧道出接口信息封装报文,将报文的隧道出接口作为封装报文的入接口,建立封装报文的关键字段对应的关联于封装报文的入接口的上行流表,确定封装报文的出接口,在该上行流表中保存封装报文的出接口信息,并将该上行流表下发到第一硬件转发模块603,若封装报文的出接口是物理出接口,则通知第一发送模块604将封装报文从该物理出接口发送出去,若封装报文的出接口是隧道出接口,则第一CPU转发模块602再一次对封装报文执行封装和转发处理;
第一硬件转发模块603,用于接收所述第一接收模块601发送的报文,则根据报文的关键字段对应的关联于报文的入接口的上行流表确定报文的隧道出接口,根据报文的隧道出接口对应的隧道表项封装报文,将报文的隧道出接口作为封装报文的入接口,根据封装报文的关键字段对应的关联于封装报文的入接口的上行流表确定封装报文的出接口,若封装报文的出接口是物理出接口,则通知第一发送模块604将封装报文从该物理出接口发送出去,若封装报文的出接口是隧道出接口,则第一硬件转发模块603再一次对封装报文执行封装和转发处理。
第一硬件转发模块603在将报文的隧道出接口作为封装报文的入接口之后,根据封装报文的关键字段对应的关联于封装报文的入接口的上行流表确定封装报文的出接口之前,进一步用于:判断是否存在封装报文的关键字段对应的关联于封装报文的入接口的上行流表,如果是,则根据封装报文的关键字段对应的关联于封装报文的入接口的上行流表确定封装报文的出接口并执行后续动作,否则,将该封装报文上送到第一CPU转发模块602;
第一CPU转发模块602,进一步用于:接收第一硬件转发模块603上送的封装报文,建立封装报文的关键字段对应的关联于封装报文的入接口的上行流表,确定封装报文的出接口,在该上行流表中保存封装报文的出接口信息,并将该上行流表下发到第一硬件转发模块603,若封装报文的出接口是物理出接口,则通知第一发送模块604将封装报文从该物理出接口发送出去,若封装报文的出接口是隧道出接口,则第一CPU转发模块602对封装报文执行后续的封装和转发处理。
第一CPU转发模块602在建立报文的关键字段对应的关联于报文的入接口的上行流表时,进一步用于:如果报文的入接口上配置有上行业务,则执行报文的入接口上配置的上行业务,并在该上行流表中保存报文的入接口上配置的上行业务;
第一硬件转发模块603在根据报文的关键字段对应的关联于报文的入接口的上行流表确定报文的出接口时,进一步用于:如果该上行流表中保存有报文的入接口上配置的上行业务,则执行该上行流表中保存的报文的入接口上配置的上行业务;
第一CPU转发模块602在建立封装报文的关键字段对应的关联于封装报文的入接口的上行流表之后,进一步用于:如果封装报文的入接口上配置有上行业务,则执行封装报文的入接口上配置的上行业务,并在该上行流表中保存封装报文的入接口上配置的上行业务;
第一硬件转发模块603在根据封装报文的关键字段对应的关联于封装报文的入接口的上行流表确定封装报文的出接口之后,进一步用于:如果该上行流表中保存有封装报文的入接口上配置的上行业务,则执行该上行流表中保存的封装报文的入接口上配置的上行业务。
第一CPU转发模块602在确定报文的出接口是物理出接口之后,将报文从该物理出接口转发出去之前,进一步用于:如果该物理出接口上配置有下行业务,则执行该物理出接口上配置的下行业务,建立报文的关键字段对应的关联于该物理出接口的下行流表,并在该下行流表中保存该物理出接口上配置的下行业务,将该下行流表下发到第一硬件转发模块603;
第一硬件转发模块603在确定报文的出接口是物理出接口之后,将报文从该物理出接口转发出去之前,进一步用于:如果该物理出接口配置有下行业务,则执行报文的关键字段对应的关联于该物理出接口的下行流表中保存的该物理出接口上配置的下行业务。
第一CPU转发模块602确定报文的出接口是隧道出接口之后,根据该隧道出接口信息封装报文之前,进一步用于:如果该隧道出接口上配置有下行业务,则执行该隧道出接口上配置的下行业务,建立报文的关键字段对应的关联于该隧道出接口的下行流表,在该下行流表中保存该隧道出接口上配置的下行业务,将该下行流表下发到第一硬件转发模块603;
第一硬件转发模块603在确定报文的出接口是隧道出接口之后,根据该隧道出接口对应的隧道表项封装报文之前,进一步用于:如果该隧道出接口上配置有下行业务,则执行报文的关键字段对应的关联于该隧道出接口的下行流表中保存的该隧道出接口上配置的下行业务。
所述与远端设备间建立的隧道是IPv4 over IPv4隧道;
所述第一CPU转发模块602生成的隧道表项中的隧道传输协议是IPv4协议,隧道乘客协议是IPv4协议;
或者,
所述与远端设备间建立的隧道是IPv4 over IPv6隧道;
所述第一CPU转发模块602生成的隧道表项中的隧道传输协议是IPv6协议,隧道乘客协议是IPv4协议;
或者,
所述与远端设备间建立的隧道是IPv6 over IPv4隧道;
所述第一CPU转发模块602生成的隧道表项中的隧道传输协议是IPv4协议,隧道乘客协议是IPv6协议;
或者,
所述与远端设备间建立的隧道是IPv6 over IPv6隧道;
所述第一CPU转发模块602生成的隧道表项中的隧道传输协议是IPv6协议,隧道乘客协议是IPv6协议;
或者,
所述与远端设备间建立的隧道是GRE隧道;
所述第一CPU转发模块602生成的隧道表项中的隧道传输协议是IPv4协议或IPv6协议,乘客协议是GRE协议。
参见图7,图7是本发明实施例隧道报文接收装置的结构示意图,该装置包括:第二接收模块701、第二CPU转发模块702、第二硬件转发模块703、第二发送模块704;其中,
第二接收模块701,用于:接收需要进行解隧道封装的封装报文,判断是否存在封装报文的关键字段对应的关联于封装报文的入接口的上行流表,如果是,则将封装报文发送到第二硬件转发模块703,否则,将封装报文上送到第二CPU转发模块702;
第二CPU转发模块702,用于建立与远端设备间隧道时,生成该隧道的隧道口对应的隧道表项并下发到第二硬件转发模块703,所述隧道表项包括隧道传输协议、隧道乘客协议、隧道的源IP和目的IP;用于接收所述第二接收模块701上送的封装报文,解析封装报文绑定的隧道口,建立封装报文的关键字段对应的关联于封装报文的入接口的上行流表,在该上行流表中保存封装报文绑定的隧道口信息并设置隧道标志,并将该上行流表下发到第二硬件转发模块703,解封装报文,将封装报文绑定的隧道口作为报文的入接口,解析并判断报文是否绑定了隧道口,若是,则第二CPU转发模块702再一次对报文执行解封装和转发处理,若否,则确定报文的出接口,建立报文的关键字段对应的关联于报文的入接口的上行流表,在该上行流表中保存报文的出接口信息,并将该上行流表下发到第二硬件转发模块703,并通知第二发送模块704根据报文的出接口转发报文;
第二硬件转发模块703,用于接收所述第二接收模块701上送的封装报文,根据封装报文的关键字段对应的关联于封装报文的入接口的上行流表中的隧道口信息确定封装报文绑定的隧道口,根据封装报文绑定的隧道口对应的隧道表项解封装报文,将封装报文绑定的隧道口作为报文的入接口,根据报文的关键字段对应的关联于报文的入接口的上行流表中的隧道标志判断报文是否绑定了隧道口,若是,则第二硬件转发平面再一次对报文执行解封装和转发处理,若否,则根据报文的关键字段对应的关联于报文的入接口的上行流表确定报文的出接口,并通知第二发送模块704根据报文的出接口转发报文。
第二硬件转发模块703在将封装报文绑定的隧道口作为报文的入接口之后,根据报文的关键字段对应的关联于报文的入接口的上行流表中的隧道标志判断报文是否绑定了隧道口之前,进一步用于:判断是否存在报文的关键字段对应的关联于报文的入接口的上行流表,如果是,则根据报文的关键字段对应的关联于报文的入接口的上行流表中的隧道标志判断报文是否绑定了隧道口并执行后续动作,否则,将报文上送到CPU转发模块;
第二CPU转发模块702,进一步用于:接收硬件转发模块上送的报文,解析并判断报文是否绑定了隧道口,若是,则第二CPU转发平面对报文执行后续的解封装和转发处理,若否,则确定报文的出接口,建立报文的关键字段对应的关联于报文的入接口的上行流表,在该上行流表中保存报文的出接口信息,并将该上行流表下发到第二硬件转发模块703,并通知第二发送模块704根据报文的出接口转发报文。
第二CPU转发模块702在建立封装报文的关键字段对应的关联于封装报文的入接口的上行流表时,进一步用于:如果封装报文的入接口上配置有上行业务,则执行封装报文的入接口上配置的上行业务,并在该上行流表中保存封装报文的入接口上配置的上行业务;
第二硬件转发模块703在根据封装报文的关键字段对应的关联于封装报文的入接口的上行流表中的隧道口信息确定封装报文绑定的隧道口之后,进一步用于:如果该上行流表中保存有封装报文的入接口上配置的上行业务,则执行该上行流表中保存的封装报文的入接口上配置的上行业务;
第二CPU转发模块702在建立报文的关键字段对应的关联于报文的入接口的上行流表时,进一步用于:如果报文的入接口上配置有上行业务,则执行报文的入接口上配置的上行业务,并在该上行流表中保存报文的入接口上配置的上行业务;
第二硬件转发模块703在根据报文的关键字段对应的关联于报文的入接口的上行流表中确定报文的出接口之后,进一步用于:如果该上行流表中保存有报文的入接口上配置的上行业务,则执行该上行流表中保存的报文的入接口上配置的上行业务。
第二CPU转发模块702在确定报文的出接口之后,根据报文的出接口转发报文之前,进一步用于:如果该出接口上配置有下行业务,则执行该出接口上配置的下行业务,建立报文的关键字段对应的关联于该出接口的下行流表,并在该下行流表中保存该出接口上配置的下行业务,将该下行流表下发到第二硬件转发模块703;
第二硬件转发模块703在根据报文的关键字段对应的关联于报文的入接口的上行流表确定报文的出接口之后,根据报文的出接口转发报文之前,进一步用于:如果该出接口配置有下行业务,则执行报文的关键字段对应的关联于该出接口的下行流表中保存的该出接口上配置的下行业务。
所述与远端设备间建立的隧道是IPv4 over IPv4隧道;
所述第二CPU转发模块702生成的隧道表项中的隧道传输协议是IPv4协议,隧道乘客协议是IPv4协议;
或者,
所述与远端设备间建立的隧道是IPv4 over IPv6隧道;
所述第二CPU转发模块702生成的隧道表项中的隧道传输协议是IPv6协议,隧道乘客协议是IPv4协议;
或者,
所述与远端设备间建立的隧道是IPv6 over IPv4隧道;
所述第二CPU转发模块702生成的隧道表项中的隧道传输协议是IPv4协议,隧道乘客协议是IPv6协议;
或者,
所述与远端设备间建立的隧道是IPv6 over IPv6隧道;
所述第二CPU转发模块702生成的隧道表项中的隧道传输协议是IPv6协议,隧道乘客协议是IPv6协议;
或者,
所述与远端设备间建立的隧道是GRE隧道;
所述第二CPU转发模块702生成的隧道表项中的隧道传输协议是IPv4协议或IPv6协议,乘客协议是GRE协议。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。