《云数据中心网络与SDN:技术架构与实现》——1.15.2 控制与转发机制

举报
华章计算机 发表于 2019/06/06 13:51:23 2019/06/06
【摘要】 本书摘自《云数据中心网络与SDN: 技术架构与实现》——书中第1章,第1.15.2节,作者是张晨。

1.15.2 控制与转发机制

1.基于IGP的信息同步

SR通过IGP在节点间进行信息同步,主要包括OSPF和ISIS两种。由于原生的OSPF/ISIS只能携带IP前缀和下一跳,没有SID的概念,因此需要对OSPF/ISIS进行SR的扩展,以便能够在信令中携带SRGB、Node SID、Adj SID,以及其他SID。通过IGP的同步,各个SR节点上会形成完整的SID拓扑图,假如网络中——共有N个节点,每个节点上有L条链路,那么各个节点的LFIB中就会形成N+L条转发表,其中N条是Node Label表项,L条是本地链路的Adj Label表项。Node Label表项中的out interface是节点根据拓扑通过IGP得最短路径算法得到的,而Adj Label表项中的out interface是从SR邻居的IGP宣告消息中直接解析出来的。回过头来再去重新理解SID,实际上每个SID就代表着一个“指令”。Node SID指令的本质是通过IGP路由决定下一跳,属于一种松散的下一跳;而Adj SID指令的本质是通过特定的本地链路转发给下一跳,属于一种严格的下一跳。

2.基于MPLS的流量转发

LFIB中对Label的处理动作规则如下:Ingress Router做PUSH,以Egress Router的Node Label作为栈底(如果需要Service Label,则以Service Label做为栈底),上面是希望经过的节点的Node Label和希望经过的链路的Adj Label。对于Transit Router来说,如果看到的栈顶是和自己没有本地直连的Node Label,则SWAP栈顶,只不过SWAP前后的Label是一样的而已;如果看到的栈顶是Adj Label或者是和自己有本地直连的Node Label,则直接POP栈顶(相当于PHP)。因此,Egress Router收到数据包时,所有SR的Label都已经被POP掉了,然后根据payload(或者Service Label)路由给CE。上述所说的Service Label是一个泛指,或者是VPN Label,或者是CE Label,或者是VM Label,或者是其他与客户侧业务相关的标签,Segment Routing并不负责生成Service Label。

可以结合图1-54中的例子来理解SR数据平面上的转发机制,PE1是Ingress Router,PE3是Egress Router,要求经过P2→P1这条链路进行传输,图中链路的IGP cost都相同。首先在PE1上做PUSH,栈底压Service Label,Service Label上面是PE3的Node Label,再上面是P2本地与P1相连链路的Adj Label,栈顶是P2的Node Label。PE1查LFIB,得知去往远端的P2有两个可用的下一跳PE2和P1,假设PE1选择了PE2作为下一跳。PE2收到后,查LFIB匹配P2的Node Label,进行转发同时POP掉栈顶。P2收到后,查LFIB匹配P2→P1的Adj Label的表项,转发给P1同时POP栈顶。P1收到后,查LFIB匹配PE3的Node Label表项,转发给PE3同时POP栈顶。PE3收到时,就已经只剩下Service Label了,PE3会根据Service Label的处理逻辑来进行后续的转发。图1-51中没有体现出SWAP的操作,如果PE1和PE2间又有一个PE3、PE1和P1间还有一个P3,PE1选择了PE3作为到P2的下一跳,那么PE3收到后,查LFIB匹配P2的Node Label,转发给PE2同时执行SWAP(SWAP之后还是2)。

3.与LDP/RSVP-TE的对比

SR与LDP和RSVP-TE一样,都是作为标签转发的控制面,下面来讨论一下这三者的区别。LDP的作用是在源路由和目的路由间自动生成MPLS路径,它是从“路径”(FEC)的角度看待Label的,每个FEC在每个节点上都有不同的Label,因此节点上LFIB中表项的数量基本上是和网络中的FEC数量成正比的,LDP的控制平面和数据平面都没有体现源路由的思路,无法实现对路径的规划,也没有预留带宽的能力。RSVP-TE的作用是在源路由和目的路由间特定的路径上自动生成MPLS路径,它看待Label的角度和LDP是一致的,数据平面上还是逐跳做SWAP,没有用Label Stack做源路由。不过,RSVP-TE控制平面中的ERO体现了源路由的思路,控制信令才得以预留沿路的带宽,但是其引入的session概念使得设备上需要维护大量的状态信息,而且分布式的路由规划无法充分地利用网络中的带宽资源。

image.png

图1-54 SR的转发示例

相比之下,SR弃用了LDP和RSVP-TE,而是使用扩展的IGP去宣告SID和Label,它是从“拓扑”的角度来看待Label的(不考虑Prefix SID),每个节点和物理链路都有自己本身的Label,任意的路径都可以通过组合节点和物理链路的Label来表示,因此节点上LFIB中表项的数目是和网络中FEC的数量无关。SR的数据平面通过Label Stack实现源路由,节点上不需要维护任何和路径相关的状态,源路由的计算可以通过控制器来集中式地完成,能够有效地提高带宽的利用效率,不过SR本身并没有预留带宽的能力。

4. TI-LFA与微环路避免

电信级的网络要求能够在故障出现后的50ms内倒换到保护路径上,由于IGP的收敛速度无法满足此要求,因此通常要借助于FRR(Fast ReRoute)技术,FRR在故障发生前就会得到故障后可用的保护路径,并更新到FIB中,因此PLR在本地检测到故障后即可立即完成切换。IPFRR是一种对IP前缀进行保护的FRR技术,其传统的实现包括LFA(Loop Free Alternate)和RLFA(Remote Loop Free Alternate)。LFA的思路是,以PLR本地直连的、且到达目标前缀的最短路径不经过故障处的节点N作为下一跳,故障时PLR将去往目标前缀的流量转发给N,N再将流量路由至目的地,LFA非常简单但在某些拓扑中无法找到有效的N。RLFA的思路是,取P空间与Q空间的交集P∩Q,其中P/Q空间分别表示到达“PLR/目标前缀”的最短路径不经过故障处的节点集合,然后在P∩Q中选取一个节点N作为下一跳,故障时PLR先通过隧道将去往目标前缀的流量定向到N,接着由N终结隧道并将流量路由至目的地。相比于LFA,RLFA借助隧道提高了拓扑的覆盖率,但是在少数拓扑中,P∩Q仍可能为空集。

而SR所支持的TI-LFA(Topology Independent Remote Loop Free Alternate)可实现100%的拓扑覆盖,思路也是先得到P/Q空间,如果P∩Q不为空,则在P∩Q中找到一个节点N,故障时PLR会压入N的Node Label,引导流量先经过N再流向目的地。如果P∩Q为空,则分别在P/Q空间选择节点NP和NQ,并计算出NQ与NP间不经过故障处的路径L,故障时PLR从栈底到栈顶方向依次压入NQ的Node Label,路径L的Label列表(可根据实际情况由Node Label和Adj Label组合得到),于是流量将先被路由至NP,然后经过路径L引导至NQ,再由NQ流向目的地。可以看到,由于SR具备显示路由能力,能够对流量进行逐跳的引导,因此故障后只要在拓扑上,PLR和目的地仍然是连通的,那么TI-LFA就一定引导流量到达目的地,而且TI-LFA还能够保证通过故障后最优的路径进行引导,这也是LFA和RLFA都无法保证的。

另外值得注意的是,由于IPFRR的定位是一种在故障发生后短时间内对IP前缀进行保护的机制,因此在大部分的实现中,在PLR本地完成IGP收敛后,PLR仍然会使用IGP收敛后生成的新路由进行转发。不过,这可能会导致一个问题,假设PLR本地完成IGP收敛后去往目标前缀的下一跳为C,于是PLR将流量转发给C,但此时C还没有完成IGP收敛,而且不排除C中去往目标前缀的下一跳是PLR的可能,在这种可能下C又将流量送回给了PLR,也就导致了环路的产生,直到C完成IGP收敛后环路才得以解除。

这种由于IGP收敛不同步所导致短暂的环路称为“微环路”,解决微环路问题的一种做法是,当PLR本地完成IGP收敛后不会立即更新转发表,而继续使用保护路径,直到PLR认为IGP已完成全局收敛再更新转发表,按照IGP收敛后的路由进行转发。不过即使如此,由于LFA只能影响PLR的转发行为,因此只能保证PLR和其下一跳间不产生微环路,无法保证保护路径中其他节点间不产生微环路。而SR则允许通过源路由来影响保护路径中每个节点的转发行为,因此采用推迟更新后可以完全地避免微环路的产生。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。