目录

前言
Area
    Internal Router
    Backbone Router
    Area Border Router (ABR)
    Autonomous Area Border Router (ASBR)
Neighbor
Designated Router
Network Type
  自动发现 Neighbor / 手动输入 Neighbor
  决定是否要选 DR/BDR
    控制 Timer
    小结
Link-state Advertisement (LSA)
    Router LSA (Type 1)
    Network LSA (Type 2)
    Network Summary LSA (Type 3)
    ASBR Summary LSA (Type 4)
    External LSA (Type 5)
Stub Area
Not So Stubby Area (NSSA)
Metric 与 Cost
    ip ospf cost 指令
    改 Interface Bandwidth
    改 Reference Bandwidth
    External Route Cost
路径选择
    Route Type
    比较 Metric
    Load Balancing
Virtual Link
    接驳至 Area 0
    接驳两个 Area 0

前言

Open Shortest Path First (OSPF) 是属於 Link-State Routing Protocol,每只在 OSPF 里的 Router 都会向 Neighbor 交换自己的 Link-State,当 Router 收到这些 Link-State 之後,就会运用 Dijkstra Algorithm (戴克斯特拉算法) 来计算出最短的路径 (Shortest Path)。

Area

万事起头难,OSPF 有很多仔细的设定等待我们去发掘,现在我们就先要掌握 OSPF 的 Area 概念。OSPF 是设计给一个大型的网络使用的,为了解决管理上的问题,OSPF 用了一个叫做 Hierarchical System (分层系统),把大型的 OSPF 分割成多个 Area (区域) 去做设定。Area 有两个表达方式,可以是一个 32 Bits 的数字 (由 0 至 65,535 ),或者用类似 IP 的方式,例如:192.168.1.1,前者比较常见。Area 0 (或 0.0.0.0) 是一个特别的 Area,我们称为 Backbone Area (骨幹),所有其他 Area 必需与 Backbone Area 连接,这是规矩,不要问,只要信!

一图胜万言!现在来看看以下这个 OSPF 网络的结构,顺道学学一些 OSPF 专属名词。

ospf

Internal Router

Router 上所有 Interface 都属於同一个 Area,R3 和 R5 就是 Internal Router。

Backbone Router

最少一个 Interface 连接 Backbone Area (Area 0),所以 R2、R3 和 R4 都是 Backbone Router。

Area Border Router (ABR)

连接两个 Area 或以上的 Router 称为 ABR,R2 和 R4 都是 ABR。

Autonomous System Border Routers (ASBR)

有 Interface 连接其他 AS 的 Router 就是 ASBR,在这个网络中,除了执行 OSPF 之外,最右边蓝色的区域正执行另一种 Routing Protocol RIP,R6 为 OSPF 与 RIP 的连接点,即两个 AS 的连接点,称之为 ASBR。

Neighbor 与 Adjacency

来试一试身手,现在尝试为以下这个简单的网络设定 OSPF:

ospf

IP 设定如下:

hostname R1
!
interface Ethernet0/0
 ip address 192.168.12.1 255.255.255.0
hostname R2
!
interface Ethernet0/0
 ip address 192.168.12.2 255.255.255.0
!
interface Ethernet0/1
 ip address 192.168.23.2 255.255.255.0
hostname R3
!
interface Ethernet0/1
 ip address 192.168.23.3 255.255.255.0

要设定 OSPF 只需要两个简单的步骤:

  1. 使用 router ospf  启动 OSPF,请留意 Process ID 只是本机执行 OSPF Process 的一个 ID,和设定 EIGRP 时的 AS Number 不同,两只要成为 Neighbor 的 Router 不需要拥有相同的 ID。
  2. 使用 network area 来宣告那一个 Interface 会参与 OPSF,参与 OSPF 的 Interface 会发佈 Hello packet 尝试与对方成为 Neighbor,然後再成为 Adjacency,在之後发佈的 link 资讯中亦会包含此网段。

所以,最基本的 OSPF 设定如下:

hostname R1
!
router ospf 1
 network 192.168.12.0 0.0.0.255 area 10
hostname R2
!
router ospf 1
 network 192.168.12.0 0.0.0.255 area 10
 network 192.168.23.0 0.0.0.255 area 0
hostname R3
!
router ospf 1
 network 192.168.23.0 0.0.0.255 area 0

如果成功的话,应该会看到一些像以下的讯息,代表他们成功成为 Neighbor,并由 LOADING 状态变成 FULL 状态。

*Mar  1 00:10:32.635: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.23.2 on Ethernet0/0 from LOADING to FULL, Loading Done

你最不希望发生的事发生了,对!Router 们成为 Neighbor 其实中间经过多个 State (状态),对!背诵如流的话对 Troubleshoot 很有帮助 (对 Cisco 考试有帮助......),各个状态解释如下:

Down

没有发放 Hello Message。

Init

刚刚向对方发放 Hello Message

2-Way

他们开始沟通了!在这时,他们会选出 DR 和 BDR,什麽是 DR 和 BDR 呢?一会在说明。如未能成为 DR 和 BDR,则成为 DROTHER,DROTHER 会停在 2-Way,此时两只 Router 已成为 Neighbor。

ExStart

预备交换 Link 资讯。

Exchange

他们正在交换 DBD (Database Descriptors),你可以把 DBD 看成是 Link 资讯的一些目录,先给目录对方让方回覆那些 LSA (Link State Advertisements) 是他需要的。

Loading

正在交换 LSA。

Full

终於完成了!两只 Router 成为 Adjacency,在这时,同一个 Area 的 Router 里面的 Topology Table 应该是完全相同的。

如果想窥探一下状态转换的整个过程,可以开启 debug ip ospf adj,然後使用 clear ip ospf process 来 reset ospf process。

R1#debug ip ospf adj
OSPF adjacency events debugging is on
R1#
R1#clear ip ospf process
Reset ALL OSPF processes? [no]: yes
R1#
*Mar  1 00:30:49.891: OSPF: Interface Ethernet0/0 going Down
*Mar  1 00:30:49.891: OSPF: 192.168.12.1 address 192.168.12.1 on Ethernet0/0 is dead, state DOWN
*Mar  1 00:30:49.895: OSPF: Neighbor change Event on interface Ethernet0/0
*Mar  1 00:30:49.899: OSPF: DR/BDR election on Ethernet0/0
*Mar  1 00:30:49.899: OSPF: Elect BDR 192.168.23.2
*Mar  1 00:30:49.903: OSPF: Elect DR 192.168.23.2
*Mar  1 00:30:49.903: OSPF: Elect BDR 192.168.23.2
*Mar  1 00:30:49.907: OSPF: Elect DR 192.168.23.2
*Mar  1 00:30:49.907:        DR: 192.168.23.2 (Id)   BDR: 192.168.23.2 (Id)
*Mar  1 00:30:49.911: OSPF: Flush network LSA immediately
*Mar  1 00:30:49.911: OSPF: Remember old DR 192.168.12.1 (id)
*Mar  1 00:30:49.915: OSPF: 192.168.23.2 address 192.168.12.2 on Ethernet0/0 is dead, state DOWN
*Mar  1 00:30:49.919: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.23.2 on Ethernet0/0 from FULL to DOWN, Neighbor Down: Interface down or detached

<--这里开始重新建立 Neighbor-->

*Mar  1 00:30:49.923: OSPF: Neighbor change Event on interface Ethernet0/0
*Mar  1 00:30:49.923: OSPF: DR/BDR election on Ethernet0/0
*Mar  1 00:30:49.923: OSPF: Elect BDR 0.0.0.0
*Mar  1 00:30:49.923: OSPF: Elect DR 0.0.0.0
*Mar  1 00:30:49.923:        DR: none    BDR: none
*Mar  1 00:30:49.923: OSPF: Remember old DR 192.168.23.2 (id)
*Mar  1 00:30:49.931: OSPF: Interface Ethernet0/0 going Up
*Mar  1 00:30:49.951: OSPF: 2 Way Communication to 192.168.23.2 on Ethernet0/0, state 2WAY
*Mar  1 00:30:49.951: OSPF: Backup seen Event before WAIT timer on Ethernet0/0
*Mar  1 00:30:49.955: OSPF: DR/BDR election on Ethernet0/0
*Mar  1 00:30:49.955: OSPF: Elect BDR 192.168.12.1
*Mar  1 00:30:49.959: OSPF: Elect DR 192.168.23.2
*Mar  1 00:30:49.959: OSPF: Elect BDR 192.168.12.1
*Mar  1 00:30:49.963: OSPF: Elect DR 192.168.23.2
*Mar  1 00:30:49.963:        DR: 192.168.23.2 (Id)   BDR: 192.168.12.1 (Id)
*Mar  1 00:30:49.967: OSPF: Send DBD to 192.168.23.2 on Ethernet0/0 seq 0x20AD opt 0x52 flag 0x7 len 32
*Mar  1 00:30:50.111: OSPF: Rcv DBD from 192.168.23.2 on Ethernet0/0 seq 0x241F opt 0x52 flag 0x7 len 32  mtu 1500 state EXSTART
*Mar  1 00:30:50.115: OSPF: NBR Negotiation Done. We are the SLAVE
*Mar  1 00:30:50.115: OSPF: Send DBD to 192.168.23.2 on Ethernet0/0 seq 0x241F opt 0x52 flag 0x0 len 32
*Mar  1 00:30:50.143: OSPF: Rcv DBD from 192.168.23.2 on Ethernet0/0 seq 0x2420 opt 0x52 flag 0x3 len 72  mtu 1500 state EXCHANGE
*Mar  1 00:30:50.147: OSPF: Send DBD to 192.168.23.2 on Ethernet0/0 seq 0x2420 opt 0x52 flag 0x0 len 32
*Mar  1 00:30:50.175: OSPF: Rcv DBD from 192.168.23.2 on Ethernet0/0 seq 0x2421 opt 0x52 flag 0x1 len 32  mtu 1500 state EXCHANGE
*Mar  1 00:30:50.175: OSPF: Exchange Done with 192.168.23.2 on Ethernet0/0
*Mar  1 00:30:50.175: OSPF: Send LS REQ to 192.168.23.2 length 24 LSA count 2
*Mar  1 00:30:50.175: OSPF: Send DBD to 192.168.23.2 on Ethernet0/0 seq 0x2421 opt 0x52 flag 0x0 len 32
*Mar  1 00:30:50.191: OSPF: Rcv LS UPD from 192.168.23.2 on Ethernet0/0 length 92 LSA count 2
*Mar  1 00:30:50.199: OSPF: Synchronized with 192.168.23.2 on Ethernet0/0, state FULL

再来教大家一个重要的指令:show ip ospf neighbor,可以看到现时 neighbor 的状况,如果在 R2 输入应该看到以下结果:

R2#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.23.3      1   FULL/DR         00:00:35    192.168.23.3    Ethernet0/1
192.168.12.1      1   FULL/BDR        00:00:32    192.168.12.1    Ethernet0/0

各栏位解释如下:

Neighbor ID

即是 Neighbor 的 ID,留意是 ID 不是 IP,即是说,这是对方的「名字」,只不过对方的名字刚好是 IP,此话怎解呢?其实参与 OSPF 的 Router 都会有一个名字,称为 Router ID,Router ID 会依以下顺序来取其名:

  1. 根据 Router-id 指令来设定
  2. 如没有设 Router-id,则使用 Loopback Interface 里面最大的 IP Address 来做 Router ID
  3. 如没有设 Loopback Interface,使用参与 OSPF 的 其他 Interface 里面最大的 IP Address 来做 Router ID

因此,如果我想刻意去改 Router ID 的话,可以这样做 (记得要重启 OSPF):

R1(config)#router ospf 1
R1(config-router)#router-id 1.2.3.4
Reload or use "clear ip ospf process" command, for this to take effect
R1(config-router)#do clear ip ospf process
Reset ALL OSPF processes? [no]: yes

然後在 R2 看看 Neighbor 就会发现 R1 的 Router ID 改变了。

R2#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.23.3      1   FULL/DR         00:00:38    192.168.23.3    Ethernet0/1
1.2.3.4           1   FULL/BDR        00:00:38    192.168.12.1    Ethernet0/0

Pri

Priority (优先权) 的意思,用来判断由谁来做 DR,Priority 比较大的 Router 会成为 DR,第二大的会成为 BDR,其他就会成为 DROTHER,至於什麽是 DR 呢?请看下一段。

State

有两组意思,前面就是刚刚说过的 Neighbor 状态,如果两个 Neighbor 能够保持 FULL 的话就正常了。而後面就是对方的角色,记著是对方,不是自己,现在来解说一下什麽是 DR。话说在 Broadcast Multi-Access 的网络里面,例如我们常用的 Ethernet,同一个网段里面可能同时连接叁个或以上的 Router,即是说每只 Router 需要建立 n-1 条 connection,Fully Mesh 的 connection 总数为 n(n-1)/2。Router 越多 connection 就越多,聪明的 OSPF 就在这些 Router 选一位 DR (Designated Router),所有 Router 只需与 DR 建立 connection。每次有 Routing Update,Router 只需把 Update 传给 DR,再由 DR 统一发放给其他 Router,这样,除了 DR 外, Area 里每只 Router 只需处理一条 connection。但 DR 有个问题就是如果 DR 出了问题下线了,就无人继续处理 Routing Update,所以除了 DR 外,还要选一位 BDR (Backup Designated Router),在 DR 下线时由 BDR 顶上变成 DR。

Dead Time

OSPF 预设的 Hello Interval 是 10 秒,即是说 OSPF 会每 10 秒钟向 Neighbor 传送 Hello Message,对方接收到後会回应,但如果经过 Dead Interval 40 秒也收不到对方回覆,就判断对方出了问题下线了。所以在成为 Neighbor 之後,Dead Time 由 40 秒开始倒数,通常数到 30 秒,就会因为收到 Hello Message 而重设为 40 秒,但是如果倒数到 0 秒也收不到 Hello,就判断对方死了。

Hello Interval 和 Dead Interval 是可以在 Interface 更改的,指令如下。但请紧记要成为 Neighbor,两只 Router 的 Interval Timer 必需一致。

R1(config-if)# ip ospf hello-interval 15
R2(config-if)# ip ospf dead-interval 60 

Address

就是对方的 IP Address,留意这个 Neighbor ID 不同,是真真正正对方的 IP。

成为 Neighbor 的条件

要成为 Neighbor,两个 Router 的 Interface 的 OSPF 参数必需相同,这些参数包括:

Area ID

如果我的 Interface 在 Area 0 你的 Interface 在 Area 10,当然就不能成为 Neighbor 了,所以 Area ID 必需相同。

Area Type

OSPF 的 Area 分为几个种类,分别是:Backbone Area (Area 0)、Standard Area,Stub Area,Totally Stubby Area、Not-so-stubby Area 和 Totally Not-so-stubby Area,不要被他们吓倒,在稍後的章节会再加以说明,现阶段只要知道 Area Type 必需相同便可以。

Prefix 与 Subnet Mask

Interface 的 IP Address 中,Prefix 与 Subnet Mask 必需相同,简单说,Interface 必需处於同一个网段中才能成为 Neighbor。

Interval Timer

刚才都有提及过,Hello Interval 与 Dead Interval 必需相同。

Authentication

基於保安理由,OSPF 可以设定密码认證,只有密码相同才能通过认證成为 Neighbor。OSPF 支缓明码和 MD5加密密码两种认證方式。

要设定明码,先在两只 Router 的 OSPF 设定以下指令:

R1(config)# router ospf 1
R1(config-router)# network 192.168.12.0 0.0.0.255 area 10
R1(config-router)# area 10 authentication 

然後在两只 Router 的 Interface 设定密码:

R1(config)# interface Ethernet0/0
R1(config-if)# ip ospf authentication
R1(config-if)# ip ospf authentication-key MyPassword 

要设定 MD5 密码,先在两只 Router 的 OSPF 设定以下指令:

R1(config)# router ospf 1
R1(config-router)# network 192.168.12.0 0.0.0.255 area 10
R1(config-router)# area 10 authentication message-digest 

然後在两只 Router 的 Interface 设定密码:

R1(config)# interface Ethernet0/0
R1(config-router)# ip ospf message-digest-key 10 md5 MyPassword 

Designated Router

现在剖释一下 DR 和 BDR 的竞选条件,知道 DR 的竞选方式可以有让我们有策略地配置 DR,例如使用效能较高的 Router 成为 DR,提高稳定性。

在一个网段中,Priority 较高的 Router 会成为该网段的 DR,第二高会成为 BDR。如果 Priority 相同,Router ID 较高者会成为 DR。现在看看以下实验,同一个网段有四只 Router:

ospf

Router 设定如下:

hostname R1
!
interface Ethernet0/0
 ip address 192.168.1.1 255.255.255.0
!
router ospf 1
 network 192.168.1.0 0.0.0.255 area 0
hostname R2
!
interface Ethernet0/0
 ip address 192.168.1.2 255.255.255.0
!
router ospf 1
 network 192.168.1.0 0.0.0.255 area 0
hostname R3
!
interface Ethernet0/0
 ip address 192.168.1.3 255.255.255.0
!
router ospf 1
 network 192.168.1.0 0.0.0.255 area 0
hostname R4
!
interface Ethernet0/0
 ip address 192.168.1.4 255.255.255.0
!
router ospf 1
 network 192.168.1.0 0.0.0.255 area 0

在 R1 看看 Neighbor Table,各 Router 的 Priority 都是 1 (预设值),用 show ip ospf interface 查看 R1 自己的 Priority 也是 1,由於全部 Router 的 Prioriy 相同,所以 Router ID 192.168.1.4 最大,成为 DR,192.168.1.3 第二大,成为 BDR。

R1#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.1.2       1   FULL/DROTHER    00:00:38    192.168.1.2     Ethernet0/0
192.168.1.3       1   FULL/BDR        00:00:38    192.168.1.3     Ethernet0/0
192.168.1.4       1   FULL/DR         00:00:37    192.168.1.4     Ethernet0/0

R1#show ip ospf interface ethernet 0/0
Ethernet0/0 is up, line protocol is up
  Internet Address 192.168.1.1/24, Area 0
  Process ID 1, Router ID 192.168.1.1, Network Type BROADCAST, Cost: 10
  Transmit Delay is 1 sec, State DROTHER, Priority 1
  Designated Router (ID) 192.168.1.4, Interface address 192.168.1.4
  Backup Designated router (ID) 192.168.1.3, Interface address 192.168.1.3
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
    oob-resync timeout 40
    Hello due in 00:00:01
  Supports Link-local Signaling (LLS)
  Index 1/1, flood queue length 0
  Next 0x0(0)/0x0(0)
  Last flood scan length is 0, maximum is 1
  Last flood scan time is 0 msec, maximum is 0 msec
  Neighbor Count is 3, Adjacent neighbor count is 2
    Adjacent with neighbor 192.168.1.3  (Backup Designated Router)
    Adjacent with neighbor 192.168.1.4  (Designated Router)
  Suppress hello for 0 neighbor(s)

要改变 Priority,可以在 Interface 下输入 ip ospf priority ,试试在 R1 把 Priority 改成 100。

R1(config)#interface ethernet 0/0
R1(config-if)#ip ospf priority 100

虽然 Priority 更改了,但 R1 仍然是 DROTHER,没有成为 DR,因为已经成为 DR 的 Router 是不会被中途抢走的,所以,如果想要 R1 成为 DR,必需要在 R4 reset OSPF process。

R1#show ip ospf interface ethernet 0/0
Ethernet0/0 is up, line protocol is up
  Internet Address 192.168.1.1/24, Area 0
  Process ID 1, Router ID 192.168.1.1, Network Type BROADCAST, Cost: 10
  Transmit Delay is 1 sec, State DROTHER, Priority 100

clear ip ospf process 来 reset OSPF Process。

R4#clear ip ospf process
Reset ALL OSPF processes? [no]: yes
R4#
*Mar  1 00:28:41.175: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.1.1 on Ethernet0/0 from 2WAY to DOWN, Neighbor Down: Interface down or detached
*Mar  1 00:28:41.179: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.1.2 on Ethernet0/0 from 2WAY to DOWN, Neighbor Down: Interface down or detached
*Mar  1 00:28:41.179: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.1.3 on Ethernet0/0 from FULL to DOWN, Neighbor Down: Interface down or detached

再看看 R1,哦?怎样还不是 DR,但变成 BDR,WHY??

R1#show ip ospf interface ethernet 0/0
Ethernet0/0 is up, line protocol is up
  Internet Address 192.168.1.1/24, Area 0
  Process ID 1, Router ID 192.168.1.1, Network Type BROADCAST, Cost: 10
  Transmit Delay is 1 sec, State BDR, Priority 100

是这样的,当 R4 下线後,原来的 BDR R3 便会立刻升格成为 DR,R1 就只能由 DROTHER 进升成为 BDR,只有再 Reset R3,R1 才能真正成为 DR。这是一个很好的机制,减少了 DR 出现不稳定的情况。顺带一提,Reset R3 之後,由於 R4 的 router ID 最大,所以成为了新的 BDR。

Reset ALL OSPF processes? [no]: yes
R3#
*Mar  1 00:32:04.415: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.1.1 on Ethernet0/0 from FULL to DOWN, Neighbor Down: Interface down or detached
*Mar  1 00:32:04.419: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.1.2 on Ethernet0/0 from 2WAY to DOWN, Neighbor Down: Interface down or detached
*Mar  1 00:32:04.419: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.1.4 on Ethernet0/0 from EXSTART to DOWN, Neighbor Down: Interface down or detached
R3#
*Mar  1 00:32:04.515: %OSPF-4-NONEIGHBOR: Received database description from unknown neighbor 192.168.1.4
R3#
*Mar  1 00:32:12.799: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.1.1 on Ethernet0/0 from LOADING to FULL, Loading Done
*Mar  1 00:32:12.995: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.1.4 on Ethernet0/0 from LOADING to FULL, Loading Done

R1 成为 DR 了。

R1#show ip ospf interface ethernet 0/0
Ethernet0/0 is up, line protocol is up
  Internet Address 192.168.1.1/24, Area 0
  Process ID 1, Router ID 192.168.1.1, Network Type BROADCAST, Cost: 10
  Transmit Delay is 1 sec, State DR, Priority 100

在 R2 再确认一下 R1 成为 DR。

R2#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.1.1     100   FULL/DR         00:00:30    192.168.1.1     Ethernet0/0
192.168.1.3       1   FULL/DROTHER    00:00:37    192.168.1.3     Ethernet0/0
192.168.1.4       1   FULL/BDR        00:00:35    192.168.1.4     Ethernet0/0

Network Type

到这一刻为止,我们学习了 OSPF Neighbor 的叁大元素:

  1. Router 透过 Multicast 搜寻 Neighbor
  2. DR/BDR 的选择条件 (先比 Prioriy,再比 Router ID)
  3. Timer 值 (Hello Interval 与 Dead Interval),预设为 10/40 秒

原来 OSPF 会按不同的网络环境去微调这叁大元素!

自动发现 Neighbor / 手动输入 Neighbor

由於 OSPF 是利用 Multicast 自动发现 Neighbor 的,换句话说,如果网络不支缓 Broadcast ,等於不支缓 Multicast,就不可以自动发现 Neighbor。毫无疑问,Ethernet 可以支缓 Broadcast,另一种我们最常讨论的就是 Frame Relay,究竟 Frame Relay 能否支缓 Broadcast 呢?答案是:YES and NO!不是玩野,因为 Frame Relay Network 的 Broadcast 功能是可以选择开或关的,如果开了,就支缓 Broadcast,又可自动发现 Neighbor,相反如果关掉,就不支缓 Broadcast,就要手动输入 Neighbor。

另外要讨论的就是 Point to Point Network,由於在 Point to Point Network 里面,虽然没有 Broadcast,但建立 Point to Point connection 的两个 Node 绝对知道对方存在,因此仍会自动建立 Neighbor,其中一个例子为透过 Serial Interface Point to Point Connection 建立 OSPF Neighbor。

因此,结论是:

凡是 Non-Broadcast 的 Network 不会自动发现 Neighbor,需要手动输入 Neighbor。

现在我们用一个 Multipoint Non-Broadcast 的 Frame Relay Network 来作示範,看看要怎样手动设定 Neighbor。接下来会有一些关於 Frame Relay 的设定,如果读者不熟悉的话,可以先看看本网的 Frame Relay Switching 教学。

ospf

hostname R1
!
interface Serial0/0
 ip address 192.168.123.1 255.255.255.0
 encapsulation frame-relay
 frame-relay map ip 192.168.123.2 102
 frame-relay map ip 192.168.123.3 103
hostname R2
!
interface Serial0/0
 ip address 192.168.123.2 255.255.255.0
 encapsulation frame-relay
 frame-relay map ip 192.168.123.1 201
 frame-relay map ip 192.168.123.3 201
hostname R3
!
interface Serial0/0
 ip address 192.168.123.3 255.255.255.0
 encapsulation frame-relay
 frame-relay map ip 192.168.123.1 301
 frame-relay map ip 192.168.123.2 301

由於 frame-relay 指令没有 Broadcast 这个 keyword,所以此网络不支缓 Broadcast。我们尝试在这些 Router 执行 OSPF 的指令。

hostname R1
!
router ospf 1
 network 192.168.123.0 0.0.0.255 area 0
hostname R2
!
router ospf 1
 network 192.168.123.0 0.0.0.255 area 0
hostname R3
!
router ospf 1
 network 192.168.123.0 0.0.0.255 area 0

指令是输入了,可惜的是,就算你等到 2046,Neighbor 也不会建立起来,因为不支缓 Broadcast,这时就要手动去建立 Neighbor,指令如下:

R1(config)#router ospf 1
R1(config-router)#neighbor 192.168.123.2
R1(config-router)#neighbor 192.168.123.3
R1(config-router)#
*Mar  1 00:28:05.083: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.123.2 on Serial0/0 from LOADING to FULL, Loading Done
*Mar  1 00:28:06.083: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.123.3 on Serial0/0 from LOADING to FULL, Loading Done

决定是否要选 DR/BDR

DR 是否一定要选呢?细心想一想,在上一节提及的网络里说过,选 DR 的原因是什麽呢?是因为不想建立太多 connection。如果只有两只 Router 呢?对!就不用选了,因为两只 Router 就只有一条 connection,根本不用担心有太多 connection 这个问题,所以不用选,这样只有两只 Router 的网络我们叫作 Point To Point Network。这样说都不够正宗,应该说如果像 Ethernet 这种 Multi Access 的 Network 才需要选 DR。那麽,除了 Ethernet,还有那种 Network 有 Multi Access 这种特性呢?

例如一种叫 Fully Mesh 的 Multipoint Frame Relay Network,他们透过 Frame Relay Switches 来连接,并非 Ethernet 网络,但每只 Router 却可以连接其他所有 Router,保留了 Ethernet 中 Multi Access 的能力。

ospf

所以,结论是:

凡是属於 Multi-Acess 的 Network,需要 DR/BDR 选举。

还记得我们可以干扰 DR/BDR 的选举吗?如果你还记得的话,我们是可以用 ip ospf priority 来改变 Router 的 priority 来控制选举结果,但 ip ospf priority 是透过 Hello Message 来传送的,Hello Message 依赖 Broadcast,如果网络是 Non-Broadcast 我们又可以怎样控制 Priority?有方法的,刚才教你的 neighbor 指令是可以加入一个 priority 参数去改变 priority 的,方法如下:

R1(config)#router ospf 1
R1(config-router)#neighbor 192.168.123.2 priority 50
R1(config-router)#neighbor 192.168.123.3 priority 100

控制 Timer

为什麽要控制 Timer?因为不同网络的网络频宽和迟缓时间 (delay) 情况不一,Neighbor 要靠 Hello Message 去维持,预设情况下,Hello 每 10 秒钟传送一次 (Hello Interval),40 秒收不到 Hello 的话就中断 Neighbor 关係 (Dead Interval),这是适合像 Broadcast Multicast (Ethernet) 和 Point to Point 这些高速网络的设定,在效能较低的网络,就要改成 Hello Interval 30 秒,Dead Interval 120 秒的设定提供较大的容忍度。

Broadcast Multicast 和 Point-to-Point Network,预设 Timer 为 10/40,其他低速网络则使用 30/120。

小结

自动 / 手动NeighborDR 选举与否10,40 / 30,120 Timer 设定 这叁大元素,Cisco Router 把不同的设定组合归纳为五种模式,我们把这玩意称呼为 Network Type。下表列出五种模式各个不同的设定:

 Non-Broadcast Multi-access (NBMA)Multipoint BroadcastMultipoint Non-BroadcastBroadcast Multi-accessPoint-to-Point
DR / BDR 选举 Yes No No Yes No
自动发现 Neighbor No Yes No Yes Yes
Hello / Dead Interval 30 / 120 30 / 120 30 / 120 10 / 40 10 / 40
网络例子 Fully Mesh Frame Relay Multipoint Frame Relay (有 Broadcast Keyword) Multipoint Frame Relay (无 Broadcast Keyword) Ethernet Serial Interface Point to Point Connection

如果是 Ethernet Interface,预设是使用 Broadcast Multi-access,使用 show ip ospf interface 就会见到。

R1#show ip ospf interface
Ethernet0/0 is up, line protocol is up
  Internet Address 192.168.12.1/24, Area 0
  Process ID 1, Router ID 192.168.12.1, Network Type BROADCAST, Cost: 10
  Transmit Delay is 1 sec, State DR, Priority 1
  Designated Router (ID) 192.168.12.1, Interface address 192.168.12.1
  No backup designated router on this network
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
    oob-resync timeout 40
    Hello due in 00:00:05
  Supports Link-local Signaling (LLS)
  Index 1/1, flood queue length 0
  Next 0x0(0)/0x0(0)
  Last flood scan length is 0, maximum is 0
  Last flood scan time is 0 msec, maximum is 0 msec
  Neighbor Count is 0, Adjacent neighbor count is 0
  Suppress hello for 0 neighbor(s)

在 Interface 输入指令 ip ospf network 可以更改 Network Type。

R1(config)#interface ethernet 0/0
R1(config-if)#ip ospf network ?
  broadcast            Specify OSPF broadcast multi-access network
  non-broadcast        Specify OSPF NBMA network
  point-to-multipoint  Specify OSPF point-to-multipoint network
  point-to-point       Specify OSPF point-to-point network

R1(config-if)#ip ospf network non-broadcast
R1(config-if)#end
R1#show ip ospf interface
Ethernet0/0 is up, line protocol is up
  Internet Address 192.168.12.1/24, Area 0
  Process ID 1, Router ID 192.168.12.1, Network Type NON_BROADCAST, Cost: 10
  Transmit Delay is 1 sec, State WAITING, Priority 1
  No designated router on this network
  No backup designated router on this network
  Timer intervals configured, Hello 30, Dead 120, Wait 120, Retransmit 5
    oob-resync timeout 120
    Hello due in 00:00:17
    Wait time before Designated router selection 00:01:17
  Supports Link-local Signaling (LLS)
  Index 1/1, flood queue length 0
  Next 0x0(0)/0x0(0)
  Last flood scan length is 0, maximum is 0
  Last flood scan time is 0 msec, maximum is 0 msec
  Neighbor Count is 0, Adjacent neighbor count is 0
  Suppress hello for 0 neighbor(s)

Link-state Advertisement (LSA)

OSPF 是一个 Link-state Routing Protocol,所谓 Link-state 的 Link 简单来说就是 Router 的 Interface,OSPF 的运作原理就是把自己每个 Interface 正连著什麽 Network 告诉其他 Router,於是 Router 便可计算出自己的 Route Table。LSA 中包括了几项重要的资讯,包括:LSA 由谁传送出来的、它告诉我连著什麽 Network、以及它要去这 Network 的 Cost (Cost 是在有多於一条路径时用来判断走那条路较快,在稍後说到 Cost 的章节时再加以说明),然後每个 Router 收集了这些 Link-state 就能计算出去不同 Network 要走的路径和 Cost。LSA 有不同的类型 (Type),此部份会用以下网络为例子解释每一个类型的 LSA。由於文章早段已说明 OSPF 的设定方法,在此不再详述。另外,为了设定 Router ID,每只 Router 都设了 Loopback Interface IP,R1 为 1.1.1.1,R2 为 2.2.2.2,如此类推。

ospf

hostname R1
!
router ospf 1
 network 192.168.12.0 0.0.0.255 area 10
hostname R2
!
router ospf 1
 network 192.168.12.0 0.0.0.255 area 10
 network 192.168.23.0 0.0.0.255 area 0
 network 192.168.28.0 0.0.0.255 area 0
hostname R3
!
router ospf 1
 network 192.168.23.0 0.0.0.255 area 0
 network 192.168.34.0 0.0.0.255 area 0
hostname R4
!
router ospf 1
 network 192.168.34.0 0.0.0.255 area 0
 network 192.168.48.0 0.0.0.255 area 0
 network 192.168.45.0 0.0.0.255 area 20
hostname R5
!
router ospf 1
 network 192.168.45.0 0.0.0.255 area 20
 network 192.168.56.0 0.0.0.255 area 20

R6 设定较特别,因为 R6 的角色是 ASBR,我们用到 redistribute 指令,而 redistribute 并非本篇讨论範围,在此不详细解释,大家只要了解 redistribute 是要把 RIP 的 Route 汇入 OSPF 之中,相反,也把 OSPF 的 Route 汇入 RIP 之中。

hostname R6
!
router ospf 1
 redistribute rip subnets
 network 192.168.56.0 0.0.0.255 area 20
!
router rip
 version 2
 redistribute ospf 1 metric 1
 network 192.168.67.0

R7 只纯粹执行 RIP,并非 OSPF Network 之中。

hostname R7
!
router rip
 version 2
 network 192.168.67.0
hostname R8
!
router ospf 1
 network 192.168.28.0 0.0.0.255 area 0
 network 192.168.48.0 0.0.0.255 area 0

Router LSA (Type 1)

Router LSA 是在同一个 Area 里面所有 Router (包括自己) 送来的 Link-State,要看 Type 1 LSA,可以在 Router 输入指令 show ip ospf database router,以下用 R1 作例子,可见 R1 收到两条 Type 1 LSA,留意 Advertising Router 这一栏,第一条从 1.1.1.1 (即自己) 发出,另一条从 2.2.2.2 发出。集中观察第二条,看看 2.2.2.2 (即 R2) 告诉 R1 什麽?R2 告诉 主要 R1 两件事:

  1. 我是一只 ABR
  2. 我要告诉你我连著一条 Link,就是 192.168.12.2,我到它那里需要 Cost 10。
R1#show ip ospf 1 database router

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

                Router Link States (Area 10)

  LS age: 234
  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: 80000002
  Checksum: 0x1C18
  Length: 36
  Number of Links: 1

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


  Routing Bit Set on this LSA
  LS age: 254
  Options: (No TOS-capability, DC)
  LS Type: Router Links
  Link State ID: 2.2.2.2
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000002
  Checksum: 0xE049
  Length: 36
  Area Border Router
  Number of Links: 1

    Link connected to: a Transit Network
     (Link ID) Designated Router address: 192.168.12.1
     (Link Data) Router Interface address: 192.168.12.2
      Number of TOS metrics: 0
       TOS 0 Metrics: 10

Network LSA (Type 2)

Network LSA 是由每个网段的 DR 发给其他 Router,告诉它们 DR 正连著那些 Router。要看 Type 2 LSA,可以在 Router 输入指令 show ip ospf database network,以下用 R1 作例子。因为 R2 是 DR,所以 R1 收到 R2 传来的 Type 2,在 Type 2 里,我们看见 R2 正连著 1.1.1.1 和 2.2.2.2 (R2 自己)。

R1#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2           1   FULL/DR         00:00:35    192.168.12.2    Ethernet0/0
R1#
R1#show ip ospf 1 database network

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

                Net Link States (Area 10)

  Routing Bit Set on this LSA
  LS age: 26
  Options: (No TOS-capability, DC)
  LS Type: Network Links
  Link State ID: 192.168.12.2 (address of Designated Router)
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000001
  Checksum: 0x8F1F
  Length: 32
  Network Mask: /24
        Attached Router: 2.2.2.2
        Attached Router: 1.1.1.1

Network Summary LSA (Type 3)

由 ABR 产生,告诉 Area 内的 Router 从它那里可以到达那些 Network 以及 Cost。要看 Type 3 LSA,可以在 Router 输入指令 show ip ospf database summary,以下用 R1 作例子。R1 收到 6 条 Type 3,全部来自 R2 (2.2.2.2),R2 告诉 R1:

  1. 从我这里可以到达 192.168.23.0,Cost 是 10。
  2. 从我这里可以到达 192.168.28.0,Cost 是 10。
  3. 从我这里可以到达 192.168.34.0,Cost 是 20。
  4. 从我这里可以到达 192.168.45.0,Cost 是 30。
  5. 从我这里可以到达 192.168.48.0,Cost 是 20。
  6. 从我这里可以到达 192.168.56.0,Cost 是 40。
R1#show ip ospf 1 database summary

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

                Summary Net Link States (Area 10)

  Routing Bit Set on this LSA
  LS age: 207
  Options: (No TOS-capability, DC, Upward)
  LS Type: Summary Links(Network)
  Link State ID: 192.168.23.0 (summary Network Number)
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000002
  Checksum: 0xFFA9
  Length: 28
  Network Mask: /24
        TOS: 0  Metric: 10

  Routing Bit Set on this LSA
  LS age: 125
  Options: (No TOS-capability, DC, Upward)
  LS Type: Summary Links(Network)
  Link State ID: 192.168.28.0 (summary Network Number)
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000001
  Checksum: 0xCADA
  Length: 28
  Network Mask: /24
        TOS: 0  Metric: 10

  Routing Bit Set on this LSA
  LS age: 207
  Options: (No TOS-capability, DC, Upward)
  LS Type: Summary Links(Network)
  Link State ID: 192.168.34.0 (summary Network Number)
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000002
  Checksum: 0xEAA9
  Length: 28
  Network Mask: /24
        TOS: 0  Metric: 20

  Routing Bit Set on this LSA
  LS age: 213
  Options: (No TOS-capability, DC, Upward)
  LS Type: Summary Links(Network)
  Link State ID: 192.168.45.0 (summary Network Number)
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000002
  Checksum: 0xD5A9
  Length: 28
  Network Mask: /24
        TOS: 0  Metric: 30

  Routing Bit Set on this LSA
  LS age: 90
  Options: (No TOS-capability, DC, Upward)
  LS Type: Summary Links(Network)
  Link State ID: 192.168.48.0 (summary Network Number)
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000002
  Checksum: 0x5036
  Length: 28
  Network Mask: /24
        TOS: 0  Metric: 20

  Routing Bit Set on this LSA
  LS age: 218
  Options: (No TOS-capability, DC, Upward)
  LS Type: Summary Links(Network)
  Link State ID: 192.168.56.0 (summary Network Number)
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000002
  Checksum: 0xC0A9
  Length: 28
  Network Mask: /24
        TOS: 0  Metric: 40

ASBR Summary (Type 4)

ASBR Summary 也是由 ABR 产生,告诉 Area 内的 Router 从它那里可以到达那些 ASBR 以及 Cost。要看 Type 4 LSA,可以在 Router 输入指令 show ip ospf database asbr-summary,以下用 R1 作例子。R1 只收到一条 Type 4,R2 告诉 R1 从它那里可以到达一只叫 6.6.6.6 的 ASBR,Cost 是 40。

R1#show ip ospf 1 database asbr-summary

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

                Summary ASB Link States (Area 10)

  Routing Bit Set on this LSA
  LS age: 701
  Options: (No TOS-capability, DC, Upward)
  LS Type: Summary Links(AS Boundary Router)
  Link State ID: 6.6.6.6 (AS Boundary Router address)
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000002
  Checksum: 0xB939
  Length: 28
  Network Mask: /0
        TOS: 0  Metric: 40

External LSA (Type 5)

External LSA 是由 ASBR 产生的,告诉所有 Area (除了 Stub Area,稍後再说明) 里的所有 Router,从它那里可以到达那些 External Network (即不是属於这个 OSPF 的),要看 Type 5 LSA,可以在 Router 输入指令 show ip ospf database external,以下用 R1 作例子。R1 只收到一条来自远方的 R6(6.6.6.6) 所发佈的 Type 5,告诉 R1 从它那里可以到达 192.168.67.0 这个 Network,Cost 是 20,而 Metric Type 是 2,又称 E2。Metric Type 是什麽呢?而从 R1 去到 R6 要走这麽远,为什麽 Metric 是 20 呢?在此先卖个关子,等到讲解 Cost 的部份在详细说明。

R1#show ip ospf 1 database external

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

                Type-5 AS External Link States

  LS age: 14
  Options: (No TOS-capability, DC)
  LS Type: AS External Link
  Link State ID: 192.168.67.0 (External Network Number )
  Advertising Router: 6.6.6.6
  LS Seq Number: 80000003
  Checksum: 0x9940
  Length: 36
  Network Mask: /24
        Metric Type: 2 (Larger than any link state path)
        TOS: 0
        Metric: 20
        Forward Address: 0.0.0.0
        External Route Tag: 0

於是,OSPF 的 Router 们就会依据收回来的 Link-state 计算出自己的 Route Table,现在我们看一下 R3 的 Route Table 看看得出来的结果。用 OSPF 计出来的 Route 用 O 来表示,如果有 IA 则代表这 Route 是要「跨区」的 Route,需要经过 ABR。如果有 E1 或 E2 则代表这 Route 是 External Route,需要经过 ASBR。110 是 AD (Administrative Distance),而 AD 後面的数字则是该 Router 的 OSPF Metric,Metric 跟 Cost 有关,留在稍後章节再说。

R3#show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

O IA 192.168.12.0/24 [110/20] via 192.168.23.2, 00:10:51, Ethernet0/1
O    192.168.28.0/24 [110/20] via 192.168.23.2, 00:10:51, Ethernet0/1
     3.0.0.0/32 is subnetted, 1 subnets
C       3.3.3.3 is directly connected, Loopback0
O IA 192.168.45.0/24 [110/20] via 192.168.34.4, 00:10:51, Ethernet0/0
O IA 192.168.56.0/24 [110/30] via 192.168.34.4, 00:10:51, Ethernet0/0
C    192.168.23.0/24 is directly connected, Ethernet0/1
O E2 192.168.67.0/24 [110/20] via 192.168.34.4, 00:10:51, Ethernet0/0
C    192.168.34.0/24 is directly connected, Ethernet0/0
O    192.168.48.0/24 [110/20] via 192.168.34.4, 00:10:56, Ethernet0/0

另外还有一种 Type 7 的 LSA,笔者打算在介绍 NSSA 的章节才向读者说明,各种 LSA 总结如下表:

 Type 1Type 2Type 3Type 4Type 5Type 7
由谁发放 所有 Router 每个网段的 DR ABR ABR ASBR ASBR
由谁接收 同一 Area 内的其他 Router 同一 Area 内的Non-DR Router 同一 Area 内其他 Router  同一 Area 内其他 Router OSPF 内所有 Router NSSA 内的 Router
包含什麽资讯 连接著的 Network 资讯 DR 连接著的 Router 资讯 位於其他 Area 的 Network 资讯 ASBR 资讯 External Network 资讯 External Network 资讯

Stub Area

ospf

再拿上一个章节的网络来讨论,先看看 R1 的 Route Table 和 OSPF Database。

R1#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
O IA 192.168.28.0/24 [110/20] via 192.168.12.2, 00:26:29, Ethernet0/0
O IA 192.168.45.0/24 [110/40] via 192.168.12.2, 01:19:14, Ethernet0/0
O IA 192.168.56.0/24 [110/50] via 192.168.12.2, 01:19:14, Ethernet0/0
O IA 192.168.23.0/24 [110/20] via 192.168.12.2, 01:19:14, Ethernet0/0
O E2 192.168.67.0/24 [110/20] via 192.168.12.2, 00:26:01, Ethernet0/0
O IA 192.168.34.0/24 [110/30] via 192.168.12.2, 01:19:14, Ethernet0/0
O IA 192.168.48.0/24 [110/30] via 192.168.12.2, 00:25:48, Ethernet0/0

R1#show ip ospf 1 database

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

                Router Link States (Area 10)

Link ID         ADV Router      Age         Seq#       Checksum Link count
1.1.1.1         1.1.1.1         11          0x8000000A 0x009A8A 2
2.2.2.2         2.2.2.2         17          0x80000009 0x00DC45 1

                Net Link States (Area 10)

Link ID         ADV Router      Age         Seq#       Checksum
192.168.12.1    1.1.1.1         21          0x80000001 0x00C7EB
192.168.12.2    2.2.2.2         17          0x80000007 0x008325

                Summary Net Link States (Area 10)

Link ID         ADV Router      Age         Seq#       Checksum
192.168.23.0    2.2.2.2         22          0x80000006 0x00F7AD
192.168.28.0    2.2.2.2         22          0x80000004 0x00C4DD
192.168.34.0    2.2.2.2         22          0x80000006 0x00E2AD
192.168.45.0    2.2.2.2         22          0x80000006 0x00CDAD
192.168.48.0    2.2.2.2         22          0x80000005 0x004A39
192.168.56.0    2.2.2.2         22          0x80000006 0x00B8AD

                Summary ASB Link States (Area 10)

Link ID         ADV Router      Age         Seq#       Checksum
6.6.6.6         2.2.2.2         26          0x80000001 0x00BB38

                Type-5 AS External Link States

Link ID         ADV Router      Age         Seq#       Checksum Tag
192.168.67.0    6.6.6.6         1282        0x80000004 0x009741 0

好像不错喔!收到 Type 1 至 Type 5 的 LSA,然後产生出 Route Table,每一个 Network 都通了,还有什麽问题呢?请大家试试站在 R1 的角度看世界。对於 R1 来说,无论去那一个 Network,Next Hop 都是 192.168.12.2 是不是?那麽,它为什麽还这麽苦恼要记著那麽多条 Route 呢?对!所以,聪明的 OSPF 设计者也想到了这个问题,所以发明了 Stub Area 这东西来。我们试试把 Area 10 设定成 Stub Area,看看带来什麽变化。指令非常简单,只要在 OSPF 设定中加一句 area stub 便可以。

hostname R1
!
router ospf 1
 area 10 stub
 network 192.168.12.0 0.0.0.255 area 10
hostname R2
!
router ospf 1
 area 10 stub
 network 192.168.12.0 0.0.0.255 area 10
 network 192.168.23.0 0.0.0.255 area 0
 network 192.168.28.0 0.0.0.255 area 0

现在再看看 R1 的 Route Table,External Route 不见了!取而代之的是多了一条叫 O*IA 的 Default Route,为什麽呢?

R1#show ip route | begin Gateway
Gateway of last resort is 192.168.12.2 to network 0.0.0.0

C    192.168.12.0/24 is directly connected, Ethernet0/0
     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
O IA 192.168.28.0/24 [110/20] via 192.168.12.2, 00:00:06, Ethernet0/0
O IA 192.168.45.0/24 [110/40] via 192.168.12.2, 00:00:06, Ethernet0/0
O IA 192.168.56.0/24 [110/50] via 192.168.12.2, 00:00:06, Ethernet0/0
O IA 192.168.23.0/24 [110/20] via 192.168.12.2, 00:00:06, Ethernet0/0
O IA 192.168.34.0/24 [110/30] via 192.168.12.2, 00:00:06, Ethernet0/0
O IA 192.168.48.0/24 [110/30] via 192.168.12.2, 00:00:06, Ethernet0/0
O*IA 0.0.0.0/0 [110/11] via 192.168.12.2, 00:00:06, Ethernet0/0

OSPF Database 一定发生了什麽事,快看看。原来 Stub Area 可以禁止 Type 4 和 Type 5 的 LSA 进入该区,并且 ABR 会发出一条 0.0.0.0 (Default Route) 的 Type 3,所以就得出 Route Table 的结果了。

R1#show ip ospf 1 database

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

                Router Link States (Area 10)

Link ID         ADV Router      Age         Seq#       Checksum Link count
1.1.1.1         1.1.1.1         140         0x8000000C 0x0030FA 1
2.2.2.2         2.2.2.2         138         0x8000000B 0x00F62B 1

                Net Link States (Area 10)

Link ID         ADV Router      Age         Seq#       Checksum
192.168.12.2    2.2.2.2         138         0x80000009 0x009D0B

                Summary Net Link States (Area 10)

Link ID         ADV Router      Age         Seq#       Checksum
0.0.0.0         2.2.2.2         143         0x80000001 0x0075C0
192.168.23.0    2.2.2.2         143         0x80000007 0x001492
192.168.28.0    2.2.2.2         143         0x80000005 0x00E0C2
192.168.34.0    2.2.2.2         143         0x80000007 0x00FE92
192.168.45.0    2.2.2.2         143         0x80000007 0x00E992
192.168.48.0    2.2.2.2         143         0x80000006 0x00661E
192.168.56.0    2.2.2.2         143         0x80000007 0x00D492

需然有一点改善,但 R1 的 Route Table 似乎还可以再简化一点吧!那麽,现在就再介绍你一个叫 Totally Stubby Area,设定方法如下。

hostname R1
!
router ospf 1
 area 10 stub no-summary
 network 192.168.12.0 0.0.0.255 area 10
hostname R2
!
router ospf 1
 area 10 stub no-summary
 network 192.168.12.0 0.0.0.255 area 10
 network 192.168.23.0 0.0.0.255 area 0
 network 192.168.28.0 0.0.0.255 area 0

对 R1 的 OSPF Database 带来的改变是......

R1#show ip ospf 1 database

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

                Router Link States (Area 10)

Link ID         ADV Router      Age         Seq#       Checksum Link count
1.1.1.1         1.1.1.1         465         0x8000000C 0x0030FA 1
2.2.2.2         2.2.2.2         462         0x8000000B 0x00F62B 1

                Net Link States (Area 10)

Link ID         ADV Router      Age         Seq#       Checksum
192.168.12.2    2.2.2.2         462         0x80000009 0x009D0B

                Summary Net Link States (Area 10)

Link ID         ADV Router      Age         Seq#       Checksum
0.0.0.0         2.2.2.2         81          0x80000002 0x0073C1

原来在 Totally Stubby Area 里,除了 0.0.0.0 之外的所有 Type 3 也禁止了,所以得出的 Route Table 如下:

R1#show ip route | begin Gateway
Gateway of last resort is 192.168.12.2 to network 0.0.0.0

C    192.168.12.0/24 is directly connected, Ethernet0/0
     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
O*IA 0.0.0.0/0 [110/11] via 192.168.12.2, 00:02:37, Ethernet0/0

由此可见,Stub Area 与 Totally Stubby Area 能有效减少 LSA 的传送,减低对网络带来的负荷,也简化了 Route Table,在管理的角度来说是个好处。不过 Stub Area 和 Totally Stubby Area 只适合这种「没有连著 External Network」的 Area。

Not So Stubby Area (NSSA)

ospf

本章节的研究像为 Area 20,先看看 R5 的 Route Table 和 OSPF Database。

R5#show ip route | begin Gateway
Gateway of last resort is not set

O IA 192.168.12.0/24 [110/40] via 192.168.45.4, 00:18:55, Ethernet0/1
O IA 192.168.28.0/24 [110/30] via 192.168.45.4, 00:57:29, Ethernet0/1
C    192.168.45.0/24 is directly connected, Ethernet0/1
     5.0.0.0/32 is subnetted, 1 subnets
C       5.5.5.5 is directly connected, Loopback0
C    192.168.56.0/24 is directly connected, Ethernet0/0
O IA 192.168.23.0/24 [110/30] via 192.168.45.4, 01:15:58, Ethernet0/1
O E2 192.168.67.0/24 [110/20] via 192.168.56.6, 00:58:12, Ethernet0/0
O IA 192.168.34.0/24 [110/20] via 192.168.45.4, 01:15:58, Ethernet0/1
O IA 192.168.48.0/24 [110/20] via 192.168.45.4, 00:58:17, Ethernet0/1
R5#show ip ospf 1 database

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

                Router Link States (Area 20)

Link ID         ADV Router      Age         Seq#       Checksum Link count
4.4.4.4         4.4.4.4         1687        0x80000005 0x005F6F 1
5.5.5.5         5.5.5.5         681         0x80000009 0x003626 2
6.6.6.6         6.6.6.6         574         0x80000007 0x00D4CE 1

                Net Link States (Area 20)

Link ID         ADV Router      Age         Seq#       Checksum
192.168.45.5    5.5.5.5         1664        0x80000004 0x00A1C1
192.168.56.5    5.5.5.5         681         0x80000003 0x008EC2

                Summary Net Link States (Area 20)

Link ID         ADV Router      Age         Seq#       Checksum
192.168.12.0    4.4.4.4         1165        0x80000008 0x00F998
192.168.23.0    4.4.4.4         1687        0x80000004 0x002471
192.168.28.0    4.4.4.4         1432        0x80000003 0x00EEA2
192.168.34.0    4.4.4.4         1687        0x80000004 0x00464E
192.168.48.0    4.4.4.4         1687        0x80000002 0x00AFD8

                Type-5 AS External Link States

Link ID         ADV Router      Age         Seq#       Checksum Tag
192.168.67.0    6.6.6.6         581         0x80000005 0x009542 0

很想化繁为简吧?但 R5 连著 External Network 喔!不能用 Stub Area 或者 Totally Stubby Area,原来这种连著 External Network 的 Area,可以使用 Not So Stubby Area (NSSA) 来达到简化 Route Table 的效果,所用的指令是 area nssa

hostname R4
!
router ospf 1
 area 20 nssa
 network 192.168.34.0 0.0.0.255 area 0
 network 192.168.45.0 0.0.0.255 area 20
 network 192.168.48.0 0.0.0.255 area 0
hostname R5
!
router ospf 1
 area 20 nssa
 network 192.168.45.0 0.0.0.255 area 20
 network 192.168.56.0 0.0.0.255 area 20
hostname R6
!
router ospf 1
 area 20 nssa
 redistribute rip subnets
 network 192.168.56.0 0.0.0.255 area 20

这又对 R5 的 OSPF Database 带来什麽衝击呢?立刻看看。Type 4 和 Type5 照样被灭口了,但多了一个叫 Type 7,岂有此 Type?!有的!现在我就来介绍一下。

R5#show ip ospf 1 database

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

                Router Link States (Area 20)

Link ID         ADV Router      Age         Seq#       Checksum Link count
4.4.4.4         4.4.4.4         159         0x80000008 0x0005BE 1
5.5.5.5         5.5.5.5         236         0x8000000C 0x00DF72 2
6.6.6.6         6.6.6.6         237         0x80000009 0x00801A 1

                Net Link States (Area 20)

Link ID         ADV Router      Age         Seq#       Checksum
192.168.45.5    5.5.5.5         192         0x80000007 0x004119
192.168.56.6    6.6.6.6         236         0x80000001 0x00FF48

                Summary Net Link States (Area 20)

Link ID         ADV Router      Age         Seq#       Checksum
192.168.12.0    4.4.4.4         267         0x80000009 0x009DED
192.168.23.0    4.4.4.4         158         0x80000006 0x00C5C7
192.168.28.0    4.4.4.4         267         0x80000004 0x0092F7
192.168.34.0    4.4.4.4         158         0x80000006 0x00E7A4
192.168.48.0    4.4.4.4         158         0x80000004 0x00512F

                Type-7 AS External Link States (Area 20)

Link ID         ADV Router      Age         Seq#       Checksum Tag
192.168.67.0    6.6.6.6         248         0x80000001 0x0068C1 0

由於 NSSA 同样禁止 Type 4 和 Type 5,因此 ASBR 就改用 Type 7 来传送 External Network 资讯,Type 7 的 LSA 内容和 Type 5 是相似的,当 Type 7 从 R6 到达 NSSA 另一边的 R4,Type 7 就再次转回 Type 5 传送给其他 Area 了。

R5#show ip ospf 1 database nssa-external

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

                Type-7 AS External Link States (Area 20)

  Routing Bit Set on this LSA
  LS age: 373
  Options: (No TOS-capability, Type 7/5 translation, DC)
  LS Type: AS External Link
  Link State ID: 192.168.67.0 (External Network Number )
  Advertising Router: 6.6.6.6
  LS Seq Number: 80000001
  Checksum: 0x68C1
  Length: 36
  Network Mask: /24
        Metric Type: 2 (Larger than any link state path)
        TOS: 0
        Metric: 20
        Forward Address: 192.168.56.6
        External Route Tag: 0

虽然查看 R5 的 Route Table,Route 的数目没有改变,只不过把一条 E2 变成 N2,不过在传播 LSA 的角度,NSSA 就删减了 Type 4 和 Type 5 的传送,变成 Type 7。

R5#show ip route | begin Gateway
Gateway of last resort is not set

O IA 192.168.12.0/24 [110/40] via 192.168.45.4, 00:12:50, Ethernet0/1
O IA 192.168.28.0/24 [110/30] via 192.168.45.4, 00:12:50, Ethernet0/1
C    192.168.45.0/24 is directly connected, Ethernet0/1
     5.0.0.0/32 is subnetted, 1 subnets
C       5.5.5.5 is directly connected, Loopback0
C    192.168.56.0/24 is directly connected, Ethernet0/0
O IA 192.168.23.0/24 [110/30] via 192.168.45.4, 00:12:50, Ethernet0/1
O N2 192.168.67.0/24 [110/20] via 192.168.56.6, 00:12:50, Ethernet0/0
O IA 192.168.34.0/24 [110/20] via 192.168.45.4, 00:12:50, Ethernet0/1
O IA 192.168.48.0/24 [110/20] via 192.168.45.4, 00:12:50, Ethernet0/1

接著,我们再试一个 Totally Not So Stubby Area 吧,同样只需加一个 no-summary 的 keyword。

hostname R4
!
router ospf 1
 area 20 nssa no-summary
 network 192.168.34.0 0.0.0.255 area 0
 network 192.168.45.0 0.0.0.255 area 20
 network 192.168.48.0 0.0.0.255 area 0
hostname R5
!
router ospf 1
 area 20 nssa no-summary
 network 192.168.45.0 0.0.0.255 area 20
 network 192.168.56.0 0.0.0.255 area 20
hostname R6
!
router ospf 1
 area 20 nssa no-summary
 redistribute rip subnets
 network 192.168.56.0 0.0.0.255 area 20

相信读者也猜到结果,Type 3 全部没了,只保留一条 0.0.0.0。

R5#show ip ospf 1 database

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

                Router Link States (Area 20)

Link ID         ADV Router      Age         Seq#       Checksum Link count
4.4.4.4         4.4.4.4         1034        0x80000008 0x0005BE 1
5.5.5.5         5.5.5.5         1111        0x8000000C 0x00DF72 2
6.6.6.6         6.6.6.6         1112        0x80000009 0x00801A 1

                Net Link States (Area 20)

Link ID         ADV Router      Age         Seq#       Checksum
192.168.45.5    5.5.5.5         1068        0x80000007 0x004119
192.168.56.6    6.6.6.6         1112        0x80000001 0x00FF48

                Summary Net Link States (Area 20)

Link ID         ADV Router      Age         Seq#       Checksum
0.0.0.0         4.4.4.4         108         0x80000001 0x00C065

                Type-7 AS External Link States (Area 20)

Link ID         ADV Router      Age         Seq#       Checksum Tag
192.168.67.0    6.6.6.6         1119        0x80000001 0x0068C1 0

Route Table 也大幅度简化了。

R5#show ip route | begin Gateway
Gateway of last resort is 192.168.45.4 to network 0.0.0.0

C    192.168.45.0/24 is directly connected, Ethernet0/1
     5.0.0.0/32 is subnetted, 1 subnets
C       5.5.5.5 is directly connected, Loopback0
C    192.168.56.0/24 is directly connected, Ethernet0/0
O N2 192.168.67.0/24 [110/20] via 192.168.56.6, 00:03:07, Ethernet0/0
O*IA 0.0.0.0/0 [110/11] via 192.168.45.4, 00:03:07, Ethernet0/1

Metric 与 Cost

Cost 是 OSPF 计算 Metric 的依据,由 Source 到 Destination 整条路径的 cost 总和就是 Metric。而 Cost 预设等於 100Mbit / Interface 的 Bandwidth,这个 100Mbit 我们称之为 Reference Bandwidth,现在我们尝试计算由 R1 要到目的地 3.3.3.3 的 cost 是多少。

ospf

首先,R1 要到 R2 需经过 eth0/0,看看 eth0/0 的 Bandwidth 是多少?是 10000 Kbit,即是 10Mbit,cost = 100M / 10M = 10。

R1#show interfaces ether0/0 | include BW
  MTU 1500 bytes, BW 10000 Kbit, DLY 1000 usec,

然後再经过 R2 的 serial1/0,cost = 100M / 1.544M = 64。

R2#show interfaces serial 1/0 | include BW
  MTU 1500 bytes, BW 1544 Kbit, DLY 20000 usec,

到达 R3 後,还要经过 Loopback 0 这个 Interface,cost = 100M / 8000M = 1 (cost 最少值为 1)

R3#show interfaces loopback 0 | include BW
  MTU 1514 bytes, BW 8000000 Kbit, DLY 5000 usec,

因此,从 R1 要到达 R3 的 3.3.3.3,cost = 10 + 64 + 1 = 75,在 R1 的 Route Table 看看答案吧!

R1#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
     2.0.0.0/32 is subnetted, 1 subnets
O       2.2.2.2 [110/11] via 192.168.12.2, 00:18:58, Ethernet0/0
     3.0.0.0/32 is subnetted, 1 subnets
O       3.3.3.3 [110/75] via 192.168.12.2, 00:18:58, Ethernet0/0
O    192.168.23.0/24 [110/74] via 192.168.12.2, 00:18:58, Ethernet0/0

相反地,从 R3 到 R1 的 1.1.1.1 应该也是 75。

R3#show ip route | begin Gateway
Gateway of last resort is not set

O    192.168.12.0/24 [110/74] via 192.168.23.2, 00:02:33, Serial0/0
     1.0.0.0/32 is subnetted, 1 subnets
O       1.1.1.1 [110/75] via 192.168.23.2, 00:02:33, Serial0/0
     2.0.0.0/32 is subnetted, 1 subnets
O       2.2.2.2 [110/65] via 192.168.23.2, 00:02:33, Serial0/0
     3.0.0.0/32 is subnetted, 1 subnets
C       3.3.3.3 is directly connected, Loopback0
C    192.168.23.0/24 is directly connected, Serial0/0

要更改 cost,有好多个方法,包括 ip ospf cost 指令、改 interface bandwidth 或者改 reference bandwidth。

ip ospf cost 指令

我们可以直接在 Interface 指定 cost 值,方法十分简单,例如我们想设定 R1 的 eth0/0 的 cost 为 50。完成设定後 R1 到 3.3.3.3 的 metric 变成 115 了!(50 + 64 + 1 = 115)

R1(config)#int ethernet 0/0
R1(config-if)#ip ospf cost 50
R1(config-if)#end
R1#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
     2.0.0.0/32 is subnetted, 1 subnets
O       2.2.2.2 [110/51] via 192.168.12.2, 00:00:08, Ethernet0/0
     3.0.0.0/32 is subnetted, 1 subnets
O       3.3.3.3 [110/115] via 192.168.12.2, 00:00:08, Ethernet0/0
O    192.168.23.0/24 [110/114] via 192.168.12.2, 00:00:08, Ethernet0/0

但必需留意的是,被更改 cost 的是 R1 的 eth0/0,从相反方向来的 Routing Metric 不会受到影响,看看 R3 的 Route Table,从 R3 到 1.1.1.1 的 Metric 是没有改变过的。

R3#show ip route | begin Gateway
Gateway of last resort is not set

O    192.168.12.0/24 [110/74] via 192.168.23.2, 00:02:57, Serial0/0
     1.0.0.0/32 is subnetted, 1 subnets
O       1.1.1.1 [110/75] via 192.168.23.2, 00:02:58, Serial0/0
     2.0.0.0/32 is subnetted, 1 subnets
O       2.2.2.2 [110/65] via 192.168.23.2, 00:02:58, Serial0/0
     3.0.0.0/32 is subnetted, 1 subnets
C       3.3.3.3 is directly connected, Loopback0
C    192.168.23.0/24 is directly connected, Serial0/0

改 Interface Bandwidth

由於 cost = 100M / Interface Bandwidth,所以我们可以更改 Interface Bandwidth 达到设定 cost 的效果,例如:我们想把 R1 E0/0 cost 设定为 20 的话,可以把 Interface Bandwidth 调到 5M。如下图,修改 bandwidth 後,metric 变成 85。(20 + 64 + 1 = 85) 请留意,修改 Bandwidth 只会对 Routing Protocol 计算 cost 时造成影响,并不会直正改变 Interface 的传输速度。

R1(config)#int ethernet 0/0
R1(config-if)#bandwidth ?
   Bandwidth in kilobits
  inherit       Specify that bandwidth is inherited
  receive       Specify receive-side bandwidth

R1(config-if)#bandwidth 5000
R1(config-if)#end
R1#
R1#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
     2.0.0.0/32 is subnetted, 1 subnets
O       2.2.2.2 [110/21] via 192.168.12.2, 00:00:13, Ethernet0/0
     3.0.0.0/32 is subnetted, 1 subnets
O       3.3.3.3 [110/85] via 192.168.12.2, 00:00:13, Ethernet0/0
O    192.168.23.0/24 [110/84] via 192.168.12.2, 00:00:13, Ethernet0/0

改 reference bandwidth

最後一招是更改 reference bandwidth,同样地 cost 会因而改变,现在试试把 reference bandwidth 改成 1000,看看会出现什麽状况。Metric 变成 165,因为 R1 eth0/0 的 cost 变成 1000/10 = 100,cost 的总和等於 100 + 64 + 1 = 165。虽然并非必要,但如果要更改 reference bandwidth 的话,请在所有 OSPF Router 都一併更改,否则各 Router 会出现 Bandwidth 相同而 cost 不同的情况,对 troubleshooting 造成障碍。

R1(config)#router ospf 1
R1(config-router)#auto-cost reference-bandwidth 1000
R1(config-router)#end
R1#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
     2.0.0.0/32 is subnetted, 1 subnets
O       2.2.2.2 [110/101] via 192.168.12.2, 00:01:46, Ethernet0/0
     3.0.0.0/32 is subnetted, 1 subnets
O       3.3.3.3 [110/165] via 192.168.12.2, 00:01:46, Ethernet0/0
O    192.168.23.0/24 [110/164] via 192.168.12.2, 00:01:46, Ethernet0/0

补充一点,如果网络里有超过 100M 的 Interface 的话,请慕必要加大 Reference Bandwidth,因为在预设 100M 的情况下,10G、1G 和 100M Interface 计算出来的 cost 都会是 1 (因最少值为1),这就无法让 OSPF 準确判断 link 的快慢了。

External Route Cost

不知道大家还有没有印像,在较早前有提及过 External Route 可以分为 E1 或者 E2,究竟有什麽分别呢?现在来为大家解开这个疑团。我们将会把以下网络中的 EIGRP Redistribute 到 OSPF 中。

ospf

首先我们试试把 External Route Type 设成 E1,把 Metric 设定成 99。

hostname R2
!
router eigrp 100
 network 192.168.23.0
 no auto-summary
!
router ospf 1
 redistribute eigrp 100 metric-type 1 metric 99
 network 192.168.12.0 0.0.0.255 area 0

到 R1 看看 Route Table,External Route 有标明 E1,而 Metric 是 109,即是把 R1 到 R2 的 10 加上 redistribute 的 metric 99,总和是 109,很不错!

R1#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
O E1 192.168.23.0/24 [110/109] via 192.168.12.2, 00:00:10, Ethernet0/0

如果使用 Metric Type 2 就会变成怎样呢?

hostname R2
!
router eigrp 100
 network 192.168.23.0
 no auto-summary
!
router ospf 1
 redistribute eigrp 100 metric-type 2 metric 99
 network 192.168.12.0 0.0.0.255 area 0

发现 E2 只使用了 External Route 的 Metric 99,原来 E2 只会使用 External Route 的 Metric 而不会加入 OSPF Router 的 Cost。留意如果不使用 metric-type 参数的话,预设会使用 E2 的。

R1#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
O E2 192.168.23.0/24 [110/99] via 192.168.12.2, 00:00:18, Ethernet0/0

路径选择

跟其他 Routing Protocol 一样,OSPF 并不会把全部路径都放进 Route Table,只会选择当中一条或多条路径。究竟 OSPF 选择路径的逻辑是怎样呢?当有多条路径能够抵达目的地,OSPF 会按以下顺序来选择:

  1. 先按 Route Type 来选择:Intra-area (O) > Inter-area (O IA) > Type 1 Exteranl (O E1 / N1) > Type 2 External (O E2 / N2)
  2. 如果 Route Type 相同,比较 Metric,较小者获胜
  3. 如果 Metric 相同,选择 n 条 path 一併加进 Route Table,进行 load balancing (n = maximum-paths 参数)

Route Type

看过笔者的文章你都知道,不是书本说什麽我就相信,当然又来做个实验去證实一下啦!

ospf

这个实验设定颇为複杂,目的在於为 R1 同时提供四条能够到达 6.6.6.6 而 Metric 相同的 Route,分别是:

  1. 经 R5 的 Intra-area Route (O)
  2. 经 R4 的 Inter-area Route (O IA)
  3. 经 R3 的 E1 External Route (O E1)
  4. 经 R2 的 E2 External Route (O E2)

各 Router 设定如下:

hostname R1
!
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.12.1 255.255.255.0
!
interface Ethernet0/1
 ip address 192.168.13.1 255.255.255.0
!
interface Ethernet0/2
 ip address 192.168.14.1 255.255.255.0
!
interface Ethernet0/3
 ip address 192.168.15.1 255.255.255.0
!
router ospf 1
 network 192.168.12.0 0.0.0.255 area 0
 network 192.168.13.0 0.0.0.255 area 0
 network 192.168.14.0 0.0.0.255 area 0
 network 192.168.15.0 0.0.0.255 area 10
hostname R2
!
interface Loopback0
 ip address 2.2.2.2 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.12.2 255.255.255.0
!
interface Ethernet0/1
 ip address 192.168.26.2 255.255.255.0
!
router eigrp 100
 network 192.168.26.0
 no auto-summary
!
router ospf 1
 redistribute eigrp 100 metric 21 subnets
 network 192.168.12.0 0.0.0.255 area 0
hostname R3
!
interface Loopback0
 ip address 3.3.3.3 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.13.3 255.255.255.0
!
interface Ethernet0/1
 ip address 192.168.36.3 255.255.255.0
!
router eigrp 200
 network 192.168.36.0
 no auto-summary
!
router ospf 1
 redistribute eigrp 200 metric 11 metric-type 1 subnets
 network 192.168.13.0 0.0.0.255 area 0
hostname R4
!
interface Loopback0
 ip address 4.4.4.4 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.14.4 255.255.255.0
!
interface Ethernet0/1
 ip address 192.168.46.4 255.255.255.0
!
router ospf 1
 network 192.168.14.0 0.0.0.255 area 0
 network 192.168.46.0 0.0.0.255 area 10
hostname R5
!
interface Loopback0
 ip address 5.5.5.5 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.15.5 255.255.255.0
!
interface Ethernet0/1
 ip address 192.168.56.5 255.255.255.0
!
router ospf 1
 network 192.168.15.0 0.0.0.255 area 10
 network 192.168.56.0 0.0.0.255 area 10
hostname R6
!
interface Loopback0
 ip address 6.6.6.6 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.26.6 255.255.255.0
!
interface Ethernet0/1
 ip address 192.168.36.6 255.255.255.0
!
interface Ethernet0/2
 ip address 192.168.46.6 255.255.255.0
 half-duplex
!
interface Ethernet0/3
 ip address 192.168.56.6 255.255.255.0
!
router eigrp 100
 network 6.6.6.6 0.0.0.0
 network 192.168.26.0
 no auto-summary
!
router eigrp 200
 network 6.6.6.6 0.0.0.0
 network 192.168.36.0
 no auto-summary
!
router ospf 1
 network 6.6.6.6 0.0.0.0 area 10
 network 192.168.46.0 0.0.0.255 area 10
 network 192.168.56.0 0.0.0.255 area 10

实验开始时,我们先把 R1 的 eth0/1、eth0/2、eth0/3 关掉,这样 R1 就只有 Next Hop R2 (192.168.12.2) 这条 E2 路径到达 6.6.6.6,结果正常。

R1(config)#interface range ethernet 0/1 - 3
R1(config-if-range)#shutdown
R1(config-if-range)#end
R1#
R1#show ip route | include 6.6.6.6
O E2    6.6.6.6 [110/21] via 192.168.12.2, 00:14:35, Ethernet0/0

现在我们把 eth0/1 打开,由於 Next Hop R3 (192.168.13.3) 这条 Route 是 E1,OSPF 认为 E1 比 E2 好,所以就选了 E1 放入 Route Table,代替了 E2。

R1(config)#interface ethernet 0/1
R1(config-if)#no shutdown
R1(config-if)#end
R1
R1#show ip route | include 6.6.6.6
O E1    6.6.6.6 [110/21] via 192.168.13.3, 00:00:46, Ethernet0/1

接著,再把 eth0/2 打开,Next Hop R4 (192.168.14.4) 是 O IA Route,又比 E1 好,所以 OSPF 选择了这条 Route。

R1(config)#interface ethernet 0/2
R1(config-if)#no shutdown
R1(config-if)#end
R1#
R1#show ip route | include 6.6.6.6
O IA    6.6.6.6 [110/21] via 192.168.14.4, 00:00:05, Ethernet0/2

最後,把 eth0/3 打开,当然 R1 会选 Next Hop 为 R5 (192.168.15.5) 因为 Intra-area route 你是最好的!

R1(config)#interface ethernet 0/3
R1(config-if)#no shutdown
R1(config-if)#end
R1#
R1#show ip route | include 6.6.6.6
O       6.6.6.6 [110/21] via 192.168.15.5, 00:00:00, Ethernet0/3

比较 Metric

如果在同一个 Route Type 之下,OSPF 会选 Metric 较少的放进 Route Table ,这个实验就简单得多了。只需要把以下网络全部 Interface 放进同一个 Area 之中,这样,全部路径都会是 Intra-area Route,然後在 R1 把 Interface 设定成不同 Cost,再看看 Route Table 即可得到答案。

ospf

这时候,R2 的路径 Metric 为 30 + 10 + 1 = 41,R3 的路径 Metric 为 20 + 10 + 1 = 31,而 R4 的路径 Metric 为 10 + 10 + 1 = 21,当然会选择 Metric 最少的 R4 路径了。

R1(config)#interface ethernet 0/0
R1(config-if)#ip ospf cost 30
R1(config-if)#interface ethernet 0/1
R1(config-if)#ip ospf cost 20
R1(config-if)#interface ethernet 0/2
R1(config-if)#ip ospf cost 10
R1
R1#show ip route | include 5.5.5.5
O       5.5.5.5 [110/21] via 192.168.14.4, 00:00:03, Ethernet0/2

Load Balancing

如果 Route Type 和 Metric 都不能分出胜负,在 Metric 相同的情况下,OSPF 预设最多会选 4 条 Route 放进 Route Table,进行 Load Balancing。再用上一个例子的网络为例,如果 R1 的叁个 Interface 的 Cost 全部相同,叁条 Route 都被放进 Route Table 去。

R1#show ip ospf interface ethernet 0/0 | include Cost
  Process ID 1, Router ID 192.168.114.1, Network Type BROADCAST, Cost: 10
R1#show ip ospf interface ethernet 0/1 | include Cost
  Process ID 1, Router ID 192.168.114.1, Network Type BROADCAST, Cost: 10
R1#show ip ospf interface ethernet 0/2 | include Cost
  Process ID 1, Router ID 192.168.114.1, Network Type BROADCAST, Cost: 10
R1
R1#show ip route | begin 5.5.5.5
O       5.5.5.5 [110/21] via 192.168.14.4, 00:00:54, Ethernet0/2
                [110/21] via 192.168.13.3, 00:00:54, Ethernet0/1
                [110/21] via 192.168.12.2, 00:00:54, Ethernet0/0
O    192.168.35.0/24 [110/20] via 192.168.13.3, 00:00:54, Ethernet0/1

OSPF 的预设 4 条 Load Balance 是可以修改的,只要在 OSPF 设定下用指令 maximum-paths 便可以设定 1 至 16 条 Load Balance Route。例如,把 R1 改成 maximum-paths 2 会怎样呢?Route Table 变成只有 2 条 Load Balance Route 了。

R1(config)#router ospf 1
R1(config-router)#maximum-paths ?
   Number of paths

R1(config-router)#maximum-paths 2
R1(config-router)#end
R1#
R1#show ip route | begin 5.5.5.5
O       5.5.5.5 [110/21] via 192.168.13.3, 00:00:13, Ethernet0/1
                [110/21] via 192.168.12.2, 00:00:13, Ethernet0/0
O    192.168.35.0/24 [110/20] via 192.168.13.3, 00:00:13, Ethernet0/1

甚至试试改成 1 会怎样,变成只有 1 条了。可惜的是,笔者找了很久,也不知道 OSPF 究竟按什麽次序去从 3 条相同 Metric 的 Route 中选择 1 条,如果各位网友找到答案的话,请帮忙留个言。

R1(config)#router ospf 1
R1(config-router)#maximum-paths 1
R1(config-router)#end
R1#
R1#show ip route | begin 5.5.5.5
O       5.5.5.5 [110/21] via 192.168.12.2, 00:00:03, Ethernet0/0
O    192.168.35.0/24 [110/20] via 192.168.13.3, 00:00:03, Ethernet0/1

Virtual Link

Virtual Link 的概念非常简单,就是把两个实体上分离的 Area 相连起来。一般有两个用途,它可以帮没有直接连著 Backbone Area 0 的 Area 建立一条 Virtual Link 连接起来;另外,它也可以把「断开」的 Area 0 接驳起来。

接驳至 Area 0

在文章初段已经说明过,所有 Area 必需连接 Backbone Area 0。

ospf

以上图为例,Area 20 没有实体连线至 Area 0,就算把所有 OSPF 的设定做好了,R1 与 R2 都不会收到 Area 20 的 Route。

R1#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
O IA 192.168.23.0/24 [110/20] via 192.168.12.2, 00:15:19, Ethernet0/0
R2#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/1
     2.0.0.0/32 is subnetted, 1 subnets
C       2.2.2.2 is directly connected, Loopback0
C    192.168.23.0/24 is directly connected, Ethernet0/0

然後,我们在 R2 和 R3 用 area virtual-link 指令来设定 virtual link。Transit area 是 virtual link 所经过的 Area,而 router-id 则是对方的 Router ID。

R2(config)#router ospf 1
R2(config-router)#area 10 virtual-link 3.3.3.3
R3(config)#router ospf 1
R3(config-router)#area 10 virtual-link 2.2.2.2

於是 R1 和 R2 都收到 Area 20 的 Route 了。

R1#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
O IA 192.168.23.0/24 [110/20] via 192.168.12.2, 00:01:06, Ethernet0/0
O IA 192.168.34.0/24 [110/30] via 192.168.12.2, 00:01:06, Ethernet0/0
R2#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/1
     2.0.0.0/32 is subnetted, 1 subnets
C       2.2.2.2 is directly connected, Loopback0
C    192.168.23.0/24 is directly connected, Ethernet0/0
O IA 192.168.34.0/24 [110/20] via 192.168.23.3, 00:01:40, Ethernet0/0

接驳两个 Area 0

由於整个 OSPF 网络中只可存在一个 Backbone Area 0,如果有两个 Area 0 的话,必需用 Virtual Link 将其相连起来。

ospf

按上图的设定,在没有设定 Virtual Link 的情况下,两个 Area 0 没法相连。

R1#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
O IA 192.168.23.0/24 [110/20] via 192.168.12.2, 00:03:36, Ethernet0/0
R4#show ip route | begin Gateway
Gateway of last resort is not set

     4.0.0.0/32 is subnetted, 1 subnets
C       4.4.4.4 is directly connected, Loopback0
O IA 192.168.23.0/24 [110/20] via 192.168.34.3, 00:03:45, Ethernet0/1
C    192.168.34.0/24 is directly connected, Ethernet0/1

所以要在 R2 和 R3 之间建立 Virtual Link。

R2(config)#router ospf 1
R2(config-router)#area 10 virtual-link 3.3.3.3
R3(config)#router ospf 1
R3(config-router)#area 10 virtual-link 2.2.2.2

两个 Area 0 互相看到大家了,留意一点,虽然经过了 Area 10,但这条 Area 0 去 Area 0 的 Route 依然被视为 Intra-area Route。

R1#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
O IA 192.168.23.0/24 [110/20] via 192.168.12.2, 00:00:54, Ethernet0/0
O    192.168.34.0/24 [110/30] via 192.168.12.2, 00:00:54, Ethernet0/0
R4#show ip route | begin Gateway
Gateway of last resort is not set

O    192.168.12.0/24 [110/30] via 192.168.34.3, 00:01:09, Ethernet0/1
     4.0.0.0/32 is subnetted, 1 subnets
C       4.4.4.4 is directly connected, Loopback0
O IA 192.168.23.0/24 [110/20] via 192.168.34.3, 00:01:09, Ethernet0/1
C    192.168.34.0/24 is directly connected, Ethernet0/1

Coming Soon.....

Summarization