简介
- OSPF(开放式最短路由优先协议)
- IGP
- LS 发送的是LSA(链路状态通告Link Status Advertisement),包含的是拓扑信息。加入LSDB,用SPF计算出Routing Table
- VLSM/CIDR
- 四层协议 三层报头中的上层协议号为89
- 7中邻接关系
- 7中LSA
- 5中报文
- 3张表
- 邻居表(邻接数据库)
- 拓扑表(LSDB)
- 路由表(转发数据库)
链路状态协议特点
- 链路状态路由协议比距离矢量路由协议更加了解网络拓扑
- 每台路由器都会保存同一区域的拓扑
- 不会产生环路
OSPF区域
- 两个层次
- 骨干区域(area 0),或者叫传输区域
- 非骨干区域
- 减少路由表表项
- OSPF中没有自动汇总的概念,因为OSPF中传递的是LSA,而不是路由条目。
- 不能进行域内汇总,只能进行域间汇总和域外汇总。
- 将拓扑变更的影响限制在一个区域内
- 特定LSA泛洪停止在域边界上,不同类型的LSA有不同的传递性
名词
骨干路由
backbone routers
ABR
area border router
区域边界路由器
将其他区域连接到area 0
OSPF邻接关系
在OSFP中,对邻居关系(Neighbor)和邻接关系(Adjacency)严格区分。
邻居关系是指三层直连,邻接是指7层FULL邻接关系。
- P2P WAN
- LAN
- 邻居与DR和BDR形成FULL邻接关系
- DROTHER之间形成two-way state
- 只有当邻接关系建立起来了,才能交换LSA,并同步LSDB。
- LSA是泛洪的。
OSPF算法计算
也叫Dijkstra算法
- 同一个区域内的所有路由器拥有相同的LSDB
- 度量值称为cost,将每段路径用10^8/BW(bit/s)计算,然后求和,得到整条路径的cost
LSA
OSPF和RIP一样,既支持周期发送,也支持触发发送。
序列号
最小值
0x8000 0001
最大值
0x7FFF FFFF
序列号使用的最右边的棒棒糖型空间
OSPF报文类型
- HELLO
- Hello timer:10s或者30s,取决于接口类型。
- Dead timer是发送周期的4倍,修改hello时间,dead时间将自动变为4倍,反过来,修改了dead不会改变hello。
- DBD(Database Description)
- LSR(Link-State Request)
- LSU(Link-State Update)
- LSAck(Link-State Acknowledgment)
- 确认收到了LSU中的LSA,有多少条LSA,就有多少LSAck进行确认
OSPF的确认机制
- 显示确认 使用LSU确认LSR使用LSAck确认LSU
- 隐式确认(基于序列号的确认机制) 不使用额外的报文确认,而是用相同序列的同类型报文进行确认。如DBD
OSPF包封装
Router ID的选择:
- 手工配置
- 所有状态为UP UP的环回口中选举最大的IP地址
- 所有状态为UP UP的物理接口最大的IP地址
Router ID和Area ID都可以用点分十进制表示。
HELLO报文
- Router ID
- Hello and dead intervals *
- Neighbors 包含邻居的RID
- Area ID *
- Router priority 在P2P接口中,这个字段是没有意义的
- DR IP address
- BDR IP address
- Authentication password *
- Stub area flag *
*表示建立邻接关系必须协调成功的条目
邻接关系建立过程的7种状态
- Down 初始状态,接口被宣告进OSPF,没有发送任何报文
- Init 通过接口发送一份Hello
- Two-Way 通过接口收到了一份Neighbor字段包含自身RID的Hello
- Exstart 交互3个不带LSA报头的DBD,选择Master/Slave
- Exchange 由Master发起的带有LSA报头的DBD信息交互
- Loading 交互LSR LSU以及LSAck实现LSDB的同步
- Full 一旦LSDB同步,邻接关系到达Full
Two-Way状态并不是同时到达的。到达了Two-Way State之后,MA网段将进行DR选举。
在进入Exstart State之后,将交换3个DBD,以确立主从关系(Master/Slave),由RID更大的作为Master。
图中,I指initial,M指more,M/S指Master/Slave。
在Exchange State阶段中,由Master主导DBD交换。
OSPF小特性
- MTU更改
- 在OSPF中,Loopback口将会处理成一台stub host,其路由以32位主机路由通告出去,可以防止路由黑洞。
DR/BDR选举
选举原则
- 参与该MA网段的路由器接口的OSPF优先级,越高越好(0-255),缺省值是1。值为0,表示不参与选举。
- 该MA网段所连接的路由器的RID,越高越好。
选举时间为wait time,从第一台路由器到达Two-Way State开始计算,默认为40s或者120s,是必须选满的。
选举完成之后,就不再进行选举了。与根桥选举不同,根桥选举是时时进行的。
特点:
- DR/BDR无法被抢占
- DR挂了,BDR会立即抢占成为新的DR,新的BDR通过在所有DROther之间重新选举得出
- DR和BDR是接口级别概念,每个MA网段的DR和BDR是单独选举的
- BDR并不是必需的,可以使用ip ospf priority 0将除了DR以外的接口置为0。这个在FR中很重要,只将HUB节点作为DR,没有BDR。
- 如果一个网段中,没有DR和BDR,所有都为DROther,2-way state,不会有任何邻接关系,也没有任何LSA传递。
只要一个接口开启了OSPF进程,该接口会立即监听224.0.0.5,仅当该节点成为DR或BDR时,该接口才会同时监听224.0.0.5和224.0.0.6。
所有路由器发送给DR和BDR的报文的目的地址都是.6,DR发给其他路由器的是.5。
OSPF路由器类型
ABR
连接骨干区域和非骨干区域
ASBR
连接其他路由协议AS
LSA类型
LSA类型1:Router LSA
- 传递范围: 在该区域内泛洪,不穿越ABR
- 通告者: 区域内的每个路由器将发送一条Router LSA,用Router ID标识
- 包含内容: 纯拓扑信息,包括宣告进该区域的所有直连链路的前缀、掩码和网络类型、度量值
- Link-ID: 通告该LSA的RID
- ADV Router: 通告该LSA的RID
LSA类型2:Network LSA
- 传播范围: 在该区域内泛洪,不穿越ABR
- 通告者: DR
- 包含内容: 纯拓扑信息,该MA网段所连接的Router的RID、该MA网段的掩码
- Link-ID: DR接口的IP地址
- ADV Router: DR的RID
LSA类型3:Summary LSA
用来传递域间路由的
这里的Summary只是一个名字,默认是不做汇总的
- 传递范围: 除了本区域外的所有区域
- 通告者: ABR
- 包含内容: 纯路由信息,一条域间路由对应一条Summary LSA
- Link-ID: 3类LSA路由的前缀
- ADV Router: ABR的RID,每跨域一个ABR都会自动改写为该ABR的RID
LSA类型4:Summary ASB LSA
- 传递范围: 除了ASBR所在区域的所有区域
- 通告者: ABR
- 包含内容: 拓扑信息,
- Link-ID: ASBR RID
- ADV Router: ABR RID,每跨域一个ABR都会自动改写为该ABR的RID
LSA类型5:External LSA
- 传递范围: 整个AS
- 通告者: ASBR
- 包含内容: 纯路由信息,一条域外路由对应一条External LSA
- Link-ID: 5类LSA路由的前缀
- ADV Router: ASBR的RID,不会改变
小特性
O E1和O E2
- 当外部路由引入是,需强制添加Seed Metric(种子度量值)。
- 对于OSOF而言,如果将BGP路由重分发进入,默认为1;所有其他外部路由缺省Seed Metric为20。
- 当我们更加关心内网路径好坏的时候,可以手动指定类型1,逐跳累加cost。
- (config-router)#redistributed eigrp 90 subnets metric-type 1
汇总
域间汇总:需要在该区域的所有ABR上实施对3类LSA汇总
ospf的汇总是在进程内设置的,不是链路的。
(config-router)#area 0 range 202.10.8.0 255.255.252.0
该命令之后可以加cost,调整度量值,也可以加not-advertise,不通告该汇总,这样明细和汇总路由都不会有,相当于路由过滤。
但是,这种路由过滤的方法并不推荐。正常做法是:
(config)#ip prefix-list 10 seq 10 deny 202.10.8.0/23 ge 24 le 24
(config)#ip prefix-list 10 permit 0.0.0.0/0 le 32
(config-router)#area 1 filter-list prefix 10 in
域外汇总:需要再ASBR上对5类LSA汇总
(config-router)#summary-address 192.168.8.0 255.255.252.0
OSPF LSDB过载保护
(config-router)#max-lsa maximum-number
改变cost
(config-if)#ip ospf cost <1-65535>
或者
(config-router)#auto-cost reference-bandwidth ref-bw
改变cost计算公式中的分子,ref-bw单位是Mbits,默认是100,也就是10^8bps。
OSPF建邻接的条件
- 相同的hello时间和dead时间
- 直连接口属于相同的区域
- 使用相同的认证类型和密钥
- 相同的末节区域标识
- 相同的MTU
- 相同的网络类型
OSPF特殊区域
Stub区域
目的
过滤4/5类LSA
部署条件
- 建议只有一个ABR,否则每个ABR都会发送缺省路由,可能导致内网路由器根据自己的情况选择它认为更近的缺省路由,从而产生次优路径。
- 同区域内的所有路由器全部配置为stub路由器
- 没有ASBR
- 不能是区域0
- 没有虚链路
部署
(config-router)#area 1 stub
在该区域的所有路由器上部署STUB特性,ABR将入区域方向的4/5类LSA同时过来,同时该ABR会主动向区域内部下放一条O IA的0.0.0.0/0的3类缺省路由,Seed Metric为1。
Area 1成为Stub Area,R2将过滤4/5类LSA,同时将发送缺省路由。
部署之前
部署之后
假设Area 1还有一个ABR R6,那么R6也下放缺省路由,可能产生次优路由。
防止次优路由的方法:在R6上,使用area 1 default-cost修改默认cost,改高一些。
Totally Stub区域
目的
过滤3/4/5类LSA
部署
在ABR上部署,内网路由器上并不需要加no-summary参数
(config-router)#area 1 stub no-summary
部署之后
次末节区域
Not-So-Stubby Areas(NSSA)
过滤4/5类路由
允许区域内部有ASBR
NSSA中的ASBR将外部路由重分发进来的时候,就是以7类LSA发送的,仅在NSSA内存在。
NSSA中的ABR把从内到外的7类LSA转换成5类LSA,一个NSSA只能有一个ABR(RID最大)充当转换器。
7类LSA与区域是相关的,在R1上以O N2表示,并转换为O E2的5类LSA发送给Area 0。
凡是能发送5类LSA的都是ASBR,因此R1的身份变成了ABR/ASBR,也变成了5类LSA的ADV Router。
因此,NSSA内部的ASBR R3并不为外界知道,外界知道的是转换器R1作为ASBR。
forward address就是用来告知真正需要转发的是R3而不是R1。
NSSA中的ABR默认不会向区域内部下放缺省路由,建议下放。
下放方法是:
(config-router)#area 2 nssa default-information-roginate
O N2 0.0.0.0/0 Seed-Metric = 1
完全次末节区域
过滤3/4/5类LSA
主动下放缺省路由 O IA 0.0.0.0/0 Seed-Metric = 1
(config-router)#area 2 stub no-summary
加表优先级
O > O IA > O E1/E2 == O N1/N2
OSPF不规则区域
网络设计时,不要使用不规则区域。不规则区域的产生,大多是由于项目割接。这里提供的是临时应急方案。
远离骨干区域的非骨干区域
单点双向重分发
在没有与Area 0直连的ABR上,使用OSPF双进程,启用单点双向重分发。
(config)#router ospf 110
(config-router)#redistribute ospf 100 subnets
(config)#router ospf 100
(config-router)#redistribute ospf 110 subnets
缺点:全部是O E2路由。
tunnel
在没有与Area 0直连的ABR上,建立一个Tunnel链路连接到离其最近的Area 0中的ABR路由器上。在这两台ABR上对Tunnel配置IP地址为同一个IP子网段,并且将其宣告进OSPF的Area 0.
(1)配置了
tunnel
接口的IP地址;
(2)配置了源地址和目的地址;
(3)源和目的地址之间要有可达的路由。
R1(config)#int tunnel 1
R1(config-if)#ip add 31.1.1.1 255.255.255.0
R1(config-if)#tunnel source 1.1.1.1
R1(config-if)#tunnel destination 3.3.3.3
R3(config)#int tunnel 3
R3(config-if)#ip add 31.1.1.3 255.255.255.0
R3(config-if)#tunnel source 3.3.3.3
R3(config-if)#tunnel destination 1.1.1.1
这样就建立了逻辑接口tunnel。1.1.1.1和3.3.3.3必须有可达路由,这样tunnel口才能up up。
在ospf进程内宣告tunnel接口的IP地址,如果此时源地址和目的地址(分别是1.1.1.1和3.3.3.3)也宣告进了ospf进程,将造成ospf邻接关系翻动现象。
因此,只有将1.1.1.1和3.3.3.3做成静态路由,就可以同时解决翻动现象和tunnel up up的问题了。
缺点:配置量大且繁琐。
Virtual-Link
在没有与Area 0直连的ABR和离其最近的Area 0中的ABR路由器上部署。
不能跨域骨干区域和特殊区域。
R1(config-router)#area 2 virtual-link 93.3.3.3
R3(config-router)#area 2 virtual-link 91.1.1.1
Virtual-Link是一根按需链路,DoNotAge LSA,简称DNA,也就是说LSA的老化计数器不会计数。
Virtual-Link没有Hello时间和Dead时间
被分割的Area 0
OSPF认证
不管是链路级认证还是区域级认证,密钥id和密钥字符串是配置在接口(包括Virtual-Link)上的,因此每个网段内保持一致即可。
链路级认证
明文认证
(config-if)#ip ospf authentication-key cisco
(config-if)#ip ospf authentication
密文认证
(config-if)#ip ospf message-digest-key 13 md5 cisco
(config-if)#ip ospf authentication message-digest
区域级认证
明文认证
(config-if)#ip ospf authentication-key cisco
(config-router)#area 0 authentication
密文认证
(config-if)#ip ospf message-digest-key 13 md5 cisco
(config-router)#area 0 authentication message-digest
针对于虚链路认证
如果在R1和R2上做了Area 0的区域级认证,由于虚链路是area 0的一部分,因此虚链路上不做认证,邻接关系是起不来的。
因此,还需要在虚链路两端配置密钥,并在R3上开启Area 0的区域级认证
OSPF网络类型
- Loopback 只有环回口是Loopback的,其他类型接口都不能改为Loopback 无论接口掩码多少,都以/32主机路由通告
- Point-To-Point Serial/ISDN BRI/FR point2point SubIf 支持组播,没有DR HELLO时间10s
- Broadcast Ethernet 支持组播,有DR HELLO时间10s
- NBMA FR主接口/FR多点子接口 不支持组播,有DR HELLO时间30s
- Point-To-Multipoint 默认情况不会是这种 支持组播,没有DR HELLO时间30s
- Point-To-Multipoint Non-Broadcast 默认情况不会是这种 不支持组播,没有DR HELLO时间30s
这些网络类型是高层的概念,与物理接口的类型没有一一对应的关系,也就是说,串口可以是点到点的,也可以是广播的。
修改网络类型
(config-if)#ip ospf network + TYPE
NBMA
(config-if)#ip ospf network non-broadcast
(config-router)#neighbor + IP地址
这里指neighbor只需要单向指就可以了,不需要双向。应用场景:
在帧中继环境中,由于Hub接单和Spoke节点物理相聚很远,一般在Hub上单向指S1/S2/S3就可以了。
NUMA中,Hello时间为30s
Point-To-Multipoint
(config-if)#ip ospf network point-to-multipoint
支持组播,有DR
自动生成关于直连邻居接口的/32主机路由
Point-To-Multipoint Non-broadcast
(config-if)#ip ospf network point-to-multipoint non-broadcast
不支持组播,无DR
自动生成关于直连邻居接口的/32主机路由
在sh ip ospf interface中看不到non-broadcast,只有在sh run中可以看到
OSPF在帧中继中的部署
在帧中继环境中,应用OSPF会比其他环境复杂很多。
帧中继概念回顾
星型拓扑
PVC
DLCI
相当于MAC地址
LMI
本地管理接口
有三类:ANSI/CISCO/Q933a
帧中继映射
本地DLCI与对端IP地址
有两种方式:
自动映射
Inverse-ARP(目的IP地址为0.0.0.0,本地DLCI )
自动开启
关闭命令:(config-if)#no frame-relay inverse-arp
(config-if)#no arp frame-ralay
手工映射
只能发送单播,不能发送组播和广播,但是可以发送伪广播
伪广播在DLCI自动映射中是自动开启的,在DLCI手工映射中是手工开启的
帧中继拓扑
R1作为HUB节点,R2和R3作为SPOKE节点,分别从R1建立两条PVC通往R2和R3。
配置步骤:
1.将R1~R6的serial口上,设置封装类型frame-relay,并打上时钟率(模拟器不需要)
(conig-if)#encapsulation frame-relay ietf
2.在R4~R6上,配置以太网接口IP地址,运行某个IGP(如EIGRP)
3.将R4~R6模拟为帧中继交换机
(config)#frame-relay switching
4.将R4~R6上的serial口上,在数据链路层上,配置为DCE。不能打时钟率(物理层概念)
(config-if)#frame-relay intf-type dce
5.定义lmi类型
(config-if)#frame-relay lmi-type ansi
6.在真实环境中,R1、R2、R3之间距离很远,为了使其在逻辑上在同一网段,因此必须在R4~R6上创建tunnel接口
如:
R4(config)#interface tunnel 45
R4(config-if)#tunnel source 45.1.1.4
R4(config-if)#tunnel destination 45.1.1.5
R4(config-if)#frame-relay route 102 interface tunnel 45 500(任意一个DLCI号)
目前,通过帧中继自动映射,R1可以ping通R2和R3。
但是,R2和R3之间并不能ping通。原因是:
当R2 ping R3时,目的IP地址是123.1.1.3,查路由表发现从serial 1/1发出;
serial 1/1是帧中继封装的,因此,必须将DLCI号封装进二层。但是,R2上并没有123.1.1.3和DLCI的映射关系。
此时,必须手动指定该映射,命令是:
R2(config-if)#frame-relay map ip 123.1.1.3 201 broadcast ietf
R3(config-if)#frame-relay map ip 123.1.1.2 301 broadcast ietf
这时,R2和R3可以相互ping通,R2的ping先发给R1,再发给R3。
但是,此时,R1并不能ping通自己。即
R1#ping 123.1.1.1
是不通的。
解决方法是:在R1上手动指定123.1.1.1的映射
R1(config-if)#frame-relay map ip 123.1.1.1 102 broadcast ietf
ping包先从R1发给R2,再从R2发回R1。不仅在帧中继环境中,在PPP或HDLC中,也是这样的。只有在以太网环境中,是在接口上打了个环,就通了。
帧中继环境中的OSPF
假设帧中继环境中,只有自动映射,将所有的手工映射先删除掉。
NBMA网路类型
1.
为了建立邻居,需要在Hub节点手工指Neighbor,SPOKE节点不需要回指。
R1(config-router)#neighbor 123.1.1.2
R1(config-router)#neighbor 123.1.1.3
2.
由于轴幅型拓扑,只有HUB节点连接了所有其他节点。默认情况下,选举DR/BDR,可能造成某些节点缺乏某些路由信息。
为了保证路由传递没问题,需要手工修改接口的OSPF优先级,保证HUB为DR,spoke节点为DRother。
R1(config-if)#ip ospf priority 255
R2(config-if)#ip ospf priority 0
R3(config-if)#ip ospf priority 0
此时,
R1#ping 2.2.2.2 source 1.1.1.1
R1#ping 3.3.3.3 source 1.1.1.1
都是通的,但是R2#ping 3.3.3.3 source 2.2.2.2不通。原因是缺少映射。
3.
为了保证spoke节点所连接的下游网段内的PC可以互访,需要在spoke节点彼此指手工FR映射。
R2(config-if)#frame-relay map ip 123.1.1.3 201 broadcast ietf
R3(config-if)#frame-relay map ip 123.1.1.2 301 broadcast ietf
此时,R2#ping 3.3.3.3 source 2.2.2.2就通了。
broadcast网路类型
在R1~R3上,指定广播类型。由于支持组播发送,不需要手工指neighbor(FR Map开启伪广播功能)
(config-if)#ip ospf network broadcast
同样,需要手动指定优先级
R1(config-if)#ip ospf priority 255
R2(config-if)#ip ospf priority 0
R3(config-if)#ip ospf priority 0
彼此指手工FR映射。
R2(config-if)#frame-relay map ip 123.1.1.3 201 broadcast ietf
R3(config-if)#frame-relay map ip 123.1.1.2 301 broadcast ietf
P2MP Non-broadcast网络类型
(config-if)#ip ospf network point-to-multipoint non-broadcast
为了建立邻居,需要在Hub节点手工指Neighbor,SPOKE节点不需要回指。
R1(config-router)#neighbor 123.1.1.2
R1(config-router)#neighbor 123.1.1.3
在这种情况下,因为不选DR/BDR,不需要手工修改接口OSPF优先级
不需要手工帧中继映射,因为/32的主机路由
P2MP网络类型
(config-if)#ip ospf network point-to-multipoint
不需要指Neighbor
不需要修改OSPF优先级
不需要手工映射
在帧中继网络环境中,使用P2MP是最理想的。
但是,在考试中,一般会考“hub节点为P2MP,spoke节点为P2P”。
更改网络类型,然后修改Hello时间,使其一致。
此时,R2和R3之间ping不通,但是下游主机是可以ping通的。即:
R2#ping 3.3.3.3
不通
R2#ping 3.3.3.3 source 2.2.2.2
通
OSPF高级特性
注入缺省路由
1.
R1(config-router)#default-information originate
R1(config)#ip route 0.0.0.0 0.0.0.0 INTERFACE
2.
R1(config-router)#default-information originate always
不管有没有0.0.0.0 0.0.0.0缺省路由,R1都会主动下放缺省路由
被动接口
OSPF的被动接口不能发送、接收任何报文。
(config-router)#passive-interfac loopback 0