一闪一闪亮晶晶
满天都是小星星
钢琴曲太好听了
可以带你去非常美妙的地方
小时候夏日的星空
~
恩呢感觉就是这样呢
~
好美
~
莫扎特
3.3
链路状态路由选择协议
距离矢量路由器所使用的信息可以比做为由路标提供的信息。链路状态路由选择协议像一张公路线路图。
链路状态是不容易被欺骗而作出错误的路由决策的,因为他有一张完整的网络图。
链路状态不同于距离矢量依照传闻进行路由选择的工作方式,原因是链路状态路由器从对等路由器那里获取第一手信息。
每台路由器会产生一些关于自己、本地直连链路、这些链路的状态和所有直接相连邻居的信息。这些信息从一台路由器传送到另一台路由器,每台路由器都做一份信息拷贝,但决不改动信息。最终目的是每台路由器都有一个相同的有关网络的信息,并且每台路由器可以独立地计算各自的最优路径。
(厂家直销、或者是地铁的那张图想象一下。)
链路状态协议,有时叫最短路径优先协议或分布式数据库协议
链路状态协议的基本功能
1、
每台路由器与它邻居之间建立联系,这种联系叫做邻接关系。
2、
每台路由器向每个邻居发送被称为链路状态通告(
LSA
)的数据单元。对每台路由器链路都会生成一个
LSA
,
LSA
用于标识这条链路、链路状态、路由器接口到链路的代价度量值以及链路所连接的所有邻居。每个邻居在收到通告之后将依次向它的邻居转发(泛洪)这些通告。(他没有改任何的信息喔!)
3、
每台路由器要在数据库中保存一份他所收到的
LSA
备份。如果所有工作正常,所有路由器的数据库应该相同。
4、
完整的拓扑数据库,也叫链路状态库,
Dijkstra
算法使用他对网络图进行计算得出到每台路由器的最短路径。接着链路状态协议对链路状态数据库进行查询找到每台路由器所连接的子网,并把这些信息输入到路由表中。
3.3.1
邻居
这边将使用
hello
协议
打个招呼 hello
。喔
成邻居了。
Hello
协议定义了一个
hello
数据包的格式和交换数据包并处理数据包信息的过程。
Hello
数据包至少应该包括一个路由器ID
和发送数据包的网络地址。
(你和人家认识总是说我叫谁谁谁把(这个就是路由器
ID
)和人家说我在什么什么地方(哪个淘宝给人家地址,方便人家把包裹给你))
数据包的其他字段可以携带子网掩码、
hello
间隔、线路类型描述符和帮助建立信息关系的标记、死亡周期。
当两台路由器已经相互发现并将对方视为邻居,它们要进行数据库同步过程,即交换和确认数据库信息直到数据库相同为止。
为了执行数据库同步,邻居之间必须建立邻接关系,即它们必须就某些特定的协议参数,达成一致。
通过使用
Hello
数据包建立邻接关系,链路状态就可以在受控的方式下交换信息。
说
hello
只能是熟人(邻居),但是大家能相互交换东西,就说明这个人和你是朋友。如果用签合同的感觉去说这个事情,达成某些特定的协定,大家才交换资源。
HELLO
数据包还可作为监视邻接关系的握手信号
(发现太久没有人说
hello
就说明路由器挂了)
典型的
hello
数据包交换间隔为
10S
,典型的死亡周期是数据包交换间隔的
4
倍。
3.3.2
链路状态泛洪扩散
邻接关系建立之后开始发送LSA
。通告(LSA
)被发送给每个邻居。路由器保存接收到的LSA
,依次向向每个邻居转发,除了发送该LSA
的邻居之外。
这个过程是链路状态由于距离矢量的一个原因。
LSA
立即转发,距离矢量是要修改自身的路由表的(一改就会有错呀,而且速度还慢)影响收敛速度。
泛洪扩散
2
个极其重要的过程:排序和老化
1、
序列号
问题:
所有路由器收到所有
LSA
时,泛洪扩散停止。
当路由器发送
LSA
的时候,每个拷贝都是不改变任何东西的!序列号也是不变的!
这个序列号和
LSA
的其他部分一起被保存在路由器的拓扑数据库中,当路由器收到数据库中已存在的
LSA
且序列号相同时,路由器将丢弃这些信息。如果序列号大,信息一样的情况,就会把
LSA
序列号大的接受下来,而且扩散开来。
没有序列号就会造成先后顺序的一个错误。可能从其他的路径走的所以慢了。时间上。有序列号完全可以避免这个问题。
序列号被固定在
LSA
的固定字段里面,所以
LSA
一定要有上限。序列号到达上限会出现的情况
1、
线性序列号空间
使用一个非常大的上限让他终其一生都没有办法达到
32
位的就意味着有
2
的
32
次方个序列号。
但是假设出了问题吧,如果一个链路状态路由选择进程用完了所有序列号,那么它在重新使用最低序列号之前必须停止,并等待他所发出的
LSA
在所有数据库中都不再被使用。
如果重启问题更大,它无法记得上次使用的序列号,必须重新使用
1.
。但是他的邻居保留的是他上次的序列号。(这个地方序列号只看大的,小的丢弃)
��
~~~
重启以后就挂了协议
解决方法
如果一台重新启动的路由器向邻居发送
LSA
的序列号比邻居保存的序列号还要老,那么邻居会发回自己保存的
LSA
和序列号。这台路由器将指导启动前自己使用的序列号并作出相应的调整。
(让熟识他的人告诉他,你给我过什么什么。你家的门牌号是什么。
怎么说呢
~
就像我以前上学的时候,有些我自己要带的东西我会让我同桌提醒我
~
)
需要注意的事情是,最近使用过的序列号不能接近上限。否则,重新启动的路由器将不得不再次重启
必须设定规则限制路由器跳跃地使用序列号。
跳跃
IS-IS
使用的是32
位线性序列号空间
2、
循环空间序列号
使用一个循环序列号空间,数字是循环使用的,在
32
位空间内紧跟在最大的序列号的是
0.
但是重启路由器的时候会遇到一样的问题和线性序列号是一样的。
0<x<0
序列号的情况,没有一个数是小于其他所有的数的。
用一个规则来确认一个序列号是大于另一个序列号的
满足条件时认为
a
是最新的序列号。
a>
b
且(
a-b
)
<=n/2
a<b
且
(
b-a
)
> n/2
规则强制序列号循环使用
可能会造成
LSA
的循环在不正常的网络中。
3、
棒棒糖形序列号空间
棒棒糖形序列号空间是线性序列号空间和循环序列号空间的综合:是一个线性和圆形结合。
圆形的缺陷是:不存在一个数小于其他所有的数。
线性的缺陷是:序列号是有限的
当路由器
A
重新启动时,它将从小于其他所有书的
a
开始。邻居将会识别出这个数,这时如果邻居数据库中还保留着上次序列号为
b
的
LSA
,那么它们会发送
b
给路由器
A
,则路由器
A
将跳至该序列号。在知道自己重启前使用的序列号之前,路由器
A
可能会发送不止一个
LSA
。因此,在邻居通知路由器
A
上次使用的序列号或上次使用的序列号从所有数据库中小时之前,必须准备充足的启动数以便路由器
A
不会用光所有序列号。
这些线性重启序列号形成了棒棒糖的棒。在这些数用完或邻居提供了使路由器
A
跳转的序列号之后,路由器
A
进入循环空间,也就是棒棒糖的糖体部分。
序列号数
-k<0<k
序号的规则是这样的
给出
2
个数
a
、
b
以及一个序列号空间
n
a<0
且
a<b or a>0,a<b,
且
(b-a)<n/2 or a>0,b>0,a>b
,且
(a-b)>n/2
就认为
b
比
a
更大
OSPFv2
像棒棒糖形序列号数一样使用了从0x80000001
开始的有符号数空间。但是当序列号数变为正数时,序列号空间持续保持线性直至到达追到数0x7FFFFFFF
。此刻,在重启之前OSPF
进程必须从所有链路状态数据库中删除LSA
这个在后面说
OSPF
的地方也会重新再提到的
1、
老化
LSA
格式中将包含一个用于通过年龄的字段。当
LSA
被创建时,路由器将该字段设置为
0
。随着数据包的扩散,每台路由器都会增加通过中的年龄。
老化过程为泛洪扩散过程增加了另一层可靠性,该协议为网络定义了一个最大年龄差距值。
如果年龄差距超过
MaxAgeDiff
,那么认为网络发生异常,因为新被发送的
LSA
序列号值没有增加。在这个情况下,较新的
LSA
被记录下来,并数据包扩散出去。
典型的MaxAgeDiff
值为15min
(OSPF
)
LSA
驻留在数据库中,年龄会不断增加。
如果年龄增加到某个最大年龄值(
MaxAge
)
---
由特定的路由选择协议定义
-----
邻居随机从数据库中的删除相关记录。
当
LSA
的年龄到达
MaxAge
时,将被从所有的数据库中删除,这需要有一种机制来定期地确认
LSA
并且在达到最大年龄之前将他的计时器复位。
链路状态刷新计时器就是做这个用途的:一旦计时器超时,路由器将向所有邻居泛洪扩散新的LSA
,收到的邻居会把有关路由器记录的链路设置为新接收到的年龄。OSPF
定义MaxAge
为1
小时,LSRefreshTime
为30min
3.3.3
链路状态数据库
链路状态路由选择协议的第
3
个主要任务是建立链路状态数据库。
链路状态数据库把LSA
作为一连串记录保存下来。
LSA2
类通用信息
路由器链路信息
----
使用三元组(路由器
ID
、网络
ID
、代价)通告路由器的邻居路由器,这里的代价是指链路到邻居的代价。
末梢网络信息
----
使用三元组(路由器
ID
、网络
ID
、代价)通告路由器直接连接的末梢网络(没有邻居的网络)
最短路径优先算法对路由器链路信息进行一次计算以建立到每台路由器的最短路径,然后使用末梢网络信息向路由器添加网络。
注意:在几条链路两端的代价各不相同,因为代价与接口的出站方向有关。
链路状态数据库,在每台路由器中都保存了一份拷贝。数据库完整地描述了网络。现在通过运行
SPF
算法可以计算出一颗到达每台路由器的最短路径树。
听一首安静的歌,洗去心中点点烦躁
~
偷偷的在心里惦念一些人
默默祈祷希望一切都好!
3.3.4 SPF
算法
Dijkstra
算法是最短路径优先算法
3.3.5
区域
一个区域是构成一个网络的路由器的一个子集。将网络划分为区域是针对链路状态协议的
3
个不利影响所采取的措施。
1、
必要的数据库要去内存的数量比距离矢量协议更多
2、
复杂的算法要去
CPU
时间比距离矢量协议更多
3、
链路状态泛洪扩散数据包对可用宽带带来不利的影响
当一个网络被划分为多个区域时,在一个区域内的路由器仅需要在本区域扩散
LSA
,因而只需要维护本区域的链路状态数据库。
区域边界路由器是连接
2
个区域的路由器,它属于所连接的
2
个区域,而且必须为每个区域维护各自的拓扑数据库。