简介


  • 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

    • 两端邻居成为FULL邻接关系

  • LAN 

    • 邻居与DR和BDR形成FULL邻接关系

    • DROTHER之间形成two-way state

  • 只有当邻接关系建立起来了,才能交换LSA,并同步LSDB。

  • LSA是泛洪的。

OSPF算法计算

也叫Dijkstra算法

  • 同一个区域内的所有路由器拥有相同的LSDB

  • 度量值称为cost,将每段路径用10^8/BW(bit/s)计算,然后求和,得到整条路径的cost

LSA

OSPF_第1张图片

OSPF和RIP一样,既支持周期发送,也支持触发发送。

序列号

最小值  0x8000 0001

最大值  0x7FFF FFFF

OSPF_第2张图片

序列号使用的最右边的棒棒糖型空间

OSPF报文类型

  • HELLO

    • Hello timer:10s或者30s,取决于接口类型。

    • Dead timer是发送周期的4倍,修改hello时间,dead时间将自动变为4倍,反过来,修改了dead不会改变hello。

  • DBD(Database Description)

    • LSDB的摘要信息,防止不必要的LSA交换

  • LSR(Link-State Request)

    • 请求自己没有的LSA

  • LSU(Link-State Update)

    • 包含LSR请求的LSA信息

  • LSAck(Link-State Acknowledgment)

    • 确认收到了LSU中的LSA,有多少条LSA,就有多少LSAck进行确认

OSPF的确认机制

  • 显示确认 使用LSU确认LSR使用LSAck确认LSU

  • 隐式确认(基于序列号的确认机制) 不使用额外的报文确认,而是用相同序列的同类型报文进行确认。如DBD

OSPF包封装

OSPF_第3张图片

Router ID的选择:

  1. 手工配置

  2. 所有状态为UP UP的环回口中选举最大的IP地址

  3. 所有状态为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种状态

  1. Down 初始状态,接口被宣告进OSPF,没有发送任何报文

  2. Init 通过接口发送一份Hello

  3. Two-Way 通过接口收到了一份Neighbor字段包含自身RID的Hello

  4. Exstart 交互3个不带LSA报头的DBD,选择Master/Slave

  5. Exchange 由Master发起的带有LSA报头的DBD信息交互

  6. Loading 交互LSR LSU以及LSAck实现LSDB的同步

  7. Full 一旦LSDB同步,邻接关系到达Full

OSPF_第4张图片

Two-Way状态并不是同时到达的。到达了Two-Way State之后,MA网段将进行DR选举。

OSPF_第5张图片

在进入Exstart State之后,将交换3个DBD,以确立主从关系(Master/Slave),由RID更大的作为Master。

OSPF_第6张图片

图中,I指initial,M指more,M/S指Master/Slave。

在Exchange State阶段中,由Master主导DBD交换。

OSPF_第7张图片

OSPF小特性

  • MTU更改

  • 在OSPF中,Loopback口将会处理成一台stub host,其路由以32位主机路由通告出去,可以防止路由黑洞。

DR/BDR选举

选举原则

  1. 参与该MA网段的路由器接口的OSPF优先级,越高越好(0-255),缺省值是1。值为0,表示不参与选举。

  2. 该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类型

OSPF_第8张图片

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建邻接的条件

  1. 相同的hello时间和dead时间

  2. 直连接口属于相同的区域

  3. 使用相同的认证类型和密钥

  4. 相同的末节区域标识

  5. 相同的MTU

  6. 相同的网络类型

OSPF特殊区域

Stub区域

目的

过滤4/5类LSA

部署条件

  1. 建议只有一个ABR,否则每个ABR都会发送缺省路由,可能导致内网路由器根据自己的情况选择它认为更近的缺省路由,从而产生次优路径。

  2. 同区域内的所有路由器全部配置为stub路由器

  3. 没有ASBR

  4. 不能是区域0

  5. 没有虚链路

部署

(config-router)#area 1 stub

在该区域的所有路由器上部署STUB特性,ABR将入区域方向的4/5类LSA同时过来,同时该ABR会主动向区域内部下放一条O IA的0.0.0.0/0的3类缺省路由,Seed Metric为1。

OSPF_第9张图片

Area 1成为Stub Area,R2将过滤4/5类LSA,同时将发送缺省路由。

部署之前

OSPF_第10张图片

部署之后

OSPF_第11张图片

假设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

部署之后

OSPF_第12张图片

次末节区域

Not-So-Stubby Areas(NSSA)

过滤4/5类路由

允许区域内部有ASBR

OSPF_第13张图片

NSSA中的ASBR将外部路由重分发进来的时候,就是以7类LSA发送的,仅在NSSA内存在。

NSSA中的ABR把从内到外的7类LSA转换成5类LSA,一个NSSA只能有一个ABR(RID最大)充当转换器。OSPF_第14张图片

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.

tunnel状态为Up的条件有3个:

(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网络类型

  1. Loopback 只有环回口是Loopback的,其他类型接口都不能改为Loopback无论接口掩码多少,都以/32主机路由通告

  2. Point-To-Point Serial/ISDN BRI/FR point2point SubIf支持组播,没有DR HELLO时间10s

  3. Broadcast Ethernet支持组播,有DR HELLO时间10s

  4. NBMA FR主接口/FR多点子接口不支持组播,有DR HELLO时间30s

  5. Point-To-Multipoint 默认情况不会是这种支持组播,没有DR HELLO时间30s

  6. 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只需要单向指就可以了,不需要双向。应用场景:

OSPF_第15张图片

在帧中继环境中,由于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手工映射中是手工开启的

帧中继拓扑

OSPF_第16张图片

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

http://blog.csdn.net/bingosummer/article/details/22926215(原地址)