1、OSPF基本原理
开放式最短路径优先OSPF(Open Shortest Path First)协议是IETF定义的一种基于链路状态的内部网关路由协议。
RIP是一种基于距离矢量算法的路由协议,存在着收敛慢、易产生路由环路、可扩展性差等问题,目前已逐渐被OSPF取代。
1.1、开放式最短路径优先(OSPF)简介
OSPF是一种基于链路状态的路由协议,它从设计上就保证了无路由环路。OSPF支持区域的划分,区域内部的路由器使用SPF最短路径算法保证了区域内部的无环路。OSPF还利用区域间的连接规则保证了区域之间无路由环路。
OSPF支持触发更新,能够快速检测并通告自治系统内的拓扑变化。
OSPF可以解决网络扩容带来的问题。当网络上路由器越来越多,路由信息流量急剧增长的时候,OSPF可以将每个自治系统划分为多个区域,并限制每个区域的范围。OSPF这种分区域的特点,使得OSPF特别适用于大中型网络。OSPF还可以同其他协议(比如多协议标记切换协议MPLS)同时运行来支持地理覆盖很广的网络。
OSPF可以提供认证功能。OSPF路由器之间的报文可以配置成必须经过认证才能进行交换。
优点:
- 链路状态路由协议
- 无环路
- 收敛快
- 扩展性好
- 支持认证
1.2、 OSPF原理介绍
RIP是基于距离矢量算法的路由协议,应用在大型网络中存在收敛速度慢、度量值不科学、可扩展性差等问题,最多支持15台设备。
IETF提出了基于SPF算法的链路状态路由协议OSPF(Open Shortest Path First)。通过在大型网络中部署OSPF协议,弥补了RIP协议的诸多不足。
所谓Link State(链路状态)指的就是路由器的接口状态。在OSPF中路由器的某一接口的链路状态包含了如下信息:
- 该接口的IP地址及掩码。
- 该接口的带宽。
- 该接口所连接的邻居。
OSPF与RIP不同:
- 路由信息传递与路由计算分离。
- 基于SPF算法。
- 以“累计链路开销”作为选路参考值。
OSPF作为链路状态路由协议,不直接传递各路由器的路由表,而传递链路状态信息,各路由器基于链路状态信息独立计算路由。
所有路由器各自维护一个链路状态数据库LSDB。邻居路由器间先同步链路状态数据库,再各自基于SPF(Shortest Path First)算法计算最优路由,从而提高收敛速度。
在度量方式上,OSPF将链路带宽作为选路时的参考依据。 “累计带宽”是一种要比“累积跳数”更科学的计算方式。
OSPF的工作过程:
- 第1步:邻居建立
- 第2步:同步链路状态数据库
每台路由器产生并向邻居泛洪链路状态信息,同时收集来自其他路由器链路状态信息,完成LSDB(Link State Database)的同步。 - 第3步:计算最优路由
每台路由器基于LSDB通过SPF算法,计算得到一棵以自己为根的SPT(Shortest Path Tree),再以SPT为基础计算去往各目的网络的最优路由,并形成路由表。
OSPF要求每台运行OSPF的路由器都了解整个网络的链路状态信息,这样才能计算出到达目的地的最优路径。OSPF的收敛过程由链路状态公告LSA(Link State Advertisement)泛洪开始。
LSA中包含了路由器已知的接口IP地址、掩码、开销和网络类型等信息。
收到LSA的路由器都可以根据LSA提供的信息建立自己的链路状态数据库LSDB(Link State Database),并在LSDB的基础上使用SPF算法进行运算,建立起到达每个网络的最短路径树。最后,通过最短路径树得出到达目的网络的最优路由,并将其加入到IP路由表中。
1.2.1、OSPF协议介绍
OSPF(开放最短路径优先)属于IGP内部网关路由协议,协议基于链路状态算法。
OSPF直接运行于IP协议之上,使用IP协议号89。
1.2.2、OSPF报文类型
链路状态公告LSA(Link State Advertisement)路由或者拓扑信息在不同条件下产生不同类型的拓扑或路由信息,分为5种信息分别为Hello报文、DD报文、DD报文、LSR报文、LSU报文、LSACK报文。
报文类型 | 说明 |
---|---|
Hello报文 | 发现并建立邻接系。224.0.0.5组播。每隔10秒发送,死亡时间40秒。邻居发现:自动发现邻居路由器。邻居保持:通过Keepalive机制,检测邻居运行状态。 |
DD报文 | DBD(数据库描述包):包含路由的摘要信息。目录型包含路由的摘要信息。 |
LSR报文 | 向另一台路由器请求特定路由的完整信息。发给邻居的。 |
LSU报文(更新包) | 用于LSA的泛洪和回应LSR该条路由的完整信息。在OSPF中,只有LSU需要显示确认。如果LSU从DRother发出来,不发往组播地址,发往单播 |
LSACK报文 | 对LSU做确认。ACK |
OSPF有五种报文类型,每种报文都使用相同的OSPF报文头。
-
Hello报文:最常用的一种报文,用于发现、维护邻居关系。并在广播和NBMA(None-Broadcast Multi-Access)类型的网络中选举指定路由器DR(Designated Router)和备份指定路由器BDR(Backup Designated Router)。
-
DD报文:两台路由器进行LSDB数据库同步时,用DD报文来描述自己的LSDB。DD报文的内容包括LSDB中每一条LSA的头部(LSA的头部可以唯一标识一条LSA)。LSA头部只占一条LSA的整个数据量的一小部分,所以,这样就可以减少路由器之间的协议报文流量。
-
LSR报文:两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地LSDB所缺少的,这时需要发送LSR报文向对方请求缺少的LSA,LSR只包含了所需要的LSA的摘要信息。
-
LSU报文:用来向对端路由器发送所需要的LSA。
-
LSACK报文:用来对接收到的LSU报文进行确认。
1.2.3、邻居和邻接关系建立
是指两个相邻OSPF路由器之间的关系,这两个路由器之间允许直接交换路由更新数据。
邻居状态变换
状态 | 报文 |
---|---|
Init初始状态 | 相互发送hello包。 |
ExStart准启动状态 | 选DR和BDR |
Exchange交换状态 | 发送DD报文 |
Loadin加载状态 | LSR报文和LSU报文,确认LSAck。 |
Full State 完全状态 | 建立邻接关系。 |
思科邻接关系建立描述:
邻居(Neighbor)–>邻接(Adjacency)
1、上图中,DOWN状态是刚运行状态:路由器A发送hello包---->244.0.0.5(组播包)。
2、 init state 初始状态:
- 路由器A进入init state 初始状态:路由器A发送hello包后。
- 路由器B发送hello包进入init state。
3、 Two-Way State 双向状态建立邻居关系。
路由器A收到hello包进入Two-Way状态。表明收到邻居的Hello报文,报文中包含自己的router id,进入2-way,双方同时进入two-way表明邻居关系的建立,建立邻居关系(只是相互打招呼)。双向通信已经建立,但是自己不在所收到的Hello报文的邻居列表中,尚未与邻居建立双向通信关系。
4、Exstart State准启动状态
选主从:
比较Route-ID 谁大选谁,选大的。
路由器A发送first DBD(数据库描述包Route-ID 目录型)---->路由器B
路由器B回复first DBD(Route-ID目录型)---->路由器A
路由器B告诉路由器A我的Route-ID>你的Route-ID,我是主。
5、Exstchange State交换状态交换目录
主路由器B发送second DBD(数据库描述包含Route-ID、LSA链路状态通告)---->路由器A 送second DBD(数据库描述包含Route-ID、LSA链路状态通告)---->主路由器B
路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。
6、Loading State 加载状态 同步数据库
路由器A从DBD(目录)中读取到路由器B中有一条172.16.6.0/24路由我没有
路由器A发送LSR(请求特定路由)---->路由器B 发送LSU(更新包)---->路由器A 确认LSAck ---->路由器B
相互发送LSR报文请求LSA,发送LSU报文通告LSA。
7、Full State 完全状态 建立邻接关系
就建立邻接关系(邻居之间相互走访)了。只有建立邻接关系才会将数据每隔30秒泛洪出去。
以较低频率(每隔30分钟对邻接关系泛洪)发送定期更新,被称为链路状态刷新。
网络变化时是触发更新。
DR泛洪(将从某个接口收到的数据流向除该接口之外的所有接口发送出去。)每隔30秒发送LSA给DRother用224.0.0.5。
术语:
Router ID是一个32位的值,它唯一标识了一个自治系统内的路由器。企业网中的设备少则几台多则几十台甚至几百台,每台路由器都需要有一个唯一的ID用于标识自己。
Router ID是一个32位的无符号整数,其格式和IP地址的格式是一样的,Router ID选举规则如下:
- 手动配置OSPF路由器的Router ID(通常建议手动配置);
- 如果没有手动配置Router ID,则路由器使用Loopback接口中最大的IP地址作为Router ID;
- 如果没有配置Loopback接口,则路由器使用物理接口中最大的IP地址作为Router ID。
- OSPF的路由器Router ID重新配置后,可以通过重置OSPF进程来更新Router ID。
Router-ID 手工指定>活动loopback最大的地址>物理接口最大的。
邻接关系:
运行OSPF的路由器之间需要交换链路状态信息和路由信息,在交换这些信息之前路由器之间首先需要建立邻接关系。
邻居(Neighbor):
OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文用于发现邻居。收到Hello报文的OSPF路由器会检查报文中所定义的一些参数,如果双方的参数一致,就会彼此形成邻居关系。
邻接(Adjacency):
形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。只有当双方成功交换DD报文,并能交换LSA之后,才形成真正意义上的邻接关系。路由器在发送LSA之前必须先发现邻居并建立邻居关系。
1.2.4、OSPF基本配置
操作步骤:
1.执行命令system-view,进入系统视图。
2.执行命令ospf [ process-id ],配置OSPF进程
或者命令ospf [process id] [router-id ]既可以使能OSPF进程,还同时可以用于配置Router ID。在该命令中,router-id代表路由器的ID。
3.执行命令area area-id,进入OSPF区域视图。
4、执行命令network ip-address wildcard-mask [ description text ],配置区域所包含的网段。
wildcard-mask OSPF使用反掩码,相当于将IP地址的掩码反转(0变1,1变0)。例如0.0.0.255表示掩码长度24位。
description text OSPF指定网段的描述信息。
接口下配置OSPF:
1、执行命令interface interface-type interface-number,进入接口视图。
2、执行命令ospf enable [ process-id ] area area-id,在接口上使能OSPF。
配置接口的网络类型:
执行命令interface interface-type interface-number,进入运行OSPF的接口视图。
执行命令ospf network-type { broadcast | nbma | p2mp | p2p [ peer-ip-ignore ] },配置OSPF接口的网络类型。
缺省情况下,接口的网络类型根据物理接口而定。
以太网接口的网络类型为广播;
p2mp点到多点,一台路由通过交换机连接多台路由设备时。
串口和POS口(封装PPP协议或HDLC协议时)网络类型为P2P;
ATM和Frame-relay接口的网络类型为NBMA。
如果同一网段内只有两台路由器运行OSPF协议,建议将接口的网络类型改为P2P网络。
注意:反掩码中,“0”表示此位必须严格匹配,“1”表示该地址可以为任意值。
基本配置:
R1:
sys
sysname R1
interface GigabitEthernet0/0/1
ip address 10.0.12.1 255.255.255.248
#
interface GigabitEthernet0/0/2
ip address 10.0.13.1 255.255.255.248
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
interface LoopBack1
ip address 11.11.11.11 255.255.255.0q
R2:
sys
sysname R2
int loop 0
ip add 2.2.2.2 32
int g0/0/0
ip add 10.0.12.2 29
interface Serial0/0/2
link-protocol ppp
ip address 10.0.23.2 255.255.255.248
R3:
sys
sysname R3
int loop 0
ip add 3.3.3.3 32
int g0/0/0
ip add 10.0.13.3 29
int s0/0/2
ip add 10.0.23.3 29
q
Ospf配置
ospf 100 router-id 1.1.1.1
area 0.0.0.0
network 10.0.12.0 0.0.0.7
network 10.0.13.0 0.0.0.7
network 1.1.1.1 0.0.0.0
R2
ospf 100 router-id 2.2.2.2
area 0.0.0.0
network 10.0.12.0 0.0.0.7
network 2.2.2.2 0.0.0.0
network 10.0.23.0 0.0.0.7
R3
[R3]ospf 100 router-id 3.3.3.3
[R3-ospf-100]a 0
[R3-ospf-100-area-0.0.0.0]network 10.0.23.0 0.0.0.7 //正掩码10.0.23.0 255.255.255.248,反掩码255-248=7
[R3-ospf-100-area-0.0.0.0]network 10.0.13.0 0.0.0.7
[R3-ospf-100-area-0.0.0.0]network 3.3.3.3 0.0.0.0
Ping 2.2.2.2
查看配置命令:
<R1>dis curr | begin ospf
ospf 100 router-id 1.1.1.1
area 0.0.0.0
network 10.0.12.0 0.0.0.7
network 1.1.1.1 0.0.0.0
network 10.0.13.0 0.0.0.7
ospf建立邻接的信息:
Jan 17 2023 21:29:51-08:00 (ProcessId=100, NeighborAddress=10.0.12.2, Neighbor
Event=HelloReceived, NeighborPreviousState=Down, NeighborCurrentState=Init)
Jan 17 2023 21:29:51-08:00 (ProcessId=100, NeighborAddress=10.0.12.2, Neighbor
Event=2WayReceived, NeighborPreviousState=Init, NeighborCurrentState=2Way)
Jan 17 2023 21:29:51-08:00(ProcessId=100, NeighborAddress=10.0.12.2, Neighbor
Event=AdjOk?, NeighborPreviousState=2Way, NeighborCurrentState=ExStart)
Jan 17 2023 21:29:51-08:00 (ProcessId=100, NeighborAddress=10.0.12.2, Neighbor
Event=NegotiationDone, NeighborPreviousState=ExStart, NeighborCurrentState=Excha
nge)
Jan 17 2023 21:29:51-08:00 (ProcessId=100, NeighborAddress=10.0.12.2, Neighbor
Event=ExchangeDone, NeighborPreviousState=Exchange, NeighborCurrentState=Loading
)
Jan 17 2023 21:29:51-08:00 (ProcessId=100, NeighborAddress=10.0.12.2, Neighbor
Event=LoadingDone, NeighborPreviousState=Loading, NeighborCurrentState=Full)
1.2.5、OSPF三张表
1、邻居表
邻接关系:形成邻居关系后,如果两端设备成功交换DD报文和LSA,才建立邻接关系。
DR与BDR、DR与Drother、BDR与Drother之间都是FULL状态。
<R1>display ospf peer brief
OSPF Process 100 with Router ID 1.1.1.1
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet0/0/1 2.2.2.2 Full
0.0.0.0 GigabitEthernet0/0/2 3.3.3.3 Full
--------------------------------------------------------------------------
<R1>di ospf peer
OSPF Process 100 with Router ID 1.1.1.1
Neighbors
Area 0.0.0.0 interface 10.0.12.1(GigabitEthernet0/0/1)'s neighbors
Router ID: 2.2.2.2 Address: 10.0.12.2
State: Full Mode:Nbr is Master主 Priority优先级: 1
DR: 10.0.12.2 BDR: 10.0.12.1 MTU: 0 DR指定路由器和BDR备份路由器
Dead timer due in 36 sec
Retrans timer interval: 0
Neighbors
Area 0.0.0.0 interface 10.0.13.1(GigabitEthernet0/0/2)'s neighbors
Router ID: 3.3.3.3 Address: 10.0.13.3
State: Full Mode:Nbr is Master Priority: 1
DR: 10.0.13.3 BDR: 10.0.13.1 MTU: 0
Dead timer due in 37 sec
Retrans timer interval: 5
Master主、Slave是从
2、链路状态数据库LSDB(Link State Database Description)
LSDB(Link-State DataBase)链路状态数据库,同一区域的所有路由器LSDB相同。
包含有来自同一区域接收的所有链路状态通告数据包中的信息。路由器使用来自拓扑数据库中的信息,作为Dijkstra算法的输入,并通过该算法为每个网络计算出最短路径。
<R1>display ospf lsdb
OSPF Process 100 with Router ID 1.1.1.1
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 698 72 80000009 1562
Router 1.1.1.1 1.1.1.1 89 60 80000010 1
Router 3.3.3.3 3.3.3.3 93 72 80000012 1562
Network 10.0.13.1 1.1.1.1 89 32 80000002 0
Network 10.0.12.2 2.2.2.2 778 32 80000003 0
3、OSPF路由表
对LSDB应用SPF算法,选择到达目标地址的最佳路由放入路由表。
<R2>display ospf routing
OSPF Process 100 with Router ID 2.2.2.2
Routing Tables
Routing for Network
Destination Cost Type NextHop AdvRouter Area
2.2.2.2/32 0 Stub 2.2.2.2 2.2.2.2 0.0.0.0
10.0.12.0/29 1 Transit 10.0.12.2 2.2.2.2 0.0.0.0
10.0.23.0/29 1562 Stub 10.0.23.2 2.2.2.2 0.0.0.0
1.1.1.1/32 1 Stub 10.0.12.1 1.1.1.1 0.0.0.0
3.3.3.3/32 2 Stub 10.0.12.1 3.3.3.3 0.0.0.0
10.0.13.0/29 2 Transit 10.0.12.1 1.1.1.1
根据SPF算法从2.2.2.2–>10.0.12.13.3.3.3这条最优路径。
1.2.6、链路状态信息
链路信息主要包括:
- 链路的类型;
- 接口IP地址及掩码;
- 链路上所连接的邻居路由器;
- 链路的带宽(开销)。
每台运行OSPF协议的路由器所描述的信息中都应该包括链路的类型、接口IP地址及掩码、链路上的邻居、链路的开销等信息。
路由器只需要知道目的网络号/掩码、下一跳、开销(接口IP地址及掩码、链路上的邻居、链路的开销)即可,为什么要有链路的类型呢?
数据链路层协议类型多种多样,工作机制也各不相同。
为适配多种数据链路层协议,必须考虑各类链路层协议在组网时的应用场景。
1、网络类型:
1)、P2P网络:
- 仅两台路由互连。
- 支持广播、组播。
P2P网络的例子:两台通过PPP(Point-to-Point Protocol)链路相连的路由器网络。
2)、广播型网络
两台或两台以上的路由器通过共享介质互连。
支持广播、组播。
广播型网络支持两台及两台以上的设备接入同一共享链路且可以支持广播、组播报文的转发,是OSPF最常见的网络类型。
广播型网络的例子:通过以太网链路相连的路由器网络。
3)、NBMA网络
两台或两台以上路由器通过VC互连。
不支持广播、组播。
NBMA(non-broadcast multiple access)型网络的例子:通过全互连的帧中继链路相连的路由器网络。
4)、P2MP网络
多个点到点网络的集合。
支持广播、组播。
将一个非广播网络看成是一组P2P网络,这样的非广播网络便成为了一个点到多点(P2MP)网络。在P2MP网络上,每个路由器的OSPF邻居可以使用反向地址解析协议(Inverse ARP)来发现。P2MP可以看作是多个P2P的集合,P2MP可以支持广播、组播的转发。
没有一种链路层协议默认属于P2MP类型网络,也就是说必须是由其他的网络类型强制更改为P2MP。常见的做法是将非完全连接的帧中继或ATM改为P2MP的网络。
2、OSPF的度量方式
某接口cost=参考带宽/实际带宽。
更改cost的两种方式:
- 直接在接口下配置;
- 修改参考带宽(所有路由器都需要修改,确保选路一致性)。
- RTA到达192.168.3.0/24的“累计cost”=G1’s cost+G3’s cost
OSPF以“累计cost”为开销值,也就是流量从源网络到目的网络所经过所有路由器的出接口的cost总和,以RTA访问RTC Loopback 1接口192.168.3.3为例,其
cost=G1’s cost+G3’s cost。
从路由器出接口---->下一跳路由器出接口---->目的路由器IP的接口
cost的总和=计算去往目的地沿途数据层面出方向接口的总和
OSPF在计算接口的cost时,cost=参考带宽/实际带宽,默认参考带宽为100M。当计算结果有小数位时,只取整数位;结果小于1时,cost取1。
OSPF Cost = 10^8/BW (bps) =100M 参考带宽/接口的物理带宽
bps=bit/s 10^8就是100M=10010001000bit/s(bps)
由于cost值是100000000/bw带宽,通过计算100M和1000M都是近似值是1,没有什么区别。
调整接口cost值有两种方式:查看dis ospf routing
调整接口cost值 | 备注 |
---|---|
在接口直接调整 | int g0/0/1 |
ospf cost 1 //修改OSPF cost值为1 | |
修改参考带宽 | ospf 100 router-id 1.1.1.1 |
bandwidth-reference 1000 //修改参考带宽为1G 单位是Mbit/s |
1.2.7、OSPF协议报文类型及作用
Version Number:IPv4 版本2; IPv6 版本3
Type:1、Hello;2、DBD;3、LSR;4、LSU;5、LSAck。
Packet Length长度:
Router ID 手工指定
Area ID 区域号
Check-sum 校验和
Authentication type 明文或MD5
Data:网络掩码、IP、网络类型等等。
1、OSPF协议报文头部
RIP路由器之间是基于UDP 520的报文进行通信,OSPF也有其规定的通信标准。OSPF使用IP承载其报文,协议号为89。
- 在OSPF Packet部分,所有的OSPF报文均使用相同的OSPF报文头部:
- Version :对于当前所使用的OSPFv2,该字段的值为2。
- Type:OSPF报文类型。
- Packet length:表示整个OSPF报文的长度,单位是字节。
- Router ID:表示生成此报文的路由器的Router ID。
- Area ID:表示此报文需要被通告到的区域。
- Checksum:校验字段,其校验的范围是整个OSPF报文,包括OSPF报文头部。
- Auth Type:为0时表示不认证;为1时表示简单的明文密码认证;为2时表示加密(MD5)认证。
- Authentication:认证所需的信息。该字段的内容随AuType的值不同而不同。
2、OSPF报文类型
DD报文中包含LSA头部信息,包括LS Type、LS ID、Advertising Router 、LS Sequence Number、LS Checksum。
LSR中包含LS Type 、LS ID和Advertising Router 。
LSU中包含完整的LSA信息。
LSAck中包含LSA头部信息,包括LS Type、LS ID、Advertising Router、LS Sequence Number、LS Checksum。
Hello报文
hello数据包和链路状态通告(LSA)共同用于建立维护拓扑数据库。hello数据包使用的是组播地址224.0.0.5。
- Hello Intervals:10S/30S
- Dead Interval:4*Hello =40S
OSPF的邻居发现过程是基于Hello报文来实现的,Hello报文中的重要字段解释如下:
1)、Network Mask:发送Hello报文的接口的网络掩码。
2)、HelloInterval:发送Hello报文的时间间隔,单位为秒。
3)、Options:标识发送此报文的OSPF路由器所支持的可选功能。具体的可选功能已超出这里的讨论范围。
4)、Router Priority:发送Hello报文的接口的Router Priority,用于选举DR和BDR。
5)、Router Dead Interval:失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效;单位为秒,通常为四倍HelloInterval。
6)、Designated Router设置为0.0.0.0,表示未选举DR路由器。
7)、Backup Designated Router:发送Hello报文的路由器所选举出的:发送Hello报文的路由器所选举出的DR的IP地址。如果BDR的IP地址。如果设置为0.0.0.0,表示未选举BDR。
8)、Neighbor:邻居的Router ID列表,表示本路由器已经从这些邻居收到了合法的Hello报文。
验证一个接收到的Hello报文是否合法包括: - 如果接收端口的网络类型是广播型,点到多点或者NBMA,所接收的Hello报文中Network Mask字段必须和接收端口的网络掩码一致,如果接收端口的网络类型为点到点类型或者是虚连接,则不检查Network Mask字段;
- 所接收的Hello报文中Hello Interval字段时间间隔必须和接收端口的配置一致;
- 所接收的Hello报文中Router Dead Interval字段失效时间必须和接收端口的配置一致;
- 所接收的Hello报文中Options字段中的E-bit(表示是否接收外部路由信息)必须和相关区域的配置一致。
OSPFv2中Option字段
在OSPFv2的Option中,各字段功能如下:
DN:用于防止环路
O:支持Opaque LSA
DC:为虚链路使用
EA:表示该路由器为ASBR
N/P:用于表示该路由为7类LSA,用于7类LSA和5类LSA的转化,NSSA使用
MC:用于组播相关
E:允许泛洪AS-External LSA
MT:表示是否支持多拓扑OSPF
DD报文
在此状态下发送的DD报文不包含链路状态描述。当RTA的邻居状态变为ExStart后,RTA会发送第一个DD报文。此报文中,DD序列号被随机设置为X,
I-bit设置为1,表示这是第一个DD报文;
M-bit设置为1,表示后续还有DD报文要发送;
MS-bit设置为1,表示RTA宣告自己为Master。主/从位(Master/slave bit) 如果始发路由器是Master,则该位置1 。
LSR报文
包含LS Type 、LS ID和Advertising Router 。
LSU报文
完整的LSA信息。
LSAck报文
包含LSA头部信息,包括LS Type、LS ID、Advertising Router、LS Sequence Number、LS Checksum。
1.2.8、影响OSPF建立邻居的条件
1.router id
- 同一个区域相邻的设备router-id不能相同
- 同一个区域不相邻的设备,router-id可以相同,但是会影响路由的接收
- 不同的区域,不相邻的设备,router-id可以相同,也不会影响路由的接收。
2、区域ID
直连的接口区域ID一定要相同
3、掩码
- 默认情况下以太链路(网络类型为broadcast)掩码长度必须相同
- 默认情况下串行链路掩码长度可以不同或者(网络类型为P2P链路掩码长度可以不同)
- 网络类型P2MP,掩码长度必须相同,(也可以不相同,但是必须通过OSPF P2MP-netmask-ignore忽略对网络掩码的检查)
interface Serial4/0/1
ospf network-type p2mp //修改OSPF网络类型为P2MP
ospf p2mp-mask-ignore //忽略对网络掩码的检查
4.hello 及dead time 必须相同
不同的OSPF的网络类型hello time 和dead time时间不一样。
- 默认情况下,dead time 是hello时间的4倍
- 当修改hello time,dead time会自动发生变化
- 如果只修改dead time,hello time不会自动发生变化
interface Serial4/0/1
ospf timer hello 15 //修改hello时间15s
相邻邻居失效的时间
ospf timer dead 45 //修改dead 时间45s
5.认证
帐号密码要相同。
6.option 选项 E/N位
E:允许泛洪AS-External LSA,ospf 3的N位。
7.MTU值 DD报文
华为设备默认是不检测MTU的,可以通过命令配置检测MTU(思科设备默认是检测MTU)。
如果从设备的MTU小于主设备的MTU,两端都会卡在Estart状态。
[AR1]int g0/0/0
[AR1-GigabitEthernet0/0/0]ospf mtu-enable //开启MTU检测
8.silent-interface 禁止接收和发送OSPF报文
一般配置在连接终端的接口,不会影响路由的通告, 注意:千万不要配置在路由器之间相连的接口。
ospf 1 router-id 11.1.1.1
silent-interface all //所有使能OSPF的接口都会被变成静默接口
undo silent-interface Serial4/0/1 //排除S4/0/1接口
交换机
ospf 1 router-id 11.1.1.1
silent-interface Vlanif15
9.过滤 OSPF报文
acl number 3000
rule 10 deny ip
interface Serial4/0/1
traffic-filter inbound acl 3000 //接口调用ACL
10.NBMA
单播指定邻居
1.2.9、LSDB同步过程
状态含义:
-
ExStart准启动状态:邻居状态变成此状态以后,路由器开始向邻居发送DD报文。Master/Slave关系是在此状态下形成的,初始DD序列号也是在此状态下确定的。在此状态下发送的DD报文不包含链路状态描述。
-
Exchange交换状态交换目录:在此状态下,路由器与邻居之间相互发送包含链路状态信息摘要的DD报文。
-
Loading加载状态(同步数据库):在此状态下,路由器与邻居之间相互发送LSR报文、LSU报文、LSAck报文。
LSDB同步过程如下: -
RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2并且二者已建立了邻居关系。当RTA的邻居状态变为ExStart准启动状态后,RTA会发送第一个DD报文。此报文中,DD序列号被随机设置为X,I-bit设置为1,表示这是第一个DD报文,M-bit设置为1,表示后续还有DD报文要发送,MS-bit设置为1,表示RTA宣告自己为Master。
-
当RTB的邻居状态变为ExStart后,RTB会发送第一个DD报文。此报文中,DD序列号被随机设置为Y(I-bit=1,M-bit=1,MS-bit=1,含义同上)。由于RTB的Router ID较大,所以RTB将成为真正的Master。收到此报文后,RTA会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange。
Exstart State准启动状态–>Exstchange State交换状态交换目录。
当RTA的邻居状态变为Exchange后,RTA会发送一个新的DD报文,此报文中包含了LSDB的摘要信息,序列号设置为RTB在步骤2中使用的序列号Y,I-bit=0,表示这不是第一个DD报文,M-bit=0,表示这是最后一个包含LSDB摘要信息的DD报文,MS-bit=0,表示RTA宣告自己为Slave。收到此报文后,RTB会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange。
当RTB的邻居状态变为Exchange后,RTB会发送一个新的DD报文,此报文包含了LSDB的摘要信息,DD序列号设置为Y+1, MS-bit=1,表示RTB宣告自己为Master。
虽然RTA不需要发送新的包含LSDB摘要信息的DD报文,但是作为Slave,RTA需要对Master发送的每一个DD报文进行确认。所以,RTA向RTB发送一个新的DD报文,序列号为Y+1,该报文内容为空。发送完此报文后,RTA产生一个Exchange-Done事件,将邻居状态变为Loading。RTB收到此报文后,会将邻居状态变为Full(假设RTB的LSDB是最新最全的,不需要向RTA请求更新)。
Loading加载状态
LSR用于向对方请求所需的LSA。
LSU用于向对方发送其所需要的LSA。
LSACK用于向对方发送收到LSA的确认。
1.2.10、DR与BDR作用
MA网络中的问题
n×(n−1)/2个邻接关系,管理复杂。
重复的LSA泛洪,造成资源浪费。
邻居间LSA的泛洪扩散混乱,相同的LSA会被复制多份,如RTA向其邻居RTB、RTC、RTD分别发送一份自己的LSA,RTB与RTC、RTC与RTD、RTB与RTD之间也会形成邻居关系,也会发送RTA的LSA。
这样的工作效率显然是很低的,消耗资源的。作为高级的路由协议,OSPF是怎样解决这些问题的呢?
1.2.10.1、DR与BDR的作用
DR(Designated Router)即指定路由器,其负责在MA网络建立和维护邻接关系并负责LSA的同步。
DR与其他所有路由器形成邻接关系并交换链路状态信息,其他路由器之间不直接交换链路状态信息。这样就大大减少了MA网络中的邻接关系数量及交换链路状态信息消耗的资源。
DR一旦出现故障,其与其他路由器之间的邻接关系将全部失效,链路状态数据库也无法同步。此时就需要重新选举DR,再与非DR路由器建立邻接关系,完成LSA的同步。为了规避单点故障风险,通过选举备份指定路由器BDR,在DR失效时快速接管DR的工作。
- 减少邻接关系。
- 降低OSPF协议流量。
在MA网络中,才会涉及DR和BDR的选举,建议使用广播(更推荐)。
每一个含有至少两个路由器的广播型网络和NBMA网络都有一个DR和BDR。
一个既不是DR也不是BDR的路由器只与DR和BDR形成邻接关系并交换链路状态信息以及路由信息,这样就大大减少了大型广播型网络和NBMA网络中的邻接关系数量。在本例中,所有路由器之间有6个邻接关系。当指定了DR后,所有的路由器都与DR建立起邻接关系,DR成为该广播网络上的中心点。
BDR在DR发生故障时接管业务,一个广播网络上所有路由器都必须同BDR建立邻接关系。本例中使用DR和BDR将邻接关系从6减少到了5,RTA和RTB都只需要同DR和BDR建立邻接关系,RTA和RTB之间建立的是邻居关系。
此例中,邻接关系数量的减少效果并不明显。但是,当网络上部署了大量路由器时,比如100台,那么情况就大不一样了。
伪节点
是一个虚拟设备节点,其功能需要某台路由器来承载。
1.2.10.2、DR&BDR选举:
选举规则:DR/BDR的选举是基于接口的。DR和BDR是指设备的物理口,而不是指路由器。
- 接口的DR优先级越大越优先。接口优先级。
- 接口的DR优先级相等时,Router ID越大越优先
在邻居发现完成之后,路由器会根据网段类型进行DR选举。在广播和NBMA网络上,路由器会根据参与选举的每个接口的优先级进行DR选举。优先级取值范围为0-255,值越高越优先。缺省情况下,接口优先级为1。如果一个接口优先级为0,那么该接口将不会参与DR或者BDR的选举。如果优先级相同时,则比较Router ID,值越大越优先被选举为DR。
为了给DR做备份,每个广播和NBMA网络上还要选举一个BDR。BDR也会与网络上所有的路由器建立邻接关系。
为了维护网络上邻接关系的稳定性,如果网络中已经存在DR和BDR,则新添加RTD进该网络的路由器不会成为DR和BDR,不管该路由器的Router Priority是否最大。
- 如果当前DR发生故障,则当前BDR自动成为新的DR,网络中重新选举BDR;
- 如果当前BDR发生故障,则DR不变,重新选举BDR。
配置接口的OSPF优先级
[RouterA]int g0/0/0
[RouterA 1-GigabitEthernet0/0/0]ospf dr-priority 100
[R1-GigabitEthernet0/0/0]q
[RouterB] interface gigabitethernet 1/0/0
[RouterB-GigabitEthernet1/0/0] ospf dr-priority 0
[RouterA]reset ospf process //清除OSPF 1进程
< RouterB >reset ospf 1 process //清除OSPF 1进程
<R3>reset ospf 100 process
[RouterD] dis ospf peer查看DR 及BDR
[RouterD] display ospf peer
OSPF Process 1 with Router ID 4.4.4.4
Neighbors
Area 0.0.0.0 interface 192.168.1.4(GigabitEthernet1/0/0)'s neighbors
Router ID: 1.1.1.1 Address: 192.168.1.1
State: Full Mode:Nbr is Slave邻居是从路由器 Priority: 100
DR: 192.168.1.1 BDR: 192.168.1.3 MTU: 0
Dead timer due in 35 sec
Retrans timer interval: 5
Neighbor is up for 00:07:19
Authentication Sequence: [ 0 ]
Router ID: 2.2.2.2 Address: 192.168.1.2
State: 2-Way Mode:Nbr is Master邻居是主路由器 Priority: 0
DR: 192.168.1.1 BDR: 192.168.1.3 MTU: 0
Dead timer due in 35 sec
Retrans timer interval: 5
Neighbor is up for 00:07:19
Authentication Sequence: [ 0 ]
Router ID: 3.3.3.3 Address: 192.168.1.3
State: Full Mode:Nbr is Slave邻居是从路由器 Priority: 2
DR: 192.168.1.1 BDR: 192.168.1.3 MTU: 0
Dead timer due in 37 sec
Retrans timer interval: 5
Neighbor is up for 00:07:17
Authentication Sequence: [ 0 ]
总结:
-
选举规则 : 在选举期内 two- - way 40s
-
DR/BDR的选举是基于接口的,而不是基于路由器。
-
在2way阶段选举接口的DR优先级越大越优先。
-
优先级0-255接口的DR优先级相等时,Router ID越大越优先。
-
接口优先级为0时不可以被选举为DR
-
DR不能抢占
-
DR失效,则BDR成为DR。
DR 指定路由器
BDR 备份指定路由器 为了防止DR挂掉,起到备份作用。当DR挂掉时候,BDR成为DR
DRother 普通路由器
DR和所有的路由器建立邻接关系
注意:
建议使用广播(更推荐),点对点不选DR。
p2p点到点<---->p2mp点到多点,不影响装载路由。
网络类型 | Hello时间 | 选举DR/BDR | 建立邻居方式 |
---|---|---|---|
P2P点到点 | 10秒 | 否 | 自动 |
P2MP点到多点 | 30秒 | 否 | 自动 |
broadcast广播型网络宽 | 10秒 | 是 | 自动 |
NBMA网络 | 30秒 | 是 | 手工单播发现邻居 |
Int g0/0/1
ospf network- type broadcast
OSPF特征:
- 链路状态协议
- 基于IP协议,协议号 89
- 等价负载多路径协议(负载均衡)
- 多区域配置
- 所有的路由器使用组播地址224.0.0.5 还有224.0.0.6 – DR
- 或单播地址
- 安全措施:认证