s5-14 链路状态路由选择

为什么DV逐渐让位于LS?
DV
 站的不高,看得不远
 完全相信邻居

LS
 想办法站得高,看更远
 多高、多远?
 怎么做?


链路状态路由(Link State)
主要思想
发现 它的邻居节点们,了解它们的网络地址
设置 到它的每个邻居的成本度量
构造 一个分组,包含它所了解到的所有信息
发送 这个分组给所有其他的路由器
计算 到每个路由器的最短路径


发现邻居节点
 当一个路由器启动的时候,在每个点到点的线路发送一个特
别的HELLO分组

image


image


设置链路成本

为了决定线路的开销,路由器发送一个特别的 ECHO 分组,
另一端立刻回送一个应答
 通过测量往返时间(round-trip time) ,发送路由器可以获得
一个合理的延迟估计值
为了得到更好的结果,可多次测量,取均值
 一种常用的选择
与链路带宽成反比


构造链路状态分组
链路状态分组构造后被发送给其他的路由器,分组中包含这些信息:
1 发送方的标识(ID of the sender)
2 序列号(sequence number )
3 年龄(age )
4 邻居列表(list of neighbors )
5 到邻居的成本/量度(delay to each neighbor )

应该什么时候构造分组?
周期性地构造和发送,或者有特别的事件发生时
构造,比如某条线路或邻居down掉了

image



发布链路状态分组
基本算法:
 每个分组都包含一个序列号,序列号随着新分组产生而递增
 路由器记录下他看见的所有 (源路由器,序列号)对


当一个的新的分组到达时,路由器根据它的记录:
如果该分组是新的,就被从除了来线路外的所有其他线路转
发出去 ( flooding,泛洪)
如果是重复分组,即被丢弃(喜新厌旧)
如果该分组的序列号比对应的源路由器发送的到过此地的分
组的最大序列号还小,则该分组被当作过时的信息而被拒绝

基本算法遇到的问题:
 序列号回转,引起新老分组识别混淆
解决办法:使用 32-bit 的序列号,即使每秒产生一个分组,也
需要137年才发生号码回转
 如果一台路由器崩溃,那么他将丢失自己的序列号记录,如果他
再从0开始,新分组将被当作旧分组被拒绝

image


 解决上述的路由器崩溃和序列号损坏的方法是:每个分组的
序列号之后是年龄(age) ,并且每秒钟年龄减1
 当年龄为零 ( zero )时,来自该路由器的信息被丢弃
 通常地,每隔一段时间,如10秒钟,一个新分组就会到来,
所以,只有路由器down机才可能导致超时( 或者,连续6个
间隔因为丢失,没有收到新的分组)


一些改进让基本算法更加健壮:
 当一个链路状态分组到达某个路由器时,它首先被放到一个保留
区中等待一段时间
 如果来自相同路由器的另一个分组到达了,这两个分组的序列号
会被比较:
如果相等,是重复分组,丢弃
如果不相等,旧的那个被丢弃

为了防止路由器到路由器的线路发生错误,所有的链路状态分组
都要被确认
 当一条线路空闲的时候,路由器扫描保留区,以便选择一个分组
或确认,并将其发送出去

image

计算新的路由路径
 一旦一个路由器获得了全部的链路状态分组就可以构造出全
网络图来了(Graph)
 现在,可以使用最短路径算法来计算路由器之间的最短路径
 计算结果是一棵树,会形成相应的路由,安装在路由表中,
引导数据分组的转发

image

链路状态路由选择的基本原理
发现邻居
设置成本
构造LSA
分发LSA
计算

posted @ 2020-01-19 15:40  前海渔文乐  阅读(106)  评论(0编辑  收藏  举报