2、循环序列号空间
第一种办法是线性的序列号空间,它的弱点是当序列号到达上界时候会发生问题,那么我们看一下循环序列号空间能否解决此问题。
顾名思义,循环,那么该空间是一个循环空间,即是一个封闭的圆。假如是一个32位的序列号空间,并从0开始,那么到达4294967295之后又回到了 0,从感觉上来说,似乎该序列号空间的序号用不完,但是,故障因此而生……
循环序列号空间建立了一个很奇特,很不符合逻辑的位。假设一个序列号为X,那么X是介于0-4294967295(再加1就回到了0)之间的数,那么 0
我们来想一下,假设现在有一个6位的序列号空间。2的六次方=64
有两个序列号,5和49,它们两个号,哪个是最新的呢?
我们无法得知!
这里有公式可以计算--在网络工作正常的情况下,假设序列号空间为N,两个序列号分别为A和B,如果满足下列任何一个条件,则认为A更新(数量更大)
*A>B且(A-B)小于或等于N/2
*A
那么这时候,我们再来看一下刚才的两个序列号,5和49.
A=5,B=49;
套公式,相信大家都会!
A是小于B的,B-A=44
序列号空间的一般:即N/2=32
B-A>32
由公式二可知,A更新!
刚才不知道大家有没有注意到,在讲公式时,提及到了在网络正常的时候,如果网络异常呢?
我们还是举例来说明:
序列号空间为6.该网络其中一台路由器准备离线,在它离线前,它发送了三个相同的LSA,其序列号为44(101100),无奇不有,正好它的一台邻居路 由器因为链路有问题,接收LSA时丢失了其中的几位,恰好,丢失的位正好是LSA2和LSA3中的一位。然后它像平时一样向其他邻居转发了三个LSA
LSA1 44 (101100)
LSA2 40 (101000)
LSA3 8 (001000)
真的是巧哦!
我们把三个序列号套用刚才说的公式来看看,
结果是44>40>8>44,44比40新,40比8新,8又比44新……这时候3个LSA将无休止的在网络中扩散下去,数据库将不停 的更新替换着……一直到缓冲区满,CPU满负荷为止,最终的结果很显然,会导致整个网络的瘫痪。
这些事情看起来匪夷所思,很牵强,但是它却是真实存在的:ARPANET在早期曾使用过六位的序列号空间,在1980年10月27日,两台路由器发生了上 面所说的故障,从而造成ARPANET的停顿