一.OSPF基础
1.特性
OSPF是目前使用最广泛的IGP路由协议,属于链路状态路由协议,使用Dijkstra算法,也被称为SPF(Short Path First最短路径算法)。
IETF标准:OSPF可以被不同厂商的设备所支持
无环路由协议:执行的是SPF算法,不会产生路由环路
无类路由协议:支持VLSM(可变长子网掩码)和CIDR(无类别域间路由)
拥有不受限的跳计数:可以应用于大型网络
层次型:易拓展,路由器的负担不会随着网络规模的增大而急剧增加
区域化设计:减少路由更新的流量,降低内存、cpu和带宽的使用
快速收敛:使用触发式更新,路由可以快速收敛
支持验证:OSPF支持针对区域和链路的验证
2.OSPF术语
链路(link):当一个接口加入OSPF进程,它就被认为是一个ospf链路
链路状态(Link-State):链路的状态信息,包括接口的IP地址和子网掩码、接口网络类型、链路的花费、链路上的邻居
路由器ID(Router ID,简称RID):用于识别路由器的IP地址,可以手工指定;如果没有指定,则选择所有环回接口中最高的IP地址;若没有环回口使用,选择物理接口中最高的IP地址。
邻居(Neighbor):连接在一个公共的网络上的路由器(≥2)
邻接(Adjacent):2台路由器之间的关系,允许直接交换路由更新数据。OSPF只与建立了邻接关系的邻居共享路由信息。邻居和邻接没有直接关系。
区域(Area):通过划分区域实现分层设计
指定路由器(DR,Designated Router):OSPF路由器在多路访问的网络中需要DR,DR代表该多路访问网络中的所有路由器,每台路由器都把拓扑变化发送给DR和BDR,然后DR通知该多路访问网络中的其他路由器。
备用的指定路由器(BDR,Backup Designated Router):备用DR,DR离线时代替DR工作。
花费(cost):每条链路都有一个花费,OSPF的唯一度量值。根据链路的带宽计算而来,可以人为修改。
ABR(area border router):位于一个或多个OSPF区域边界上、将这些区域连接到主干网络的路由器。ABR被认为同时是OSPF主干和相连区域的成员。
ASBR(自治系统边界路由器,Autonomous System Border Router):一般是位于非OSPF区域和OSPF区域间互联的路由器。ASBR可以运行OSPF和另一路由选择协议(如RIP),把OSPF上的路由发布到其他路由协议上。ASBR必须处于非存根OSPF区域中。 在NSSA区域中,对7类LSA转换为5类LSA的路由器也是ASBR。所以说,ASBR不一定在2个协议之间,对于产生5类LSA的都是ASBR
3.基本配置
Router ospf 进程号
network IP子网 反掩码 area area-id
二.报文
1.报文格式
数据链路层头部+IP包头部+OSPF包头+OSPF数据
数据链路层头部:OSPF组播IP地址224.0.0.5(非DR和BDR使用的地址)和224.0.0.6(DR和BDR使用的地址),组播MAC地址对应01-00-5E-00-00-05/06
IP包头部:协议号89,源IP是发送路由器的IP,目的IP是组播地址224.0.0.5/6
OSPF包头:包括RID和区域号以及OSPF包类型
OSPF数据:每种OSPF包的具体内容
2.OSPF报头格式
OSPF用IP报文直接封装协议报文,协议号为89。OSPF分为5种报文:Hello报文、DBD报文、LSR报文、LSU报文和LSAck报文。
OSPF这五种报文具有相同的报文头格式,长度为24字节。
Version:OSPF版本号,当前为OSPFv2。OSPFv1实验版本,v3针对IPv6。
Type:包类型,1为Hello报文,2是DBD,3是LSR,4是LSU,5是LSAck
Packet length:报文长度
Router ID:路由器ID,每台路由器的唯一标识
Area ID:区域号,主区域为0
Checksum:校验和
Autype(Authentication Type):验证类型。0:不使用,1:明文,2:MD5
Authentication:验证相关信息,包括密码
重点讲Hello包和LSU的分类
①Hello包
Hello报文被用来建立和维护OSPF的邻接关系。OSPF的Hello报文的作用主要有:发现OSPF邻居,建立和维护邻接关系;在多路访问的网络中选择DR和BDR。
OSPF泛洪链路状态通告给其他路由器之前,需要先建立邻接关系。所有启用OSPF协议的接口上都发送Hello报文,以判断是否有其他ospf路由器运行在相同的链路上,一般以组播方式发送,组播IP:224.0.0.5。
②DBD(Database Description,数据库状态描述包)
DBD是发送路由器链路状态数据库的一个简短描述。
③LSR(Link-State Request,链路状态请求包)
接受路由器可以发送LSR来请求发送路由器DBD中的某些条目详细信息。
④LSU(Link-State Update,链路状态更新包)
用来更新OSPF路由信息,回复LSR请求。LSU被分成多种类型的LSA(Link-State Advertisement)
⑤LSAck(Link-State Acknowledgement,链路状态确认)
当一个LSU被收到时,路由器发送LSAck进行确认
三.LSA类型
共11种类型LSA(链路状态通告),其中6类常用
1、路由器LSA (Router LSA)
由区域内所有路由器产生,并且只能在本个区域内泛洪广播。
这些最基本的LSA通告列出了路由器所有的链路和接口,并指明了它们的状态和沿每条链路方向出站的代价。
2、网络LSA (Network LSA)
由区域内的DR或BDR路由器产生,报文包括DR和BDR连接的路由器的链路信息。
网络LSA也仅仅在产生这条网络LSA的区域内部进行泛洪。
3、网络汇总LSA (Network Summary LSA)
由ABR产生,可以通知本区域内的路由器通往区域外的路由信息。
在一个区域外部但是仍然在一个OSPF自治系统内部的缺省路由也可以通过这种LSA来通告。
如果一台ABR路由器经过骨干区域从其他的ABR路由器收到多条网络汇总LSA,那么这台始发的ABR路由器将会选择这些LSA通告中代价最低的LSA,并且将这个LSA的最低代价通告给与它相连的非骨干区域。
4、ASBR汇总LSA (ASBR summary LSA)
也是由ABR产生,但是它是一条主机路由,指向ASBR路由器地址的路由。
5、自治系统外部LSA (Autonomous system external LSA)
由ASBR产生,告诉相同自治区的路由器通往外部自治区的路径。
自治系统外部LSA是惟一不和具体的区域相关联的LSA通告,将在整个自治系统中进行泛洪。
7、NSSA外部LSA (NSSA External LSA)
由ASBR产生,几乎和LSA 5通告是相同的,但NSSA外部LSA通告仅仅在始发这个NSSA外部LSA通告的非纯末梢区域内部进行泛洪。
在NSSA区域中,当有一个路由器是ASBR时,不得不产生LSA 5报文,但是NSSA中不能有LSA 5报文,所有ASBR产生LSA 7报文,发给本区域的路由器。
详解:LSA类型详解
四.选路
OSPF的四种路径类型:
1、O 域内路由
2、O IA 域间路由
3、E1的外部路由
4、E2的外部路由
外部路由重分布进OSPF有两种类型
·OE1: 重分布进OSPF的路由默认为E2,Cost=20,且传递过程中不改变COST。
·OE2: 如果改为E1类型,则在传输过程中会累加每个入接口的cost值
OSPF的选路原则:
1、域内路由优于域间路由
2、域间路由优于外部路由
3、OE1的路由优于OE2的路由
如果一台路由器收到两条相同的域间的路由,一条是area 0区域传过来的,一条是普通区域传过来的,则优选area 0区域传过来的。
如果有一台路由器从两个不同的ASBR收到相同的外部路由,OSPF在选择外部路由的时候,遵循的原则是:
[1]O E1优于O E2
[2]在类型相同的情况下,Cost越小越优先
[3]对OE2来说,在cost相同的情况下,选择到达ASBR最优的路径
OE2的路由传递时带有一个参数---forward metric,这个参数记录了OE2的路由所穿越链路的总COST值,如果一个路由器收到两条COST相同的OE2路由,将比较它们的forward metric来选出最优路由。
五.汇总
OSPF只支持手工汇总,OSPF支持两种形式的手工自动汇总:一种部署在ABR上,另一种则部署在ASBR上。
1.在ABR上执行路由汇总
在R3(ABR)上对Area2内的路由执行汇总:
R3(config)# router ospf 1
R3(config-router)# area 2 range 172.16.0.0 255.255.0.0
汇总后,在R3本地会产生一条特殊的路由,用来防环
O 172.16.0.0/16 is a summary, 00:00:06, Null0(R3接收到去往172.16.0.0/16数据包丢弃)
这条路由称为discard-route,可以用以下命令去掉:
router ospf 1
no discard-route internal
本汇总命令还可用来做路由的过滤:
router ospf 1
area 2 range 172.16.0.0 255.255.0.0 not-advertise 过滤掉172.16.0.0的网络及其所包含的子网
注意,这种汇总方式(area range)只能在ABR上配置,而且只能对ABR直接连接的区域中的Intra-Area路由(区域内部路由即“O”)执行汇总。R3执行汇总后,R1及R2的路由表中将出现172.16.0.0/16的汇总路由,而不会再学习到明细路由。如此一来,R1及R2的路由表就精简了,而且当它们需要访问R5下挂的那三个网段时,可以通过这条汇总路由到达。要强调的是,如果不是在R3,而是在R2上对R5下挂的网段进行汇总,则无法实现。因此此时R3作为ABR,已经将描述这些网段的3类LSA注入到了Area0,而在R2上,是无法对这些3类LSA进行路由汇总的。
2.在ASBR上执行路由汇总
在R1上对其自己重发布进OSPF的路由执行汇总:
router ospf 1
summary-address 10.1.0.0 255.255.0.0
完成上述配置后,R2、R3、R4及R5都会学习到一条10.1.0.0/16的汇总路由(使用Type-5 LSA描述),而不会再学习到10.1.1.0/24、10.1.2.0/24以及10.1.3.0/24这三条明细路由。
本地也会产生特殊路由来防环 O 10.1.0.0/16 is a summary, 00:00:04, Null0
用以下命令可以去掉:
router ospf 1
no discard-route external
六.认证
2种认证方法:明文,密文
3种认证范围:链路认证,区域认证,虚链路认证
具体配置方法(注意看Router后面跟的是接口还是OSPF进程)
1.link链路认证方法
明文认证
Router(config-if)#ip ospf authentication-key cisco声明明文密钥
Router(config-if)#ip ospf authentication 声明明文认证
密文认证
Router(config-if)#ip ospf message-digest-key 1 md5 cisco 启用密文密钥
Router(config-if)#ip ospf authentication message-digest 声明密文认证
2.area区域认证方法
明文认证
Router(config-if)#ip ospf authentication-key cisco启用明文密钥
Router(config-router)#area 1 authentication声明明文认证
密文认证
Router(config-if)#ip ospf message-digest-key 1 md5 cisco 启用密文密钥
Router(config-router)#area 1 authentication message-digest声明密文认证
3.v-link虚链路认证方法
明文认证
Router(config-router)#area 2 virtual-link 3.3.3.3 authentication-key cisco 启用明文密钥
Router(config-router)#area 2 virtual-link 3.3.3.3 authentication声明明文认证
密文认证
Router(config-router)#area 2 virtual-link 3.3.3.3 message-digest-key 1 md5 cisco
Router(config-router)# area 2 virtual-link 3.3.3.3 authentication message-digest
七.虚链路
多域的OSPF应用virtual-link:
1. 某一个域与骨干域不相连需要使用virtual-link
2. 在一个OSPF网路中不能存在多个OSPF域如果存在2个以上的OSPF域需要启用virtual-link
3. virtual-link命令表达方法:area area-id virtual-link router-id
area-id应使用需要将两个area串联的中间那个area的id,router-id使用对端设备的router-id。
R2:
router ospf 1
area 1 virtual-link 192.168.34.1
R3:
router ospf 1
area 1 virtual-link 192.168.23.1
八.默认路由
方法一:
先配置一条静态默认路由:ip route 0.0.0.0 0.0.0.0 Serial0
再用命令下发
router ospf 1
default-information originate
方法二:
不需要写一条静态的默认路由(本地无静态默认路由,又想分发默认),直接下发。
router ospf 1
default-information originate always
还可在下发默认路由时指定metric的类型和metric值
default-information originate always metric-type1metric3
九.特殊区域
OSPF 的 Area 类型:
标准区域:这是默认的区域类型,它接受链路更新、汇总路由和外部路由。
骨干区域:骨干区域为 Area 0,其他区域都与之相连以交换路由信息。OSPF 骨干区域具有标准 OSPF 区域的所有特征。
末节区域(Stub Area):这种区域不接受关于自治系统外部的路由的信息,如来自非 OSPF 路由器的路由(也就是该区域不接受 LSA 4 和 LSA 5)。需要路由到自治系统外部的网络时,路由器使用默认路由(用 0.0.0.0 表示)。末节区域不能包含 ASBR(除非 ABR 也是 ASBR)。
router ospf 110
area 2 stub
绝对末节区域(Total Stub Area):这种 Cisco 专用的区域不接受来自自治系统外部的路由以及来自自治系统中其他区域的汇总路由(也就是该区域不接受 LSA 3 / 4 / 5)。需要将分组发送到区域外的网络时,路由器使用默认路由。绝对末节区域中不能有 ASBR(除非 ABR 也是 ASBR)。
router ospf 110
area 2 stub no-summary //(只需在ABR上做)
使用末节区域旨在向其通告默认路由,这样 ASBR 汇总 LSA 和自治系统外部 LSA(如果是绝对末节区域,还有网络汇总 LSA)将不会扩散到该区域。这将缩小该区域中路由器的 LSDB 和 RIB(路由表)的规模。
Stub 区域虽然为合理的规划网络描绘了美好的前景,但她在实际的组网中又不具备可操作性,未免遗憾。但此时的 OSPF 协议已经基本成型,不可能再做大的修改。为了弥补缺陷,协议设计者提出了一种新的概念 NSSA,并且作为 OSPF 协议的一种扩展属性单独在 RFC 1587 中描述。
NSSA(Not-So-Stubby Area):NSSA 是对 OSPF RFC 的补充。这种区域定义了一种特殊的 LSA —— 7 类 LSA 。NSSA 具有末节区域的优点,它们不接受有关自治系统外部的路由的信息(也就是该区域不接受 LSA 4 和 LSA 5,但有 LSA 7),而使用默认路由前往外部网络。然而,NSSA 可以包含 ASBR,这违反了关于末节区域的规则。
router ospf 110
area 2 nssa
绝对末节 NSSA(Total Not-So-Stubby Area):Cisco 路由器也允许将区域配置为绝对末节 NSSA,这种区域可包含 ASBR,但不接受外部路由和来自其他区域的汇总路由(也就是该区域不接受 LSA 3 / 4 / 5,但有 LSA 7)。它使用默认路由前往区域外的网络。
router ospf 110
area 2 nssa no-redistribution //在ABR上做