一:链路状态数据库简述:
每一台OSPF路由器都会把所有有效的LSA放入自己的链路状态数据库中,这些LSA代表着这个路由器对这个区域的认识,区域内的每一个OSPF路由器都要利用到这些LSA去计算路由,因此,保证同区域内的链路状态数据库的统一性和正确性就显得尤为重要。
我们知道,每一条LSA都有着其最大老化时间(时间是一小时),一旦该条LSA到达了老化时间,他将被路由器从链路状态数据库中清除。那么为了避免出现这种状况,路由器引入一种
重刷新机制(link-state refresh),每隔30分钟(这个时间称为
LSRefreshTime,即重刷新计时器),LSA的始发路由器将会将这条LSA泛洪出去。并将该条LSA的序列号加一,老化时间设为 0 ,其他路由器收到此新的拷贝信息后,将会用这条新的拷贝来替换该条LSA的原来的拷贝。
这里需要注意的是,由于每条LSA都是使用的单独的重刷新计时器,那么这里就会出现一个问题,那就是可能在单位时间内泛洪出去的LSA很少,甚至只有一条,那么链路带宽的使用将会变得效率极低。
在早期的IOS中,思科路由器是采用的一个单独的LSRefreshTime,即所有的的LSA共用一个LSRefreshTime,这样做固然是可以提高带宽的使用效率,但是其所带来的问题是,如果LSA的数量非常多的话,那么网络每隔30分钟将会出现一次区域通信量和CPU使用率的高峰。
为了平衡这种问题,思科引入了一种LSA的组步调机制(group pacing),即作为一种每个LSA使用一个单独的重刷新计时器和所有LSA共用一个重刷新计时器之间的一个折衷方法。在此机制下,每一个LSA都会有自己单独的重刷新计时器,但是当其计时器到期后,路由器不会立即将其泛洪出去,而是会引入一个时延来延迟这些LSA的发送,通过这种方法,可以将更多的LSA编制成一组发送出去,思科默认的时延是240秒,可以通过命令timers lsa-group-pacing 来修改这个时间。如果说链路状态数据库非常的庞大(LSA的数量大于10000 条),那么适当减小这个延迟时间是有好处的,如果链路状态数据库比较小的话,那么适当增减这个延迟时间是有好处的。
 
二:LSA1
每一个OSPF路由器都会产生一类LSA,此类LSA描述了路由器所连接的全部链路或接口,以及此链路上所连接的邻居。可以通过命令:
Ship ospf database router 来查看:
 
 LS age: 385
  Options: (No TOS-capability, DC)
  LS Type: Router Links
  Link State ID:1.1.1.1
  Advertising Router: 1.1.1.1
  LS Seq Number: 80000003
  Checksum: 0x1743
  Length: 60 
Number of Links: 5
Link connected to: a Stub Network
     (Link ID) Network/subnet number: 1.1.1.1
     (Link Data) Network Mask: 255.255.255.255
      Number of TOS metrics: 0
       TOS 0 Metrics: 1
 
    Link connected to: another Router (point-to-point)
     (Link ID) Neighboring Router ID: 2.2.2.2
     (Link Data) Router Interface address: 12.0.0.1
      Number of TOS metrics: 0
       TOS 0 Metrics: 64
 
    Link connected to: a Stub Network
     (Link ID) Network/subnet number: 12.0.0.0
     (Link Data) Network Mask: 255.255.255.0
      Number of TOS metrics: 0
       TOS 0 Metrics: 64
 
    Link connected to: a Transit Network
     (Link ID) Designated Router address: 10.0.0.1
     (Link Data) Router Interface address: 10.0.0.1
      Number of TOS metrics: 0
       TOS 0 Metrics: 1
 
    Link connected to: a Virtual Link
     (Link ID) Neighboring Router ID: 2.2.2.2
     (Link Data) Router Interface address: 12.0.0.2
      Number of TOS metrics: 0
       TOS 0 Metrics: 64
 
 
 
 
 
下面来看下一类LSA的字段:
 
Link State ID for Router LSAs is the originating router's Router ID.(不同的LSA此字段的含义也将会不同)
V, or Virtual Link Endpoint bit, is set to one when the originating router is an endpoint of one or more fully adjacent virtual links
having the described area as the transit area.
 
E, or External bit, is set to one when the originating router is an ASBR.
提出问题:一类LSA中,此字段的作用是什么?
解决问题:OSPF某一区域引入了外部路由时,那么在此区域内的路由器是不需要LSA4的,那么此时,就依靠LSA1 当中的E字段来确定ASBR的位置。
 
B, or Border bit, is set to one when the originating router is an ABR.
提出问题:一类LSA中,此字段的作用是什么?
解决问题:先思考下三类LSA的作用:ABR路由器会将一个区域的的信息发送到另一个区域去(特殊区域除外),通过的就是三类LSA,那么区域路由器有必要知道 ABR的位置,而如果三类LSA中,宣告者的route-id B 位中的显示的不一致的话,那么接收路由器将会认为这条 LSA3 是非法的,而拒绝把它放入路由表
 
Number of Links specifies the number of router links the LSA describes. The Router LSA must describe all of the originating
router's links, or interfaces, to the area in which the LSA is flooded.
 
Link Type describes the general type of connection the link provides. Table 8-9 lists the possible values of the field and the
associated connection types.
Table 8-9. Link type values.
Link Type Connection
1 Point-to-point connection to another router
2 Connection to a transit network
3 Connection to a stub network
4 Virtual link
请注意:Link type value 将会导致 Link ID Link Date的不同
 
Link ID identifies the object to which the link connects. This is dependent on the link type, as shown in Table 8-10. Note that
when the connected object is another router, the Link ID is the same as the Link State ID in the header of the neighboring
router's LSA. During the routing table calculation, this value is used to find the neighbor's LSA in the link-state database.
Table 8-10. Link ID values.
Link Type Value of Link ID Field
1 Neighboring router's Router ID
2 IP address of the DR's interface
3 IP network or subnet address
4 Neighboring router's Router ID
Link Data also depends on the value of the Link Type field, as shown in Table 8-11.
Table 8-11. Link data values.
Link Type Value of Link Data Field
1 IP address of the originating router's interface to the network[*]
2 IP address of the originating router's interface to the network
3 Network's IP address or subnet mask
4 The MIB-II ifIndex value for the originating router's interface
[*] If the point-to-point link is unnumbered, this field will instead carry the MIB-II ifIndex value of the interface.
 
二:LSA-2
 
LSA1 LSA2的关系:
OSPF中,LSA2是由网络中的DR产生的,而LSA2类的信息是极为简洁的,如下所示:
二类LSA示例:
  Routing Bit Set on this LSA
  LS age: 257
  Options: (No TOS-capability, DC)
  LS Type: Network Links
  Link State ID: 10.0.0.1 (address of Designated Router)
  Advertising Router: 1.1.1.1
  LS Seq Number: 80000003
  Checksum: 0x9761
  Length: 40
  Network Mask: /24
        Attached Router: 1.1.1.1
        Attached Router: 2.2.2.2
        Attached Router: 3.3.3.3
        Attached Router: 4.4.4.4
因此在广播多路访问网络中,要想构建出一个完整的网络拓扑,还必须借助LSA1的帮助。可是我们会问,在多路访问网络中,为什么还需要LSA2类呢?要知道LSA2类中仅仅只包含了DR自身的信息以及连入此多路访问网络中路由器的 ID,而DR的基本信息在每个路由器连入此网络的接口的数据库中都有保存,因此LSA2看起来似乎多余。但是仔细想想在多路访问网络中每个路由器之间的关系我们会发现,Drother之间所建立的仅仅只是 2way 关系。我们现在来假设有三台路由器,分别是ABC。其中A路由器是DR,其余两台是Drother,当B路由器向A发送了一条LSA1的更新信息,由于LSA1的特性是在整个OSPF区域内泛洪,所以DR会将此信息转发C路由器,假设没有LSA2,那么由于B路由器与C路由器所建立的仅仅只是 2way关系,所以C路由器会认为这条信息不可信,而拒绝使用此条LSA进行路由的计算。而此时若有LSA2的话,情况就不一样了,我们来看下LSA2中的这样一段信息:
Attached Router: 1.1.1.1
        Attached Router: 2.2.2.2
        Attached Router: 3.3.3.3
        Attached Router: 4.4.4.4
这个字段中的含义是,连入此多路访问网络中的路由器有哪些。由于DR与多路访问网络中的其他路由器建立的是完全邻接关系,换而言之,DR对整个网络有着完全清晰的认识,所以当C路由器接受到了B路由器的更新信息以后,如果在LSA2类所显示的连入此多路访问网络中的路由器包含有B路由器的话,那么C路由器就会认为此条LSA更新信息合法,将会把它用于路由选择计算,否则就认为不合法,而不被用于路由计算。
LSA3
每台ABR路由器都会将他所连的某一区域的的路由信息告诉ABR所连的其他的区域,
 
三类LSA示例:
  LS age: 586
  Options: (No TOS-capability, DC, Upward)
  LS Type: Summary Links(Network)
  Link State ID: 10.0.0.0 (summary Network Number)
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000001
  Checksum: 0x2FF1
  Length: 28
  Network Mask: /24
        TOS: 0  Metric: 10
 
该条LSA中,ABR向其他区域宣告了某个区域的一条汇总信息(注意:一条LSA3信息只包含了一个网段),当区域内路由器受到了LSA3类信息后,不会进行SPF算法进行计算,而只会简单的将3LSA中所宣告的网段的cost值简单的与其到ABR路由器之间的cost值进行简单的累加,这有点像距离矢量路由协议的做法,因此这也就带来了潜在环路的可能,所以必需得要有一种防环机制,也就是:任何非骨干区域的必须要和骨干区域相连,而且非骨干区域不能传送LSA
提出疑问:如果ABR路由器连接了两个区域,分别是区域0和区域1,区域0中有一个网段是1.1.1.1/32,且ABR 路由器有两条路径到该网段,那么ABR路由器又该产生怎样的LSA3向区域1宣告呢?
解决疑问:这个问题要分两种情况:第一种是:ABR1.1.1.1的两条路径的cost值不等,第二种是:ABR1.1.1.1的两条路径的cost值相等。这里需要说明的是,无论如何,ABR都将宣告1.1.1.1这个网段的信息,而至于ABR会选择哪条路径则是通过其中的cost值来体现
首先来讨论第一种情况:在此种情况下,ABR会选择cost值最低的那条路径来产生3LSA
第二种情况:这种情况貌似多余的,因为选择哪条路径来产生3LSA是通过cost值来决定的,而两条路径的cost值都相等,所以无论选择哪条,其所产生的3LSA都是相同的,那么这里我们就会问,假设区域1的某台路由器发送了一个到1.1.1.1ping包,那么ABR是否会进行负载均衡的转发呢?答案是否定的,因为这时候的ABR路由器作为转发路由器,会进行快速交换,即在缓存表中建立一个映射关系,即:
 
R2#sh ip cache
Prefix/Length           Age       Interface       Next Hop
1.1.1.1/32              00:10:03  Serial0         12.0.0.1
 
一般而言,负载均衡只是针对始发路由器而言的