OSPF笔记
(1)基础概括
①.首先它是一个IGP,支持中到大型网络。
它是一个基于IP封装的协议。
它组播组地址为224.0.0.5以及224.0.0.6
(组播组地址为什么有两个?)
224.0.0.6只有网段中的DR/BDR才会监听。
224.0.0.5所有路由器都会监听。
网段中的DRTHERs会把自己路由器中的所有路由信息发送给224.0.0.6。DR/BDR收到了它们发送的路由信息之后,整合。把整合后的路由信息发送到224.0.0.5。让网段中所有DRTHERs都收到。
②在ISO中属于第4层协议。
ISO中RIP属于7层协议,EIGRP属于4层协议。
③它是一个LS协议。
DV:距离矢量协议
LS:链路状态协议
区别:DV协议发送的是路由条目,LS协议发送的是链路状态通告
注意:
链路状态协议一样会发送更新,更新不过是一类报文的叫法。
链路状态协议的更新里面包含的不再是路由条目了,而是LSA。
④它有三张表。(邻居表、LSDB、路由表)
⑤它是一个无类协议。
如果你一个协议是一个链路状态协议,那么你必须是一个无类协议。
原因是你要发送每个广播域的逻辑的客观信息。
这些信息里面肯定会包含这些网段的掩码,所以说你既然发送LSA必须要包含掩码,你这个协议怎么可能是有类协议呢。
也就是说这个协议支持:VLSM和CIDR
⑥提一下
OSPF的邻接关系很复杂。
OSPF的邻接关系分为7级,当我们这两台路由器邻接关系建立到7级的时候,才能够称为邻接关系建立完毕。
建立完邻接关系,彼此把对方的邻接关系加入到邻居表。
加入完邻居表之后,我们之间传递更新报文(DD)。
这个更新报文里面包含的是LSA。
这个LSA这里描述一下:
LSA分为多种类型(11种)每种LSA的用途是不一样的。
其中有些包含的拓扑信息,有些包含的是路由信息。
并不是所有的LSA里面包含的都是拓扑信息。
当路由器彼此交互了LSA之后,LSA就放到了LSDB中(链路状态数据库)
由于LSA中大部分描述的还是拓扑信息,所以当我和所有邻居建立关系之后,我的LSDB中应该放置了该区域内所有路由器给我传递过来的所有LSA。
而这些LSA拼凑在一块,能够完全的描述我这个区域的拓扑信息。
基于这个拓扑呢,每台路由器对这个LSDB进行SPF算法计算。
基于代价来判断,由它到达每个网段的最优路径是那些路径。
把那些最优路径转换为路由条目加入到路由表。
而我在数据层面收到了包以后,会用路由表里面的路由来转发。
⑦SPF算法
基于树形结构来计算开销最小路径的。(无环)
每台路由器对本地的LSDB进行SPF算法的时候。会把自己作为树根,判断从自己开始,计算出每条路由的最优路径。
⑧一台OSPF路由器收到了LSA后会做什么
首先会对比自己的LSDB里面有没有该LSA。
如果有,会把该LSA加表然后返还一个LSAck,再把这个LSA泛洪
如果LSDB里面有该LSA,那么就会比较它们两个的序列号。
如果本地的小,那么就会把它加表然后返还一个LSAck,再把这个LSA泛洪
如果本地的大,那么就会反向给它发送一个LSR,做一次反向更新。
⑨被动接口
RIP:不能发送组播广播,但是可以发送单播。并且可以接受任何报文
EIGRP:什么都不能收,什么都不能发
OSPF:什么报文都不收,什么报文都不能发,代表你接口不能建立邻接关系的。
(2)邻接关系建立
注意:OSPF是唯一一个需要区分邻居和邻接的路由选择协议。
邻居:只要到达第三层关系,就可以称为邻居。
邻接:必须要到达第7层关系,才能够称为邻接。
show ip interface
①down:把一个接口宣告进OSPF,没有通过该接口发送任何报文,这个接口就是第一级关系。
②init:通过该接口发送了一个Hello,就会进入第二级关系。
③tow-way:通过该接口收到了自己的R ID,就会进入第三级关系。
这里需要做一个区分。
如果是P2P网段,它会继续往下(它不选举DR和BDR)
如果是MA网段,此时会选举DR/BDR
这里提一下选举DR和BDR的细节。
首先选举DR是通过接口OSPF优先级来选择的(优先级高的就是DR)
如果优先级一样(接口优先级默认为1),会对比R ID,R ID大的会成为DR。
注意:如果OSPF接口优先级为0,那么他就会成为DROTHERs。
注意:如果一个MA网段内没有DR/BDR,都是DROTHERs,那么这个网段是无法交互报文的。
因为DROTHERs之间的邻接关系是不会到达第7级的。3级
注意:如果是一个FR(帧中继环境)环境,那么只有Hub节点能够成为DR,其他Spoke节点都不要成为BDR。因为没有意义。
帧中继环境中,只有Hub节点会与其他spoke节点相连接。spoke节点间通信只能通过Hub来通信。如果Hub节点Down了,即使你有Spoke节点作为BDR也不起作用。因为其他所有Spoke节点之间不互连。
这里提一下R ID是怎么来的。
首先手工配置的优先级最高。如果没有手工配置,那么会使用环回口IP最大的来做R ID。(注意:环回口必须UP UP) 如果没有环回口,就会使用物理接口IP地址最大的做R ID。(注意:接口必须 UP UP)
注意:DR和BDR选举之后,就不会被抢占了。就算你后来的路由器接口优先级比它们优先,你也无法抢占。
DR和BDR选举时间是使用的Wait时间。只要Wait时间一结束,那么DR和BDR就固定了。
Wait时间什么时候开始:只要一端进入了Two-way之后,那么它就会立即发起DR/BDR选举。
④Exstar:到达这个状态后,就会开始发送3个DD确定主从关系。
注意:这里发送的DD是不携带任何LSA的
R ID来决定谁是主。(R ID高的成为主)
这里需要注意:这里确认是使用的隐式确认。
OSPF的确认分为两种类型
一种是隐式确认,一种是显式确认。
隐式确认就是DD的确认,回复一个相同序列号的DD来给你做回复的同时给你做确认。
注意:隐式确认一次最多只能够确认4个报文。
如果超过了4个,超过的部分还是会使用显式确认来做。
显式确认:就是使用LSAck来做确认。
⑤Exchange:等主从关系选举结束以后,就会由主来带起这个交互DD。
相当于是让双方知道,它们各自有哪些LSA。
这里的DD使用的确认:如果LSA数量大于4,那么大于的部分就会使用显式确认。
⑥Loading:等两边的DD都交互完毕之后,就会进入这个状态。
这个状态两边会发送LSR来请求对方发送我没有的LSA。
对方会发送一个LSU携带着LSA给我。
LSR的确认就是LSU,LSU即给你做了回复也给你做了确认。
然后LSU里面的LSA的确认是LSAck。每一条LSA对应一条LSAck
(相当于是有多少条LSA,就会有多少条LSAck)
⑦FULL:等到两边的LSDB完全交互完毕之后,就会进入这个状态。
邻接关系建立完毕。
(3)LSA类型
OSPF的LSA一共有11种。
这里只提及前面7种。6类LSA不讲
我们从三个方面来看
传播的范围、通告者、内容(路由信息/拓扑信息)
这里提一下ABR和ASBR的概念
ABR:连接了不同区域的路由器
ASBR:除了OSPF以外,还连接了其他路由选择协议的路由器(有个前提,要把其他路由选择协议重分发进OSPF)
只要能够发送5类LSA
①router LSA
范围:只能在一个区域内泛洪,不能跨越ABR
通告者:路由器只要把一个接口宣告进OSPF的区域内,那么它就会向区域内发送一条1类LSA。
注意:如果多个接口同时宣告进一个OSPF区域,它也只会发送一条1类LSA。
但是如果接口宣告进不同的区域内,那么它会根据每个区域来发送一条1类LSA。
内容:纯拓扑信息
链路的前缀等等~
link-ID :通告该LSA的路由器R ID
ADV route:通告该LSA的路由器R ID
注意:如果是一个S口宣告进OSPF,那么它会拥有两个1类LSA。
②network LSA
范围:和1类LSA一样,只能够在一个区域内泛洪,不能够跨越ABR
通告者:MA网段的DR
一个区域有多少个MA网段,就会有多少个2类LSA
内容:纯拓扑信息
一个MA网段的路由器信息和掩码等等~
link-ID:DR接口的IP
ADV route:DR的R ID
③network summary LSA
不要被这个名字骗了。
这个名字只是说可以做汇总而已。
每一条3类LSA会对应一条域间路由
范围:除产生它的区域以外的所有区域(特殊区域除外)
通告者:一个区域的ABR
内容:纯路由信息
link-ID:所对应的域间路由的前缀
ADV route:ABR的R ID
注意:这个ADV route是会修改的。每经过一个ABR,这个ABR就会修改为该ABR的R ID。
这是为了保证它的可达性。
路由表中呈现为打O IA的路由
⑤Autonomous system external LSA
和3类LSA很相似
每一条5类LSA对应一条外部路由
范围:除产生它区域外的所有区域(特殊区域除外)
通告者:ASBR
内容:纯路由信息
Link-ID:就是重分发进来的LSA的前缀。
ADV route:ASBR的R ID
但是这里注意:这个ADV rotue是不会改变的。
它不改变,其他区域的路由器是不知道ADV route到底在哪里的,是不可达的。
5类LSA需要和4类LSA配合使用。
路由表中呈现为 N E2/NE1
它们是什么意思呢?
N E2:传递的时候,度量值不累加
N E1:传递的时候,度量值累加(入接口方向累加)
默认是使用N E2
ospf计算度量值是入接口的带宽比上10的8次方,然后累加。
④ASBR summary LSA
范围:除产生它区域外的所有区域(特殊区域除外)
通告者:ABR
为什么不是ASBR?
因为ASBR没有能力转发。
内容:纯拓扑信息
link-ID:ASBR的路由器ID
ADV route:ABR的路由器ID
注意:这个4类LSA的ADV route是会修改的,每经过一个区域ABR就会修改为该ABR的R ID。
是为了保证他的可达性。
4类LSA通告的就是ASBR的位置。
⑦NSSA External LSA
每条7类LSA对应一条外部路由
NSSA区域特有的LSA
区域:只能够在NSSA区域内泛洪
通告者:NSSA区域的ASBR,它在重分发路由进入区域的时候,会自动把5类LSA转换为7类LSA引入。
内容:纯路由信息
link-ID:外部路由的前缀
ADV route:ASBR
路由表中呈现为 O N2/O N1和5类LSA没什么区别
(OSPF区域不与骨干直连解决方法)
OSPF区域分为骨干区域(area0)、非骨干区域。
非骨干区域需要与area0直连。如果不直连会出现非常大的问题。
一般有两种情况,area 0被非骨干区域从中间划开。
第二种就是非骨干区域没有与area0直连。
解决方案有3种
(1)不推荐使用 通过使用多进程重分发的形式解决
这样会导致路由条目出现问题,全是打O E2的路由。很容易出现次优路径选择。
(2)不推荐使用 通过使用tunnel口,在出问题的ABR配置一条tunnel到离他最近连接了AREA0的ABR上。
这样配置需要注意:tunnel口需要指定源目地址,还需要配置IP。通告进area0区域。相当于把area0扩展开。
这样需要注意:如果tunnel宣告进了OSPF,然后tunnel的源端口也宣告进了OSPF,会导致链路不停的翻动。解决方法:宣告tunnel口进ospf,就不要宣告它的源端口进入OSPF。
但是这样又出现一个问题,如果不把源端口宣告进OSPF,目的端口又不可达。又需要手工配置一条静态路由来让目的端口可达。
非常麻烦。
这样配置出来的路由,该打O就打O,该打O IA就打O IA。它不会像第一种一样,影响它路由条目类型。
(3)建议使用 virtual-link
在出问题的ASB(与骨干没有直连的路由器)上virtual-link离他最近的和area0直连的ABR。
Virtual-link和tunnel差不多,也是一种虚链路,只不过这种虚链路是OSPF协议才有的。
只有使用OSPF时才能使用这种虚链路。
进入OSPF进程
area 【需要跨越的区域】 virtual-link 【对端路由器ID】
注意:Virtual-link是属于area0的链路。它的作用相当于是把area0扩展开来,跨越一个区域来连接area0区域。
注意:只能够跨越非骨干区域。所有特殊区域都不可以跨越。
(OSPF的认证)
OSPF的认证是基于进程级别的。
认证分为三种:接口级认证,区域级认证、虚链路级认证
分为明文认证和密文认证两种类型
(1)接口级别认证
①明文认证
进入被宣告进OSPF的接口
ip ospf authentication-key 【密码】 (配置明文密码)
ip ospf authentication (开启明文认证)
②密文认证
进入被宣告进OSPF的接口
ip ospf message-digest-key 【序号】 MD5 【密文密码】 (配置密文密码)
ip ospf authentication message-digest (开启密文认证)
(2)区域级别认证
首先需要注意,一个区域只要有一台路由器开启了基于区域级别的认证,那么这个区域的所有路由器/交换机都应该开启同类型的认证。
同类型:同样是基于密文或者明文
①明文认证
进入被宣告经OSPF的接口
ip ospf authentication-key 【密码】 (配置明文密码)
进入OSPF进程
area 【区域】 authentication (对应的区域开启认证)
②密文认证
进入被宣告进OSPF的接口
ip ospf message-digest-key 【序号】 MAD5【密码】 (配置密文密码)
进入OSPF进程
area 【区域】 authentication message-digest (对应的区域开启密文认证)
注意:启用密文认证的时候,两边的不仅密码要一致,序号也要一致,而且都要开启基于区域的密文认证。
(3)基于虚链路级别的认证
首先提一下:虚链路级别的认证,只有在虚链路还没有建立起来的时候,配置有用。如果虚链路已经建立起来了,那么这个配置白瞎,没用。为什么?
因为虚链路它建立了邻居之后,不会发送hello,并且它的超时时间是永不。相当于它不会发送更新,它不发送更新,你这个配置就没有意义。
所以需要注意:基于虚链路级别的认证,只有在虚链路还没有建立起来的时候配置有用。
这个配置方法也比较特殊
需要在建立虚链路的时候配置。
①明文认证
area 【跨越的区域】 virtual-link 【对端路由器ID】 authentication-key 【密码】 (配置明文密码)
area 【跨越的区域】 virtual-link 【对端路由器ID】 authentication (开启明文认证)
②密文认证
area 【跨越的区域】 virtual-link 【对端R ID】 message-digest-key 【序号】MD5 【密码】 (配置密文密码)
area 【跨越的区域】 virtual-link 【对端R ID】 authentication message-digest (开启基于密文的认证)
(4)需要注意的点
(特殊区域)
1. Stub区域
末节区域
把一个区域配置为Stub区域的前提
①区域内不允许存在ASBR
②区域内不允许存在其他虚链路
③不能是区域0(不可以是骨干区域)
④区域内所有的路由器都要配置为Stub区域
⑤最好是只有一个ABR
配置为Stub区域后会有什么特性?
①该区域的ABR会自动过滤掉想要进入区域的4类和5类LSA
②该区域的ABR会自动下放一条O IA缺省度量值为1的缺省路由。
这条缺省路由的度量值是可以修改的。
优化不是很好。因为既然已经下放了一条缺省路由了,我是不是就可以直接使用你下放的缺省路由来传递路由条目了?因为我干什么都要把包发送给ABR嘛,既然你给了我一条缺省路由了,那些3类LSA还有没有必要进入区域啊?
没有必要了吧。
2.Totally stub
完全末节区域
配置要求和Stub一样。
只需要在ABR上添加一个no-summary参数即可。
进入OSPF进程
aera 【需要修改的区域】 stub no-summary
注意:只用在ABR上修改即可,其余的让他保持Stub。
配置为这个区域后有什么特性?
ABR会过滤掉想要进入该区域的3、4、5类LSA。
并且ABR会自动下放一条O IA缺省度量值为1的缺省路由。
这样优化就会非常好。
但是这个区域的限制太多了。
区域内不能存在ASBR
我就是想要存在ASBR怎么办?
3.NSSA
次末节区域
相比Stub区域,它最大的特点,就是区域内可以存在ASBR。
①区域不能够是骨干区域
②区域内的所有路由器都需要配置为Nssa区域
配置为这个区域后,有什么特性?
①该区域ABR会自动过滤掉想要从该ABR经过的4类5类LSA。
②该区域的ABR不会自动下方缺省路由。
可以看出很坑啊。
我把外部路由5类LSA引入到NSSA区域,发送到ABR的时候,你给我过滤了。那我引入外部路由干嘛?
注意:NSSA区域ASBR引入外部路由的时候,会自动把5类LSA转换成7类LSA引入。
但是7类LSA只能够在NSSA区域内传递。
扯了半天还是传递不出去?
不是的。
NSSA区域还有一个翻译者的概念。
翻译者:NSSA区域的DR。
如果有多个DR,那么会进行选举。R ID大的当。
它有什么用呢?
它会把域内要出域的7类LSA转换为5类LSA,然后 在其他区域传递。
问题来了,如果该翻译者就是该NSSA区域的ASBR呢?
他会直接把外部路由以5类LSA的形式在其他区域传递。然后再转换一份7类LSA引入到NSSA区域。
这种情况有没有必要再把7类LSA引入到NSSA区域?
完全没有必要嘛。
你翻译者(ABR)给我下放一条缺省的路由就行了嘛,完全不用把7类LSA引入到Nssa区域占用我的LSDB和路由表嘛。
问题来了,这个区域不会自动下放缺省路由。怎么办?
手动下放
进入OSPF进程
area 【区域 】 nssa default-information-originate
这个缺省路由的度量值和类型是可以修改的。
在后面添加参数
注意:这里下放的缺省路由是7类的缺省路由,如果同时存在7类和3类的缺省路由。会使用3类的。
优先级:打O的>打O IA>打O E2/O E1 和O N2 /O N1
在这个区域的ABR正好是ASBR的时候,为了让7类LSA不进入区域,达到最好优化。
area 【区域】 nssa no-redistribution
4.totally nssa区域
完全次末节区域
相比次末节区域,它优化更加好,它会把想要进入区域的3 、4 、5类LSA报文给过滤掉。
并且他还会自动下方一条3类O IA的缺省度量值为1的缺省路由。
度量值可以修改
其他基本上和Nssa区域一致。
配置的话,只需要在ABR上配置。区域内的其他路由器只需要配置为Nssa区域即可。
进入ABR的OSPF进程
area 【区域】 nssa no-summary
修改度量值和类型
default-information originate metric 【度量值】 metric-type 【类型】
(OSPF的汇总)
首先OSPF不支持自动汇总。
只支持手工汇总,手工汇总分为两类。
域间汇总 / 域外汇总
域间汇总在ABR上做
域外汇总在ASBR上做
(1)域间汇总
在区域的ABR上配置
进入ABR的OSPF进程
area 【区域】range 【汇总的前缀】【汇总的掩码】
它后面可以跟一些参数。
COST
Advertise
not-advertise
cost就是修改度量值嘛。
然后Advertise,默认是开启的。不用管。
not-advertise,这个意思是不发送。
注意:你汇总一个网段。就是把明细丢弃,汇总路由产生发送出去。
这里如果把汇总也配置为不发送,相当于是直接把这些配置的网段抑制了。
对于网段抑制,不建议使用这个命令。
对于域间汇总,有单独的命令。
(2)域外汇总
在区域的ASBR上配置
进入OSPF进程
summary-address 【前缀】 【掩码】
后面可以跟一些参数
not-advertise
tag
tag:用来给引入域内的外部路由添加一个标记,方便抓取。
注意:如果外部路由在引入区域的时候,没有做过任何的路由过滤方面的内容,那么久只能使用这里的not-advertise来过滤外部路由。
(OSPF的缺省路由下放)
(1)第一种
路由表存在一个全0的缺省路由时
进入OSPF进程
default-information originate
下放的是O E2的全0/0的缺省路由
可以修改度量值,以及类型
即可
(2)第二种
进入OSPF进程
default-information originate always
下放的是O E2的全0/0的缺省路由
可以修改度量值,以及类型
这种方法,强制下放缺省路由。就算自己路由表里面没有全0的缺省。
(OSPF的接口网络类型)
某些接口只要宣告进OSPF,就会自动给它打上OSPF的网络类型。
(1)loopback
环回口类型
默认对应的接口:环回口
该类型比较特殊。
不能通过任何方法修改其他接口的网络类型为环回口。
只有把环回口宣告进OSPF的时候,会自动配置为该网络类型。
特点:不会发送Hello。度量值默认为1(可以直接修改COST值)
loopback传递的路由不管你本身是多少位的,传递出去一定是/32位的主机路由。
如果想要它显示本身多少位的路由。可以把它的网络类型修改为P2P类型。
如果修改为P2P之后,又想要改回去,只需要把P2P那个命令NO掉即可。(因为没有ip ospf network loopback这条命令)
(2)P2P类型
点到点
默认对应的接口类型:PPP/HDLC/FR-点到点子接口
首先不选举DR
使用组播、广播
hello时间为10秒。
组播发送224.0.0.5 为什么没有.6?
因为不选DR/BDR嘛。
(3)BMA类型
广播型多路访问网络类型
默认对应接口类型:以太网接口
使用组播、广播
Hello时间为10秒。
组播发送224.0.0.5/224.0.0.6
(4)NBMA类型
非广播多路访问网络类型
默认对应:FR物理接口、FR-多点子接口、MGRE
hello时间:30秒
不支持组播、广播。这代表不能够自动建立邻接,需要手工指定neighbor
选举DR/BDR
(5)p-mp类型
点到多点网络类型
默认对应接口类型:无 需要自己手动指定
不选举DR/BDR
使用组播/广播
hello时间:30秒
它会发送一条关于自己这个接口的/32位的主机路由给对端。
(6)p-mp NBMA类型
点到多点非广播多路访问网络类型
默认对应接口类型:无 需要自己手工指定
不选举DR/BDR
不会主动发送组播/广播 需要手工指定Neighbor
hello时间:30
同上,它会发送一条关于自己这个接口的/32位的主机路由给对端。
注意:无论把接口配置为点到多点、点到多点非广播你在Show接口的时候,只会显示点到多点。
注意:如果真的想要看是否携带NBMA参数,只有Show run才能看到。
(7)一般情况下,两边网络类型要一致,除了一种情况
一边点到多点,一边点到点。一般情况下是在帧中继环境中。
Hub节点为点到多点。Spoke节点为点到点。
注意:Hub节点和Spoke是可以同时使用点到点的,只不过需要在Hub节点划分子接口,划分若干个子接口就OK了。
点到点子接口有一个小特性:什么叫点到点?所谓的点到点就是网段内只有两个节点,所以对于这个网段OSPF的邻居数量有几个?有且只有一个是吧,不可能说你这个接口同时建立多个邻居。
注意:一边使用点到多点,一边使用点到点。邻居是肯定Down的。为什么?
虽然他们两边的网络类型不一致,但是它们是特殊情况,它们是可以建立邻居的,并且路由传递也是没问题的。
因为它们两个的Hello时间不一致。一边是10秒,一边是30秒。
所以需要修改Hello时间。
一般情况是修改Spoke的时间和Hub时间同步。
修改Hello时间有小技巧。你修改了Hello时间,它的dead、wait时间自动会变为Hello时间的4倍。
但是如果你修改dead时间,Hello时间就不会自动修改,只有wait时间会自动修改。需要注意
建立邻接关系的前提
相同的Hello、dead
相同的区域ID
相同认证类型
相同末节标识
相同MTU
相同网络类型
注意:由于这两种网络类型,它的属性非常类似,基本是一致的。因此在帧中继环境中IE最喜欢考的就是Hub节点使用点到多点,Spoke使用点到点。这个时候在部署的时候只有一个细节。
那就是修改Hello时间,只要Hello时间匹配,邻居只要一建立,那么就OK。