ospf 泛洪 
、研究者:付泽群(月光) 
    
 泛洪的几个要点: 
一:路由器在完全邻接之前(注意同步指的是DBD交互完成,而完全邻接则是指两个邻居路由器完成了LSA的交互,链路状态数据库达到一致) 
会在两个邻居路由器之间交互信息,注意路由器不会把他收到的LSU(链路状态更新数据包)直接泛洪出去,他会查看 LSU当中的所包含的 LSA的类型,新旧,看是否有必要泛洪出去,避免一个旧的LSA或者具有破坏性的LSA对网络造成的影响。然后将有必要泛洪出去的放入泛洪列表中,再将这些需要泛洪的LSA组建成新的LSU泛洪出去,所以说,泛洪可以到达整个OSPF区域,但是更新却只会在两个邻居路由器之间进行。 
二:泛洪只有当至少一个邻居路由器与自己完全邻接状态时才会发生,因为泛洪的目地是为了让整个OSPF区域的认识达到一致,如果说连自己都没有和一个邻居路由器的链路状态数据库达到一致,那就没有必要把自己的认识让OSPF区域中的其他路由器知道。 
  
  
提出问题:为什么 需要泛洪列表呢? 
  
解决问题:要知道,针对不同的区域和邻居,可能需要泛洪不同的LSA,例如ABR。所以建立起泛洪列表是很有必要。 
    
泛洪的过程简述: 
在Ospf路由器与至少一个邻居路由器形成完全邻接状态后,会为每个处于完全邻接状态的邻居构建一个泛洪列表 ,然后,每发送了一个LSA之后(这里要注意,一条LSA并不是只描述一条链路信息,而是可以描述多条,并且不同类型的LSA所描述的内容也不相同,具体可看《TCP/IP路由技术卷一》中的相关内容)会为每个邻居建立一个重传列表,并将刚才发送出去的LSA放入重传列表中,如果在5秒之内(RxmtInterval),还未收到此邻居的回复信息,就会重传一次,无论在何种网络类型中,重传的链路状态更新数据包总是以单播的形式发送。在收到了邻居的回复之后,就会将该条LSA从重传列表中清除。 
路由器在收到了邻居路由器的LSA之后,会进行回复,回复的方式分为两种,一种是隐式确认,另一种则是显式确认 
隐式确认:邻居路由器通过向始发路由器发送一个包含由原来那个LSA拷贝信息的更新数据包。一般来讲隐式确认比显式确认更加有效。举子个例子来说,就是当多路访问网络中的DR要向其中的DRother发送更新信息的时候,它可以发送一个包含所有DRother通告给他的LSA信息,这样做有两个好处:首先,它可以让网络中的DRother路由器的数据库达到一致。其次,因为这个更新数据包中包含有所有DRother路由器通告的LSA,所以数据包还可以作为隐式回复用。 
显式确认:邻居路由器通过发送一个链路状态数据库确认数据包(ACK)来确认所收到的LSA,ACK无需携带完整的LSA信息,只需携带LSA头部信息即可,可用一条ACK信息来确认多个始发路由器的LSA,例如多路网络中的DR回复DRother。 
确认可以是延迟或直接的,延迟确认的好处是,更多的LSA可以通过一个数据包进行确认,但是一个被延迟传送的确认数据包,其时间必须小于RxmtInterval,这是为了不必要的数据包重传。 
直接确认总是立即发送,并且以单播形式发送。直接确认将在下面两种情况发送: 
1>                从邻居收到了一个重复的LSA,可能表明邻居没有收到,因此有必要立即回复一个确认数据包。 
2>                收到了一个老化时间达到最大的LSA信息,说明始发路由器急于想在整个OSPF区域里清除此LSA。 
  
为了保证泛洪的可靠性,除了确认以外,还提供了序列号,效验和,老化时间来保证收到的每条LSA都是最新的,当收到某条LSA的多个相同实例的时候,将会通过下列步骤来判断LSA的新旧 
1. Compare the sequence numbers. The LSA with the highest sequence number is more recent. 
2.If the sequence numbers are equal, then compare the checksums. The LSA with the highest unsigned checksum is the more 
recent. 
3.If the checksums are equal, then compare the age. If only one of the LSAs has an age of MaxAge (3600 seconds), it is 
considered the more recent. 
4. If the ages of the LSAs differ by more than 15 minutes (known as MaxAgeDiff), the LSA with the lower age is more recent. 
5. If none of the preceding conditions are met, the two LSAs are considered identical. 
这里解释下第三条: 
第三条的作用在于,如果路由器的某条LSA序列号的到达了最大值,即 
MaxSequenceNumber,但是又必须为这个LSA创建一个新的实例,那么就必须在所有的数据库中清楚此条老的LSA,而做法就是把老化时间达到最大值,并泛洪出去。此时接受路由器有必要迅速发送一个回复信息来告诉始发路由器,我这里的此条LSA已经被清除。一旦始发路由器从所有的邻接邻居路由器那里得到了确认,那么就会重新泛洪一个序列号为InitialSequenceNumber的该条LSA实例。