链路状态路由(Link State)
主要思想:
发现 它的邻居节点们,了解它们的网络地址
设置 到它的每个邻居的成本度量
构造 一个分组,包含它所了解到的所有信息
发送 这个分组给所有其他的路由器
计算 到每个路由器的最短路径
1 发现邻居节点
当一个路由器启动的时候,在每个点到点的线路发送一个特别的HELLO分组
收到HELLO分组的路由器应该回送一个应答,应答中有它自己的名字 (采用一个全球唯一的名字 globally unique name)
2 设置链路成本
为了决定线路的开销,路由器发送一个特别的 ECHO 分组,另一端立刻回送一个应答通过测量往返时间(round-trip time),
发送路由器可以获得一个合理的延迟估计值,为了得到更好的结果,可多次测量,取均值
一种常用的选择:与链路带宽成反比
3 构造链路状态分组
应该什么时候构造分组?
周期性地构造和发送,或者有特别的事件发生时构造,比如某条线路或邻居down掉了
4 发布链路状态分组
基本算法:
每个分组都包含一个序列号,序列号随着新分组产生而递增
路由器记录下他看见的所有 (源路由器,序列号)对
当一个的新的分组到达时,路由器根据它的记录:
如果该分组是新的,就被从除了来线路外的所有其他线路转发出去 ( flooding,泛洪)
如果是重复分组,即被丢弃(喜新厌旧)
如果该分组的序列号比对应的源路由器发送的到过此地的分组的最大序列号还小,则该分组被当作过时的信息而被拒绝
一些改进让基本算法更加健壮:
1 当一个链路状态分组到达某个路由器时,它首先被放到一个保留区中等待一段时间
2 如果来自相同路由器的另一个分组到达了,这两个分组的序列号会被比较:
如果相等,是重复分组,丢弃
如果不相等,旧的那个被丢弃
3 为了防止路由器到路由器的线路发生错误,所有的链路状态分组都要被确认
4 当一条线路空闲的时候,路由器扫描保留区,以便选择一个分组或确认,并将其发送出去
5 计算新的路由路径
缺点:每个路由器需要较大的存储空间,计算负担大