OSPF协议详解5:实验 - 计时器、度量值与其他高级配置

在这里插入图片描述

本文深入探讨OSPF计时器(Hello/Dead间隔、SPF节流、LSA计时器)、度量值(参考带宽、接口Cost、最大度量值)及高级配置(前缀抑制、被动接口、虚链路、认证)。旨在优化网络性能、收敛速度和安全性,通过灵活配置提升OSPF路由效率和稳定性,并通过配置示例和show命令输出进行了验证。

4. 计时器相关配置

4.1 Hello和Dead间隔

链路两端的接口的Hello和Dead间隔必须一致,否则邻居起不来。除了默认的值外,还可以单独设置Hello间隔,最小值为1秒,Dead间隔一般为Hello间隔的4倍。这样可以提高网络收敛的速度,但是也会增加CPU的负荷。

还有有一种方式,就是配置Fast Hello Packets,方法是配置Dead间隔为1秒,然后设置Dead间隔是Hello间隔的几倍。这样就能把Hello间隔设置在秒级以下了。不过,一般是不建议更改默认的Hello和Dead间隔。

# 单独修改Hello和Dead间隔
R1(config-if)#ip ospf hello-interval 1
R1(config-if)#ip ospf dead-interval 4

R1#show ip ospf interface GigabitEthernet1 | in Timer
  Timer intervals configured, Hello 1, Dead 4, Wait 4, Retransmit 5
  
# 可以看出最多可以设置到20倍,也就是Hello间隔为50毫秒。
R1(config-if)#ip ospf dead-interval minimal hello-multiplier ?
  <3-20>  Number of Hellos sent within 1 second

4.2 Fast Hello和BFD对比

常规的做法使用BFD来检测链路的状态,联动来来建立和移除OSPF邻居。如果链路反复翻动,频繁地更新SLA,导致LSA序列号快速增长。这时候,通常会在接口下使能接口抑制(Dampening),通过惩罚反复翻动的接口,来使网络变得更加稳定。

虽然Fast Hello也能达到相同的目的,但是选择BFD的原因是:

  • BFD是独立于协议的,意味着它可以同时检测多种路由协议的转发路径。但是,独立的则意味着需要单独进行配置,全局启用,用于接口,再关联具体的路由协议。
  • Fast Hello的配置不太灵活,BFD可以直接指定BFD的Hello间隔和Dead间隔,可以到毫秒级。
  • OSPF的Hello包包括的字段很多,50毫秒级的Fast Hello比较耗费CPU资源。而BFD的Hello包就小了许多,状态机也比较简单。

4.3 等待,重传和传输延迟时间

从下面的show输出,可以看出,除了Hello和Dead以外,还有Wait和Retransmit。

R1#show ip ospf interface Gi2 | in Timer
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5

# 手工设置重传时间
R1(config-if)#ip ospf retransmit-interval ?
  <1-65535>  Seconds
  
# 手工设置传输延迟
R1(config-if)#ip ospf transmit-delay ?
  <1-65535>  Seconds

这个Wait的等待时间是用于多路访问网络进行选举DR/BDR前的等待时间。之前有讲过默认是40秒,那是因为以太网默认的Dead间隔是40秒,而这个Wait等待时间永远等于Dead间隔。就像在4.1中的单独设置Hello和Dead间隔的时候,这个Wait等待时间也发生了变化。

当一个路由器发送LSA给邻居的时候,它会期待一个LSAck这么一个确认信息。如果在一段时间内,没有收到这个确认信息,则会重传这个LSA。这个重传时间的默认值是5秒,且不受网络类型的影响。这个时间可以进行单独设置。更改这个计时器时间并不会破坏OSPF的邻居关系。

最后还有一个传输延迟的设置,这个是用于矫正LSA通过慢速的链路的时间来反应LSA真正的老化时间。路由器生成LSA的时候,Age时间是0秒,对端收到的时候Age为1秒,这个1秒是默认值。对于老的WAN链路或是卫星链路,传输SLA的时间会大于1秒。为了矫正这部分时间差,可以手工设置这个delay的秒数。如果链路传输这个SLA需要5秒,希望对端路由器收到这个SLA的时候Age为5,则需要设置这个transmit-delay为5。一般情况下不会设置这个参数。

4.4 LSA相关的计时器

在极少的情况下,会更改下面的计时器的值。

4.4.1 SPF计算节流时间

下面的命令后面有3个参数。

  1. 第一个参数是从收到拓扑变更的事件后到SPF开始计算的延迟时间,默认是50毫秒。如果在这个时间内收到了其他的LSA,可以进行一次SPF计算,包括这个延迟时间内收到的所有的LSA。
  2. 第二个参数是从第一次SPF计算到第二次SPF计算的最小等待时间,默认是200毫秒。类似于物理接口的抑制(Dampening),在这个间隔时间内,如果再次收到一个LSA,则这个时间翻倍,以2的倍数进行增长,直到达到最大的等待时间。
  3. 第三个参数是两次SPF计算的最大等待时间,在到达这个时间后,则等待时间不变。当网络稳定时间超过了最大等待时间,则会恢复到未节流的状态。这点和物理接口的抑制的机制就有差别了,没有半衰期的说法。
R1#show ip ospf 
 Initial SPF schedule delay 50 msecs
 Minimum hold time between two consecutive SPFs 200 msecs
 Maximum wait time between two consecutive SPFs 5000 msecs
 
R1(config-router)#timers throttle spf ?
  <1-600000>  Delay between receiving a change to SPF calculation in
              milliseconds

R1(config-router)#timers throttle spf 50 ?
  <1-600000>  Delay between first and second SPF calculation in milliseconds

R1(config-router)#timers throttle spf 50 200 ?
  <1-600000>  Maximum wait time in milliseconds for SPF calculations

R1(config-router)#timers throttle spf 50 200 5000 ?
  <cr>  <cr>

4.4.2 LSA相关计时器

  • LSA到达计时器: 路由器接受相同LSA的最小间隔。如果在这个间隔内收到了相同的LSA(相同的LSA ID,宣告路由器和序列号),则会忽略这个LSA。如果是新的序列号的LSA,则不受这个计时器限制。
  • LSA组抑制计时器:在计时器未过期前,将自己更新或新产生的LSA放到一个queue里。在计时器过期后,将它们统一发出。
  • LSA泛洪抑制计时器:控制OSPF将LSA从接口发出的速率。防止接口因为快速泛洪LSA而导致链路变慢或拥塞。
  • LSA重传抑制计时器:当接口发送完一个LSA后没有收到确认,这个计时器规定了重传开始的时间。
R1#show ip ospf 
 Minimum LSA arrival 100 msecs
 LSA group pacing timer 240 secs
 Interface flood pacing timer 33 msecs
 Retransmission pacing timer 66 msecs

R1(config-router)#timers lsa-arrival ?
  <0-600>  The minimum interval in sec between accepting the same LSA
  
R1(config-router)#timers lsa arrival ?
  <0-600000>  The minimum interval in milliseconds between accepting the same
              LSA
  
R22(config-router)#timers pacing lsa-group ?
  <10-1800>  Interval in sec between group of LSA being refreshed or maxaged
  
R22(config-router)#timers pacing flood ?
  <5-100>  The minimum interval in msec to pace limit flooding on interface
  
R22(config-router)#timers pacing retransmission ?
  <5-200>  The minimum interval in msec between neighbor retransmissions

5. AD/Metric相关配置

之前说过,OSPF默认按100M接口的带宽设为Cost 1。对于现代网络来说,1G和10G口已经普及了,按默认来说,它们Cost也是1,这样OSPF就无法选出真实的最优路径了。

5.1 更改默认的参考带宽

在默认情况下,可以看到1G的Cost值是1。当将参考带宽改成10G的时候,系统提示要将所有路由器的参考带宽要改成一致的。这样所有路由器计算Cost的公式就是一致的了。再查看1G接口的Cost值就变成10了。

R1#show ip ospf interface Gi1 | in Cost
  Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 1

# 可以看到参考带宽的单位是mbps。
R1(config-router)#auto-cost reference-bandwidth ? 
  <1-4294967>  The reference bandwidth in terms of Mbits per second

# 将参考带宽改成10G。
R1(config-router)#auto-cost reference-bandwidth 10000
% OSPF: Reference bandwidth is changed. 
        Please ensure reference bandwidth is consistent across all routers.
        
R1#show ip ospf interface Gi1 | in Cost
  Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 10

5.2 更改接口的Cost值

更改接口的Cost值是单向的,意味着去程和回程的总的Cost值不一致。可以在链路两端都更改Cost值,来保持去程和回城的Cost值一致,不然有可能会出现去程和回程的路径不一致的现象。

# 更改一个接口的Cost值,只能影响它作为出接口路径的总的Cost值。
R1(config-if)#ip ospf cost 888

R1#show ip ospf interface Gi1 | in Cost
  Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 888

5.3 其他Cost设置方式

还有一些应用场景比较低的使用方法。

譬如在NBMA网络里,前面有说需要在OSPF进程下指定邻居的地址。也可以在指定到邻居的Cost。

R1(config-if)#ip ospf network non-broadcast
R1(config-if)#router ospf 1
R1(config-router)# neighbor 172.16.0.2 cost 180

或是在ABR上指定特殊区域的Cost值,用于影响下发到特殊区域的默认路由的Cost值。

# 特殊区域路由器收到的默认路由的Metric值是2。
R31#show ip route
O*IA  0.0.0.0/0 [110/2] via 172.16.3.1, 2d09h, GigabitEthernet1

# 在ABR上设置特殊区域的Cost值,可以看到说明是影响特殊区域的外部路由的Metric
R4(config-router)#area 3 default-cost ?
  <0-16777214>  Stubs advertised external route metric

R4(config-router)#area 3 default-cost 100

# 设置完默认的Cost为100后,默认路由的Metric变成了101。因为从原来的1变成了100,增加了99。
O*IA  0.0.0.0/0 [110/101] via 172.16.3.1, 00:01:21, GigabitEthernet1

5.4 更改默认AD值

OSPF不像EIGRP和BGP,对内部路由和外部路由有不同的AD值。但是可以手工设置域内,域间和外部路由的AD值,取值范围为1-255。

R4(config-router)#distance ospf ?
  external    External type 5 and type 7 routes
  inter-area  Inter-area routes
  intra-area  Intra-area routes

5.5 最大度量值

可以将自己的Router LSA里的Metric变得最大,主要用于设备维护升级或设备重启后延迟参与OSPF路由。

  • 默认不加参数,就是互联链路的Metric变成最大。其余的选项是在此基础上增加类型的支持。
R13(config-router)#max-metric router-lsa ?
  external-lsa  Override external-lsa metric with max-metric value
  include-stub  Set maximum metric for stub links in router-LSAs
  on-startup    Set maximum metric temporarily after reboot
  summary-lsa   Override summary-lsa metric with max-metric value
  <cr>          <cr>
  
# 正常的Router LSA。
R23#show ip ospf database router 1.1.1.23
  Number of Links: 3

    Link connected to: a Stub Network
     (Link ID) Network/subnet number: 1.1.1.23
     (Link Data) Network Mask: 255.255.255.255
      Number of MTID metrics: 0
       TOS 0 Metrics: 1

    Link connected to: a Transit Network
     (Link ID) Designated Router address: 172.16.2.13
     (Link Data) Router Interface address: 172.16.2.13
      Number of MTID metrics: 0
       TOS 0 Metrics: 1

    Link connected to: a Transit Network
     (Link ID) Designated Router address: 172.16.2.9
     (Link Data) Router Interface address: 172.16.2.10
      Number of MTID metrics: 0
       TOS 0 Metrics: 1
       
# 设置完max-metric默认值,所有的Transit的链路Metric都变成了65535。
R23(config-router)#max-metric router-lsa

R23#show ip ospf database router 1.1.1.23
  Number of Links: 3

    Link connected to: a Stub Network
     (Link ID) Network/subnet number: 1.1.1.23
     (Link Data) Network Mask: 255.255.255.255
      Number of MTID metrics: 0
       TOS 0 Metrics: 1

    Link connected to: a Transit Network
     (Link ID) Designated Router address: 172.16.2.13
     (Link Data) Router Interface address: 172.16.2.13
      Number of MTID metrics: 0
       TOS 0 Metrics: 65535

    Link connected to: a Transit Network
     (Link ID) Designated Router address: 172.16.2.9
     (Link Data) Router Interface address: 172.16.2.10
      Number of MTID metrics: 0
       TOS 0 Metrics: 65535
  • 加include-stub,就是额外将末节网络的Metric变成最大。
# 再加上include-stub之后,直连的Stub网络的Metric也变成65535了。
R23#show ip ospf database router 1.1.1.23
  Number of Links: 3

    Link connected to: a Stub Network
     (Link ID) Network/subnet number: 1.1.1.23
     (Link Data) Network Mask: 255.255.255.255
      Number of MTID metrics: 0
       TOS 0 Metrics: 65535

    Link connected to: a Transit Network
     (Link ID) Designated Router address: 172.16.2.13
     (Link Data) Router Interface address: 172.16.2.13
      Number of MTID metrics: 0
       TOS 0 Metrics: 65535

    Link connected to: a Transit Network
     (Link ID) Designated Router address: 172.16.2.9
     (Link Data) Router Interface address: 172.16.2.10
      Number of MTID metrics: 0
       TOS 0 Metrics: 65535
  • 加external-lsa,就是额外将外部网络的Metric变成最大,仅限于ASBR。
# 在没加external-lsa的时候,外部路由的Metric还是1,加完之后就变成了16711680。
R13#show ip ospf database external 100.0.0.0 | in Metric
        Metric Type: 2 (Larger than any link state path)
        Metric: 1 
        
R13(config-router)#max-metric router-lsa external-lsa

R13#show ip ospf database external 100.0.0.0 | in Metric
        Metric Type: 2 (Larger than any link state path)
        Metric: 16711680 
  • 加summary-lsa,就是额外将3类LSA的Metric变成最大,仅限于ABR。
# 在没加summary-lsa的时候,3类路由的Metric还是2,加完之后就变成了16711680。
R4#show ip ospf database summary 1.1.1.31 | in Metric 
        MTID: 0         Metric: 2 
        
R4(config-router)#max-metric router-lsa summary-lsa 

R4#show ip ospf database summary 1.1.1.31 | in Metric
        MTID: 0         Metric: 16711680 
  • on-startup的参数:上述的参数可以叠加使用,加上on-startup的参数后,会在重启后多少时间内将这个参数前面的参数给Metric最大化。此外加上wait-for-bgp的参数,就是不仅要等待设置的时间还要等待BGP收敛完成,这时一个AND的条件。如果只用wait-for-bgp,也可不用加时间。
R4(config-router)#max-metric router-lsa include-stub summary-lsa on-startup ?
  <5-86400>     Time, in seconds, router-LSAs are originated with max-metric
  wait-for-bgp  Let BGP decide when to originate router-LSA with normal metric

6. 其他

6.1 前缀抑制

通过在OSPF进程下开启prefix-suppression来移除所有的链路路由,只留下末节路由,譬如Loopback地址。

  • 对于多路访问网络,譬如网络类型如广播的,通过将2类LSA里的掩码改成/32位来通知其他路由器不要将此路由添加到路由表,但是依然可以使用这条链路进行SPF的计算。
  • 对于点到点网络,则会将生成的Stub网络移除。则不会将这个链路的网段添加到路由表。
R23(config-router)#prefix-suppression 

# 在多网访问网络中,正常携带了这个网络的掩码。当前缀抑制启用后,网络掩码转变为/32位。

R22# show ip ospf database network 172.16.2.5

            OSPF Router with ID (1.1.1.22) (Process ID 1)

                Net Link States (Area 2)

  LS age: 1346
  Options: (No TOS-capability, DC)
  LS Type: Network Links
  Link State ID: 172.16.2.5 (address of Designated Router)
  Advertising Router: 1.1.1.21
  LS Seq Number: 80000091
  Checksum: 0x492
  Length: 32
  Network Mask: /32
        Attached Router: 1.1.1.21
        Attached Router: 1.1.1.22


# 点对点网络正常的1类LSA包括的信息,除了有点到点连到的邻居外,还有链路的/30位的网段。当前缀抑制启用后,这个Stub Network会从1类LSA里移除。

R1#show ip ospf database router 1.1.1.3

  省略
  Number of Links: 4
  
    Link connected to: another Router (point-to-point)
     (Link ID) Neighboring Router ID: 1.1.1.1
     (Link Data) Router Interface address: 172.16.0.2
      Number of MTID metrics: 0
       TOS 0 Metrics: 1

    Link connected to: a Stub Network
     (Link ID) Network/subnet number: 172.16.0.0
     (Link Data) Network Mask: 255.255.255.252
      Number of MTID metrics: 0
       TOS 0 Metrics: 1

6.2 被动接口

在路由器上可以通过设置被动接口来决定哪些接口不需要参与OSPF建邻居的过程。对于连接到非路由器的接口,譬如终端设备,可以将此接口设置成被动接口。它的好处是:

  • 不会在此接口发送Hello包,防止未经授权的设备和本路由器建立邻居关系。
  • 由于不会在被动接口上收发Hello包,减少了一些协议的开销,减轻了CPU的负担

配置方式分为两种,既可以直接passive掉一些接口,也可以默认passive全部接口,再no passive需要建立邻居的接口,这点和EIGRP的配置很像。

# passive单独的接口
R23(config-router)#passive-interface Gi1

# passive所有,单独no passive特定接口
R23(config-router)#passive-interface default 
R23(config-router)#no passive-interface Gi

6.3 非连续区域和虚链路

非连续区域包含三种情况,非连续的Area 0,非连续的其他区域,以及其他区域不直连Area 0。

对于非连续的Area 0中间隔的是其他OSPF区域,或是其他区域通过另一个其他区域连接到Area 0的这两种情况,可以使用虚电路来解决。在两个ABR之间建立虚连接,可以使得Area 0直连,或是其他区域直连Area 0。下面的例子是Area 3通过Area 2连接到Area 0。

R1#show run | s r os
router ospf 1
 router-id 1.1.1.1
 area 1 virtual-link 1.1.1.12
 
R12#show run | s r os
router ospf 1
 router-id 1.1.1.12
 area 1 virtual-link 1.1.1.1
 
R12#show ip ospf neighbor 

Neighbor ID     Pri   State           Dead Time   Address         Interface
1.1.1.1           0   FULL/  -           -        172.16.1.1      OSPF_VL0

如果连个区域被非OSPF区域隔开,只要2个ASBR之间有IP可达性,可以使用GRE隧道来建立OSPF邻居,进而保持区域的连续性。

而非连续的其他区域则是OSPF允许的存在,譬如两个Area 1分别连接到Area 0。Area 0会负责搜集各个其他区域的3类LSA,并传给其他区域。

6.4 认证

OSPF支持接口下和区域内进行认证。在开始讲OSPF的报头的时候,里面有认证类型和认证信息的字段。

  • 认证类型为0,则认证信息部分不被使用。
  • 认证类型为1,则认证信息部分存储明文密码。
# 接口下启用明文密码。
R31(config-if)#ip ospf authentication
R31(config-if)#ip ospf authentication-key cisco123

# 可以在接口下看到明文密码验证启用了。
R31#show ip ospf interface gigabitEthernet 2 | in auth  
  Simple password authentication enabled
  • 认证类型为2,则认证信息部分存储密文的元信息,包括Key ID,认证数据的长度以及序列号。
    • 算法包括MD5和HMAC-SHA。
    • 实际的消息摘要(哈希值)则放在OSPF包的最后,不在报头里。
    • 哈希值的长度取决于算法。
    • MD5的哈希值只取决于内容信息本身。HMAC-SHA引入了预共享密钥。
# 接口下启用密文MD5密码。
R31(config-if)#ip ospf message-digest-key 1 md5
R31(config-if)#ip ospf message-digest-key 1 md5 cisco123

# 可以在接口下看到秘文密码验证启用了。
R31#show ip ospf interface Gi2 | in auth 
  Cryptographic authentication enabled
  
# 对HMAC-SHA算法,需要先配预共享密钥。如果没配置时间,就是永久有效。
R31(config)#key chain ospfkey
R31(config-keychain)#key 1
R31(config-keychain-key)#key-string CiscoOspfKey
R31(config-keychain-key)#cryptographic-algorithm hmac-sha-256
R31(config-keychain-key)#send-lifetime local 00:00:00 Jan 1 2025 00:00:00 Jan 1 2026
R31(config-keychain-key)#accept-lifetime local 00:00:00 Jan 1 2025 00:00:00 Jan 1 2026

R31#show key chain 
Key-chain ospfkey:
    key 1 -- text "CiscoOspfKey"
        cryptographic-algorithm: hmac-sha-256
        accept lifetime (00:00:00 UTC Jan 1 2025) - (00:00:00 UTC Jan 1 2026) [valid now]
        send lifetime (00:00:00 UTC Jan 1 2025) - (00:00:00 UTC Jan 1 2026) [valid now]
        
# 应用到接口。可以看到Key Chain的名称,使用的Key和算法。
R31(config-if)#ip ospf authentication key-chain ospfkey 

R31#show ip ospf interface Gi2
  Cryptographic authentication enabled
    Sending SA: Key 1, Algorithm HMAC-SHA-256 - key chain ospfkey

在RFC2328中写到,哈希会被加到OSPF包的末尾。在实际的抓包中发现,Auth Crypt Data也包含在OSPF包的报头中。查看RFC5613,有一个新增的Cryptographic Authentication TLV,这我们抓包的显示就一致了。查看了一下其他的资料,OSPF包报头是验证OSPF包的有效性的,CA-TLV是验证LLS Data Block的。

在这里插入图片描述

后记: 还有好多特性并没有提及,譬如跟MPLS VPN相关的,跟SR相关的,多区域,NSR,GR等等。在这里就不大而全了。这个系列已经足够覆盖到日常工作中用到的大部分的知识了。

📚 延伸阅读

更多内容持续更新于我的博客:https://www.zenseek.site

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值