前面已经谈到链路状态路由协议在共享路由信息之前必须先建立逻辑连接--邻居关系。 在网络拓扑发生改变时,LSA几乎是立即被转发,而距离矢量路由协议在发送路由更新之前先运行算法并更新自身路由表,连触发更新也是如此,所以这里就是链 路状态路由协议鱿于距离矢量的原因之一 泛洪扩散是链路状态路由协议中比较复杂的一部分。我们采用了很多种方法来使泛洪扩散更加可靠,单播和组播地址,校验和以及主动确认机制等等,有两个过程对 泛洪扩散是极其重要的:排序和老化 大家想象一下,当一个运行链路状态协议的网络中所有路由器都收到了所有的LSA,这个时候,LSA的泛洪扩散必须停止下来!如果不那样的话,LSA将继续 在网络中扩散下去,会对网络造成拥塞甚至是无法通信。LSA报文是被封装在IP包内的,那么大家都知道TTL值,假设泛洪扩散仅仅依赖于TTL值的话,那 么只能依赖到TTL超时,但是直到LSA超时为止,TTL几乎不能有效的允许LSA继续在网络中扩散。 假设在网络中,某路由器A后的网络状态发生改变,那么路由器A将会第一时间发现这一状况,并构建LSA发送出去,它会向所有的邻居发送相同内容的LSA ——完全一样的内容,LSA拷贝。在每个拷贝中都有一个序列号字段,它们的序列号都是一致的!这个序列号会连同LSA的其他部分一同被保存在拓扑数据库 中。 每台收到该LSA的路由器都会拿自己的拓扑数据库中的信息与该LSA的序列号进行比较,如果发现自己已有的序列号和刚收到的LSA的序列号相同,那么路由 器将丢弃这些信息,注意,这里是丢弃,而不是转发。但是如果其他内容相同,但是自己数据库中的相应条目序列号要比刚收到的LSA的小,那么路由器将接收新 的LSA信息,并更新自己的序列号,而且还会泛洪该LSA。按照这种方式,当所有的路由器都收到LSA的拷贝时候,泛洪将停止。 因为序列号是存放LSA的一个固定字段内的,所以它的长度有一定的上限,如果当序列号达到了上界会发生什么情况呢? 1、第一种解决办法,就是给出一个非常长的序列号空间,而且是假定无法到达该上界。例如,我们采用32位长的字段。如果从0开始计算的话,将会有 4294967296个可用的序列号。非常的长。但是,这个世界无奇不有!虽然这个序列号空间非常的长,如果路由器10秒发一次新的LSA,也需要用 1361年才能用完,但是,在这种情况下故障依然会发生!如果一台路由器的序列号即将被用完,那么新的序列号将从哪一位开始编号呢?如果从0开始的话,那 么其他的路由器的序列号都已经到达了顶点,相比0来说,它们会做出一个选择——丢弃0序列号的LSA,因为它们会认为0比本身的序列号更老!那怎么办呢? 如果我们路由器在序列号到达顶点时全部停止,并且等待LSA在所有的数据库中老化死亡。然后全部重新开始采用0序列号。但是如果老化时间很长,比如在一个 小时或者更长,那么这种办法将毫无吸引力! 2、循环序列号空间 B-A>32 由公式二可知,A更新! 刚才不知道大家有没有注意到,在讲公式时,提及到了在网络正常的时候,如果网络异常呢? 我们还是举例来说明: 这些事情看起来匪夷所思,很牵强,但是它却是真实存在的:ARPANET在早期曾使用过六位的序列号空间,在1980年10月27日,两台路由器发生了上面所说的故障,从而造成ARPANET的停顿。 |
不良信息举报Q:2000617|Archiver|ROS软路由论坛 ROSABC.com 网络方案网络工程交流
GMT+8, 2025-10-27 06:35 , Processed in 0.032035 second(s), 15 queries .
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.