第5章:网络层:控制平面(二)

声明:以下所有内容均来自陈老师的课件,此博客只是为了方便日后复习

提纲

  • 概述
  • 路由选择算法
    • 链路状态
    • 距离向量
  • Internet中自治系统内部的路由选择:OSPF
  • ISP之间的路由选择:BGP
  • SDN控制平面
  • 因特网控制报文协议
  • 网络管理和SNMP

链路状态

链路状态路由选择算法(简称LS算法)

  • 集中式:所有节点掌握网络拓扑和链路开销

    • 通过“链路状态广播”
    • 所有节点拥有相同信息
  • 用Dijkstra算法计算从一个节点(“源”)到达所有其他节点的最低开销路径

    • 获得该节点的转发表
  • 迭代式:k次迭代后,可知道到达k个目的节点的最低开销路径
    image
    image

  • LS算法示例:
    image
    image

    • 备注
      • 通过遍历前序节点来构造最低开销路径树
      • 如果存在相同的最低开销,则随机选取
  • LS算法测试题:
    image

    • 考虑上图所示的具有6个节点的网络,u为源节点,每条边上的值表示对应链路的开销

    • 借助LS算法,寻找从源节点u到所有其他节点的最低开销路径

    • 请问:

        1. 从u到节点y的最低开销为多少?
        1. 节点y的前一个节点是哪个?
    • 答案:
      image

  • LS算法:讨论

    • 算法复杂度:给定n个节点(不算源节点)
      • 每次迭代:需要检测所有不在集合N'中的节点w
      • 在最坏的情况下:n(n+1)/2 次比较,O(\(n^2\))
      • 更高效的实现O(nlogn)
    • 通信复杂度:
      • 每个路由器必须向网络中所有路由器广播它的链路状态信息
      • 每个路由器的广播要穿越O(n)条链路
      • 总的通信复杂度:O(\(n^2\))
  • LS算法:存在振荡的可能

    • 当链路开销依赖于链路上承载的流量,可能会发生路由振荡
    • 示例场景:
      • 链路开销是双向的,并且等于相对应链路上承载的流量
      • a为目的节点;节点d产生的发往a的流量值为1,节点b产生的发往a的流量值为1,节点c产生的发往a的流量值为e
        image
  • LS路由选择的工作过程

    • 配置LS路由选择算法的路由器的工作过程概述:
      • 各节点(即各台路由器)通过各种渠道获得网络拓扑、网络中所有链路的开销等信息【这部分和算法无关,属于协议和实现】
      • 使用LS算法,计算本节点到其他节点的最低开销路径,得到路由表(也即得到了转发表)
      • 按照此路由表转发数据分组【数据平面的工作】
        • 分发到输入端口的网络层(物理层->链路层->网络层;严格意义上说不是路由的一个步骤)
    • LS路由选择的主要步骤:对于每一台路由器
        1. 发现与其物理连接的路由器(即邻居),获知它们的网络地址
        1. 测量它到其邻居的开销
        1. 构造一个链路状态分组(LS分组),描述它到其所有邻居的开销情况
        1. 将LS分组通过扩散的方法发给其他所有的路由器
      • 以上四步让每台路由器获得网络拓扑链路开销
        1. 通过Dijkstra算法计算最低开销路径【这才是路由选择算法】
        • 每个节点独立算出来它到其他节点的最低开销路径
        • 迭代算法:第k步能够知道本节点到k个其他节点的最低开销路径
  • LS路由选择的工作过程(具体化)

    • 1.发现与其物理连接的路由器(即邻居),获知对方的网络地址
      • 一个路由器上电后,向所有链路发送HELLO分组
      • 其他路由器收到HELLO分组,回送应答,在应答分组中告知自己的名字(全局唯一)
      • 在LAN中,通过广播HELLO分组,获得其他路由器信息,可以认为是引入了一个人工节点
        image
    • 2.测量它到其邻居的开销(如时延)
      • 实测法:发送一个特别的ECHO分组,另一端立即回送一个应答
      • 通过测量往返时间可以获得一个合理的时延估计值
      • 为了获得更好的结果,可多次测量,取均值
    • 3.构造一个LS分组,描述它到其所有邻居的开销情况
      • 每个LS分组包含的信息:发送方的名称或ID、序号、年龄、邻居列表(给出它的邻居以及它到邻居的开销值)
      • 构造LS分组的时间点:周期性地构造和发送,或者有特别的事件(比如,某条线路或邻居进入down状态)发生时构造
        image
    • 4.将LS分组通过扩散方法发给其他所有路由器
      • 序号:用于控制无穷的扩散
        • 每个LS分组都包含一个序号,序号随着新分组产生而递增
        • 每个路由器都记录它看见的所有(源路由器,序号)对,发现重复的或老的就不扩散
        • 具体问题1:循环使用问题
        • 具体问题2:路由器崩溃之后序号从0开始
        • 具体问题3:序号出现错误
      • 解决问题的办法:年龄字段
        • 生成一个分组时,年龄字段不为0
        • 每经历一个时间段,年龄字段减1
        • 年龄字段为0的分组将被抛弃
      • 关于扩散分组的数据结构
        • Source:从哪个节点收到LS分组
        • Seq,Age:序号,年龄
        • Send flags:发送标记,必须向指定的哪些相邻节点转发LS分组
        • ACK flags:本节点必须向哪些相邻节点发送应答
        • Data:来自Source节点的LS分组
        • image
    • 5.通过Dijkstra算法计算最低开销路径【这才是路由选择算法】
      • 路由器获得各节点的LS分组和整个网络的拓扑
      • 通过Dijkstra算法计算出它到其他各个路由器的最低开销路径
      • 将计算结果安装在路由表中
    • LS的应用情况
      • OSPF协议是一种LS协议,被用于Internet上
      • IS-IS:被用于Internet主干中

距离向量路由选择算法(简称DV算法)

  • 基于Bellman-Fold(BF)方程(动态规划):
    image
  • Bellman-Fold(BF)示例
    假设u的邻居x,v,w已经知道它们的目的地z的最低开销路径的开销:
    image
    Bellman-Ford方程可知:
    image
    那个取得最小值的节点x,就是u到目的地z的最低开销路径上的下一条路由器 --> 可用于转发表中

距离向量路由选择算法

image

  • 核心思想:

    • 每个节点不时地将它的距离向量发送给其邻居
    • 当x从它的任何一个邻居接收到一个新的距离向量的时候,通过B-F方程更新x的距离向量:
      image
    • 估计值image将最终收敛于实际的最低开销值image
  • 每个节点:
    image

  • 异步、迭代式:每次局部迭代由以下事件触发:

    • 局部链路开销变化
    • 来自邻居的DV更新信息
  • 自我终止、分布式:每个节点仅当其DV变化时才会通告邻居:

    • 邻居再通告它们的邻居————只在必要的时候进行
    • 没收到通告,不采取任何动作!
  • DV算法:示例

    • t=0
      • 所有节点仅具有到其邻居的开销估计
      • 所有节点将其距离向量发送给它们的邻居
        image
    • t=1(一)
      • 所有节点接收来自其邻居的距离向量
        image
    • t=1(二)
      • 所有节点计算其新的距离向量
        image
    • t=1(三)
      • 所有节点将其新的距离向量发送给邻居
        image
    • t=2(一)
      • 所有节点接收来自其邻居的距离向量
        image
    • t=2(二)
      • 所有节点计算其新的距离向量
        image
    • t=2(三)
      • 所有节点将其新的距离向量发送给邻居
        image
    • ......以此类推
  • DV算法的计算过程
    image
    image
    image
    image
    image

  • DV算法:状态信息扩散
    迭代式的信息交流和计算使得信息能够扩散到整个网络

    • t=0
      • 在t=0时c的状态仅在c位置
    • t=1
      • 在t=1时的c的状态已传播到了b,并且可能影响到至多为1跳距离远的位置(也即b)的距离向量计算
    • t=2
      • 在t=2时的c的状态现在可能影响到了至多为2跳距离远的位置(b; a, e)的距离向量计算
    • t=3
      • 在t=3时的c的状态现在可能影响到了至多为3跳距离远的位置(b; a, e; c, f, h)的距离向量计算
    • t=4
      • 在t=4时的c的状态现在可能影响到了至多为4跳距离远的位置(b; a, e; c, f, h; g, i)的距离向量计算
        image
  • DV算法:示例二
    image
    image

  • DV算法:链路开销变化

    • 链路开销变化
      • 节点检测到它的邻居的链路开销发生了变化
      • 更新路由信息,重新计算其距离向量
      • 如果其距离向量因此而改变了,通告其所有邻居
        image
    • “好消息”传播快
      • t0:y检测到链路开销变化,更新其距离向量,通告其所有邻居
      • t1:z接收到y的更新,更新其距离向量表,计算其到达x的新的最低开销,将其距离向量发送给其所有邻居
      • t2:y接收到z的距离向量更新,更新其距离向量表,重新计算y的最低开销,未发生改变,不再向z发送任何报文
    • “坏消息”传播慢————无穷计数问题
      • y看见它到x的直接链路的新开销为60,但是z之前已经说了它有一条开销为5的路径。所以,y计算出“我到x的新开销将会是6(经由z)”;将其到x的新开销6通告给z
      • z学习到y到x的路径具有新开销6,所以z计算出“我到x的新开销将会是7(经由y)”;将其到x的新开销7通告给y
      • y 学习到z 到x 的路径具有新开销7,所以y 计算出“我到x 的新开销将会是8(经由z )”;将其到x 的新开销8通告给z
      • z 学习到y 到x 的路径具有新开销8,所以z 计算出“我到x的新开销将会是9(经由y )”;将其到x 的新开销9通告给y
      • ......由上可知,分布式算法是“狡猾的”
        image
  • DV算法:无穷计数问题

  • 解决方案:毒性逆转

    • 如果一个节点(记为z)到达某目的地(记为x)的最低开销路径是通过某个邻居(记为y),那么:z通告给该邻居y,说它到该目的地x的距离是无穷大(“善意的小谎言”
      image
      image
    • Q:毒性逆转技术能否彻底解决无穷计数问题?
    • A:不能。对于涉及3个或更多节点(而不只是两个直接相连的邻居节点)的路由选择环路,毒性逆转技术并不能检测到,因而无法解决这类无穷计数问题。
  • 解决方案:定义最大度量

    • 定义一个最大的有效开销值,比如:15跳(16跳则表示了无穷大)
      image
  • LS算法和DV算法的比较

    • 通信复杂度
      • LS:n个节点,发送O(\(n^2\)个报文
      • DV:邻居之间交换报文,收敛时间不一
    • 收敛速度
      • LS:O(\(n^2\)
        • 可能发生振荡
      • DV:收敛较慢
        • 可能发生路由选择环路
        • 可能遭遇无穷计数问题
    • 健壮性:路由器故障时会发生什么
      • LS:
        • 路由器会向与其连接的链路通告不正确的开销
        • 每个路由器仅计算其自身的路由表
      • DV:
        • 路由器会向全网所有节点通告其不正确的最低开销路径
        • 每个路由器的路由表可能被其他路由器使用
        • 错误可以扩散到全网
posted @ 2024-11-21 21:11  韦飞  阅读(84)  评论(0)    收藏  举报