第6章 路由算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数组D的第i项存储从源点到结点i的最短距离 数组R的第i项存储从源点到结点i路径上的下一站
用Weight(i,j)作为从结点i到结点j的权值,如果
从结点i到结点j没有边,则权值为无穷大(∞)
最短路径算法
随后,开始循环
每次都从S中删除一个与源点之间有最短路径的结
非自适应路由算法
固定路由算法(fixed routing algorithm) 洪泛法(flooding) 随机走动法(random walk) 基于流量的路由算法(flow-based routing)
固定路由算法
每个网络结点存储一张表格,表格的每一项记录到
达某个目的结点的下一结点或链路,而不是记录到 该目的结点的所有中间结点 优点:简单,适合一个负载稳定和拓扑变化不大的 网络 缺点:灵活性较差,无法对网络的拥塞和故障作出 反应
链路状态路由算法
4. 将分组通过扩展的方法发到所有其它路由器 顺序号:用于控制无穷的扩散,每个路由器都记 录(源路由器,顺序号),发现重复的或老的就 不扩散 • 具体问题1: 循环使用问题 • 具体问题2: 路由器崩溃之后序号从0开始 • 具体问题3:序号出现错误 解决问题的办法:年龄字段(age) • 生成一个分组时,年龄字段不为0 • 每过一个时间段,AGE字段减1 • AGE字段为0的分组将被抛弃
信息,如链路连接情况、流量和队列长度等 路由控制中心收集所有这些信息,然后根据它对整 个网络的全局性了解,利用这些信息使用最短路径 算法计算出每对结点之间的最佳路径,构造出路由 表分发给对应的每个结点 缺点:计算量大和路由控制中心的脆弱性
分布式路由选择
根据来自于相邻结点的信息,通过一个最短花费路
距离矢量路由算法
算法表示
初始化。对于每个结点G,对所有它直接连接的
目的地N,路由表中的表项用三元组(N,G,0)来表 示,即从结点G到目的地N无需经过转发 结点G定期发送它的路由表给相邻结点。更新信 息中对应着每一个目的地N用一个三元组来表示 (N,V,D),即到目的地N的路由上的下一结点为 V,G到N的距离为D
• 全局:所有的路由器拥有完整的拓扑和边的代价的信息
距离矢量路由算法
历史及应用情况
由Bellman、Ford和Fulkerson等提出 用于ARPANET,
Internet和Novell
基本思想 每个结点都保存一张到目的地的路由表 • 到目的地的下一结点 • 测量出到目的地的度量值(metric):初始化时,直接 连接的目的地置为0(表示无需经过别的路由器),其 它置为 每个结点把它的路由表定期向它直接连接的相邻结点传递
由算法计算出到每个目的地的路由 分布式路由算法得到了广泛使用 目前最流行的两个分布式路由算法
距离矢量路由算法(distance vector routing)
• 局部:路由器只知道与它有物理连接关系的邻居路由器 和到该路由器的代价
链路状态路由算法(link state routing)
距离矢量路由算法
结点G收到G’送来的路由信息,对于更新信息中
给出的每个目的地,在G的路由表中查找相对应的 表项,设它为(N,V,D),而更新信息中的三元组 为(N,V’,D’),C为结点G和G’之间的距离
• 如果找不到相应的表项,在G的路由表中增加一项 :(N,G’,D’+C) • 如果V=G’,G中路由表对应的表项根据D’+C和D的 比较获得
路由算法:发现最小代价路径的算法
路由的概念
路由:按照某种指标(传输延迟,所经过的站点数目
等)找到一条从源结点到目标结点的较好路径
较好路径:
按照某种指标较小的路径
路由算法(routing algorithm):网络层软件的一部
分,完成路由功能 路由的时机
虚电路:在建立虚电路时使用(会话路由选择,
链路状态路由算法
LS的背景
DV的问题 • 代价没有考虑线路带宽因素,认为所有线路带宽一样 • 慢速收敛问题(无穷计算问题) 1979年后ARPANET的路由算法都转为LS
LS的基本工作过程
1.
2.
3. 4. 5.
发现相邻结点,获知对方网络地址 测量到相邻结点的的代价(延迟或开销) 组装一个LS分组,描述它到相邻结点的代价情况 将分组通过扩散的方法发到所有其它路由器 通过Dijkstra算法找出最短路径
– 如果D’+C<D,G中表项更新为(N,G’,D’+C) – 否则G中表项保持原状,仍为(N,V,D)
正确的算法
如果找不到相应的表项,在G的路由表中增加一项:(N,G’,D’+C) 如果V=G’,G中路由表对应的表项根据D’+C和D的比较获得 – 如果D’+C<D,G中表项更新为(N,G’,D’+C) – 否则G中表项保持原状,仍为(N,V,D) 改为: 如果找不到相应的表项,在G的路由表中增加一项:
Fra Baidu bibliotek
洪泛法
结点收到不是发给它的分组时,就将该分组的副本
向除输入链路之外的所有与此结点相连的链路转发 出去 当网络的通信量很小时,该方法使分组的时延为最 小,因为在并行发送的路由中,肯定有一条为最佳 该方法的缺点是网络中的分组数目会迅速增加,导 致网络出现拥塞现象,应用并不广泛 该方法可用于健壮性要求很高的地方,如军事网络
链路状态路由算法
1. 发现相邻结点,获知对方网络地址 一个路由器加电之后,向所有线路发送HELLO分组 其它路由器收到HELLO分组,回送应答,在应答分组中告 知自己的全局唯一的名字 在LAN中,通过广播HELLO分组,获得其它路由器的信息
链路状态路由算法
2. 测量到相邻结点的代价(延迟或开销) 实测法,发送一个分组要求对方立即响应 回送一个ECHO分组 通过测量时间可以估算出延迟情况 3. 组装一个分组,描述相邻结点的情况 发送者名称 序号,年龄 列表: 给出它相邻结点,和它到相邻结点的延迟
链路状态路由算法
5. 通过Dijkstra算法找出最短路径
路由器获得各站点LS分组和整个网络的拓扑 通过Dijkstra算法计算出到其它各路由器的最短路 径(汇集树) 将计算结果记录到路由表中
LS的应用情况
OSPF协议,用于Internet上
最短路径算法
计算路由时,一般使用Dijkstra(迪杰斯特拉)算法
分组一站一站接力,正确发向目的站点 简单性(simplicity):在计算机上,算法的实现应 该简单。最优但复杂的算法,时间延迟很大,不实 用,不应为了获取路由信息而增加很多的通信量 健壮性(robustness):算法应适应通信量和网络拓 扑的变化,不向很拥挤的链路发送数据,不向中断 的链路发送数据 稳定性(stability):产生的路由不应该摇摆 公平性(fairness):对每一个站点都公平 最优性(optimality):某一个指标的最优(时间、 费用或综合指标)。实际上,获取最优的结果代价 较高,可以选择次优的结果
随机走动法
随即徘徊法 当分组到达某个结点时,随机选择一条链路作为转
发的路由;当某结点的输出链路有3条时,就以平均 概率0.33选择任一条链路作为转发路由 当结点或链路发生故障时,该方法可使路由算法有 较好的稳健性
基于流量的路由算法
该方法不仅考虑网络的拓扑结构,还要考虑网络的
负载因素 对某一给定的线路,如果已知负载量与平均流量, 那么可以根据排队论的知识计算出该线路上的平均 分组延迟 由所有的线路平均延迟,可直接计算出流量的加权 平均值,从而得到整个网络的平均分组延迟 这样找出网络的最小平均延迟就可以实现最优路由 选择
(N,G’,D’+C) 如果V=G’,那么无条件的把G中的项目更新为G’中的 (N,G’,D’+C)。 如果V≠G’,G中路由表对应的表项根据D’+C和D的比较获得 – 如果D’+C<D,G中表项更新为(N,G’,D’+C) – 否则G中表项保持原状,仍为(N,V,D) 该改为:如果V=G’,那么无条件的把G中的项目更新为G’。理由 是:要以最新消息为准。见谢希仁第五版《计算机网络》148页
距离矢量路由算法
DV的无穷计算问题 坏消息的传播速度非常慢(无穷计算问题) 例子 • 第一次交换之后, B从C处获得信息,C可以到达A(C-A, 要经过B本身),但是路径是2,因此B变成3,从C处走 • 第二次交换,C从B处获得消息, B可以到达A,路径为3 。 因此,C到A从B走,代价为4 • 无限此之后, 到A的距离变成INF,不可达
路由算法的分类
自适应或者非自适应?
非自适应算法 (non-adaptive algorithm):不能
适应网络拓扑和通信量的变化 , 路由表是事先计 算好的,也叫静态路由算法和非自适应路由算法 自适应算法 (adaptive algorithm):能适应网络 拓扑和通信量的变化,也叫动态路由算法和自适 应路由算法
图抽象:边的代价
5 2 1 • c(x,x’) = 链路的代价 (x,x’) 3 3 1
v
2
w
1
u
5 2
- e.g., c(w,z) = 5
z
x
y
• 代价可能总为1, 或者是链路 带宽的倒数, 或者是拥塞情况 的倒数
Cost of path (x1, x2, x3,…, xp) = c(x1,x2) + c(x2,x3) + … + c(xp-1,xp) 问题: 结点u到结点z的最小代价路径是什么?
Dijkstra算法为每条边赋予一个非负的权值,以两结
点间路径权值的和作为该路径的距离 在网络中,每个结点都要用Dijkstra算法计算出到其 它各结点的最短路径,从而构造出该结点的路由表
5 2 1
2
2
3
3
3
1
1
5
6
2
4
1
5
最短路径算法
Dijkstra算法首先建立一个除源点外的所有结
点的集合S,集合S保存尚未被删除的结点 Dijkstra算法使用两个数组D和R,每个结点在 这两个数组中都各有一项
session routing) 数据报:每个分组独立路由
最优化原则(optimality principle)
汇集树(sink tree) 一个结点的汇集树:所有其它结点到此结点的最优路径 形成的树 路由算法就是为所有路由器找到并使用汇集树
路由算法的原则
正确性 (correctness):算法必须正确和完整,使
距离矢量路由算法
距离矢量路由算法
路由器1的更新前的路由表
路由器2发给路由器1的报文
路由器1的更新后的路由表
距离矢量路由算法
DV的无穷计算问题
DV的特点
• 好消息传的快 坏消息传的慢 好消息的传播以每一个交换周期前进一个路由器 的速度进行 • 好消息:某个路由器接入或有更短的路径
• 举例
第6章
路由算法
图抽象
5
u
1 图: G = (N,E)
2
v
2
3
3 1
w
1
5
z
x
y
2
N = 路由器集合 = { u, v, w, x, y, z } E = 链路集合 ={ (u,v), (u,x), (v,x), (v,w), (x,w), (x,y), (w,y), (w,z), (y,z) } 标注:图抽象在其它网络上下文中也十分有用 例如: P2P, N是peer结点,E是TCP的连接
距离矢量路由算法
当结点K从结点J接收一个更新消息后,它对
到每个目的地的路由和距离度量进行检查
• 如果J知道一条到目的地的更短的路径,结点K更 新该目的地对应的下一结点标识和距离度量 • 如果J列出了一个K还没有记录的某个目的地的路 径,结点K会向表中增加一项 • 如果K记录的下一结点标识为J,并且J所报告的到 目的地的距离改变了,也会更新路由表中的距离 度量
自适应路由算法
孤立路由选择 集中路由选择
分布式路由选择
孤立路由选择
每个结点并不利用其它结点来的网络信息,仅仅根
据它自己所看到的情况来确定路由
最短等待法 逆向学习算法
集中路由选择
根据所有结点的网络信息来选择路由 网络中设置了一个路由控制中心 每隔一段时间,每个结点向路由控制中心发送状态
用Weight(i,j)作为从结点i到结点j的权值,如果
从结点i到结点j没有边,则权值为无穷大(∞)
最短路径算法
随后,开始循环
每次都从S中删除一个与源点之间有最短路径的结
非自适应路由算法
固定路由算法(fixed routing algorithm) 洪泛法(flooding) 随机走动法(random walk) 基于流量的路由算法(flow-based routing)
固定路由算法
每个网络结点存储一张表格,表格的每一项记录到
达某个目的结点的下一结点或链路,而不是记录到 该目的结点的所有中间结点 优点:简单,适合一个负载稳定和拓扑变化不大的 网络 缺点:灵活性较差,无法对网络的拥塞和故障作出 反应
链路状态路由算法
4. 将分组通过扩展的方法发到所有其它路由器 顺序号:用于控制无穷的扩散,每个路由器都记 录(源路由器,顺序号),发现重复的或老的就 不扩散 • 具体问题1: 循环使用问题 • 具体问题2: 路由器崩溃之后序号从0开始 • 具体问题3:序号出现错误 解决问题的办法:年龄字段(age) • 生成一个分组时,年龄字段不为0 • 每过一个时间段,AGE字段减1 • AGE字段为0的分组将被抛弃
信息,如链路连接情况、流量和队列长度等 路由控制中心收集所有这些信息,然后根据它对整 个网络的全局性了解,利用这些信息使用最短路径 算法计算出每对结点之间的最佳路径,构造出路由 表分发给对应的每个结点 缺点:计算量大和路由控制中心的脆弱性
分布式路由选择
根据来自于相邻结点的信息,通过一个最短花费路
距离矢量路由算法
算法表示
初始化。对于每个结点G,对所有它直接连接的
目的地N,路由表中的表项用三元组(N,G,0)来表 示,即从结点G到目的地N无需经过转发 结点G定期发送它的路由表给相邻结点。更新信 息中对应着每一个目的地N用一个三元组来表示 (N,V,D),即到目的地N的路由上的下一结点为 V,G到N的距离为D
• 全局:所有的路由器拥有完整的拓扑和边的代价的信息
距离矢量路由算法
历史及应用情况
由Bellman、Ford和Fulkerson等提出 用于ARPANET,
Internet和Novell
基本思想 每个结点都保存一张到目的地的路由表 • 到目的地的下一结点 • 测量出到目的地的度量值(metric):初始化时,直接 连接的目的地置为0(表示无需经过别的路由器),其 它置为 每个结点把它的路由表定期向它直接连接的相邻结点传递
由算法计算出到每个目的地的路由 分布式路由算法得到了广泛使用 目前最流行的两个分布式路由算法
距离矢量路由算法(distance vector routing)
• 局部:路由器只知道与它有物理连接关系的邻居路由器 和到该路由器的代价
链路状态路由算法(link state routing)
距离矢量路由算法
结点G收到G’送来的路由信息,对于更新信息中
给出的每个目的地,在G的路由表中查找相对应的 表项,设它为(N,V,D),而更新信息中的三元组 为(N,V’,D’),C为结点G和G’之间的距离
• 如果找不到相应的表项,在G的路由表中增加一项 :(N,G’,D’+C) • 如果V=G’,G中路由表对应的表项根据D’+C和D的 比较获得
路由算法:发现最小代价路径的算法
路由的概念
路由:按照某种指标(传输延迟,所经过的站点数目
等)找到一条从源结点到目标结点的较好路径
较好路径:
按照某种指标较小的路径
路由算法(routing algorithm):网络层软件的一部
分,完成路由功能 路由的时机
虚电路:在建立虚电路时使用(会话路由选择,
链路状态路由算法
LS的背景
DV的问题 • 代价没有考虑线路带宽因素,认为所有线路带宽一样 • 慢速收敛问题(无穷计算问题) 1979年后ARPANET的路由算法都转为LS
LS的基本工作过程
1.
2.
3. 4. 5.
发现相邻结点,获知对方网络地址 测量到相邻结点的的代价(延迟或开销) 组装一个LS分组,描述它到相邻结点的代价情况 将分组通过扩散的方法发到所有其它路由器 通过Dijkstra算法找出最短路径
– 如果D’+C<D,G中表项更新为(N,G’,D’+C) – 否则G中表项保持原状,仍为(N,V,D)
正确的算法
如果找不到相应的表项,在G的路由表中增加一项:(N,G’,D’+C) 如果V=G’,G中路由表对应的表项根据D’+C和D的比较获得 – 如果D’+C<D,G中表项更新为(N,G’,D’+C) – 否则G中表项保持原状,仍为(N,V,D) 改为: 如果找不到相应的表项,在G的路由表中增加一项:
Fra Baidu bibliotek
洪泛法
结点收到不是发给它的分组时,就将该分组的副本
向除输入链路之外的所有与此结点相连的链路转发 出去 当网络的通信量很小时,该方法使分组的时延为最 小,因为在并行发送的路由中,肯定有一条为最佳 该方法的缺点是网络中的分组数目会迅速增加,导 致网络出现拥塞现象,应用并不广泛 该方法可用于健壮性要求很高的地方,如军事网络
链路状态路由算法
1. 发现相邻结点,获知对方网络地址 一个路由器加电之后,向所有线路发送HELLO分组 其它路由器收到HELLO分组,回送应答,在应答分组中告 知自己的全局唯一的名字 在LAN中,通过广播HELLO分组,获得其它路由器的信息
链路状态路由算法
2. 测量到相邻结点的代价(延迟或开销) 实测法,发送一个分组要求对方立即响应 回送一个ECHO分组 通过测量时间可以估算出延迟情况 3. 组装一个分组,描述相邻结点的情况 发送者名称 序号,年龄 列表: 给出它相邻结点,和它到相邻结点的延迟
链路状态路由算法
5. 通过Dijkstra算法找出最短路径
路由器获得各站点LS分组和整个网络的拓扑 通过Dijkstra算法计算出到其它各路由器的最短路 径(汇集树) 将计算结果记录到路由表中
LS的应用情况
OSPF协议,用于Internet上
最短路径算法
计算路由时,一般使用Dijkstra(迪杰斯特拉)算法
分组一站一站接力,正确发向目的站点 简单性(simplicity):在计算机上,算法的实现应 该简单。最优但复杂的算法,时间延迟很大,不实 用,不应为了获取路由信息而增加很多的通信量 健壮性(robustness):算法应适应通信量和网络拓 扑的变化,不向很拥挤的链路发送数据,不向中断 的链路发送数据 稳定性(stability):产生的路由不应该摇摆 公平性(fairness):对每一个站点都公平 最优性(optimality):某一个指标的最优(时间、 费用或综合指标)。实际上,获取最优的结果代价 较高,可以选择次优的结果
随机走动法
随即徘徊法 当分组到达某个结点时,随机选择一条链路作为转
发的路由;当某结点的输出链路有3条时,就以平均 概率0.33选择任一条链路作为转发路由 当结点或链路发生故障时,该方法可使路由算法有 较好的稳健性
基于流量的路由算法
该方法不仅考虑网络的拓扑结构,还要考虑网络的
负载因素 对某一给定的线路,如果已知负载量与平均流量, 那么可以根据排队论的知识计算出该线路上的平均 分组延迟 由所有的线路平均延迟,可直接计算出流量的加权 平均值,从而得到整个网络的平均分组延迟 这样找出网络的最小平均延迟就可以实现最优路由 选择
(N,G’,D’+C) 如果V=G’,那么无条件的把G中的项目更新为G’中的 (N,G’,D’+C)。 如果V≠G’,G中路由表对应的表项根据D’+C和D的比较获得 – 如果D’+C<D,G中表项更新为(N,G’,D’+C) – 否则G中表项保持原状,仍为(N,V,D) 该改为:如果V=G’,那么无条件的把G中的项目更新为G’。理由 是:要以最新消息为准。见谢希仁第五版《计算机网络》148页
距离矢量路由算法
DV的无穷计算问题 坏消息的传播速度非常慢(无穷计算问题) 例子 • 第一次交换之后, B从C处获得信息,C可以到达A(C-A, 要经过B本身),但是路径是2,因此B变成3,从C处走 • 第二次交换,C从B处获得消息, B可以到达A,路径为3 。 因此,C到A从B走,代价为4 • 无限此之后, 到A的距离变成INF,不可达
路由算法的分类
自适应或者非自适应?
非自适应算法 (non-adaptive algorithm):不能
适应网络拓扑和通信量的变化 , 路由表是事先计 算好的,也叫静态路由算法和非自适应路由算法 自适应算法 (adaptive algorithm):能适应网络 拓扑和通信量的变化,也叫动态路由算法和自适 应路由算法
图抽象:边的代价
5 2 1 • c(x,x’) = 链路的代价 (x,x’) 3 3 1
v
2
w
1
u
5 2
- e.g., c(w,z) = 5
z
x
y
• 代价可能总为1, 或者是链路 带宽的倒数, 或者是拥塞情况 的倒数
Cost of path (x1, x2, x3,…, xp) = c(x1,x2) + c(x2,x3) + … + c(xp-1,xp) 问题: 结点u到结点z的最小代价路径是什么?
Dijkstra算法为每条边赋予一个非负的权值,以两结
点间路径权值的和作为该路径的距离 在网络中,每个结点都要用Dijkstra算法计算出到其 它各结点的最短路径,从而构造出该结点的路由表
5 2 1
2
2
3
3
3
1
1
5
6
2
4
1
5
最短路径算法
Dijkstra算法首先建立一个除源点外的所有结
点的集合S,集合S保存尚未被删除的结点 Dijkstra算法使用两个数组D和R,每个结点在 这两个数组中都各有一项
session routing) 数据报:每个分组独立路由
最优化原则(optimality principle)
汇集树(sink tree) 一个结点的汇集树:所有其它结点到此结点的最优路径 形成的树 路由算法就是为所有路由器找到并使用汇集树
路由算法的原则
正确性 (correctness):算法必须正确和完整,使
距离矢量路由算法
距离矢量路由算法
路由器1的更新前的路由表
路由器2发给路由器1的报文
路由器1的更新后的路由表
距离矢量路由算法
DV的无穷计算问题
DV的特点
• 好消息传的快 坏消息传的慢 好消息的传播以每一个交换周期前进一个路由器 的速度进行 • 好消息:某个路由器接入或有更短的路径
• 举例
第6章
路由算法
图抽象
5
u
1 图: G = (N,E)
2
v
2
3
3 1
w
1
5
z
x
y
2
N = 路由器集合 = { u, v, w, x, y, z } E = 链路集合 ={ (u,v), (u,x), (v,x), (v,w), (x,w), (x,y), (w,y), (w,z), (y,z) } 标注:图抽象在其它网络上下文中也十分有用 例如: P2P, N是peer结点,E是TCP的连接
距离矢量路由算法
当结点K从结点J接收一个更新消息后,它对
到每个目的地的路由和距离度量进行检查
• 如果J知道一条到目的地的更短的路径,结点K更 新该目的地对应的下一结点标识和距离度量 • 如果J列出了一个K还没有记录的某个目的地的路 径,结点K会向表中增加一项 • 如果K记录的下一结点标识为J,并且J所报告的到 目的地的距离改变了,也会更新路由表中的距离 度量
自适应路由算法
孤立路由选择 集中路由选择
分布式路由选择
孤立路由选择
每个结点并不利用其它结点来的网络信息,仅仅根
据它自己所看到的情况来确定路由
最短等待法 逆向学习算法
集中路由选择
根据所有结点的网络信息来选择路由 网络中设置了一个路由控制中心 每隔一段时间,每个结点向路由控制中心发送状态