本章学习网络层:控制平面
控制平面作为一种网络范围的逻辑,不仅控制沿着从源主机到目的主机的端到端路径间路由器如何转发数据报,而且控制网络层组件和服务如何配置和管理。
概述
通过前面的学习,我们已经知道转发表(在基于目的地转发的场景中)和流表(在通用转发的场景中)是链接网络层的数据平面和控制平面的首要元素
在前面我们已经知道路由控制的两种方法
- 每路由器控制。(图5-1)每台路由器中都包含转发和路由选择功能。每台路由器有一个路由选择组件,用于与其他路由器中的路由选择组件通信,以计算其转发表的值
- 逻辑集中式控制。(图5-2)逻辑集中式控制器计算并分发转发表以供每台路由器使用
该控制器经一种定义良好的协议与每台路由器中的一个控制代理(CA)进行交互,以配置和管理该路由器的转发表。CA的任务是与控制器通信并且按控制器指令行事,与图5-1中的路由选择算法不同,这些CA既不能直接相互交互,也不能主动参与计算转发表。这是每路由器控制和逻辑集中式控制之间的关键差异。
路由选择算法
路由选择算法其目的是从发送方到接收方的过程中确定一条通过路由器网络的好的路径(等价于路由)(一条好路径指具有最低开销的路径)
用图来形式化描述路由选择问题。图中的节点表示路由器,这是做出分组转发决定的点;连接这些节点的边表示这些路由器之间的物理链路。
如图所示,一条边还有一个值表示它的开销。(通常一条边的开销可反映出对应链路的物理长度、它的链路速度或与该链路相关的金钱上的开销)
一般而言路由选择算法可根据该算法是集中式还是分散式来划分:
- 集中式路由选择算法。用完整的、全局性的网络知识计算从源到目的地之间的最低开销路径。也就是说,该算法以所有节点之间的连通性及所有链路的开销为输入。这要求该算法在真正开始计算以前要以某种方式获得这些信息。集中式算法具有关于连通性和链路开销方面的完整信息。具有全局状态信息的算法常被称为链路状态(Link State,LS)算法,因为该算法必须知道网络中每条链路的开销。
- 分散式路由选择算法。路由器以迭代、分布式的方式计算出最低开销路径。没有节点拥有关于所有网络链路开销的完整信息。相反,每个节点仅有与其直接相连链路的开销知识即可开始工作。然后通过迭代计算过程以及与相邻节点的信息交换,一个节点逐渐计算出到达某目的节点或一组目的节点的最低开销路径。距离向量(Distance—Vector,DV)算法是分散式路由选择算法。之所以叫DV算法,是因为每个节点维护到网络中所有其他节点的开销估计的向量。
链路状态路由选择算法
在链路状态算法中,网络拓扑和所有的链路开销都是已知的,可以作为LS算法的输入。实践中这是通过让每个节点向网络中所有其他节点广播链路状态分组来完成的,其中每个链路状态分组包含它所连接的链路的标识和开销。在实践中经常由链路状态广播(Link state broadcast)算法来完成。节点广播的结果是所有节点都具有该网络的统一、完整的视图。于是每个节点都能够像其他节点一样,运用LS算法并计算出相同的最低开销路径集合。
下面给出一种叫Dijkstra算法。它计算从某节点(源节点,称为u)到网络中所有其他节点的最低开销路径,是一种迭代算法,其性质是经算法的第k次迭代后,可知道k个目的节点的最低开销路径,在到所有目的节点的最低开销路径中,这k条路经具有k个最低开销。
- D(v):到算法的本次迭代,从源节点到目的节点v的最低开销路径的开销
- P(v):从源到v沿着当前最低开销路径的前一节点(v的邻居)
- N':节点子集;如果从源到v的最低开销路径已确知,则v在N’中
考虑上图中的网络,计算从u到所有可能目的地的最低开销路径
当LS算法终止时,对于每个节点,我们都得到从源节点沿着它的最低开销路径的前一节点,对于每个前一节点,我们又有它的前一节点,以此方式我们可以构建从源节点到所有目的节点的完整路径。(通过对每个目的节点存放从u到目的地的最低开销路径的下一跳节点,在一个节点的转发表则能根据此信息而构建)
距离向量路由选择算法
距离向量(Distance-Vector,DV)算法是一种迭代的、异步的和分布式的算法,而LS算法是一种使用全局信息的算法。
分布式:因为每个节点都要从一个或多个直接相连邻居接收某些信息,执行计算然后将计算结果分发给邻居
迭代的:此过程一直要持续到邻居之间无更多信息交换为止
异步的:不要求所有节点相互之间步伐一致地操作
下图举例说明DV算法的运行
最左边一列显示这3个节点各自的初始路由选择表。 位于左上角的是节点x的初始路由选择表。在一张特定的路由选择表中每行是一个距离向量——特别是每个节点的路由选择表包括了它的距离向量和它的每个邻居的距离向量。该表的第二和第三行是最近分别从节点y和节点z收到的距离向量,因为在初始化时节点x还没有从节点y和z收到任何东西,所以第二行和第三行表项被初始化为无穷大。
初始化后,每个节点向它的两个邻居发送其距离向量。从邻居接受更新距离向量、重新计算路由选择表项和通知邻居到达目的地的最低开销路径的开销已经变化的过程继续下去。
DV和LS算法采用互补的方法来解决路由选择计算问题。在DV算法中,每个节点仅与它的直接相连的邻居交谈,但它为其邻居提供了从它自己到网络中(它所知道的)所有其他节点的最低开销估计。LS算法需要全局信息。
ISP之间的路由选择:BGP
自治系统(Autonomous System,AS)由一组通常处在相同管理机制下的路由器组成,通常在一个ISP中的路由器以及互联它们的链路构成一个AS,当在相同AS内的源和目的地之间进行分组选路时,分组遵循的路径完全由AS内路由选择协议所决定,然而当分组跨越多个AS进行路由时,需要一个自治系统间路由选择协议,因为AS间路由选择协议涉及多个AS之间的协调,所以AS通信必须运行相同的AS间路由选择协议。在因特网中,所有AS运行相同的AS间路由选择协议,该协议称为边界网关协议(Broder Gateway Protocol,BGP),这个协议将因特网中数以千计的ISP粘合起来。
BGP的作用
每台路由器具有一张转发表,该转发表在将到达分组转发到路由器链路的过程中起着主要作用。对于位于相同AS中的目的地而言,在路由器转发表中的表项由AS内部路由选择协议所决定;对于该AS外部的目的地而言则依靠BGP
在BGP中,分组并不是路由到一个特定的目的地址,相反是路由到CIDR化的前缀,其中每个前缀表示一个子网或一个子网的集合;作为一种AS间的路由选择协议,BGP为每台路由器提供了一种完成以下任务的手段:
(1)从邻居AS获得前缀的可达性信息。BGP允许每个子网向因特网的其余部分通告它的存在,同时BGP确保在因特网中的所有AS知道该子网
(2)确定到该前缀的“最好的”路由。一台路由器可能知道两条或更多条到特定前缀的不同路由。为了确定最好的路由,该路由器将本地运行一个BGP路由选择过程(使用它经过相邻的路由器获得的前缀可达性信息)
接下来分别来看这两个任务是如何实现的
通告BGP路由信息
如下图所示有3个自治系统:AS1,AS2,AS3,AS3包括一个具有前缀x的子网,对于每个AS,每台路由器要么是一台网关路由器,要么是一台内部路由器。网关路由器是一台位于AS边缘的路由器,它直接连接到其他AS中的一台或多台路由器,内部路由器仅连接在它自己AS内的主机和路由器。
考虑这样一个任务:向上图所示的所有路由器通告对于前缀x的可达性信息。在宏观上这是很简明的,AS3向AS2通告,AS2再向AS1通告。(这样忽略了自治系统内部相互发送报文)
在BGP中,每对路由器通过使用179端口的半永久TCP连接交换路由选择信息。每条直接连接以及所有通过该连接发送的BGP报文,称为BGP连接。此外跨越两个AS的BGP连接称为外部BGP(eBGP)连接,而在相同AS中的两台路由器之间的BGP会话称为内部BGP(iBGP)
为了传播可达性信息,使用eBGP和iBGP会话。现在考虑我们的任务?在这个过程中,
- 网关路由器3a先向网关路由器2c发送一个eBGP报文"AS3 x";
- 网关路由器2c然后向AS2中的所有其他路由器发送iBGP报文"AS3 x";
- 网关路由器2a向网关路由器1c发送一个eBGP报文"AS2 AS3 x";
- 最后,网关路由器1c使用iBGP向AS1中的所有路由器发送报文段"AS2 AS3 x"
在完成这个过程后,在AS1和AS2中的每个路由器都知道了x的存在并且也知道了通往x的AS路径
确定最好的路由
从一个给定的路由器到一个目的子网可能有多条路径,那一台路由器如何在这些路径之间进行选择(并且再相应地配置它的转发表)?
引入几个BGP术语。
当路由器通过BGP连接通告前缀时,它在前缀中包括一些BGP属性。前缀及其属性称为路由。两个较为重要的属性是AS-PATH和NEXT-HOP。
AS-PATH属性包含了通告已经通过的AS的列表。BGP路由器还使用AS-PATH属性来检测和防止通告环路,(如果一台路由器在路径列表中看到包含了它自己的AS,它将拒绝该通告)
NEXT-HOP是AS-PATH起始的路由器接口的IP地址。
如上图所示,对于从AS1通过AS2到x的路由器“AS2 AS3 x”,其属性NEXT-HOP是路由器2a左边接口的IP地址;对于从AS1绕过AS2到x的路由“AS3 x”,其NEXT-HOP属性是路由器3d最左边接口的IP地址。总的来说,AS1中的每台路由器都知道了到前缀x的两台BGP路由:
路由器2a的最左侧接口的IP地址:AS2 AS3;x
路由器3d的最左侧接口的IP地址:AS3;x
热土豆路由选择
热土豆路由选择(hot potato routing) 的思想是:对于某一路由器,尽可能快地将分组送出其AS(用可能的最低开销),而不担心其AS外部到目的地的余下部分的开销。【所谓热土豆就是烫手的热土豆,因为它烫手,你要尽可能快地将它传给另一个人】(减小在自己AS中的开销,而忽略在其他AS中的开销,可以理解为局部最优)
路由器选择算法
在实践中,BGP使用了一种比热土豆路由选择更为复杂但却结合了其特点的算法。对于任何给定的目的地前缀,进入BGP的路由选择算法的输入是到某前缀的所有路由的集合,该前缀是已被路由器学习和接受的。(如果仅有一条这样的路由,那就选择该路由;如果到相同的前缀有两条或多条路由,则顺序地调用下列规则直到余下一条路由):
(1)路由被指派一个本地偏好值作为其属性之一(除了AS-PATH和NEXT-HOP以外)。一条路由的本地偏好可能由该路由器设置或可能由在相同AS中的另一台路由器学习到。本地偏好属性的值是一种策略决定,具有最高本地偏好值的路由将被选择。
(2)从余下的路由中(所有都具有相同的最高本地偏好值),将选择具有最短AS-PATH的路由。如果该规则是路由选择的唯一规则,则BGP将使用距离向量算法决定路径,其中距离测度使用AS跳而不是路由器跳的跳数。
(3)从余下的路由中(所有都具有相同的最高本地偏好值和相同的AS-PATH长度),使用热土豆路由选择,即选择具有最靠近NEXT-HOP路由器的路由。
(4)如果仍留下多条路由,该路由器使用BGP标识符来选择路由。
IP任播
除了作为因特网的AS间路由选择协议外,BGP还常被用于实现IP任播服务,该服务通常用于DNS中。
SDN控制平面
SDN体系结构有4个关键特征:
- 基于流的转发。SDN控制的交换机的分组转发工作,能够基于运输层、网络层或链路层首部中任意数量的首部字段值进行。SDN控制平面的工作是计算、管理和安装所有网络交换机中的流表项
- 数据平面与控制平面分离。数据平面由网络交换机组成,交换机是相对简单(但快速)的设备,该设备在它们的流表中执行“匹配加动作”的规则。控制平面由服务器以及决定和管理交换机流表的软件组成
- 网路控制功能。位于数据平面交换机外部。控制平面自身由两个组件组成:一个SDN控制器(或网络操作系统)以及若干网络控制应用程序。控制器维护准确的网络状态信息(如远程链路、交换机和主机的状态);为运行在控制平面中的网络控制应用程序提供这些信息;提供方法,这些应用程序通过这些方法能够监视、编程和控制下面的网络设备
- 通过运行在控制平面中的网络控制应用程序,该网络是可编程的。
ICMP:因特网控制报文协议
主机和路由器彼此沟通网络层的信息。ICMP最典型的用途是差错报告。ICMP通常被认为是IP的一部分,但从体系结构上讲它位于IP之上,因为ICMP报文是承载在IP分组中的。
ICMP报文有一个类型字段和一个编码字段,并且包含引起该ICMP报文首次生成的IP数据报的首部和前8个字节,下图显示了所选的ICMP报文类型