一, 背景介绍
假设有一个大型企业, 各省市都有分公司, 总路由与运营网络之间跑 bgp, 总路由与各省路由器在 area 0, 每个省的不同地市处在不同的 area, 其网络拓扑如下所示,:
以 area 1 中的 R5 为例, 当配置完 ospf 之后, R5 上除了本区域的 1,2 类 lsa 外, 还会通过 3 类 lsa 学习到 area 2 的路由, 然后还会通过 4,5 类 lsa 学习到外部网络的路由及 asbr 条目, 这样 R5 的路由表就会变得异常庞大, 而路由表是存放在路由器的内存中, 大量的 lsa 除了会造成带宽浪费, 也会造成本地设备性能下降, 基于此, 要进行路由条目的优化
二, stub 和 totally stub 区域
1.stub 区域
仍是以 area 1 上的 R5 为例, 仔细观察会发现 R5 无论是访问外部网络或者是访问其他地市的网络都会通过 R3 或者 R4 这两个汇聚层的路由器, 作为接入层路由器的 R5 本身设备性能肯定不如汇聚层设备, 另外 R5 只需要将访问外网的默认路由指向 R3,R4 即可, 没必要保存外网的路由条目, 基于此, 将 area 1 配置成 stub 区域, 就能使 abr 过滤掉 4,5 类 lsa, 并由 abr 向 area 1 下发一条 3 类 lsa 的默认路由, 达到简化路由条目的目的
2.totally stub 区域
尽管通过 stub 区域已经过滤掉了 4,5 类 lsa, 但不同地市之间的路由 (area 1,area 2) 还是能相互学习到, 为了进一步精简 R5 的路由条目, 让他不用学到其他 area 的路由信息, 此时就可以采用 totally stub 区域, 其作用是让 abr 除了 4,5 类 lsa 外进一步将 3 类 lsa 也过滤掉, 这样 abr 只对本区域下发一条默认路由(3 类 lsa), 不同 area 之间不会相互学习, 以此达到精简条目的目的
3. 小结
stub 区域的 abr 过滤掉 4,5 类 lsa, 并下发一条 3 类 lsa 的默认路由, 即 5 类转 3 类 lsa
totally stub 区域是在 stub 区域的基础上让 abr 进一步过滤掉 area 之间的 3 类 lsa, 只保留一条 3 类 lsa 的默认路由
stub 区域或者 totally stub 区域都不允许进行路由再发布
三, nssa 区域和 totally nssa 区域
1.nssa 区域
仍以上图为例, 但在有的时候, 不管是出于什么需求, 就是需要 area 1 发布路由, 同时又想实现向 stub 一样精简路由条目的目的, 此时就需要将 area 1 设置为 nssa 区域. nssa 全称 not-so-stub area, 它的具备了 stub 区域的功能让 abr 过滤掉 4,5 类 lsa 外还允许该区域进行路由重发布, 发布的路由以 7 类 lsa 的方式在 nssa 区域中泛洪, 而 7 类 lsa 是不能够在 nssa 以外区域泛洪, 为了让其他区域学习到这条外部路由, nssa 区域的 abr 会将 7 类 lsa 转变成 5 类 lsa 注入到 area 0 中, 此时就可以在所有 as 域内泛洪
2.totally nssa 区域
类似于 totally stub,totally nssa 也是在 nssa 基础上让 arb 过滤掉其他区域的 3 类 lsa, 此处不再赘述
3. 小结
nssa 区域的 abr 过滤掉 4,5 类 lsa, 并下发一条 7 类 lsa 的默认路由, 即 5 类转 7 类 lsa, 且 7 类 lsa 不允许在除 nssa 外的其他区域泛洪
totally stub 区域是在 stub 区域的基础上让 abr 进一步过滤掉 area 之间的 3 类 lsa, 除了默认路由的 7 类 lsa 外, 如果是菊厂的设备, 他还会下发一条默认路由的 3 类 lsa
nssa 区域或者 totally nssa 区域都允许进行路由再发布
四, stub 和 totally stub 实验
1.stub 区域
为模拟末节网络, 拓扑及信息如下图所示:
假设 R1 的 lo0 接口为外部路由, 完成基础配置后能看看此时 R3 上同时有 1,2,3,4,5 类 lsa
- <R3>
- display ospf lsdb OSPF Process 1 with Router ID 3.3.3.3 Link State Database
- Area: 0.0.0.1 Type LinkState ID AdvRouter Age Len Sequence Metric Router
- 2.2.2.2 2.2.2.2 1054 36 80000005 1 Router 3.3.3.3 3.3.3.3 1045 48 80000006
- 1 Network 23.0.0.3 3.3.3.3 1045 32 80000003 0 Sum.NET 12.0.0.0 2.2.2.2
- 1116 28 80000002 1 Sum-Asbr 1.1.1.1 2.2.2.2 256 28 80000001 1 AS External
- Database Type LinkState ID AdvRouter Age Len Sequence Metric External 12.0.0.0
- 1.1.1.1 257 36 80000001 1 External 1.1.1.0 1.1.1.1 257 36 80000001 1
要将一个区域配置为 stub 时, 需要在这个内所有的路由器上进行配置
- [R2]ospf 1
- [R2-ospf-1]area 1
- [R2-ospf-1-area-0.0.0.1]stub
- [R3]ospf 1
- [R3-ospf-1]area 1
- [R3-ospf-1-area-0.0.0.1]stub
配置后再到 R3 上看 lsdb 会发现 4,5 类 lsa 已经由 abr(R2)进行了阻挡, 同时 R2 下发了一条 3 类的默认路由
- <R3>
- display ospf lsdb OSPF Process 1 with Router ID 3.3.3.3 Link State Database
- Area: 0.0.0.1 Type LinkState ID AdvRouter Age Len Sequence Metric Router
- 2.2.2.2 2.2.2.2 8 36 80000004 1 Router 3.3.3.3 3.3.3.3 7 48 80000005 1
- Network 23.0.0.3 3.3.3.3 7 32 80000001 0 Sum.NET 0.0.0.0 2.2.2.2 54 28
- 80000001 1 Sum.NET 12.0.0.0 2.2.2.2 54 28 80000001 1
2.totally stub 区域
配置成为 totally stub 时, 只需要在 abr 的 stub 命令后面加上 no-summary 选项, area 内其他路由器只需要设置为 stub 区域, 原因是只有 abr 能过滤 lsa 信息
[R2-ospf-1-area-0.0.0.1]stub no-summary
此时再看 R3 上的 lsdb 会发现只剩下一条默认路由的 3 类 lsa,area 0 中 12.0.0.0/24 的 3 类 lsa 也被 abr 阻挡掉了
- <R3>
- display ospf lsdb OSPF Process 1 with Router ID 3.3.3.3 Link State Database
- Area: 0.0.0.1 Type LinkState ID AdvRouter Age Len Sequence Metric Router
- 2.2.2.2 2.2.2.2 14 36 80000009 1 Router 3.3.3.3 3.3.3.3 11 48 8000000E
- 1 Network 23.0.0.3 3.3.3.3 11 32 80000002 0 Sum.NET 0.0.0.0 2.2.2.2 15
- 28 80000006 1
五, nssa 和 totally nssa 实验
1.nssa 区域
拓扑及信息如下图所示:
其中 R1 与 R4 的 lo0 端口模拟外部网络, 先将 R4 的 lo0 端口用 import-route direct 引入, 此时查看 R1 的 lsdb, 能看到 1,2,3,4,5 类 lsa 都存在
- <R1>
- display ospf lsdb OSPF Process 1 with Router ID 1.1.1.1 Link State Database
- Area: 0.0.0.1 Type LinkState ID AdvRouter Age Len Sequence Metric Router
- 2.2.2.2 2.2.2.2 831 36 80000007 1 Router 1.1.1.1 1.1.1.1 832 36 80000007
- 1 Network 12.0.0.2 2.2.2.2 831 32 80000004 0 Sum.NET 23.0.0.0 2.2.2.2 872
- 28 80000003 1 Sum.NET 34.0.0.0 2.2.2.2 872 28 80000003 2 Sum-Asbr 4.4.4.4
- 2.2.2.2 872 28 80000003 2 AS External Database Type LinkState ID AdvRouter
- Age Len Sequence Metric External 4.4.4.0 4.4.4.4 941 36 80000003 1 External
- 34.0.0.0 4.4.4.4 941 36 80000003 1
此时, 将 area 1 配置为 nssa 区域
- [R1]ospf 1
- [R1-ospf-1]area 1
- [R1-ospf-1-area-0.0.0.1]nssa
- [R2]ospf 1
- [R2-ospf-1]area 1
- [R2-ospf-1-area-0.0.0.1]nssa
再去 R1 上查看 lsdb, 会发现 abr(R2)已经过滤掉了 4,5 类 lsa, 并向 area 1 中下发了一条 7 类 lsa 的默认路由
- [R1]display ospf lsdb
- OSPF Process 1 with Router ID 1.1.1.1
- Link State Database
- Area: 0.0.0.1
- Type LinkState ID AdvRouter Age Len Sequence Metric
- Router 2.2.2.2 2.2.2.2 70 36 80000004 1
- Router 1.1.1.1 1.1.1.1 69 36 80000004 1
- Network 12.0.0.1 1.1.1.1 70 32 80000002 0
- Sum.NET 23.0.0.0 2.2.2.2 80 28 80000001 1
- Sum.NET 34.0.0.0 2.2.2.2 80 28 80000001 2
- NSSA 0.0.0.0 2.2.2.2 80 36 80000001 1
- <R1>display ospf routing
- OSPF Process 1 with Router ID 1.1.1.1
- Routing Tables
- Routing for Network
- Destination Cost Type NextHop AdvRouter Area
- 12.0.0.0/24 1 Transit 12.0.0.1 1.1.1.1 0.0.0.1
- 23.0.0.0/24 2 Inter-area 12.0.0.2 2.2.2.2 0.0.0.1
- 34.0.0.0/24 3 Inter-area 12.0.0.2 2.2.2.2 0.0.0.1
- Routing for NSSAs
- Destination Cost Type Tag NextHop AdvRouter
- 0.0.0.0/0 1 Type2 1 12.0.0.2 2.2.2.2
- Total Nets: 4
- Intra Area: 1 Inter Area: 2 ASE: 0 NSSA: 1
但在 abr(R2)的 area 0 上, 并不能找到 7 类 lsa, 说明 7 类 lsa 不能离开 nssa 区域
- <R2>
- display ospf lsdb OSPF Process 1 with Router ID 2.2.2.2 Link State Database
- Area: 0.0.0.0 Type LinkState ID AdvRouter Age Len Sequence Metric Router
- 2.2.2.2 2.2.2.2 489 36 8000000A 1 Router 3.3.3.3 3.3.3.3 657 36 80000009
- 1 Network 23.0.0.3 3.3.3.3 657 32 80000006 0 Sum.NET 34.0.0.0 3.3.3.3 683
- 28 80000005 1 Sum.NET 12.0.0.0 2.2.2.2 489 28 80000007 1 Sum-Asbr 4.4.4.4
- 3.3.3.3 604 28 80000004 1 Area: 0.0.0.1 Type LinkState ID AdvRouter Age
- Len Sequence Metric Router 2.2.2.2 2.2.2.2 479 36 80000004 1 Router 1.1.1.1
- 1.1.1.1 480 36 80000004 1 Network 12.0.0.1 1.1.1.1 481 32 80000002 0 Sum.NET
- 23.0.0.0 2.2.2.2 489 28 80000001 1 Sum.NET 34.0.0.0 2.2.2.2 489 28 80000001
- 2 NSSA 0.0.0.0 2.2.2.2 489 36 80000001 1 AS External Database Type LinkState
- ID AdvRouter Age Len Sequence Metric External 4.4.4.0 4.4.4.4 606 36 80000004
- 1 External 34.0.0.0 4.4.4.4 606 36 80000004 1
再将 R1 上的 lo0 接口引入, 此时再查看 R1 的 lsdb, 会发现多了 2 条 nssa 记录, 其作用分别是: 对内将外部的 1.1.1.0/24 的网段进行宣告, 对外将内部的 12.0.0.0/24 网段进行宣告
- [R1]display ospf lsdb
- OSPF Process 1 with Router ID 1.1.1.1
- Link State Database
- Area: 0.0.0.1
- Type LinkState ID AdvRouter Age Len Sequence Metric
- Router 2.2.2.2 2.2.2.2 1012 36 80000004 1
- Router 1.1.1.1 1.1.1.1 11 36 80000005 1
- Network 12.0.0.1 1.1.1.1 1012 32 80000002 0
- Sum.NET 23.0.0.0 2.2.2.2 1022 28 80000001 1
- Sum.NET 34.0.0.0 2.2.2.2 1022 28 80000001 2
- NSSA 12.0.0.0 1.1.1.1 11 36 80000001 1
- NSSA 1.1.1.0 1.1.1.1 11 36 80000001 1
- NSSA 0.0.0.0 2.2.2.2 1022 36 80000001 1
但之前说过, 7 类 lsa 只能在 nssa 区域中泛洪, 他是如何发送给其他区域, 此时再看 abr(R2)的 lsdb, 会发现 area 1 中宣告 1.1.1.0/24 网段的 7 类 lsa 在 abr 上变成了一个 5 类 lsa, 以此在整个 as 中泛洪
- <R2>
- display ospf lsdb OSPF Process 1 with Router ID 2.2.2.2 Link State Database
- Area: 0.0.0.0 Type LinkState ID AdvRouter Age Len Sequence Metric Router
- 2.2.2.2 2.2.2.2 1070 36 8000000A 1 Router 3.3.3.3 3.3.3.3 1238 36 80000009
- 1 Network 23.0.0.3 3.3.3.3 1238 32 80000006 0 Sum.NET 34.0.0.0 3.3.3.3
- 1264 28 80000005 1 Sum.NET 12.0.0.0 2.2.2.2 1070 28 80000007 1 Sum-Asbr
- 4.4.4.4 3.3.3.3 1185 28 80000004 1 Area: 0.0.0.1 Type LinkState ID AdvRouter
- Age Len Sequence Metric Router 2.2.2.2 2.2.2.2 1060 36 80000004 1 Router
- 1.1.1.1 1.1.1.1 61 36 80000005 1 Network 12.0.0.1 1.1.1.1 1062 32 80000002
- 0 Sum.NET 23.0.0.0 2.2.2.2 1070 28 80000001 1 Sum.NET 34.0.0.0 2.2.2.2
- 1070 28 80000001 2 NSSA 0.0.0.0 2.2.2.2 1070 36 80000001 1 NSSA 12.0.0.0
- 1.1.1.1 61 36 80000001 1 NSSA 1.1.1.0 1.1.1.1 61 36 80000001 1 AS External
- Database Type LinkState ID AdvRouter Age Len Sequence Metric External 1.1.1.0
- 2.2.2.2 60 36 80000001 1 External 4.4.4.0 4.4.4.4 1187 36 80000004 1 External
- 34.0.0.0 4.4.4.4 1187 36 80000004 1
2.totally nssa 区域
类似于 stub, 也在 area 1 的 abr 上添加 no-summary 选项, 该 area 内其他路由器设置为 nssa 区域
[R2-ospf-1-area-0.0.0.1]nssa no-summary
此时再查看 R1 的 lsdb 会发现, 除了原有 7 类 lsa 的默认路由外, 虽然其他 area 的 3 类 lsa 被 abr 过滤掉了, 但 abr 此时还会向 area 1 下发一个默认路由的 3 类 lsa, 只有菊厂设备有这种特性
- [R1]display ospf lsdb
- OSPF Process 1 with Router ID 1.1.1.1
- Link State Database
- Area: 0.0.0.1
- Type LinkState ID AdvRouter Age Len Sequence Metric
- Router 2.2.2.2 2.2.2.2 13 36 80000007 1
- Router 1.1.1.1 1.1.1.1 4 36 8000000B 1
- Network 12.0.0.1 1.1.1.1 4 32 80000002 0
- Sum.NET 0.0.0.0 2.2.2.2 24 28 80000001 1
- NSSA 12.0.0.0 1.1.1.1 169 36 80000002 1
- NSSA 1.1.1.0 1.1.1.1 169 36 80000002 1
- NSSA 0.0.0.0 2.2.2.2 14 36 80000003 1
六, 总结与 6 类 lsa
总结一下 ospf 中 6 种不同的 lsa 及其泛洪范围, 可以总结为下表:
其中 totally stub 和 totally nssa 因为要下发一条 3 类 lsa 的默认路由, 所以 no 是带星号
area/lsa 类型 | 1&2 | 3 | 4 | 5 | 7 |
---|---|---|---|---|---|
area 0 | yes | yes | yes | yes | no |
area N | yes | yes | yes | yes | no |
stub area | yes | yes | no | no | no |
totally stub | yes | no★ | no | no | no |
nssa area | yes | yes | no | no | yes |
totally nssa | yes | no★ | no | no | yes |
最后, 说一下 6 类 lsa, 其全称 group-membership-lsa, 是在 mospf 中用于表示组播成员的, 现在已基本被淘汰, 不再做介绍
来源: http://blog.51cto.com/arkling/2469888