控制和数据平面分离面临着三个挑战那就是延展性(scalability),可靠性(reliability)和一致性(consistency)
简单来说其延展性就是路由器的路由规则上的灵活性,可靠性就是相关协议的可靠性以及在犯错之后的补救措施,一致性就是因为由于数据和控制平面分离导致协议方面,路由方面的不一致
延展性(scalability),可靠性(reliability)
当前延展性面临的挑战就是,一个自治网络系统中有千千万万个路由器,在自治网络系统当中每个路由器都要有自己的路由表,如果是RCP,在控制数据包转发的时候,这将会是一个很大的运算,为了能让数据包能够在自治网络系统中路由,每一个路由器都需要计算所有的路由线路,RCP要对每一个数据包负责,这样使得运算中有冗余,即过量运算,可以想象,因为每个路由器都有自己的路由表,那么:
当一个数据包每到一次路由器的时候,这个路由器会做运算然后会依照他的路由表来转发,每次转发的目标只是下一个路由器,缺点如下:每个数据包,他们只知道下一步要怎么走,并不知道整条路线要怎么走,并且这样子每次路由器都有可能要做没必要的运算,浪费了运算时间;
那么如果用RCP,他作为一个节点,来直接告诉数据包整个路线怎么走,,根据RCP的指令直接规划好路线,一口气直接到目的地,但是面临的挑战就是,要怎么规划好整个路线?
所以为了能够不让路由器做重复的运算并且规划好整个路线,RCP要收集每个路由器的而路由表信息,将每个路由器中的路由表进行收集,做一个简单的COPY,然后这样RCP就收集了所有路由表的信息,于是在数据包转发的时候就没有必要根据每个路由器的路由表来转发,而是根据RCP的指令来转发,为了消除冗余,需要建立一个数据库,RCP将所有路由表信息收集以后,把他们放在数据中心里,如果再出现同样的路由表,就不需要把他们存进去,当作没有看见,这样路由器就得到了解放,但是他们必须还得留下来,因为如果某个路由器停止了工作然后影响了其他路由器,那么他们就会更新出新的路由表,然后上传给数据库作为新的数据,这样数据库只用更新这一个数据就行,而不是作整个网络上路由的重新运算,不过上诉的基础都是基于BGP。
一致性(consistency)
在学习笔记一中有具体说过,SDN中不同用户都有不同用户的路由线路,不同规则和协议,但是他们共享着这些硬件,路由器,交换机,等等。这里有两个概念,分别是分离(partitioning)和聚合(aggregation)下面细说这两个概念。
如图所示,如果一个自治网络系统中有两个RCP在控制,也就是说有两个用户,那么,在协议规则算法始发点都相同的情况下,那么反馈给路由器的信息是相同的,那么他们的数据包的目的地一定是相同的,在这样一致的情况下,就没有必要用到一致性协议,但是当信息等等各不相同的时候就需要用到了,毕竟他们不总是看见同样的信息,一致性协议有两种,一种是强一致性协议,他们牺牲一些性能然后使得两个用户之间保持高度一致,另一种是弱一致性协议,保持一般般的一致性,然后提升路由性能。那到底一致性是什么样的标准呢?
如上图,由于不同的运算规则和不同的协议,两个RCP运算的结果,假设左边的RCP想要数据包从A路由器出发通过B路由器到D路由器,右边的RCP想要从B路由器出发,通过A路由器到C路由器,在没有一致性协议的情况下,从A出发的数据包往D转发的途中要经过B,从B出发的数据包往C转发的途中要经过A,他们要服从RCP的指令,A听左边的,B听右边的,导致了数据包会在AB之间往返循环,最终的结果就是他们收集到A和B的路由表信息让他们觉得这个数据包是不可达的。
所以现在有分离这个概念,我们把每个从大网络中分离出来的子集称为分区,RCP将收集这两个分区的链路状态来规划链路要走哪一条分区,同时通过IGP,OSPF等等方式,来确保链路是可达的,左图中,假当RCP在分区2作运算的时候,发现分区2无法实现链路上的联通,于是在分区1作运算,发现可以联通,于是就能确保链路的实现,因为分区1和2就相当于两个独立的网络系统,再如右图,拿上诉的例子来说A,B的路由表信息都表明不可达,于是两个RCP之间虽然有AB两个交集,并且AB在分区2里,发现分区2是失败的,于是就会走新的路线避开循环,也许是CEFD等等,这样就能保证交通上不会出现堵车。
所以总结分离控制和数据平面带来的三个重大挑战,一个是可扩展性,特别是单个控制器现在必须代表许多网络元素做出路由决策或各种控制平面决策,以前每个人都独立地为自己执行这些计算,第二个挑战是保证在网络故障或控制器本身故障下正确运行的可靠性,第三个挑战是一致性或确保多个控制器副本之间的一致性,特别是在网络分区或故障的情况下因此,我们详细探讨了这些挑战中的每一个,并讨论了各种技术,包括层次结构聚合和各种聪明的状态管理和分发,对这些挑战的解决方案。