优点
- 支持触发更新:能够快速检测并通告自治系统内的拓扑变化
- 区域划分:区域内部的路由器使用SPF最短路径算法保证了区域内部的无环路。
- 路由分级:路由有不同的级别有不同的功能
- 支持验证:OSPF路由器之间的报文可以配置成必须经过认证才能进行交换
- 组播发送:效率高
OSPF特性
- 管理性距离:110
- OSPF采用SPF算法计算达到目的地的最短路径
- OSPF报文封装在IP报文头部,协议号为89。
- 指派路由器(DR)和备份指派路由器(BDR)
DR和BDR选举
- Hello报文通过IP组播发送
- 选举可以减少网络之间的流量
- 相同优先级的情况使用Router-ID比较大小来决定
- 最高OSPF优先级的路由器被选为DR,次高OSPF优先级的路由器被选为BDR
- DR选举是非抢占
- 在多路访问网络上可能存在多个路由器,为了避免路由器之间建立完全相邻关系而引起的大量开销,OSPF要求在区域中选举一个DR。每个路由器都与之建立完全相邻关系。DR负责收集所有的链路状态信息,并发布给其他路由器。选举DR的同时也选举出一个BDR,在DR失效的时候,BDR担负起DR的职责。
OSPF的三张表
邻居列表(neighbor table)
列出每台路由器全部已经建立邻接关系的邻居路由器
链路状态数据库(topology table)
列出网络中其他路由器的信息,由此显示了全网的网络拓扑
OSPF路由表(routing table)
列出通过SPF算法计算出到达每个相连网络的最佳路径
OSPF的网络类型
点到点型
- Point-to-point(P2P)型网络,是指该接口通过点到点的方式与一台路由器相连。
- 此类型网络不需要进行OSPF的DR、BDR选举。
- 当链路层协议是PPP或HDLC时,OSPF缺省认为网络类型是P2P。
- 在此类型的网络中,OSPF以组播方式(224.0.0.5)发送协议报文。
广播多路访问型
- Broadcast multiAccess网络,网络本身支持广播功能,通常运行在LAN环境。
- 当链路层协议是Ethernet、FDDI时,OSPF缺省认为网络类型是广播型。
- 此类型网络需要进行OSPF的DR、BDR选举。
- 所有相邻路由器仅和DR,BDR形成FULL的邻接关系
- 给DR和BDR发送的报文使用组播224.0.0.6
- 从DR发送到其他路由器的报文使用组播地址224.0.0.5
非广播多路访问型
- NBMA(Non-BroadcastMultipleAccess)型网络,虽然从一个接口可以到达多个目的节点,但是网络本身不支持广播功能。
- 当链路层协议是帧中继、ATM或X.25时,OSPF缺省认为网络类型是NBMA。
- 此时OSPF的邻居需要管理员手工指定。
- 在该类型的网络中,以单播方式发送协议报文。
点到多点型(Point-to-MultiPoint)
- 不需要DR选举,只能使用一个子网
- Hello每30秒
- 必须静态针对邻居
- P2MP型网络比较特殊,没有一种链路层协议会被缺省地认为是点到多点类型。
- 点到多点必须是由其他网络类型强制更改而来。常用做法是将NBMA改为点到多点的网络。
- 在该类型的网络中,缺省情况下以组播方式(224.0.0.5)发送协议报文,也可以根据用户需要,以单播形式发送协议报文。
OSPF报文种类
Hello报文
用于发现,建立和维护邻居关系
- Network Mask:发送该报文接口所在网段掩码
- Hello Interval [sec]:hello 周期发送时间
- Options:选项位,用于支持不同的功能
DN:Down
E:External Routing:如果置位表示支持 5 类 LSA
N:NSSA Routing:如果置位表示支持 7 类 LSA - Router Priority:路由器优先级,用于竞选 DR/BDR,缺省为 1
- Router Dead Interval [sec]:hello 的失效时间=4*hello 时间
- Designated Router:DR 路由器,使用 Router-id 标识
- Backup Designated Router:BDR 路由器,使用 Router-id 标识
- Active Neighbor:活跃的邻居列表,使用 Router-id 标识
DBD(Database Description)链路状态数据库描述信息
描述LSDB中LSA头部信息
- Interface MTU:0
- Options:选项置位
- DB Description:DD 报文描述置位
(I) Init:如果置位表示是第一个 DD 报文
(M) More:如果置位表示后续还有带有 LSA 摘要信息的 DD 报文
(MS) Master:如果置位表示发送该 DD 报文的是 Master - DD Sequence:DD 报文序列号,用于标识 DD 报文,只有 Master 产生序列号,每发送一次加 1
LSR(Link State Request)链路状态请求
用于请求响应的 LSA,包含有要请求的 LSA 的三要素
LSU(Link State Update)链路状态更新
包含一条或多条LSA)
用于向邻居更新请求的 LSA,含有真正的 LSA
LSACK(Link State Ack) 报文
用于对收到的 LSA 做确认,只包含 LSA 的摘要信息
OSPF邻居的有限状态机
Down
在DOWN状态下,OSPF接口仍然有尝试发现邻居的意愿,因此会不断的发送组播hello包。
Attempt
只存在于NBMA网络中,当一台设备试图联系自己邻居时,没有收到回应报文时,就会将邻居状态设置为Attempt,在Attempt状态下,路由器将使用hellointerval时间代替pollinterval的时间来作为向邻居发送hello数据包的时间间隔。
init
i表示一台路由器收到另一台路由器的hello报文,但是报文中的邻居表里没有自己的RouterID
Two-way
表示一台路由器收到另一台路由器的hello报文,报文的邻居表中有自己的RouterID
该状态是OSPF邻居之间可以具有的最基本的关系,也是第一个稳态,但是此时两者还不能共享路由信息。
Exstart
一台OSPF路由器在将某个邻居置为2way状态后,就开始发送空的DBD包,用于协商master/slave。这个就是ex-start状态。两台router间用空的BDB 分组确定master和slave关系(注意不是DR和BDR)
在DBD包中有3个标记位用来管理邻接关系的建立过程:
- I位 或称为初始位(initial bit) 用于ex-start协商主从关系的初始化协商的DBD包,该位置1
- M位 或称为后继位(More bit) 如果这不是OSPFrouter发送的最后一个DBD,该位置1
- MS位 或称为主/从位(Master/slave bit) 如果始发路由器是Master,则该位置1
如果某台OSPF router收到邻居发来的DBD,I位也就是init位置0,则意味着ex-start状态结束,并且MS/slave已经选出来了,那么该路由器会将邻居置为exchange状态,开始用包含LSA头部的DBD交换各自的LSBD。
Exchange
双方使用包含自己LSA头部的DBD报文进行交互,并且将对方发过来的LSA头部、并且自己感兴趣的LSA(或自己没有的LSA)存储在一个本地OSPF接口的队列里,以便在下一个阶段进行LSA详细信息的请求。当某个OSPF接口收到邻居发来的DBD,M位置0,则表示对方已经发完DBD了,与此同时,如果该路由器的这个OSPF接口上存在待请求的LSA,那么它会将这个邻居置为loading状态。
Loading
对方的LSA摘要和自己的LSDB比较后,发现LSA摘要中存在LSDB中没有的,需要更新
Full
收到的LSA摘要和自己的LSDB表一致,不需要进行更新
OSPF路由器类型
区域内路由器
区域内路由器(Internal Routers):该设备的所有端口都属于同一个ospf区域。
区域边界路由器ABR
区域边界路由器ABR(Area Border Routers):改路由器可以连接两个以上区域,但必须有一个端口连接骨干路由器。用于连接骨干与非骨干路由器。
骨干路由器
骨干路由器(Backbone Routers):至少一个接口属于骨干区域,ABR和位于Area0 的路由器都属于骨干路由器。
自治系统边界路由器ASBR
自治系统边界路由器ASBR(AS Boundary Routers) 连接不同的AS或其他的IGP协议
OSPF LSA类型详解
LSA1 路由器LSA(Router LSA)
由区域内所有路由器产生,并且只能在本个区域内泛洪广播。
这些最基本的LSA通告列出了路由器所有的链路和接口,并指明了它们的状态和沿每条链路方向出站的代价。
LSA传播范围:本域内传递
LSA通告路由器:本路由器的Router ID
LSA链路状态ID:本路由器的Router ID
LSA包含的内容:本路由器的直连邻居,以及直连接口的信息
LSA2 网络LSA(Network LSA)
必须在BMA网络和NBMA网络区域内的DR或BDR路由器产生,报文包括DR和BDR连接的路由器的链路信息。
网络LSA也仅仅在产生这条网络LSA的区域内部进行泛洪。
LSA传播范围:本域(存在以太网络连接的域)内传递
LSA通告路由器:DR的Router ID
LSA链路状态ID:DR的接口IP
LSA包含的内容:BMA网络中的路由器以及本网的掩码信息和DR路由器本身的Router ID
LSA3 网络汇总LSA(Network summary LSA)
由ABR产生,可以通知本区域内的路由器通往区域外的路由信息。
在一个区域外部但是仍然在一个OSPF自治系统内部的缺省路由也可以通过这种LSA来通告。
如果一台ABR路由器经过骨干区域从其他的ABR路由器收到多条网络汇总LSA,那么这台始发的ABR路由器将
会选择这些LSA通告中代价最低的LSA,并且将这个LSA的最低代价通告给与它相连的非骨干区域。
LSA传播范围:域间路由,能泛洪到整个AS中,始发路由器除外。
LSA通告路由器:ABR的Router ID(经过一个ABR,就会改为这个ABR的Router ID)
LSA链路状态ID:网络号
LSA包含的内容:本区域中的路由信息,包括网络号和掩码
LSA4 ASBR汇总LSA(ASBR summary LSA)
也是由ABR产生,但是它是一条主机路由,指向ASBR路由器地址的路由。
LSA传播范围:泛洪到整个AS中,(把ASBR的Router ID传播到其他区域,让其他区域的路由器得知ASBR的位置。)
LSA通告路由器:ABR的Router ID(经过一个ABR,就会改为这个ABR的Router ID)
LSA链路状态ID:ASBR的Router ID
LSA包含的内容:本区域中的路由信息,包括网络号和掩码
注意:在ASBR直连的区域内,不会产生4类的LSA,因为ASBR会发出1类的LSA,其中会指明自己是ASBR。
LSA5 自治系统外部LSA(Autonomous system external LSA)
由ASBR产生,告诉相同自治区的路由器通往外部自治区的路径。
自治系统外部LSA是惟一不和具体的区域相关联的LSA通告,将在整个自治系统中进行泛洪。
LSA传播范围:域外路由,不属于某个区域,一个LSA即是一条路由信息
LSA通告路由器:ASBR的Router ID,通告路由器不会发生改变
LSA链路状态ID:网络号
LSA包含的内容:将外部自治系统传递进来,包含着域外的路由信息
LSA7 NSSA外部LSA(NSSA External LSA)
由ASBR产生,几乎和LSA 5通告是相同的,但NSSA外部LSA通告仅仅在始发这个NSSA外部LSA通告的非纯末梢区域内部进行泛洪。
在NSSA区域中,当有一个路由器是ASBR时,不得不产生LSA 5报文,但是NSSA中不能有LSA 5报文,所有ASBR产生LSA 7报文,发给本区域的路由器。
查看LSA类型
show ip ospf database summary
OSPF建立邻居的必要条件
- ospf的区域号必须一致,区域类型(stub)必须一致
- 计时器必须一致
- 认证必须一致
- IP地址必须前缀和掩码一致(lan环境,P2P环境对掩码没有要求)
- 接口MTU一致(会卡在exstart,可使用ip ospf mtu-ignore忽略这个问题)
- 网络类型一致(不一致即使建立邻居也无法获得路由)
- RID必须域唯一
- 在广播链路不可以双方优先级都为0
OSPF路由种类
OSPF路由类型 | 描述 | |
---|---|---|
O | OSPF区域内部 router LSA和network LSA |
|
O|A | OSPF内部区域间 summary LSA |
|
O E1 | 类型一外部路由 cost可以累加 |
|
O E2 | 类型一外部路由 默认cost20 |
OE1,OE2 区别:
OE2:默认选项,metric始终为20,不累加,5型lsa学来的路由,metric值始终是20
OE1:metric值累加,适用于由两个ASBR到达同一个非ospf自制系统的网络
注:当有多个ASBR到达外部自制系统时候,建议使用OE1
修改路由类型
在ASBR上
router ospf 110
redistribute eigrp 90 subnet metric-type 1
将metric的类型改为OE1
区域划分
标准区域
默认的区域类型,接收链路更新路由汇总外部路由等
骨干区域
也叫中转区域,其他区域都与之相连.
末节区域(stub)
- 不接受AS外部的LSA信息,也就是不接受4类和5类LSA
- 只接受区域间类LSA和本区域内LSA,
- ABR会过滤4和5类LSA的流量,会以3类LSA的形式向内部产生一条默认路由,发往stub
- 在末节区域里不能有ASBR(否则就会出现5类LSA了).不接受5类LSA意味着末节区域路由器的路由表里不会出现E1或者E2类型路由.
完全末节区域(totolly stub):
- CISCO专有的,在末节区域基础上的加强版
- 不但不接受5类LSA.更不接受3类 4类的汇总LSA.
- 因此绝对末节区域里的路由表将不会有O IA E1 E2类型路由.
- 完全末节区域同样不能有ASBR
- 所有路由器必须被配置为stub
- ABR必须被配置为完全末节
次末节区域(NSSA区域)
- 这类是末节区域的一种变态扩展,它容许末节里出现了ASBR,
- 因而在此区域里出现了独特的7类NSSA LSA.
- NSSA的ABR上执行7转5(对7类的且设置了P位=1的LSA),执行7转5的ABR变成很特殊的ABR/ASBR混合体
- 这个路由器上存在5类,注意5类是和区域无关的.
- NSSA与末节区域的最大区别在于,NSSA区域可以允许自身将外部路由重分布进OSPF,而末节区域则不可以。
Totally NSSA(完全NSSA区域):Totally Not-So-Stubby Area
- Totally NSSA与NSSA的区别在于,NSSA区域可以允许其它OSPF区域的路由(Inter-Area Route)进入,而Totally NSSA区域却不可以,但Totally NSSA区域的ABR会自动向Totally NSSA区域内发送一条指向自己的默认路由。
- 过滤3,4,5类lsa,ABR会产生缺省的3类lsa,该区域能引入外部路由
- 7类LSA在这里还是7类LSA,出本area后就变成5类而传播了
成为末节区域的标准:
- 所有末节区域内的路由都必须被配置为末节区域路由器,否则在hello报文里的末节区域标志将不匹配从而无法建立邻居关系.
- 末节区域内不能存在虚链路
- 末节区域不能存在ASBR
- 末节区域只能存在1个区域出口或存在多个区域出口但不需要选择最佳路径.默认类型下路由器对到外部AS的路由不考虑在OSPF内的开销(E2类型),所以这时会无法选择最佳路径.
配置OSPF
虚链路
在ospf中非骨干区域需要跟骨干区域相连,不然不能通讯,但是骨干区域接口有限,没有跟骨干区域相连的只有通过设置虚链路才可建立通讯。
R2(config)#router ospf 1 //进入ospf进程1
R2(config-router)#area 1 virtual-link ip-address //设置虚链路连接到R3
路由汇总
域外汇总
R2(config)#router ospf 100
R2(config-router)#summary-address 172.16.0.0 255.255.0.0
- ASBR上做;
- COST继承明细最小;
-明细最后一条消失,汇总路由才会消失; - 本地会生成一条指向NULL0的路由,防环;
- 汇总路由将抑制明细路由。
区域汇总
在ABR上配置总
R2(config)#router ospf 100
R2(config-router)#area 1 range 172.16.0.0 255.255.0.0
- 区域的所有ABR上做;
- 汇总路由的COST可手动修改,默认继承明细最小;
- 明细最后一条消失,汇总路由才会消失;
- 本地会生成一条指向NULL0的路由,防环;
- 汇总路由将抑制明细路由。
配置认证
区域简单口令认证
R1(config)#router ospf 1
R1(config-router)#area 0 authentication
R1(config)#int s0/0
R1(config-if)#ip ospf authentication-key cisco
R2(config)#router ospf 1
R2(config-router)#area 0 authentication
R2(config)#int s0/0
R2(config-if)#ip ospf authentication-key cisco
区域MD5认证
R1(config)#router ospf 1
R1(config-router)#area 0 authentication message-digest
R1(config)#int s0/0
R1(config-if)#ip ospf message-digest-key cisco
R2(config)#router ospf 1
R2(config-router)#area 0 authentication message-digest
R2(config)#int s0/0
R2(config-if)#ip ospf message-digest-key cisco
接口简单口令认证
R1(config)#int s0/0
R1(config-if)#ip ospf authentication
R1(config-if)#ip ospf authentication-key cisco
R2(config)#int s0/0
R2(config-if)#ip ospf authentication
R2(config-if)#ip ospf authentication-key cisco
接口MD5认证
R1(config)#int s0/0
R1(config-if)#ip ospf authentication message-digest
R1(config-if)#ip ospf message-digest-key cisco
R2(config)#int s0/0
R2(config-if)#ip ospf authentication message-digest
R2(config-if)#ip ospf message-digest-key cisco
单区域OSPF
R1(config)#router ospf 1 //启动OSPF进程 ,1是进程ID
R1(config-router)#router-id 1.1.1.1 //配置路由器ID
R1(config-router)#network 172.16.1.0 0.0.0.255 area 0 //通告直连网络
R1(config-router)#network 172.16.1.0 255.255.255.0 area 0 //通告直连网络
默认路由再发布
R1(config)#ip route 0.0.0.0 0.0.0.0 loopback 1 //添加静态默认路由
R1(config)#router ospf 1
R1(config-router)#default-information originate //再发布默认路由
EIGRP重分布
R2(config)#router ospf router-id
R2(config-router)#redistribute eigrp rigrp-id subnets
- OSPF路由进程ID的范围在1-65535之间,而且只有本地含义,不同路由器的路由进程ID可以不同。如果要想启动OSPF路由进程,至少确保有一个接口是up的。同一台路由器上可以启动多个OSPF进程,但会消耗更多的CPU
- 区域ID是0-4294967295的数,也可以是IP地址的格式A.B.C.D。当网络区域为0或0.0.0.0时称为主干区域。
- Router ID选择遵循如下顺序:
1.最优先的是在OSPF进程中使用“router-id”指定了RID;
2.如果没有在OSPF进程中指定RID,则选择IP地址最大的环回接口的IP地址为RID;
3.如果没有环回接口,则选择活动的IP地址最大的物理接口的IP地址为RID。
①如果使用“secondary”配置IP地址时,该地址不起作用,即不参与RID竞选;
②使用“router-id”后,应使用命令“clear ip ospf process”重置ospf进程,新配置的RID才能生效;
③2、3步只有在下次重启路由器时才会生效,即后来加入大的IP地址也不能选举为RID直到路由器重启。
查看测试
查看邻居表
Switch#sh ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
2.2.2.2 1 EXSTART/DR 00:00:34 192.168.1.2 FastEthernet0/1
查看拓扑结构库
Switch#show ip ospf database
OSPF Router with ID (2.2.2.2) (Process ID 1)
Router Link States (Area 0)
Link ID ADV Router Age Seq# Checksum Link count
2.2.2.2 2.2.2.2 201 0x80000007 0x004bfd 2
1.1.1.1 1.1.1.1 201 0x80000004 0x00a685 3
Net Link States (Area 0)
Link ID ADV Router Age Seq# Checksum
192.168.1.2 2.2.2.2 201 0x80000001 0x002c3f
查看运行OSPF接口的信息
show ip ospf interface
查看OSPF路由表命令
show ip route ospf router-id
Switch#show ip route ospf 1
10.0.0.0/24 is subnetted, 2 subnets
O 10.1.2.0 [110/2] via 192.168.1.1, 00:11:25, FastEthernet0/1
20.0.0.0/32 is subnetted, 1 subnets
O 20.1.1.1 [110/2] via 192.168.1.1, 00:11:25, FastEthernet0/1