第五章 网络层:控制平面

第五章 网络层:控制平面

5.1 概述

控制平面有两种形式:

  • 每路由器控制

    在每一台路由器中都运行一种路由选择算法,包含了转发以及路由选择功能,数据平面和控制平面都有。在路由器中的控制平面,根据路由选择算法计算出转发表,然后由数据平面根据转发表进行数据的转发。

  • 逻辑集中式控制

    由远程逻辑集中控制器计算并分发转发表(流表),流表中的每一项都是“匹配加动作”形式。动作可以为转发,丢弃,修改字段等等。注意:控制器在逻辑上是集中的,但是为了增强服务的容错性以及扩展性,物理实现采用分布式实现。

5.2 路由选择算法

从发送主机到接收主机,总是存在一条定义良好的一连串路由器,路由选择算法的目的就是,需要从这一连串的路由器所构成的路由器网络中选择一条合适的路径。

对路由器网络的形式化表示如下:

  • 节点——路由器
  • 边——路由器之间的物理链路
    在这里插入图片描述

合适的理解:
合适可以是开销最小、也可以是与经济、政治相关的策略

  • 开销最小

    跳数、延迟、费用等

  • 经济、政治

    属于组织Y的路由器X不应该转发任何来源于组织Z所属网络的分

对路由选择算法的分类:

  • 集中or分散

    • 集中:在计算之前,该节点需要获得整个网络的所有节点之间的连通性以及边的权重。——LS
    • 分散:每个节点仅有与其直接相连链路的开销就可开始计算,迭代、分布式地计算最低开销路径,最终会收敛。——DV
  • 静态or动态

    • 静态

      路由随时间变化缓慢、通常由人工调整

    • 动态

      随着网络流量负载或拓扑发生变化而改变路由选择路径

  • 负载敏感or负载迟钝

    • 敏感

      链路开销动态地反映底层链路的当前拥塞水平

    • 迟钝

      链路开销不明确地反映当前的拥塞水平

5.2.1 链路状态算法(LS)

在LS算法中,通过链路状态广播,使得每个节点向网络中的所有其他节点广播链路状态分组(表示了该节点与哪些节点相连接以及对应的开销),最终每个节点都能得到整个网络的拓扑和所有的链路开销。

得到了整个网络的视图之后,利用Dijkstra算法计算最短路径,过程如下:

用数组D[v]表示当前从源节点到节点v的最低开销路径的开销

  • 初始化部分

    将源节点加入到已访问的节点集合当中,然后将源节点与其邻居节点的开销添加到D[邻居节点]

  • 然后从D数组中找出D[未被访问过的节点v]值最小的节点,访问该节点vi,将其标记为已访问,然后通过D[vi]对其他节点进行松弛。也就是从源节点通过vi节点到达目标节点是否会更近。(D[vi] + c(vi,di) ?? D[di]),如果确实更近,那么就进行赋值:D[di] = D[vi] + c(vi,di)

当所有节点都被标记为已访问时,算法结束。
在这里插入图片描述

当链路代价未链路承载的流量时(链路拥塞程度),如果计算出一条拥塞程度较小的链路,那么路由选择算法会将分组都引导向该链路,导致该链路上的分组越来越多,拥塞程度提高。每一次路由算法的选择,最终都会导致拥塞程度提高,导致不断地切换链路,震荡。

一种可能的解决方案是:让路由器不同时运行LS算法,这样分组就不会只按一种可能的路径传输。

5.2.2 距离向量算法(DV)

(1)概述

DV算法是一种迭代、异步、分布式的算法。每个节点从其邻居节点获取信息计算最优路径。
x → y 的最低开销路径的开销, v 是 x 的邻居: d x ( y ) = m i n v { c ( x , v ) + d v ( y ) } x→y的最低开销路径的开销,v是x的邻居:\\d_x(y) = min_v\{c(x, v) + d_v(y)\} xy的最低开销路径的开销,vx的邻居:dx(y)=minv{c(x,v)+dv(y)}
使得dx(y)最小的v就是x的下一跳。

每个节点x维护的路由选择信息有:

  • x到其邻居v的开销c(x, v)
  • x的距离向量,Dx 该向量表示了从节点x到网络中所有的其他节点的开销估计。
  • x的邻居x的距离向量

DV算法中的每个节点在其自身的距离向量发生了更新时都会向其邻居发送。然后邻居再根据新收到的距离向量更新自身的距离向量。

每个节点x会在以下两种情况更新其自身的距离向量:

  • 与x直接相连的链路开销发生了变化

  • 从某个邻居收到了新的距离向量
    在这里插入图片描述
    DV算法的执行过程如下:

  • 初始状态下,由于还没有收到来自邻居节点的距离向量,所以在当前节点中关于邻居节点距离向量的记录都是∞

  • 然后节点将自己的距离向量发送给自己的邻居,邻居收到了该节点的距离向量之后会计算自己的距离向量,如果计算之后没有进行更新,那么就不会向邻居发生自己的距离向量,如果有更新,那么就发送

  • 重复执行第二步,直至所有节点都没有更新了,就都不再进行发送。

  • 等到有与当前节点相连的链路的开销发生了变化时,计算距离向量,再开始执行第二部
    在这里插入图片描述

(2)DV的无穷计算问题

好消息传得快:假设有这样一条链路,A-B-C-D-E。一开始AB之间是断开的,AB的链路开销为∞,然后在某一时刻,AB之间连接上,且开销为1

以下表横向表示从其他节点到A的开销,纵向表示时间

ABCDE
1
12
123
1234

好消息以以每交换周期前进一个路由器的速度前行。

坏消息传得慢:还是该链路,假设某时刻AB之间的链路又突然断开了,会出现无穷计算问题。

ABCDE
1234
3234
3434
5454
5656
7676
7878

会一直计算下去…

使用毒性逆转来避免这种循环场景。

假设场景:z→y→x,z需要经过y到达x,那么z会向y通告z到x的距离是无穷大,也就是Dz(x) = ∞,只要当前确定的z到达x的路径中必须经过y,那么就需要这样去做, 这样y就永远不会试图经由z路由选择到x。

将毒性逆转应用于前面的例子,可以看到很快就解决了循环的问题:

ABCDE
1∞|2∞|3∞|4

(考虑三个节点连接而非两个连接的情形,无法使用毒性逆转技术检测到)

当网络拓扑存在环路时,毒性逆转会失败。

在这里插入图片描述

(3)LS与DV比较
  • 报文复杂性

  • 收敛速度

  • 健壮性——网络的稳定性与可靠性

    对于LS算法,每个节点根据自己收到的整个网络的拓扑,计算在某种程度上是分离的,所以即便是一个节点向其连接的链路广播不正确的开销,其他节点可能也不会受其很大影响,有一定的健壮性。

    但是对于DV算法,每个节点计算的依赖性强,如果有节点向其他节点通告其不正确的路径,那么可能会很快蔓延到整个网络。

5.3 因特网中自治系统内部的路由选择

网络可以视为互联路由器的选择,但是随着路由器的数目增多,直接对整个网络进行路由选择,那么路由选择信息将会过于庞大。同时,对于每个ISP来说,并不都希望按照相同的方式管理路由器,或者并不希望所管理的网络的内部组织对外界开放。

由于存在上述问题,引入了自治系统的概念(AS),AS由一组处在相同管理控制下的路由器组成,在一个ISP中的路由器以及互联它们的链路构成一个AS(也存在ISP会将其网络再划分成多个AS的情况)。对于一个AS有一个全局的ASN号标识,在相同的AS中的路由器运行相同的路由选择算法并且拥有彼此的信息。

因特网中自治系统内部的路由选择协议——就是指在一个AS系统内部运行的路由选择算法。

1、RIP

基于距离向量算法(DV),每个路由器会计算自己到达目标子网的代价,然后将自己的距离向量打包成一个通告发送给邻居。

  • 交换通告报文
    • 定期30s与邻居交换通告报文
    • 路由发生了改变时
    • 对方请求

每一个通告中最多只会包括AS内部的25个目标网络的DV(最多只有25个,只能适用于比较小型的网络)

在这里插入图片描述
如果180s都没有收到通告信息,说明邻居或者链路失效。当前节点就会将这个不可达信息传遍网络,需要使用毒性逆转来阻止可能的无限循环。

RIP协议以应用进程方式实现,通告报文通过UDP报文传输,周期性重复,也就是说RIP是一个网络层的服务,但是以应用进程的方式实现,路由器之间的通告信息通过传输层来传送。

2、OSPF

基于链路状态算法,每台路由器在本地运行Dijkstra的最短路径算法,以确定一个以自身为根节点到所有子网的最短路径树。链路开销由网络管理员进行配置,OSPF只进行给定链路权值集合确定最低开销路径的路由选择。

与之前所述的链路状态算法稍有不同,OSPF不单向其相邻路由器广播路由选择信息,而是向AS内的所有其他路由器广播路由选择信息。当某一条链路状态发生了变化时,路由器会广播链路状态信息,即使链路状态没有发生变化,也要周期性的广播链路状态。

OSPF在网络层实现,使用IP承载OSPF报文。

OSPF的优点:

  • 安全

    仅有受信任的路由器能参与 AS 内的 OSPF 协议,会对路由器发送的OSPF报文进行鉴别,有简单鉴别与MD5两种方式

  • 多条相同开销的路径

  • 对单播与多播路由选择的综合支持

  • 支持在单个 AS 中的层次结构
    在这里插入图片描述
    有些情况下,所希望的流路由选择已知,但为了实现这种期望的流路由选择,必须找到适当的OSPF链路权重。这就是所说的链路权重和路由选择路径之间的相反因果关系。运营商需要通过调整链路权重来实现所需的路由选择路径,以满足特定的流量工程目标。

5.4 ISP之间的路由选择:BGP

当分组跨越多个AS进行路由时,需要一个自治系统间的路由选择协议进行选择。

BGP协议是自治区域间路由协议“事实上的”标准,该协议将因特网中数以千计的ISP黏合起来。BGP是一种分布式和异步的协议。

平面路由与层次路由

平面路由

在网络中的所有路由器的地位相同,通过LS,DV或者其他的路由算法,所有的路由器都要知道到网络中的其他所有路由器该如何走,路由器都在一个平面上。

存在的问题:

在这里插入图片描述

层次路由

将互联网分成一个个的AS,路由变成了2个层次的路由:

  • AS内部路由
  • AS间路由协议

优点:

在这里插入图片描述

5.4.1 BGP的作用

在这里插入图片描述
在每一台路由器中都有转发表,在同一个AS中的路由器转发表的表项由AS内部之间选择协议确定。BGP决定AS之间的转发,能够为每台路由器完成以下功能:

  • 从邻居AS获得前缀的可达性信息

    前缀指子网前缀,表示了一个子网的集合

  • 确定到该前缀的“最好的”路由

5.4.2 通告BGP路由信息

对于每个AS,每台路由器要么为网关路由器,要么为内部路由器

  • 网关路由器:

    网关路由器是一台位于 AS 边缘的路由器

  • 内部路由器:

    内部路由器仅连接在它自己 AS 中的主机和路由器

BGP连接:

在BGP中,每对路由器通过使用179端口的半永久TCP连接交换路由选择信息。直接连接以及通过该连接发送的BGP报文称为BGP连接。

  • 外部BGP连接(eBGP)

    跨越两个AS的BGP连接

  • 内部BGP连接(iBGP)

    在相同AS中的两台路由器之间的BGP会话,目的是将从eBGP获得的有关信息传播到AS内部,注意iBGP连接并不总与物理链路对应
    在这里插入图片描述

5.4.3 确定最好的路由

从一个给定的路由器到一个目的子网可能有多条路径,如何确定一条合适的路径。

当路由器需要通过BGP来通告某个前缀时,会在前缀中增加一些BGP属性。前缀+属性 = 路由。

属性有:

  • AS-PATH

    包含了通告已经通过的 AS 的列表,为了生成 AS-PATH值,当 个前缀通过某 AS 时,该 AS 将其 ASN 加入 AS-PATH 中的现有列表。

    BGP可以通过AS-PATH属性检测以及防止通告环路,如果一台路由器在路径列表中看到包含了它自己的 AS, 它将拒绝该通告。

  • NEXT-HOP

    NEXT-HOP是AS-PATH 起始的路由器接口的 IP 地址,不是位于AS1的某个路由器的IP地址,而是下一个AS集合中的某个路由器的IP地址。

所以BGP路由会包括:NEXT-HOP;ASPATH;目的前缀。一条BGP路由也还可包含其他属性。

BGP路由选择算法

在这里插入图片描述
1、热土豆路由选择

热土豆选择策略指从所有可能的路由中选择的路由到开始该路由的NEXT-HOP路由器具有最小开销。

对于上图1b,就会查看其到2a或者3d的开销。选择具有最低开销的那一条。路由器就会将(x,I)加入到转发表中,I是路由器2a的NEXT-HOP接口。

在这里插入图片描述
热土豆路由选择依据的思想是:对于路由器 lb, 尽可能快地将分组送出其 AS (更明确地说,用可能的最低开销),而不担心其 AS 外部到目的地的余下部分的开销。减少在自己AS中的开销,而忽略AS之外的端到端开销的部分。

2、路由器选择算法

对于给定的目的前缀,有多条路由可以到达该前缀(如果只有一条那就直接选这一条就可以了),那么可以使用下列消除规则:

  • 路由器被指派一个本地偏好值作为其属性之一。

    本地偏好可以由该路由器设置或者可以由在相同AS中的另一台路由器中学习到。具有最高本地偏好值的路由将被选择。

  • 从余下的路由中选择具有最短AS-PATH的路由。

    BGP使用距离向量算法决定路径,距离测度使用AS跳的跳数而非路由器的跳数。

  • 从余下的路由中使用热土豆路由选择,即选择具有最靠近NEXT-HOP的路由

  • 若还有多个路由器可供选择,使用BGP标识符选择路由。

对于AS间的路由选择,本地偏好值更为重要(不通过某个AS等),在满足了本地偏好值的前提下再去寻找一条相对较优的路径,一条较优路径的选择基于距离向量算法,将整个AS看作网络中的一个节点(链路开销为AS跳的跳数),此时仍还有可能有多条路径可供选择,然后再热土豆。

5.4.4 IP任播

BGP可以用于实现IP任播

配置阶段:为多台服务器指派相同的IP地址,并且使用BGP让这些服务器向网络通告IP地址,当某台BGP路由器收到对于该IP地址的多个路由通告时,它会以为是为一个在一个位置的IP提供了不同的路由选择(实际上是一个IP有多个物理位置以及不同的路由选择),在配置路由选择表时,每台路由器会本地化的使用BGP路由选择算法选择到该IP地址最好的路由,这样分布在不同位置的路由器就会分别选择自己的最好的路由。

IP任播可以应用于CDN、DNS。CDN在实践中应用的较少,因为BGP路由选择的变化就会导致TCP连接的分组到达不同的服务器实例。DNS应用广泛,DNS服务器有13个IP地址,每个IP地址都有多个DNS根服务器。

5.4.5 路由选择策略——本地偏好值

在路由器选择算法中,本地偏好值是最优先被考虑的。本地偏好值由本地AS的策略所确定。
在这里插入图片描述
A、B、C都是提供商网络,W、Y是接入ISP,X是多宿接入ISP。X可以知道B、C的全部BGP信息,如何保证X转发BC之间的流量?可以通过控制BGP路由的通告方式实现,让X向BC通告其没有通向其他目的地的路径,这样可以使得X仅作为一个接入ISP。——使用一条选择的路由通告策略来实现客户/提供商路由选择关系。

对于提供商B,可能它认为不应该承担在A与C之间传送流量的负担(和开销),也可以通过本地实现。

5.4.6 建议通读

p264

5.5 SDN控制平面

SDN体系结构整体如下:包含了SDN控制的交换机(数据平面)、SDN控制器以及网络控制应用程序(控制平面)。
在这里插入图片描述
SDN体系结构的四个特征:

  • 基于流的转发,可以根据多个不同的首部字段进行转发
  • 数据平面与控制平面分离
  • 网络控制功能:一个SDN控制器维护准确的网络状态信息,网络控制应用程序维护准确的网络状态信息
  • 可编程网络,可以利用控制器所提供的统一的接口实现不同的网络控制应用程序以实现不同的功能

5.5.1 SDN控制平面:SDN控制器与SDN网络控制应用

控制器的功能可以分为三个层次:
在这里插入图片描述

  • 通信层:SDN控制器与受控网络设备之间的通信

  • 网络范围状态管理层

    这一层中有网络的主机、链路、交换机以及其他SDN控制设备的最新状态信息

  • 对于网络控制应用的接口

    北向API与网络控制应用相连,应用可以通过接口获得网络范围状态管理层的信息

SDN控制器的实现方式是:“逻辑上集中”,物理上(实践上)通过分布式服务器实现。

5.5.2 OpenFlow协议

OpenFlow运行在SDN控制器预计SDN控制的交换机上,分为从控制器流向交换机的报文和从交换机流向控制器的两种报文:

  • 上报状态
  • 下发流表

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

在以往的使用Dijkstra算法实现最短路径时,需要:

  • 每个路由器都运行Dijkstra算法
  • 路由器向全网发送自己的链路状态信息

在SDN场景下:

  • Dijkstra算法实现最短路径在SDN网络控制应用程序部分实现,位于交换机外部,通过北向接口获取网络拓扑以及链路状态信息
  • 分组交换机向SDN’控制器发送自己的链路状态更新,而不会相互发送
    在这里插入图片描述
    当链路状态发生了更新时,这个更新会首先通过OpenFlow协议发送到控制器的通信层,然后通告链路状态管理器, 由管理器更新链路状态库。通告Dijistra应用程序(先前进行了注册,注册之后当链路状态发生了更新时会收到通告),然后就可以根据新的链路状态计算出新的最低开销路径,计算出来的路径会更新到流表管理器。

5.6 ICMP:因特网控制报文协议

ICMP用于主机和路由器之间彼此沟通网络层的信息,常用于差错报告。

ICMP的报文承载在IP分组当中,作为IP有效载荷部分。

ICMP报文包含了类型字段和编码字段,类型与编码的不同组合对应不同的功能。

在这里插入图片描述
ICMP报文应用:

ping程序:

用于测试主机之间的可达性,发送小数据包到目标主机并等待响应。

发送方发送一个类型为8,编码为0的请求。目的主机接收到该请求之后,会发回一个ICMP类型的0编码0的报文的ICMP回显回答。

traceroute程序:

该程序允许跟踪一台主机到另外一台主机的路由,源主机中的Traceroute会向目的主机发送一系列的普通的IP数据包,每个数据包中都携带了一了 个具有不可达 UDP 端口号的 UDP 报文段。第一个IP数据报中的TTL为1,第二个为TTL为2,…依次类推。每个IP数据报每经过一个路由器,其TTL就会减1,当TTL减为0时,路由器会丢弃该数据报并发送一个ICMP告警报文(TTL过期)到源主机,报文中包含了当前这个路由器的名字以及IP地址。

什么时候停止?数据包中都携带了一了 个具有不可达 UDP 端口号的 UDP 报文段,如果在返回的ICMP报文中有目标端口不可达报文,发送方就知道已经完成了整个路径的探测,不需要再继续发送分组。

5.7 网络管理和SNMP

5.7.1 网络管理框架

在这里插入图片描述

  • 管理服务器

    管理服务器是执行网络管理活动的地方,它控制网络管理信息的收集、处理、分析和显示

  • 被管设备

    被管设备可以是主机、路由器、交换机等等,在一个被管设备中,有几个被管对象。

  • 管理信息库

    每个被管设备的关联信息收集在管理信息库中

  • 网络管理代理

    运行在被管设备中的一个进程,该进程与管理服务器通信,在管理服务器的命令和控制下在被管设备中采取本地动作

  • 网络管理协议

    该协议运行在管理服务器和被管设备之间,允许管理服务器查询被管设备的状态,并经过其代理间接地在这些设备上采取行动。

5.7.2 简单网络管理协议(SNMP)

为应用层协议,用于在管理服务器和代表管理服务器执行的代理之间传递网络管理控制和信息报文。

SNMP采用请求响应模式,管理服务器会向SNMP代理发送一个请求,代理收到请求之后,执行某些动作,然后发送对该请求的回答。

【服务器】→【代理】:请求报文,用于查询或修改与某被管设备关联的 MIB 对象值。

【代理】→【服务器】:陷阱报文,通知管理服务器,异常情况导致MIB对象值的改变。

在这里插入图片描述
通常使用的传输层协议是UDP,UDP不可靠,管理服务器会使用PDU请求ID字段,代理会使用这个请求ID来匹配请求和响应。

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值