背景技术
多协议标签交换(Multi-Protocol Label Switching,MPLS)是一种应用于IP主干网的高效转发技术,采用MPLS技术建立的标签交换路径(Label Switched Path,LSP)可以支持点到点(Pointto Point,P2P)和点到多点(Point to Multi-point,P2MP)等多种隧道。目前,MPLS用于建立LSP的信令协议主要有资源预留协议-流量工程(Resource Reservation Protocol-TrafficEngineering,RSVP-TE)和标签分发协议(Label DistributionProtocol,LDP)两种。与传统的IP转发技术不同,MPLS根据标签来决定转发。目前LSP隧道主要采用的是下游分配标签,即由下游节点为上游节点分配标签。
但是如果在点到多点隧道中继续采用下游节点分配标签,在以下场合就会存在问题:
广播网络。图1为采用下游节点分配标签的广播网络的报文转发示意图。在广播网络中,组播流量从节点A发往节点C、节点D、节点E;由于采用下游节点分配标签,节点C、节点D、节点E给上游节点B分的标签不一样,导致节点B要拷贝三份流发往节点C、节点D、节点E,增加节点B的负担,同时造成节点B与节点C、节点D、节点E之间的带宽浪费;因为是广播网络,节点C也会收到发往节点D、节点E的流量,通过转发层判断后丢弃,增加了节点C的负担,节点D、节点E也存在同样问题。
旁路(Bypass)隧道。图2为采用下游节点分配标签的Bypass隧道报文转发示意图。在MPLS网络中,节点A-节点B的Bypass隧道是节点A-节点F,当经过节点A-节点B的主隧道出现故障后流量通过Bypass隧道进行转发。由于采用下游节点分配标签,节点C、节点D、节点E给节点F分配了不同的标签,而Bypass隧道采用的是标签栈技术,要求发往节点C、节点D、节点E的报文的标签在节点A就需要封装好,这样导致节点A到节点F之间要传三份流量,造成带宽浪费。
为解决上述问题,如图3所示,图3为采用上游节点分配标签的广播网络的报文转发示意图。上游B节点给节点C、节点D、节点E分配相同的标签,所以节点B只要发出一份组播流量就可以了;因为是广播网络,节点C、节点D、节点E都能收到。
如图4所示,图4为采用上游节点分配标签的Bypass隧道报文转发示意图。节点F给节点C、节点D、节点E分配了相同的标签,这样节点A传一份流量到节点F就可以了,大大节省了带宽。
在点到多点隧道中,采用上游节点分配标签后,当存在多个上游节点时,不同的上游节点可能给同一个下游节点分配了相同的标签,导致下游节点出现转发错误。
为了避免出现转发错误,现有技术中上游节点分配标签采用邻居标签空间,即下游节点记录上游节点分配的标签,同时记录各个上游节点的地址。例如,在以太网链路上,上游节点A和上游节点B同时给下游节点C分配了相同的标签L1,下游节点的记录是:
节点A的MAC+L1→转发行为1;
节点B的MAC+L1→转发行为2;
当节点C收到上游节点发来的MPLS报文时,根据报文的源MAC和标签去查找转发表。由于现在的MPLS转发流程都是根据标签直接查找转发表,因此这种方法需要对MPLS现有转发流程进行较大修改,算法查找和硬件实现的复杂度也会大为增加,查找效率也会慢很多。
为了避免出现转发错误,现有技术中另一种上游节点分配标签的方法是静态指定标签分配空间。例如,指定节点A的标签分配为L1到L50,指定节点B的标签分配空间为L51到L100。通过静态分配标签空间在使用上有很多限制:首先,要求全网统一规划,如果规划不好有可能出现标签空间重叠,必然导致转发出错;其次,通过静态分配标签空间不灵活,当要调整标签范围时,可能因为某些标签已经分配出去,导致调整失败;第三,静态分配必然是一段一段的分配,通常情况下无法准确的规划标签空间,比如这段标签分配给节点A了,其它节点就不能使用,而节点A实际可能不需要这么多的标签,导致标签资源的浪费。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图,对本发明作进一步地详细说明。
图5为本发明方法较佳实施例中,采用RSVP-TE建立的点到多点隧道中上游节点分配标签流程图。如图5所示,该方法包括以下步骤:
步骤501:上游节点A向下游节点B发送PATH(路径)消息,所述PATH消息中携带有上游节点A为下游节点B分配的标签信息;同时上游节点A记录所述PATH消息中携带的上游节点A分配给下游节点B的标签信息;
步骤502:下游节点B判断是否接受所述上游节点A分配的标签,例如判断所述上游节点A分配的标签是否属于自身的可接受标签范围,或者所述上游节点A分配的标签是否与其它上游节点分配的标签重复;若接受所述上游节点A分配的标签,执行步骤509;若不能接受所述上游节点A分配的标签,执行步骤503;
步骤503:下游节点B向上游节点A发送PATHERR(路径错误)消息,所述PATHERR消息携带一个标签集合对象,该对象携带如下信息:
TYPE(类型);
Length(长度);
Action(动作);
可接受的标签;
不能接受的标签;
可接受的标签范围;
不能接受的标签范围;
步骤504:上游节点A收到下游节点B发送的PATHERR消息,记录下游节点B的可接受的标签范围,同时根据这个可接受的标签范围重新选出一个下游节点B可以接受的新标签;
步骤505:上游节点A根据记录的标签信息判断,所述新标签是否属于除节点B外的其他下游节点标签范围;若所述新标签不属于除节点B外的其他下游节点标签范围(即其他下游节点不能接受所述新标签),执行步骤506;若所述新标签属于除B外的其他下游节点标签范围(即其他下游节点能接受所述新标签),执行步骤507;
步骤506:上游节点A再次为所述下游节点B分配标签,执行步骤505;
步骤507:上游节点A向所有下游节点发送PATH消息,所述PATH消息中携带有所述上游节点A为下游节点分配的新标签信息;同时上游节点A更新记录分配给下游节点的标签信息;
步骤508:下游节点B收到携带有所述新标签信息的PATH消息后,将新标签安装到转发层;除下游节点B之外的其他下游节点收到携带有所述新标签信息的PATH消息后,更新转发层标签信息;
步骤509:进入正常的采用RSVP-TE建立点到多点隧道的流程。
经过上述流程,下游节点的标签范围发生了变化。在下一次上游节点为下游节点分配标签时,重复上述流程,就可以更新上游节点记录的下游节点的标签信息。
根据以上较佳实施例的描述,本领域技术人员可以知道,以上实施例提供的用于点到多点隧道的上游节点标签分配方法还可以应用在采用LDP建立的点到多点隧道中。
图6为本发明方法较佳实施例中,采用LDP建立的点到多点隧道中上游节点分配标签流程图。如图6所示,该方法包括以下步骤:
步骤601:下游节点B向上游节点A发送标签请求消息;
步骤602:上游节点A向下游节点B发送标签映射消息,所述标签映射消息携带有上游节点A为下游节点B分配的标签信息;同时上游节点A记录所述标签映射消息中携带的上游节点A分配给下游节点B的标签信息;
步骤603:下游节点B判断是否接受所述上游节点A分配的标签,例如判断所述上游节点A分配的标签是否属于自身的可接受标签范围,或者所述上游节点A分配的标签是否与其它上游节点分配的标签重复;若接受所述上游节点A分配的标签,执行步骤610;若不能接受所述上游节点A分配的标签,执行步骤604;
步骤604:下游节点B向所述上游节点A发送Notify(通知)消息,所述Notify消息携带一个标签集合对象,该对象携带如下信息:
TYPE(类型);
Length(长度);
Action(动作);
可接受的标签;
不能接受的标签;
可接受的标签范围;
不能接受的标签范围;
步骤605:上游节点A收到下游节点B发送的Notify消息,记录下游节点B的可接受的标签范围,同时根据这个下游节点B可接受的标签范围重新选出一个下游节点B可以接受的新标签;
步骤606:上游节点A根据记录的标签信息判断,所述新标签是否属于除B外的其他下游节点标签范围;若所述新标签不属于除B外的其他下游节点标签范围(即其他下游节点不能接受所述新标签),执行步骤607;若所述新标签属于除B外的其他下游节点标签范围(即其他下游节点能接受所述新标签),执行步骤608;
步骤607:上游节点A再次为所述下游节点B分配标签,执行步骤606;
步骤608:游节点A向所有下游节点发送标签映射消息,所述标签映射消息中携带有所述新标签信息,同时上游节点A更新记录分配给下游节点的标签信息;
步骤609:下游节点B收到携带有所述新标签信息的标签映射消息后,将新标签安装到转发层;除下游节点B之外的其他下游节点收到携带有所述新标签信息的标签映射消息后,更新转发层标签信息;
步骤610:进入正常的采用LDP建立点到多点隧道的流程。
经过上述流程,下游节点的标签范围发生了变化。在下一次上游节点为下游节点分配标签时,重复上述流程,就可以更新上游节点记录的下游节点的标签信息。
图7为本发明较佳实施例中,采用RSVP-TE建立的点到多点隧道系统结构图。如图7所示,包括上游节点设备和下游节点设备。
上游节点设备A给下游节点设备C和D发送PATH消息,所述PATH消息中携带有上游节点设备A为下游节点设备C和D分配的标签L1;同时上游节点设备A记录所述上游节点设备A分配给下游节点设备C和D的标签信息。下游节点设备C的可接受的标签范围是L1~L100,下游节点设备D的可接受的标签范围是L1~L200;下游节点设备C和D经过判断接受标签L1。
当新增下游节点设备E时,上游节点设备A将标签L1分配给下游节点设备E;下游节点设备E经过判断,标签L1不属于自身的可接受标签范围;下游节点设备E向上游节点设备A发送PATHERR消息,该PATHERR消息携带下游节点设备E的可接受标签范围是L50~L100。
上游节点设备A收到下游节点设备E发送的PATHERR消息,记录下游节点设备E的标签范围,同时上游节点设备A根据下游节点设备E的可接受标签范围,重新给下游节点设备C、D和E分配标签L50;根据原来记录的下游节点设备C和D的标签范围,标签L50属于下游节点设备C和D的标签范围(即下游节点设备C和D能接受标签L50);上游节点设备A向下游节点设备C、D和E发送携带有新标签L50的PATH消息;下游节点设备E收到携带有新标签L50的PATH消息后,将新标签L50安装到转发层;下游节点设备C和D收到携带有新标签L50的PATH消息后,更新转发层标签信息。
当新增上游节点设备B时,上游节点设备B为下游节点设备C、D和E分配标签L50,同时记录分配给下游节点设备C、D和E的标签信息;下游节点设备C、D和E经过判断,L50与上游节点设备A分配的标签重复,不能接受;下游节点设备C向上游节点设备B发送PATHERR消息,该消息携带下游节点设备C的标签信息:下游节点设备C可接受的标签范围是L1~L100,但不能是L50;下游节点设备D向上游节点设备B发送PATHERR消息,该消息携带下游节点设备D的标签信息:下游节点设备D可接受的标签范围是L1~L200,但不能是L50;下游节点设备E向上游节点设备B发送PATHERR消息,该消息携带下游节点设备E的标签信息:下游节点设备E可接受的标签范围是L50~L100,但不能是L50。
上游节点设备B收到下游节点设备C、D和E发送的PATHERR消息,记录下游节点设备C、D和E的标签范围,同时根据下游节点设备C、D、和E的可接受的标签范围重新选择了标签L51;上游节点设备B向下游节点设备C、D和E发送携带有新标签L51的PATH消息,同时更新记录分配给下游节点设备C、D和E的标签信息;下游节点设备C、D和E收到携带有新标签L51的PATH消息后,更新转发层标签信息。
在下一次上游节点设备为下游节点设备分配标签时,若由于下游节点设备标签范围的变化或其他原因,而导致下游节点设备不能接受上游节点设备为其分配的标签,下游节点设备会向下游节点设备发送PATHERR消息,该消息中携带下游节点设备的标签信息,通过这种方式就可以更新上游节点设备记录的下游节点设备的标签信息。
图8为本发明较佳实施例中,采用LDP建立的点到多点隧道系统结构图。如图8所示,包括上游节点设备和下游节点设备。
下游节点设备C和D向上游节点设备A发送标签请求消息;上游节点设备A收到所述标签请求消息后,向下游节点设备C和D发送标签映射消息,所述标签映射消息中携带有上游节点设备A为下游节点设备C和D分配的标签L1;同时上游节点设备A记录所述上游节点设备A分配给下游节点设备C和D的标签信息。下游节点设备C的标签范围是L1~L100,下游节点设备D的标签范围是L1~L200,下游节点设备C和D经过判断接受标签L1。
当新增下游节点设备E时,下游节点设备E向上游节点设备A发送标签请求消息,上游节点设备A收到下游节点设备E发送的标签请求消息后,向下游节点设备E发送标签映射消息,该标签映射消息中携带标签L1。
下游节点设备E经过判断,标签L1不属于自身的可接受标签范围;下游节点设备E向上游节点设备A发送Notify消息,该Notify消息携带下游节点设备E的可接受标签范围是L50~L100。
上游节点设备A收到下游节点设备E发送的Notify消息,记录下游节点设备E的标签范围,同时上游节点设备A根据下游节点设备E的可接受标签范围,重新给下游节点设备C、D和E分配标签L50;根据原来记录的下游节点设备C和D的标签范围,标签L50属于下游节点设备C和D的标签范围(即下游节点设备C和D能接受标签L50);上游节点设备A向下游节点设备C、D和E发送携带有新标签L50的标签映射消息;下游节点设备E收到携带有新标签L50的标签映射消息后,将新标签L50安装到转发层;下游节点设备C和D收到携带有新标签L50的标签映射消息后,更新转发层标签信息。
当新增上游节点设备B时,下游节点设备C、D和E向上游节点设备B发送标签请求消息;上游节点设备B为下游节点设备C、D和E分配标签L50,同时记录分配给下游节点设备C、D和E的标签信息。
下游节点设备C、D和E经过判断,L50与上游节点设备A分配的标签重复,不能接受;下游节点设备C向上游节点设备B发送Notify消息,该消息携带下游节点设备C的标签信息:下游节点设备C可接受的标签范围是L1~L100,但不能是L50;下游节点设备D向上游节点设备B发送Notify消息,该消息携带下游节点设备D的标签信息:下游节点设备D可接受的标签范围是L1~L200,但不能是L50;下游节点设备E向上游节点设备B发送Notify消息,该消息携带下游节点设备E的标签信息:下游节点设备E可接受的标签范围是L50~L100,但不能是L50。
上游节点设备B收到下游节点设备C、D和E发送的Notify消息,记录下游节点设备C、D和E的标签范围,同时根据下游节点设备C、D、和E的可接受标签范围重新选择了标签L51;上游节点设备B向下游节点设备C、D和E发送携带有新标签L51的标签映射消息,同时更新记录分配给下游节点设备C、D和E的标签信息;下游节点设备C、D和E收到携带有新标签L51的标签映射消息后,更新转发层标签信息。
在下一次上游节点设备为下游节点设备分配标签时,若由于下游节点设备标签范围的变化或其他原因,而导致下游节点设备不能接受上游节点设备为其分配的标签,下游节点设备会向下游节点设备发送Notify消息,该消息中携带下游节点设备的标签信息,通过这种方式就可以更新上游节点设备记录的下游节点设备的标签信息。
上述技术方案,在上游节点与下游节点之间引入标签协商机制,保证多了个上游节点给相同的下游节点分配标签时不会出现重复,并且下游节点不需要修改现在的转发流程,可以继续根据标签进行转发;降低了硬件实现的复杂度,提高了转发效率;按需分配标签,有效的节约了标签资源。
以上仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。