OSPF

135 阅读8分钟

背景

  • 由于RIP是基于距离矢量算法的路由协议,存在着收敛慢、路由环路、可扩展性差等问题,所以逐渐被OSPF取代。

概述

  • 开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol)。
  • 目前针对IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740)。如无特殊说明,本文中所指的OSPF均为OSPF Version 2。
  • OSPF度量值为代价(由链路带宽决定,1000Mbps代价为1);
  • OSPF会进行区域划分实现网络快速收敛(同时进行区域内的路由学习,再进行区域间路由学习);

优点

  • OSPF采用组播形式收发报文,这样可以减少对其它不运行OSPF路由器的影响。
  • OSPF支持无类型域间选路(CIDR)。
  • OSPF支持对等价路由进行负载分担。
  • OSPF支持报文加密。

RIP与OSPF优缺点

  • RIP:简单易维护,但网络收敛慢、扩展性差(最大15跳),更适合小型网络拓扑;
  • OSPF:相对更复杂,但网络收敛较快、扩展性更好(度量值为代价,理论上无上限),适合中、大型网络拓扑;

工作原理

建立邻居关系

  • 相邻路由器发送Hello报文;
  • 选举DR路由器(指定路由器)和BDR路由器(备份指定路由器);

image.png

建立邻接关系

  • 发送链路状态数据描述报文(DB:DataBase Description Packet),进行链路数据库同步;

学习链路状态信息

  • 发送链路状态请求报文(LSR:Link State Request Packet);
  • 发送链路状态更新报文(LSU:Link State Update Packet):一个LSU数据包包含一条或多条LSA(Link State Advertisement:链路状态通告),包含了要学习的路由条目信息;
  • 发送链路状态确认报文(LSA:Link State Acknowledgment Packet)

形成路由条目

  • 经过最短路由优先算法(Dijkstra)计算出最短路径,形成路由条目;

区域划分

骨干区域

  • 负责区域之间路由信息的传播区域。

  • 区域编号固定为0或者0.0.0.0

  • 默认情况下,所有非骨干区域都需要与骨干区域直接相连,如果两个非骨干区域未通过骨干区域直接相连,会导致无法实现其它区域路由学习的现象;

    • 区域1会将汇总后的路由信息发送给区域0,区域2也会将汇总后的路由信息发送给区域0;
    • 区域0收到汇总路由信息后,再次进行汇总,将汇总后的结果发送给其它非骨干区域(区域1和区域2);
    • 由于区域3未与区域0直连,导致未将自己的区域汇总路由信息发送给区域0,则其它区域(区域0、1、2)都无法学习区域3的路由信息,且区域3也无法学习其它区域(区域0、1、2)路由信息;

image.png

非骨干区域

  • 根据可以学习到的路由种类进行区分

命令

  • 创建OSPF编号
    ospf 编号
  • 创建区域
    area 编号
  • 宣告直连网段
    network IP网段 通配符子网掩码
  • 将ASBR上的直连路由引入到OSPF中
    ospf 编号 import-route direct
  • 将ASBR上的静态路由引入到OSPF中
    ospf 编号 import-route static
  • 将ASBR上的默认路由引入到OSPF中
    ospf 编号 default-route-advertise
  • 将ASBR上的RIP路由引入到OSPF中
    ospf 编号 import-route rip 编号
  • 将ASBR上的直连路由引入到RIP中
    rip 编号 import-route direct
  • 将ASBR上的默认路由引入到RIP中
    rip 编号 default-route originate
  • 将ASBR上的静态路由引入到RIP中
    rip 编号 import-route static
  • 将ASBR上的ospf路由引入到RIP中
    rip 编号 import-route ospf 编号
  • 配置为末梢区域
    ospf 编号 area 编号 stub
  • 配置为完全末梢区域
    ospf 编号 area 编号 stub no-summary
  • 配置非纯末梢区域
    ospf 编号 area 编号 nssa
  • 配置完全非纯末梢区域
    ospf 编号 area 编号 nssa no-summary

通配符子网掩码

  • 32位点分十进制(IPv4格式),0表示匹配,1不匹配;

    • 比如:

      • 子网掩码:255.255.0.0
      • 通配符子网掩码:0.0.255.255
  • 通配符子网掩码=255.255.255.255-子网掩码;

路由器角色

区域内路由器(Internal Router)

  • 该设备的所有接口都属于通过一个AS区域。

区域边界路由器ABR(Area Border Router)

  • 该设备可以同时属于两个以上区域,但其中一个必须为骨干区域。

自治系统边界路由器ASBR(AS Boundary Router)

  • 与其它AS交换路由信息的设备。

LSA类型

Type1

  • 每个设备都会产生,描述了设备的链路状态和开销,在所属的区域内传播。

Type2

  • 由DR(Designated Router)产生,描述本网段的链路状态,在所属的区域内传播。

Type3

  • 由ABR产生,描述区域内某个网段的路由(区域之间的路由信息),区域间传播。

Type4

  • 由ABR产生,描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。

Type5

  • 由ASBR产生,描述到AS外部的路由,通告到所有的区域(除了STUB区域和NSSA区域)。

Type7

  • 由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。

非骨干区域

标准区域

  • 标准区域与骨干区域直连,也可以连接其它AS区域;
  • 标准区域为最通用区域,其传输区域内路由、区域间路由、区域外路由(其它AS区域);
  • 会产生的LSA类型:1、2、3、4、5;

末梢区域(STUB)

  • 不允许发布自治系统外部路由,只允许发布区域内路由和区域间路由;
  • 会产生的LSA类型:1、2、3(其它区域路由,通往其它自治系统的默认路由)

完全末梢区域(Totally STUB)

  • 不允许发布自治系统外部路由和区域间路由,只允许发布区域内路由;
  • 会产生的LSA类型:1、2、3(通往其它自治系统和区域的默认路由)

非纯末梢区域(NSSA)

  • 具备末梢区域特征(只允许发布区域内路由和区域间路由);
  • 可以导入与当前当前区域内的ASBR直连的其它自治系统路由;
  • 会产生的LSA类型:1、2、3、7(其它AS路由);

完全非纯末梢区域(Totally NSSA)

  • 具备完全末梢特征(只允许发布区域内路由)
  • 具备非纯末梢特征(可以导入与当前当前区域内的ASBR直连的其它自治系统路由);
  • 会产生的LSA类型:1、2、3(通往其它自治系统和区域的默认路由)、7(其它AS路由);

骨干区域案例

image.png

AR1:

  1. sys
  2. int g0/0/0
  3. ip add 192.168.10.254 24
  4. int g0/0/1
  5. ip add 172.16.1.1 30
  6. q
  7. ospf 10
  8. area 0
  9. network 192.168.10.0 0.0.0.255
  10. network 172.16.1.0 0.0.0.3

AR2:

  1. sys
  2. int g0/0/1
  3. ip add 192.168.20.254 24
  4. int g0/0/0
  5. ip add 172.16.1.2 30
  6. q
  7. ospf 10
  8. area 0
  9. network 172.16.1.0 0.0.0.3
  10. network 192.168.20.0 0.0.0.255

多区域案例

image.png

AR1:

  1. sys
  2. int g0/0/0
  3. ip add 192.168.10.254 24
  4. int g0/0/1
  5. ip add 172.16.1.1 30
  6. int g0/0/2
  7. ip add 172.16.3.1 30
  8. q
  9. ospf 100
  10. area 0
  11. network 192.168.10.0 0.0.0.255
  12. network 172.16.1.0 0.0.0.3
  13. q
  14. q
  15. ospf 100
  16. area 1
  17. network 172.16.3.0 0.0.0.3
  18. q
  19. q
  20. dhcp enable
  21. int g0/0/0
  22. dhcp select interface

AR2:

  1. sys
  2. int g0/0/0
  3. ip add 172.16.1.2 30
  4. int g0/0/1
  5. ip add 192.168.20.254 24
  6. int g0/0/2
  7. ip add 172.16.2.1 30
  8. q
  9. ospf 100
  10. area 0
  11. network 172.16.1.0 0.0.0.3
  12. network 192.168.20.0 0.0.0.255
  13. q
  14. q
  15. rip 10
  16. version 2
  17. network 172.16.0.0
  18. q
  19. ospf 100
  20. import-route rip 10
  21. q
  22. rip 10
  23. import-route ospf 100
  24. q
  25. dhcp enable
  26. int g0/0/1
  27. dhcp select interface

AR3:

  1. sys
  2. int g0/0/0
  3. ip add 172.16.2.2 30
  4. int g0/0/1
  5. ip add 192.168.30.254 24
  6. q
  7. rip 10
  8. version 2
  9. network 172.16.0.0
  10. network 192.168.30.0
  11. q
  12. dhcp enable
  13. int g0/0/1
  14. dhcp select interface

AR4:

  1. sys
  2. int g0/0/0
  3. ip add 172.16.3.2 30
  4. q
  5. ospf 100
  6. area 1
  7. network 172.16.3.0 0.0.0.3

末梢区域案例

image.png

AR1:

  1. sys
  2. dhcp enable
  3. int g0/0/0
  4. ip add 192.168.10.254 24
  5. dhcp select interface
  6. int g0/0/1
  7. ip add 172.16.1.1 30
  8. int g0/0/2
  9. ip add 172.16.3.1 30
  10. q
  11. ospf 100
  12. area 0
  13. network 192.168.10.0 0.0.0.255
  14. network 172.16.1.0 0.0.0.3
  15. q
  16. area 1
  17. network 172.16.3.0 0.0.0.3
  18. stub

AR2:

  1. sys
  2. dhcp enable
  3. int g0/0/0
  4. ip add 172.16.1.2 30
  5. int g0/0/1
  6. ip add 192.168.20.254 24
  7. dhcp select interface
  8. int g0/0/2
  9. ip add 172.16.2.1 30
  10. q
  11. ospf 100
  12. area 0
  13. network 172.16.1.0 0.0.0.3
  14. network 192.168.20.0 0.0.0.255
  15. q
  16. q
  17. rip 10
  18. version 2
  19. network 172.16.0.0
  20. import-route ospf 100
  21. q
  22. ospf 100
  23. import-route rip 10

AR3:

  1. sys
  2. dhcp enable
  3. int g0/0/0
  4. ip add 172.16.2.2 30
  5. int g0/0/1
  6. ip add 192.168.30.254 24
  7. dhcp select interface
  8. q
  9. rip 10
  10. version 2
  11. network 172.16.0.0
  12. network 192.168.30.0

AR4:

  1. sys
  2. int g0/0/0
  3. ip add 172.16.3.2 30
  4. int g0/0/1
  5. ip add 172.16.5.1 30
  6. int g0/0/2
  7. ip add 172.16.4.1 30
  8. q
  9. ospf 100
  10. area 1
  11. network 172.16.3.0 0.0.0.3
  12. q
  13. q
  14. rip 200
  15. version 2
  16. network 172.16.0.0
  17. q
  18. ip route-static 192.168.40.0 24 172.16.4.2
  19. ospf 100
  20. import-route rip 200
  21. q
  22. rip 200
  23. import-route ospf 100
  24. import-route static
  25. ospf 100
  26. import-route static
  27. area 1
  28. stub

AR5:

  1. sys
  2. dhcp enable
  3. int g0/0/0
  4. ip add 172.16.4.2 30
  5. int g0/0/1
  6. ip add 192.168.40.254 24
  7. dhcp select interface
  8. q
  9. ip route-static 0.0.0.0 0 172.16.4.1

AR6:

  1. sys
  2. dhcp enable
  3. int g0/0/0
  4. ip add 192.168.50.254 24
  5. dhcp select interface
  6. int g0/0/1
  7. ip add 172.16.5.2 30
  8. q
  9. rip 200
  10. version 2
  11. network 192.168.50.0
  12. network 172.16.0.0