OSPF的序列号:
OSPF的序列号使用类似棒棒糖。
OSPF使用的是顺序序列号,不是循环的,范围是0x80000000到0x7FFFFFFF.
第一个8是负的,第一个LSA的序列号是0x80000001,然后累加到0,在从0到0x7FFFFFFF.
如果真的到了0x7FFFFFFF,就发送一个AGE标记为60分钟的LSA,通告出去,邻居收到后会把这个LSA从DATABASE里删除,然后序列号又会从0x80000001开始.
0x80000001化成二进制1000,0000,0000,0000,0000,0000,0000,0001
0x7FFFFFFF化成二进制0111,1111,1111,1111,1111,1111,1111,1111
序列号使用过程:
首先:1000,0000,0000,0000,0000,0000,0000,0001
其次:1111,1111,1111,1111,1111,1111,1111,1111
再次:0000,0000,0000,0000,0000,0000,0000,0000
最后:0111,1111,1111,1111,1111,1111,1111,1111
一目了然,第一位的1和0分别代表负和正.也就是可以有2的31次方再乘2个序列号,足够大了。
如何比较LSA:
1,比较LSA实例的序列号。拥有最大的序列号的LSA就是最新的LSA。
2,如果LSA实例的序列号相同, 那么将会比较它们的校验和。拥有最大的无符号校验的LSA就是最新的LSA。
3,如果LSA实例的校验和也相同,那么将进一步比较它们的老化时间。
4,如果这些LSA的老化时间之间的差别多于15min(称做MaxAgeDiff那么拥有较小的老化时间的LSA将是最新的LSA。
5,如果上述的条件都无法区分最新的LSA,那么这两个LSA就被认为是相同的。
operation:
一,如果收到的LSA在拓扑数据中没有
1,将LSA添加进拓扑数据库
2,向发送给我的邻居发送LSAck
3,泛洪
4,运行SPF算法,算出最佳路由放入路由表中
二,如果收到的LSA在拓扑数据库中有,并且收到的LSA比拓扑数据库中的LSA新
1,将LSA添加进拓扑数据库
2,向发送给我的邻居发送LSAck
3,泛洪
4,运行SPF算法,算出最佳路由放入路由表中
三,如果收到的LSA在拓扑数据库中有,并且拓扑数据库中的LSA比收到的LSA新
1,将旧的LSA丢掉
2,将拓扑数据库中新的LSA发送给邻居,让邻居去更新
四,果收到的LSA在拓扑数据库中有,并且序列号与LSDB中的序列号一致,忽略此LSA