OSPF(开放式最短路由优先协议)
IGP
LS 发送的是LSA(链路状态通告Link Status Advertisement),包含的是拓扑信息。加入LSDB,用SPF计算出Routing Table
VLSM/CIDR
四层协议 三层报头中的上层协议号为89
7中邻接关系
7中LSA
5中报文
3张表
邻居表(邻接数据库)
拓扑表(LSDB)
路由表(转发数据库)
链路状态路由协议比距离矢量路由协议更加了解网络拓扑
每台路由器都会保存同一区域的拓扑
不会产生环路
两个层次
骨干区域(area 0),或者叫传输区域
非骨干区域
减少路由表表项
OSPF中没有自动汇总的概念,因为OSPF中传递的是LSA,而不是路由条目。
不能进行域内汇总,只能进行域间汇总和域外汇总。
将拓扑变更的影响限制在一个区域内
特定LSA泛洪停止在域边界上,不同类型的LSA有不同的传递性
名词
骨干路由 backbone routers
ABR area border router 区域边界路由器将其他区域连接到area 0
在OSFP中,对邻居关系(Neighbor)和邻接关系(Adjacency)严格区分。
邻居关系是指三层直连,邻接是指7层FULL邻接关系。
P2P WAN
两端邻居成为FULL邻接关系
LAN
邻居与DR和BDR形成FULL邻接关系
DROTHER之间形成two-way state
只有当邻接关系建立起来了,才能交换LSA,并同步LSDB。
LSA是泛洪的。
也叫Dijkstra算法
同一个区域内的所有路由器拥有相同的LSDB
度量值称为cost,将每段路径用10^8/BW(bit/s)计算,然后求和,得到整条路径的cost
LSA
OSPF和RIP一样,既支持周期发送,也支持触发发送。
序列号
最小值 0x8000 0001
最大值 0x7FFF FFFF
序列号使用的最右边的棒棒糖型空间
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进行确认
显示确认 使用LSU确认LSR使用LSAck确认LSU
隐式确认(基于序列号的确认机制) 不使用额外的报文确认,而是用相同序列的同类型报文进行确认。如DBD
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交换。
MTU更改
在OSPF中,Loopback口将会处理成一台stub host,其路由以32位主机路由通告出去,可以防止路由黑洞。
选举原则
参与该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
传递范围: 在该区域内泛洪,不穿越ABR
通告者: 区域内的每个路由器将发送一条Router LSA,用Router ID标识
包含内容: 纯拓扑信息,包括宣告进该区域的所有直连链路的前缀、掩码和网络类型、度量值
Link-ID: 通告该LSA的RID
ADV Router: 通告该LSA的RID
传播范围: 在该区域内泛洪,不穿越ABR
通告者: DR
包含内容: 纯拓扑信息,该MA网段所连接的Router的RID、该MA网段的掩码
Link-ID: DR接口的IP地址
ADV Router: DR的RID
用来传递域间路由的
这里的Summary只是一个名字,默认是不做汇总的
传递范围: 除了本区域外的所有区域
通告者: ABR
包含内容: 纯路由信息,一条域间路由对应一条Summary LSA
Link-ID: 3类LSA路由的前缀
ADV Router: ABR的RID,每跨域一个ABR都会自动改写为该ABR的RID
传递范围: 除了ASBR所在区域的所有区域
通告者: ABR
包含内容: 拓扑信息,
Link-ID: ASBR RID
ADV Router: ABR RID,每跨域一个ABR都会自动改写为该ABR的RID
传递范围: 整个AS
通告者: ASBR
包含内容: 纯路由信息,一条域外路由对应一条External LSA
Link-ID: 5类LSA路由的前缀
ADV Router: ASBR的RID,不会改变
当外部路由引入是,需强制添加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
(config-router)#max-lsa maximum-number
(config-if)#ip ospf cost <1-65535>
或者
(config-router)#auto-cost reference-bandwidth ref-bw
改变cost计算公式中的分子,ref-bw单位是Mbits,默认是100,也就是10^8bps。
相同的hello时间和dead时间
直连接口属于相同的区域
使用相同的认证类型和密钥
相同的末节区域标识
相同的MTU
相同的网络类型
过滤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,改高一些。
过滤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
网络设计时,不要使用不规则区域。不规则区域的产生,大多是由于项目割接。这里提供的是临时应急方案。
在没有与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路由。
在没有与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时间
不管是链路级认证还是区域级认证,密钥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的区域级认证
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
(config-if)#ip ospf network non-broadcast
(config-router)#neighbor + IP地址
这里指neighbor只需要单向指就可以了,不需要双向。应用场景:
在帧中继环境中,由于Hub接单和Spoke节点物理相聚很远,一般在Hub上单向指S1/S2/S3就可以了。
NUMA中,Hello时间为30s
(config-if)#ip ospf network point-to-multipoint
支持组播,有DR
自动生成关于直连邻居接口的/32主机路由
(config-if)#ip ospf network point-to-multipoint non-broadcast
不支持组播,无DR
自动生成关于直连邻居接口的/32主机路由
在sh ip ospf interface中看不到non-broadcast,只有在sh run中可以看到
在帧中继环境中,应用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中,也是这样的。只有在以太网环境中,是在接口上打了个环,就通了。
假设帧中继环境中,只有自动映射,将所有的手工映射先删除掉。
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就通了。
在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
(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的主机路由
(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 通
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(原地址)