网络层(控制平面)

354 阅读21分钟

概述

控制平面不仅控制沿着源主机到目的主机的端到端路径间的路由器如何转发数据,而且控制网络层组件和服务如何配置和管理,连接数据平面和控制平面的首要元素是转发表(基于目的地转发)、流表(通用转发),完成转发表和流表的计算、维护和安装工作有两种方法:

  • 每路由器控制:每台路由器中都包含转发路由选择功能,都有一个路由选择组件,用于与其他路由器中的路由选择组件通信,以计算其转发表的值。OSPFBGP协议都是基于这种方法控制的;
  • 逻辑集中式控制逻辑集中式控制器计算并分发转发表以供每台路由器使用,该控制器经一种协议与每台路由器中的一个控制代理(CA) 进行交互,以配置和管理路由器的转发表,CA的任务是与控制器通信按控制器命令行事,它们既不能直接相互交换,也不能主动参与计算转发表。SDN采用了逻辑集中式控制器的概念。

路由选择算法

路由选择算法的目的是从发送方到接收方的过程中确定一条通过路由器的最佳路径,如开销最低、或结合策略决定的路径。路径选择问题可以用来描述,图G=(N,E)是一个N个节点和E条集合,在路由选择中,节点表示路由器,而边表示路由器之间的物理链路,通常一条边还有一个表示它的开销,对于E中的一条边(x,y),我们用c(x,y)表示x和y之间的开销,如果节点对(x,y)属于E,节点y称为x的邻居,如果(x,y)不属于E,则c(x,y)=\infty。所有路径中的一条或多条是最低开销路径,也是最短路径

路由选择算法按照集中式分散式可分为:

  • 集中式路由选择算法:用完整的、全局性的网络知识计算出从源到目的地之间的最低开销路径,以所有节点之间的连通性以及所有链路开销作为输入,因此在开始计算前要先获得这些信息,计算可在逻辑集中控制器或每个路由器的路由选择组件中进行。这种具有全局状态信息的算法被称作链路状态(LS)算法
  • 分散式路由选择算法:路由器以迭代、分布式的方式计算最低开销路径,没有节点拥有完整信息,而是仅有与其直接相连链路的信息,通过迭代计算以及与相邻节点进行信息交换,一个节点逐渐计算出到达某个或一组目的节点的最低开销路径。距离向量(DV)算法便是其中一种。

根据算法是静态还是动态可分为:

  • 静态路由选择算法:路由随时间的变化非常缓慢,通常是人工进行调整;
  • 动态路由选择算法:路由选择路径随着网络流量负载拓扑发生变化而改变,可周期性运行或是直接响应拓扑或链路开销变化而运行。易对网络变化做出反应,但也容易受到路由选择循环、路由振荡等问题的影响。

根据算法是负载敏感还是负载迟钝可分为:

  • 负载敏感算法:链路开销动态地变化反映出底层链路的拥塞水平,该路由算法会趋向于绕开拥塞链路来选择路由;
  • 负载迟钝算法:链路的开销不明确地反映当前或最近的拥塞水平。

链路状态(LS)算法

在LS算法中,网络拓扑所有链路的开销都是已知的,实践中通过让每个节点向网络中所有其他节点广播 链路状态分组来实现,每个链路状态分组包含它所连接的链路的标识开销,这通常由链路状态广播算法完成,从而所有节点都具有该网络统一、完整的视图,并能够运行LS算法计算出相同的最低开销路径集合。常用的LS算法有Dijkstra算法,可用于构建从源节点到所有目的节点完整路径

距离向量(DV)算法

DV算法是一种迭代、异步、分布式的算法,每个节点都从一个或多个邻居接收信息,执行计算并将计算结果分发给邻居(分布式);该过程将持续到邻居间无更多信息要交换为止(迭代);这些过程不要求所有节点相互步伐一致地操作(异步)。

其基本思想为:令Dx=[Dx(y):yN]D_{x}=[D_x(y): y\in N]表示从x到N中的所有其他节点y的开销估计向量,每个节点x维护下列路由选择信息

  • 对于x的每个邻居v,从x到v的开销为c(x,v)c(x,v)
  • 节点x的距离向量Dx=[Dx(y):yN]D_{x}=[D_x(y): y\in N]包含了从x到N中所有目的地y的开销估计值
  • 对于x的每个邻居v,有Dv=[Dv(y):yN]D_{v}=[D_v(y): y\in N]

每个节点会不时地向邻居发送它的距离向量副本。当节点x收到任何一个邻居v发送的新距离向量,便会保存并按照如下公式更新Dx(y)=minv{c(x,v)+Dv(y)}D_x(y)=min_v\left \{ c(x,v) + D_v(y) \right \},如果x的距离向量因这个更新而改变,则x接下来向每个邻居发送更新后的距离向量,继而使得所有邻居更新自己的距离向量。

选择环路

如图:

02d0578b747d6ef6403747c68bb14dd.jpg

  1. t0时刻,Dy(x)=4D_y(x)=4Dy(z)=1D_y(z)=1Dz(y)=1D_z(y)=1Dz(x)=5D_z(x)=5;
  2. t1时刻,y检测到链路开销变化,此时c(y,x)=60,于是更新Dy(x)=min{c(y,x)+Dx(x),c(y,z)+Dz(x)}=min{60+0,1+5}=6D_y(x)=min\left \{ c(y,x)+D_x(x), c(y,z)+D_z(x) \right \}=min\left \{ 60+0,1+5 \right \}=6,显然错误;
  3. t2时刻,z收到来自y的更新报文,更新到x的最低开销Dz(x)=7D_z(x)=7,显然错误;
  4. 类似地,接下来y收到z的更新报文后更新Dy(x)=8D_y(x)=8,z收到y的更新报文后更新Dz(x)=9D_z(x)=9,如此往复,直到z算出它经过y的路径开销大于50为止。

因此路由选择环路就会导致类似这种y错误计算到达x的最短路径经过z,z又因此错误计算到达x的最短路径经过y,如此循环往复的故障。以上特定场景可以使用毒性逆转的方式避免,即让z向y通告Dz(x)=D_z(x)=\infty,但是不适用于涉及3个以上节点的环路

LS与DV算法的比较:

  • 报文复杂性:LS算法要求每个节点知道网络中每条链路的开销,这就要发送O(|N||E|)个报文;DV算法要求在每次迭代时,在两个直接相连的邻居之间交换报文,仅当在新开销导致与该链路相连节点的最低开销路径发生改变时,才传播已改变的链路开销。
  • 收敛速度:LS在直接相连的路由之间维护正常的邻居关系,这允许路由更快收敛;而DV算法收敛较慢,且在收敛过程中会遇到选路环路,遭到计数无穷大的问题。
  • 健壮性:如果一台路由器发生故障,行为错乱或受到破坏时,对于LS算法,LS节点仅计算自己的转发表,路由计算有些是孤立的,提供了一定程度的健壮性;在DV算法下,一个节点可向任意或所有的目的节点通告其不正确的最低开销路径,一个不正确的节点计算值会扩散到整个网络。

自治系统相关路由选择协议

自治系统(AS) 由一组通常处在相同管理控制下的路由器组成,由其全局唯一的ASN所标识,在相同AS中的路由器都运行相同的路由选择算法并有彼此的信息。在一个自治系统内运行的路由选择算法叫做自治系统内部路由选择协议跨越多个自治系统运行的路由选择算法叫做自治系统间路由选择协议

OSPF

开放最短路由优先(OSPF) 是一种自治系统内部路由选择协议,它使用洪泛链路状态信息Dijkstra最低开销路径算法,每台路由器在本地运行Dijkstra算法以确定一个以自身为根节点到所有子网的最短路径树,各条链路开销由网络管理员进行配置。

使用OSPF时,路由器向AS内所有其他路由器广播路由选择信息,每当一条链路状态发生变化,路由器就会广播链路状态信息,即使链路状态未发生变化,也要周期性地广播链路状态信息。OSPF通告包含在OSPF报文中,该报文由IP承载。

OSPF的优点包括:

  • 安全:基于配置在所有路由器上的共享密钥,使用MD5对路由器所发送的分组进行鉴别,仅受信任的的路由器能够参与一个AS内的交换;
  • 多条相同的开销路径:当到达某目的地的多条路径具有相同开销时,OSPF允许使用多条路径,无须选择单一的路径承载所有流量;
  • 对单播与多播路由选择的综合支持:多播OSPF(MOSPF)提供对OSPF的简单扩展,以便提供多播路由选择;
  • 支持在单个AS中的层次结构:一个OSPF自治系统能够层次化地配置多个区域,每个区域都运行自己的OSPF算法,AS内的路由也只向自己区域内广播链路状态。一个AS中只有一个OSPF主干区域,用于为该AS中其他区域之间的流量提供路由选择,每个区域中还会有区域边界路由器,用于连接该区域和主干区域。

BGP

边界网关协议(BGP) 是一种自治系统间路由选择协议。在BGP中,分组不是路由到一个特定的目的地址,而是到CIDR化的前缀,每个前缀表示一个子网子网的集合,一台路由器的转发表将具有形式为(x,I)(x,I)的表项,其中x为前缀,I为接口号。使用BGP时,每台路由器从邻居AS获得前缀的可达性信息,使用这些信息运行BGP路由选择过程,以确定到达该前缀最好的路由

对于每个AS,每台路由器要么是一台网关路由器,位于AS边缘,并直接连接到在其他AS中的一台或多台路由器;要么是一台内部路由器,仅连接自己AS中的主机和路由器。每对路由器通过179端口的半永久TCP连接交换路由选择信息,每条直接连接以及所有通过该连接发送的BGP报文称为BGP连接跨越两个AS的BGP连接称为外部BGP连接(eBGP);在相同AS中两台路由器之间的BGP会话称为内部BGP连接(iBGP)。如下图AS3向AS1的通信过程:

9829984761b2ef879594b6d871ab659.jpg

确定最好的路由

当路由器通过BGP连接通告前缀时,它在前缀中包括一些BGP属性,该前缀及其属性称为路由。属性中包括:

  • AS-PATH:包含通告已经通过的AS的列表,当一个前缀通过某AS时,该AS将其ASN加入AS-PATH中的现有列表,同时AS-PATH属性还能用于检测和防止通告环路,如果一台路由器在路径列表中看到包含它自己的AS,它将拒绝该通告;
  • NEXT-HOP:AS-PATH起始路由器接口IP地址

因此每条BGP路由包含3个组件:NEXT-HOP、AS-PATH、目的前缀。

热土豆路由选择算法

热土豆路由选择算法选择的路由到达NEXT-HOP具有最小开销,即其思想是尽可能快地将分组送出AS,而忽略其在AS外部到目的地的余下部分的开销;

BGP路由选择算法

BGP使用了一种比热土豆路由选择更复杂但结合了其特点的算法:

  • 对于任何给定的目的地前缀,BGP的路由选择算法的输入是到某前缀的所有路由的集合,该前缀是已被路由器学习和接受的;

  • 如果仅有一条这样的路由,BGP显然选择该路由;

  • 如果有多条路由,则顺序地调用下列规则,直到余下一条路由:

    1. 路由被指派一个本地偏好值作为属性之一,该值是一种策略决定,完全取决于该AS的网络管理员,具有最高本地偏好值的路由将被选择;
    2. 从余下的路由中选择具有最短AS-PATH的路由,如果该规则是路由选择的唯一规则,BGP将使用距离向量算法决定路径,其中距离测度使用AS的跳数(不是路由器的跳数);
    3. 从余下的路由中使用热土豆路由选择,即在具有相同本地偏好值和AS-PATH长度的路由中选择具有最靠近NEXT-HOP的路由;
    4. 如果仍余下较多路由,则使用BGP标识符来选择路由。

相比于热土豆路由选择算法,BGP的路由选择算法先查找具有较短AS路径的路由,从而更有可能减小端到端时延。

IP任播

BGP还常被用于实现IP任播服务,该服务常用于DNS中。IP任播的应用包括:

  • 在许多分散的不同的地理位置,替换不同服务器上的相同内容
  • 让每个用户从最靠近的服务器访问内容。

在IP任播配置阶段,CDN公司为它的多台服务器指派相同的IP地址,并使用标准的BGP从每台服务器通告该IP地址,当某台BGP路由器收到对于该IP地址的多个路由通告,它将这些通告处理为对相同的物理位置提供不同的路径,当配置其路由选择表时,每台路由器将本地化使用BGP路由选择算法来挑选到该IP地址最好的路由。

在以上初始BGP地址通告阶段后,CDN能够进行分发内容

路由选择策略

路由选择算法实际上首先根据本地偏好属性选择路由,本地偏好值由本地AS策略所确定,例子如下:

53024ce696e958ae31549bb5abb5db9.jpg

桩网络:所有进入一个接入ISP网络的流量必定以该网络为目的地,所有离开一个接入ISP网络的流量必定源于该网络,即不提供接入ISP网络不提供其他流量的转发。上图中的X是一个多宿接入ISP,X能够通过控制BGP路由的通告方式实现防止转发B、C之间的流量,即X向B、C通告它没有路径通向任何其他目的地(如Y),那么它将起到一个接入ISP的作用,即不会被用于流量的转发。

SDN控制平面

SDN体系结构具有4个关键特征:

  • 基于流的转发:SDN控制的交换机的分组转发工作能够基于传输层、网络层、链路层 首部中任意数量的首部字段值进行;
  • 数据平面与控制平面分离:数据平面由网络交换机组成,该设备在它们的流表中执行匹配加动作规则;控制平面由服务器、决定和管理交换机流表的软件组成;
  • 网络控制功能:位于数据平面交换机外部,由运行在服务器上的软件实现。控制平面自身由两个组件组成:一个SDN控制器,若干个网络控制应用程序,控制器有以下功能:
    • 维护准确的网络状态信息
    • 为运行在控制平面中的网络控制应用程序提供这些信息;
    • 提供方法,以供这些应用程序监视、编程、控制网络设备。
  • 可编程的网络:通过运行在控制平面中的网络控制应用程序,该网络是可编程的,这些应用程序使用由SDN控制器提供的API来定义和控制网络设备中的数据平面。

从而可以看出,SDN表示了一种意义重大的网络功能的分类,即数据平面交换机、SDN控制器、网络控制应用程序分离的实体。

SDN控制器和SDN网络控制程序

SDN控制平面大体可分为SDN控制器SDN网络控制程序两部分。其中SDN控制器的功能自底向上可大致分为3个层次:

  • 通信层SDN控制器受控网络设备之间的通信,SDN控制器通过一个协议传送控制器与设备之间的信息,设备向控制器传递本地观察到的事件,这些事件向SDN控制器提供该网络状态最新视图。控制器和受控设备之间的通信跨越了一个接口,称为南向接口
  • 网络范围状态管理层:由SDN控制平面所作出的最终控制决定要求控制器具有关于网络的主机、链路、交换机、其他SDN控制设备最新状态信息
  • 对于网络控制应用程序层的接口:控制器通过它与网络控制应用程序交换,被称为北向接口。该API允许网络控制应用程序在状态管理层之间读/写网络状态和流表。当状态改变事件出现时,应用程序能够注册进行通告。此外可以提供不同的API。

SDN控制器被认为是逻辑上集中的,可以被外部视为一个单一、整体的服务。

OpenFlow协议

OpenFlow协议运行在SDN控制器和SDN控制器的交换机或其他实现OpenFlow API的设备之间,它运行在TCP之上,使用6653的默认端口号。从控制器到受控交换机流动的重要报文包括:

  • 配置:允许控制器查询并设置交换机的配置参数
  • 修改状态:由控制器使用,以增加、删除、修改交换机流表中的表项,设置交换机端口特性
  • 读状态:被控制器用于从交换机的流表和端口收集 统计数据计数器值
  • 发送分组:被控制器用于在受控交换机特定的端口发送一个特定的报文

从受控交换机到控制器流动的重要报文包括:

  • 流删除通知控制器已删除一个表项;
  • 端口状态:交换机用该报文项控制器通知 端口状态的变化;
  • 分组入:一个分组到达交换机端口,并且不能与任何流表项匹配,那么这个分组将被发送给控制器进行额外处理;匹配上的分组也能被发送给控制器作为匹配时所采取的一个动作分组入报文用于将分组发送给控制器。

数据平面与控制平面的交互

假定OpenFlow被用作通信层协议,控制平面只执行链路状态选择,如图:

acf641ccf43f926c252cef8bd013273.jpg

  1. 交换机s1经历了自己与s2之间的链路故障,使用OpenFlow端口状态报文向SDN控制器通报链路状态更新;
  2. SDN控制器接收到链路状态更新报文,并通告链路状态管理器更新链路状态库
  3. 实现Dijkstra链路状态路由选择的网络控制应用程序先前进行了注册,当链路状态更新时将得到通告。此时它接收到链路状态更新通告;
  4. 链路状态路由选择应用程序链路状态管理器相互作用,或是参考状态管理层中的其他组件,得到更新的链路状态,然后计算新的最低开销路径
  5. 链路状态路由选择应用程序流表管理器交互,流表管理器决定更新的流表;
  6. 流表管理器使用OpenFlow协议更新位于受影响的交换机s1、s2、s4的流表项。

ICMP

因特网控制报文协议(ICMP) 被主机和路由器用来彼此沟通网络层的信息,它位于IP之上,ICMP报文作为IP有效载荷承载,ICMP报文有一个类型字段和一个编码字段,并且包含引起该ICMP报文首次生成的IP数据报的首部前8个字节

Traceroute

Traceroute是用ICMP报文实现的,源主机中的Traceroute向目的地主机发送一系列普通IP数据报,这些数据报每个携带了一个具有不可达UDP端口号UDP报文段。第一个数据报的TTL为1,之后每个依次加1,同时为每个数据报启动定时器,当第n个数据报到达第n台服务器时,该数据报的TTL正好过期,因此该路由器丢弃该数据报并发送一个ICMP警告报文给源主机,该警告报文包含了路由器的名字IP地址。当该ICMP报文返回源主机,源主机从定时器得到往返时延,从ICMP报文中得到第n台路由器的名字和IP地址

网络管理

网络管理包括了硬件、软件和人类元素的设置、综合和协调,以监视、测试、轮询、配置、分析、评价和控制网络及网元资源,用合理的成本满足实时性、运营性能和服务质量的要求。

网络管理框架

网络管理的关键组件包括:

a42f8287b9882e5d17b4412bed0dee6.jpg

  • 管理服务器:一个运行在网络运营中心(NOC) 的集中式网络管理工作站上的应用程序,通常有人的参与,是执行网络管理活动的地方,控制网络管理信息收集、处理、分析、显示,以及发起控制网络行为的动作。
  • 被管设备:位于被管理的网络中的硬件和软件,一个被管设备中有几个被管对象,即被管设备中硬件的实际部分和用于这些硬件及软件的配置参数
  • 管理信息库(MIB):一个被管设备中的每个被管对象的关联信息收集在MIB中,这些信息的值可被管理服务器所使用;
  • 网络管理代理:运行在被管设备中的一个进程,与管理服务器通信,在管理服务器的命令和控制下在被管设备中采取本地动作
  • 网络管理协议:运行在管理服务器和被管设备之间,允许管理服务器查询被管设备的状态,并经过其代理间接在这些设备上采取行动,代理能够使用网络管理协议向管理服务器通知异常事件

SNMP

简单网络管理协议版本2(SNMPv2) 是一个应用层协议,用于在管理服务器代表管理服务器执行的代理之间传递网络管理控制信息报文。SNMP最常用的是请求响应模式;另一种常被使用的是代理向管理服务器发送的一种非请求报文,称为陷阱报文,用于通知管理服务器一个异常情况已经导致了MIB对象值改变

SNMPv2定义了7种类型的报文,一般称为协议数据单元(PDU)

0de39ae152ab12ae783389916ca2db9.jpg

SNMP PDU通常作为UDP数据报的载荷进行运输。为了保证可靠性,管理服务器通过PDU的请求ID字段将它向代理发送的请求进行编号,该代理从接收到的请求报文中获取请求ID字段,并进行响应,代理服务器根据是否收到该请求ID字段的响应检测丢失情况,从而决定是否重传。