tnblog
首页
视频
资源
登录

OSPF 协议

4881人阅读 2022/9/23 15:40 总访问:3464962 评论:0 收藏:0 手机
分类: 网络

OSPF 协议

OSPF 协议简介


开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议。目前针对IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740)。如无特殊说明,本文中所指的OSPF均为OSPF Version 2。

OSPF 出现的目的


在OSPF出现前,网络上广泛使用RIP(Routing Information Protocol)作为内部网关协议。
由于RIP是基于距离矢量算法的路由协议,存在着收敛慢、路由环路、可扩展性差等问题,所以逐渐被OSPF取代。
OSPF作为基于链路状态的协议,能够解决RIP所面临的诸多问题。此外,OSPF还有以下优点:

1.OSPF采用组播形式收发报文,这样可以减少对其它不运行OSPF路由器的影响。
2.OSPF支持无类型域间选路(CIDR)。
3.OSPF支持对等价路由进行负载分担。
4.OSPF支持报文加密。
由于OSPF具有以上优势,使得OSPF作为优秀的内部网关协议被快速接收并广泛使用。

OSPF协议特点


+ OSPF把自治系统AS(Autonomous System)划分成逻辑意义上的一个或多个区域
+ OSPF通过LSA(Link State Advertisement)的形式发布路由;
+ OSPF依靠在OSPF区域内各设备间交互OSPF报文来达到路由信息的统一;
+ OSPF报文封装在IP报文内,可以采用单播或组播的形式发送。

报文字段与LSA类型

报文类型 报文作用
Hello报文 周期性发送,用来发现和维持OSPF邻居关系。
DD报文(Database Description packet) 描述本地LSDB(Link State Database)的摘要信息,用于两台设备进行数据库同步。
LSR报文(Link State Request packet) 用于向对方请求所需的LSA。
设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。
LSU报文(Link State Update packet) 用于向对方发送其所需要的LSA。
LSAck 报文(Link State Acknowledgment packet) 用来对收到的LSA进行确认。
LSA类型 LSA作用
Router-LSA(Type1) 每个设备都会产生,描述了设备的链路状态和开销,在所属的区域内传播。
Network-LSA(Type2) 由DR(Designated Router)产生,描述本网段的链路状态,在所属的区域内传播。
Network-summary-LSA(Type3) 由ABR产生,描述区域内某个网段的路由,并通告给发布或接收此LSA的非Totally STUB或NSSA区域。例如:ABR同时属于Area0和Area1,Area0内存在网段10.1.1.0,Area1内存在网段11.1.1.0,ABR为Area0生成到网段11.1.1.0的Type3 LSA;ABR为Area1生成到网段10.1.1.0的Type3 LSA,并通告给发布或接收此LSA的非Totally Stub或NSSA区域。
ASBR-summary-LSA(Type4) 由ABR产生,描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。
AS-external-LSA(Type5) 由ASBR产生,描述到AS外部的路由,通告到所有的区域(除了STUB区域和NSSA区域)。
NSSA LSA(Type7) 由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。
Opaque LSA(Type9/Type10/Type11) Opaque LSA提供用于OSPF的扩展的通用机制。其中:
Type9 LSA仅在接口所在网段范围内传播。用于支持GR的Grace LSA就是Type9 LSA的一种。
Type10 LSA在区域内传播。用于支持TE的LSA就是Type10 LSA的一种。
Type11 LSA在自治域内传播,目前还没有实际应用的例子。

邻居状态机


在OSPF网络中,为了交换路由信息,邻居设备之间首先要建立邻接关系,邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念。

邻居关系:OSPF设备启动后,会通过OSPF接口向外发送Hello报文,收到Hello报文的OSPF设备会检查报文中所定义的参数,如果双方一致就会形成邻居关系,两端设备互为邻居。

邻接关系:形成邻居关系后,如果两端设备成功交换DD报文和LSA,才建立邻接关系。

OSPF共有8种状态机,分别是:Down、Attempt、Init、2-way、Exstart、Exchange、Loading、Full。

状态 描述
Down 邻居会话的初始阶段,表明没有在邻居失效时间间隔内收到来自邻居路由器的Hello数据包。
Attempt 该状态仅发生在NBMA网络中,表明对端在邻居失效时间间隔(dead interval)超时前仍然没有回复Hello报文。此时路由器依然每发送轮询Hello报文的时间间隔(poll interval)向对端发送Hello报文。
Init 收到Hello报文后状态为Init。
2-way 收到的Hello报文中包含有自己的Router ID,则状态为2-way;如果不需要形成邻接关系则邻居状态机就停留在此状态,否则进入Exstart状态。
Exstart 开始协商主从关系,并确定DD的序列号,此时状态为Exstart。
Exchange 主从关系协商完毕后开始交换DD报文,此时状态为Exchange。
Loading DD报文交换完成即Exchange done,此时状态为Loading。
Full LSR重传列表为空,此时状态为Full。

OSPF 简单 Demo


我们创建两个AR路由器,然后设置它们的g0/0/0接口的IP网段为10.1.12.x,设置的L0网卡分别为1.1.1.12.2.2.2


配置AR1路由器。

  1. # 创建名称
  2. system-view
  3. sysname AR1
  4. # 创建l0网段
  5. int l0
  6. ip a 1.1.1.1 32
  7. dis this
  8. q
  9. # 为g0/0/0接口附上ip
  10. int g0/0/0
  11. ip a 10.1.12.1 24
  12. dis this
  13. q


配置AR2路由器。

  1. # 创建名称
  2. system-view
  3. sysname AR2
  4. # 创建lo0网段
  5. int l0
  6. ip a 2.2.2.2 32
  7. dis this
  8. q
  9. # 为g0/0/0接口附上ip
  10. int g0/0/0
  11. ip a 10.1.12.2 24
  12. dis this
  13. q
  14. ping 1.1.1.1


我们发现它们并不能ping通,因为没有设置静态路由。

  1. dis ip routing-table


配置ospf

在配置ospf网络的时候,需要配置区域;区域相当于在相同区域下的设备可以通过ospf进行连接。

  1. # AR1 配置ospf
  2. ospf router-id 1.1.1.1
  3. # 配置为0区域
  4. area 0
  5. # 宣告1.1.1.1网络
  6. network 1.1.1.1 0.0.0.0
  7. # 宣告 10.1.12.0
  8. network 10.1.12.0 0.0.0.255

  1. # AR2 配置ospf
  2. ospf router-id 2.2.2.2
  3. # 配置为0区域
  4. area 0
  5. # 宣告1.1.1.1网络
  6. network 2.2.2.2 0.0.0.0
  7. # 宣告 10.1.12.0
  8. network 10.1.12.0 0.0.0.255
  9. ping 1.1.1.1


我们可以看到一些刚刚表中的状态信息。
我们还可以通过下面的命令来查询邻居。

  1. dis ospf peer b


当我们一端停止g0/0/0接口时,邻居信息将会移除,AR1设备举例。

  1. int GigabitEthernet 0/0/0
  2. shutdown
  3. dis ospf peer b


然后我们再次激活,会看见一些启动起来的包,并且通过查看routing的方式我们发现已经学习到了对端地址,并且是通过OSPF的方式。

  1. undo shutdown
  2. # 等30秒再次查看
  3. dis this
  4. q
  5. dis ospf peer b
  6. # 查看ospf routing
  7. dis ospf routing
  8. dis ospf routing-table


当然我们要退出一条网络可以通过下面的命令进行实现

  1. undo network 2.2.2.2 0.0.0.0
  2. undo network 10.1.12.0 0.0.0.255


如果我们在一台设备上添加一条ip地址希望其他端学习到,我们可以添加一条0.0.0.0 255.255.255.255的网络(两个设备都添加)。

  1. network 0.0.0.0 255.255.255.255
  2. # 然后我们查看状态到full为止
  3. dis ospf peer brief
  4. q


然后添加一条ip 3.3.3.3 到我们的AR1上,AR2可以学习到。

  1. # 在AR1添加ip 3.3.3.3
  2. int l0
  3. ip a 3.3.3.3 32
  4. # 在AR2查询路由
  5. dis ip routing-table
  6. # ping
  7. ping 3.3.3.3

OSPF Router-ID用于在OSPF domain中唯一地表示一台OSPF路由器,从OSPF网络设计的角度,我们要求全OSPF域内,禁止出现两台罗尤其拥有相同的Router-ID。
OSPF Router-ID的设定可以通过手工配置的方式,或者通过协议自动选取的方式。当然,在实际网络部署中,强烈将以手工配置OSPF的Router-ID,因为这关系到协议的稳定。

广播多路访问网络


在广播多路访问网络(Multi Access)中,所有的路由器的接口都是相同网段,这些接口两两建立OSPF邻居关系,这就意味着,网络中共有:n(n-1)/2。维护如此多的邻居关系不仅额外消耗资源,更增加了网络中LSA的泛洪数量。
———为减小多路访问网络中的 OSPF 流量,OSPF 会在每一个MA网络(多路访问网络)选举一个指定路由器 (DR)和一个备用指定路由器 (BDR)。
——DR选举规则:最高OSPF接口优先级拥有者被选作DR,如果优先级相等(默认为1),具有最高的OSPF Router-ID的路由器被选举成DR,并且DR具有非抢占性。
——指定路由器 (DR):DR 负责使用该变化信息更新其它所有 OSPF 路由器(DR Rother)。
——备用指定路由器 (BDR):BDR 会监控 DR 的状态,并在当前 DR 发生故障时接替其角色。
——注意OSPF为“接口敏感型协议”,DR及BDR的身份状态是基于OSPF接口的。
——MA网络中,所有的DRother路由器均只与DR和BDR建立邻接关系,DRother间不建立全毗邻邻接关系。
——如此一来,该多路访问网络中设备需要维护的OSPF邻居关系大幅减小:M= (n-2)×2+1,LSA的泛洪问题也可以得到一定的缓解。

简单来讲:在一个小组里面,学习路由找人,你直接找组长或副组长就可以了。
成为组长(DR)或副组长(BDR)通过router-id进行选举,数值越大越优先。
如果组长出事了或者请假了、挂了由职务又由副组长代替。

Demo案例

抱歉诸位,关于下面的命令需要大家自己去尝试了,我本地交换机不知道为什么跑不起来。


配置AR4设备。

  1. sysname AR4
  2. interface Ethernet 0/0/0
  3. # 由于该设备是交换机的口,所以先关闭交换机的接口
  4. undo portswitch
  5. # 添加IP
  6. ip a 1.1.1.4 24
  7. int l 0
  8. ip a 100.100.100.100 32
  9. dis ip int b


配置AR6设备。

  1. sysname AR6
  2. int Ethernet 0/0/0
  3. undo portswitch
  4. ip a 1.1.1.6 24
  5. int l 0
  6. ip a 20.20.20.20 32
  7. dis ip int b


配置AR5设备。

  1. system-view
  2. sysname AR5
  3. int Ethernet 0/0/0
  4. undo portswitch
  5. ip a 1.1.1.5 24
  6. int l0
  7. ip a 5.5.5.5 32
  8. dis ip int b


配置AR8设备。

  1. system-view
  2. sysname AR8
  3. int Ethernet 0/0/0
  4. undo portswitch
  5. ip a 1.1.1.8 24
  6. int l0
  7. ip a 8.8.8.8 32
  8. dis ip int b


配置AR7设备。

  1. system-view
  2. sysname AR7
  3. int Ethernet 0/0/0
  4. undo portswitch
  5. ip a 1.1.1.7 24
  6. int l0
  7. ip a 7.7.7.7 32
  8. dis ip int b


配置AR4设备的OSPF。

  1. ospf router-id 100.100.100.100
  2. area 0
  3. network 0.0.0.0 255.255.255
  4. dis this


配置AR6设备的OSPF。

  1. ospf router-id 20.20.20.20
  2. area 0
  3. network 0.0.0.0 255.255.255


配置AR5设备的OSPF。

  1. ospf router-id 5.5.5.5
  2. area 0
  3. network 0.0.0.0 255.255.255


配置AR8设备的OSPF。

  1. ospf router-id 8.8.8.8
  2. area 0
  3. network 0.0.0.0 255.255.255


配置AR7设备的OSPF。

  1. ospf router-id 7.7.7.7
  2. area 0
  3. network 0.0.0.0 255.255.255
  4. dis ospf peer brief

多区域


通过不同区域的交换机连接进行通信。

  1. system-view
  2. sysname AR4
  3. int g0/0/0
  4. ip a 10.1.45.4 24
  5. int l0
  6. ip a 4.4.4.4 32
  7. dis this
  8. dis ip int b
  9. q
  1. system-view
  2. sysname AR5
  3. int g0/0/0
  4. ip a 10.1.45.5 24
  5. int l0
  6. ip a 5.5.5.5 32
  7. q
  8. dis ip int b
  9. int g0/0/1
  10. ip a 10.1.56.5 24
  11. q
  1. system-view
  2. sysname AR6
  3. int g0/0/0
  4. ip a 10.1.56.6 24
  5. int l0
  6. ip a 6.6.6.6 32
  7. dis ip int b
  8. # 测试直连情况
  9. ping 10.1.56.5


AR4

  1. ospf router-id 4.4.4.4
  2. area 0
  3. network 0.0.0.0 255.255.255.255
  4. dis this
  5. q


AR5

  1. int g0/0/0
  2. ospf router-id 5.5.5.5
  3. area 0
  4. network 10.1.45.0 0.0.0.255
  5. dis ospf peer b
  6. network 5.5.5.5 0.0.0.0
  7. dis this
  8. q
  9. int g0/0/1
  10. network 10.1.56.0 0.0.0.255
  11. dis ospf peer b


AR6

  1. ospf router-id 6.6.6.6
  2. area 1
  3. network 0.0.0.0 255.255.255.255
  4. dis ospf peer b
  5. q


AR4

  1. ping 6.6.6.6

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

Soap、Http、TCP/IP 三个基本的通讯协议有什么区别?

TCPTCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯...

什么是CC-BY-NC-SA协议?有什么规定?

前言:他来了 他来 他骑着Tomcat 走来了 没错就是我 你们幽默风趣的小付早上给各位大爷们分享了堆和栈 虽然是是转载的但是确...

HTTP协议

前 言HTTP HTTP协议简介:超文本传输协议(英文全称:HyperTextTransferProtocol,缩写:HTTP),是一种用于分布式、协作...

动态主机配置协议 DHCP (扩展OVS)

动态主机配置协议 DHCP[TOC] DHCP简介动态主机设置协议(英语:Dynamic Host Configuration Protocol,缩写:DHCP),又称...

BGP 协议

BGP 协议[TOC] BGP 协议介绍BGP 全称是 Border Gateway Protocol, 对应中文是边界网关协议。BGP是互联网上一个核心的去中...

Kubernetes Calico VPP软协议

Kubernetes Calico VPP软协议栈[TOC] VPP简介VPP(Vector Packet Processor)是一个高性能、开源的用户空间网络数据平面,...
这一世以无限游戏为使命!
排名
2
文章
633
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术