5G承载(8):是什么导致了Segment Routing的出现?

我们常说,Segment Routing.

我们常说,Segment Routing(SR)的出现就是为了替代MPLS。但MPLS技术的本身也是为了优化网络和减少路由表的大小而发明的,那么出现了什么问题,又导致了SR技术的出现?
 
众所周知,MPLS就是玩标签,MPLS-TE隧道就像预留的道路一样,如下图所示的道路网。

 

在这个道路网中,如果A想拜访B,有3条路可以走。其中中间一条是高速公路,是到达B的最佳路径,A在此路径中建立了一条Tunnel 1,并考虑平时车流量比较少的Tunnel 2作为替代路径。但每当A想要开车去B家时,整个Tunnel 1的路径都必须可用,中间站点也必须保持高速公路的状态。
 
我们可以想象,如果要为所有想要到达B家的成百上千个人建造Tunnel 1这样的隧道,工作量将会无比的庞大。如果A有时想走其他路径,比如说Tunnel 2,他必须将想法告诉中间站的站长。对于通信网络来说,MPLS的标签数会随着LSP的数量增加而增加,维护百万条LSP对于路由器来说是异常困难的。如果业务发生变化,MPLS需要逐点去调整配置。另外由于标签的资源占用较多,也不利于大规模网络的组建。以上正是MPLS技术的缺点,事必躬亲。
所以大家就在想,为什么中间站的站长需要知道我的路由?不是应该根据自己的心情决定走哪一条道路吗。我是源,所以应该由我这个源来控制路由,而不是具体的站点。根据自己的需求,想走高速就走高速,想走省道就走就省道。根据这样的思路,我们下面再来看看由A到B的路径如何选择?

 

现在,没有为A预留路径。A会根据自己的心情预先决定自己的道路。首先A会找出整条路径,按顺序列出路线上的车站,并打印出来并放在他的车上。每当他到达一个车站时,中间站的站长都会确定他自己的车站号码是不是A要到的站,并决定是否欢迎A的到来。同时,站长会查询一下A的下一站出口,并将A引导到下一站,然后在其路径中删除下一站编号。
此时,中间站的站长已经不记得A的路线了。这对于站长来说,肯定非常乐意这样做,因为不用去记每个业务的路径,工作量变不小不少。同时,A也很高兴,我的道路我决定,而且即使他随时决定改变路线,也不需要通知站长。
 
我们通过上面的场景类比实际的传输网络,每个路由器都将通过一个标签来标识,就像上面例子中的站点编号一样。基于此,控制平面(如SDN控制器)收集这些网络信息,针根据业务的需求并计算出合适的路径。路径是根据网关路由器的标签来描述的,由运营商分配,然后在数据包头中添加此路径。当数据包到达带有目的地作为全局标签(Global Label)的路由器时,路由器将根据顶部标签将数据包路由到出接口。如果目的地是下一个路由器,它将遵循倒数第二跳弹出机制,和MPLS是一样的。

 

如上图举例说明:默认情况下去节点E按照红色标签路径转发,标签是报文在链路上封装的情况,16005代表节点E。管理员想采用一条经由节点B和节点C到节点E的路径,此时头节点S把节点B的标签16002封装到最外层,为了确保流量从节点B出来后去往节点C,把节点B的到节点C的链路标签80001封装到第二层,最后把16005封装到最内层。通过封装三层标签,满足了规划的路径。
 
因此,可以看得出,源具有了控制权,这就是Segment Routing,我们称之为源路由或者段路由,其中Segment是路由器根据其采取行动的标签。相比MPLS,SR想要控制业务路径,只需要在头节点对报文进行标签操作就可,同时SR的标签数量等于连接数和节点数之和,也跟隧道数量没有了任何关系。