主要内容包括:OSPF相关术语、OSPF网络类型、常见LSA介绍、OSPF特殊区域、OSPF报文介绍和报文结构、OSPF状态机以及状态机迁移、OSPF工作原理。
OSPF(Open Shorts Path Frist,开放式最短路径优先):是一种内部动态路由协议,用于解决RIP不能是用于大型网络,存在环路的问题;
OSPF的特性:
OSPF常见术语:
- IR(Internal Routers,区域内路由器):设备所有接口都在同一个区内;
- ABR(Area Border Routers,边界区域路由器):设备的接口属于两个或两个以上的区域,其中必有骨干区域。ABR用于连接普通区域和骨干区域,与骨干区域的连接,可以是物理上的连接,也可以是逻辑上的连接(虚链路);
- ASBR(AS Boundary Routers,自制系统边界路由器):设备接口至少一个接收了其他AS系统的路由信息。ASBR通常是在AS系统边界,但也可以在区域间,只要引进了外部路由(直连路由、静态路由、RIP路由、BGP路由等)就是ASBR;
注:ABR和ASBR与物理地址无关,只要能实现相关功能就是ABR或ASBR;- BR(Backbone Routers,骨干路由器):设备接口至少有一个连接骨干区域。ABR和骨干区域内的路由器均是BR;
- 第一类外部路由(Type1 External):经过ASBR引进的内部路由,计算方式为:开销=本设备到达ASBR的开销+ASBR到达目的路由的开销(OSPF区域内部的路由器到ASBR的开销+ASBR达到其他AS系统目的路由的开销);
- 第二类外部路由(Type2 External):经过ASBR引进的内部路由,计算方式为:开销=ASBR到达目的路由的开销(只计算其他AS区域内路由的开销,不计算OSPF区域内到达ASBR的开销);
RID(Router ID,路由ID):用于唯一标识OSPF内的路由器;
RID的生成方式(生成方式按照优先级依次往下):
- 手动配置;
- 如果没有手动配置,就使用路由器环回口的最大IP地址;
- 如果没有配置环回口,就使用路由器物理接口的最大IP地址;
DR/BDR(Designated Router/Back-up Designated Router,指定路由器/指定备份路由器):在广播网络和NBMA网络环境中的角色,用于减少报文在环境中的传输,收集网络环境中的拓扑情况,发送给非DR/BDR,进行路由条目同步;
DR/BDR的选举:
- 比较路由器的接口优先级,优先级最高的为DR,次之为BDR,缺省优先级为1;
- 如果优先级相同,就比较RID,最大的为DR,次之为BDR;
注:在广播网络和NBMA网络中,每个网段都会选举出DR/BDR;优先级为0表示不参与选举;DR与BDR为邻接关系,DR/BDR与Dother为邻接关系,Dother与Dother为邻居关系;
OSPF协议定义了四种网络环境:广播网络、NBMA(非广播网络)、P2P(点到点网络)和P2MP(点到多点网络);
- 广播网络:选举DR/BDR,接口优先级默认为1,hello时间10s,自动发现邻居;组播发送hello、LSU和LSAck报文,单播发送DD和LSR报文;
- NBMA:选举DR/BDR,接口优先级默认为1,hello时间30s,手动设置邻居;单播发送Hello、DD、LSR、LSU和LSAck报文;
- P2P:不选举DR/BDR,接口优先级默认为1,hello时间10s,自动发现邻居;组播发送Hello、DD、LSR、LSU和LSAck报文;
- P2MP:不选举DR/BDR,几口优先级默认为1,hello时间30s,自动发现邻居,组播发送Hello报文,单播发送DD、LSR、LSU和LSAck报文;
注:缺省下,Dead Time(Hello死亡时间)是Hello时间的四倍;在邻接关系建立过程中两端的Hello时间不一致会造成邻居关系建立不成功;
**LSA(Link State Advertisement,链路状态通告)**用于交换和保存整个网络的链路状态信息,从而掌握整个网络的拓扑结构,独立计算路由。
LSA常见的类型有6类:1类、2类、3类、5类、4类和7类;
Type1 LSA(Router LSA,路由LSA):
Type2 LSA(Network LSA,网络LSA):
Type3 LSA(Network Summary LSA,网络汇聚LSA):
Type5 LSA(AS External LSA,自治系统外部LSA):
Type4 LSA(ASBR Summary LSA,ASBR聚合LSA):
Type7 LSA(NSSA External LSA,NSSA外部LSA):
OSPF为了使某些性能较低的路由器也能够划入OSPF并减小这些路由的负担,划分了四种特殊区域:stub、Totally stub、NSSA和Totally NSSA区域;
末节区域(Stub Area):为某些性能较低并处于AS边界的路由器设置的优化策略;
前提条件:
存在的LSA:将Type4 LSA和Type5 LSA过滤,并由ABR生成一条Type3 LSA默认路由并通告给本区域内的所有路由器,使得本区域能够通过默认路由访问其他其余的路由器;
完全末节区域(Totally Stub Area):stub区域的优化版,过滤的更加彻底,有效的减少路由数量;
前提条件:
存在的LSA:将Type3、Type4 LSA和Type5 LSA过滤,并由ABR生成一条Type3 LSA默认路由并通告给本区域内的所有路由器,使得本区域能够通过默认路由访问其他其余的路由器;
NSSA区域:上述两种区域的升级版,降低了特殊区域所需的前提条件;
前提条件:
存在的LSA:将Type4 LSA和外部Type5 LSA过滤并在ASBR上将本区域的Type5 LSA转化为Type7 LSA,然后在ABR上将本区域Type7 LSA转化为Type 5 LSA发送给其他区域,并由ABR生成一条Type7 LSA默认路由并通告给本区域内的所有路由器,使得本区域能够通过默认路由访问其他区域的AS路由;
完全NSSA区域(Totally NSSA Area):NSSA区域的优化版
前提条件:
存在的LSA:将Type3 LSA、Type4 LSA和外部Type5 LSA过滤并在ASBR上将本区域的Type5 LSA转化为Type7 LSA,然后在ABR上将本区域Type7 LSA转化为Type 5 LSA发送给其他区域,并由ABR生成一条Type7 LSA默认路由和一条Type3 LSA默认路由并通告给本区域内的所有路由器,使得本区域能够通过默认路由访问其他区域的AS路由和其他区域的路由器;
注:OSPF骨干区域也是一种特殊区域,OSPF骨干区域是Area ID为0,不同区域之间的报文交换都必须经过骨干区域,并且其他非骨干区域必须直接或间接与骨干区域相连,因此OSPF网络必须要有骨干区域。
OSPF五种报文包括:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文;
五种报文的作用如下:
- Hello报文:建立和维护路由器之间的邻接关系,用于向邻居证明自己的存在;
- DD报文(Database Description,数据库描述):包含有LSDB(链路状态数据库)信息的LSA摘要,用于比对LSDB(链路状态数据库)是否存在缺少的LSA;
- LSR报文(Link State Request,链路状态请求):向邻居请求本设备缺少的LSA信息;
- LSU报文(Link State Update,链路状态更新):按照LSR发送对方缺少的LSA详细信息;
- LSAck报文(Link State Acknowledge,链路状态应答):表明收到了本设备所缺少的LSA详细信息;
OSPF的五种报文(hello、DD、LSR、LSU和LSAck)采用的都是相同的OSPF报头;
注:OSPF报文解析在没有特殊说明的情况下,默认为广播网络环境=
报文字段 | 说明 |
---|---|
Version | 版本字段,指定当前OSPF协议使用的版本号,OSPFv2版本值为2; |
Packet Type | 报文类型字段,标识报文类型,数值为1-5,分别对应五种报文; |
Packet Length | 包长度字段,标识整个报文的字节长度(OSPF报头和各报文内容); |
Router ID | 路由器ID字段,指定发送者的源路由器ID; |
Area ID | 区域ID字段,指定发送报文的路由器接口所在的OPSF区域ID |
Checksum | 校验和字段,对整个报文(不包含验证字段)的校验和,用于对端路由器确定报文的完整性和正确性; |
Auth Type | 验证类型字段,0为不认证、1为简单认证、2为MD5认证 |
Authentication | 验证字段,不认证时没有该字段无数据;简单认证时此字段为验证密码;MD5认证时此字段为MD5摘要信息; |
报文字段 | 说明 |
---|---|
Network Mask | 子网掩码字段,指定发送报文的路由器接口的子网掩码 |
Hello Interval | Hello发送时间间隔字段,指定路由器发送报文的时间间隔,缺省为10s; |
Options | 可选项字段,置“0”代表没有相应特性,置“1”代表具有相应特性,特性包括:E 是否允许泛洪AS-external-LSA;MC 是否允许转发IP组播报文;N 是否允许处理Type7 LSA;DC 是否允许处理按需链路; |
Rtr Pri | 优先级值字段,指定本路由器的DR优先级值,默认为1; |
Router DeadInterval | Hello死亡时间间隔字段,指定本地路由器失效时间,默认为40s;如果在该时间内没有收到Hello报文,就表明邻居失效; |
Designated Router | DR路由器IP地址字段,指明本路由器的DR接口的IP地址; |
Backup Designated Router | BDR路由器IP地址字段,指明本路由器的BDR接口的IP地址; |
Neighbor | 邻居路由ID字段,指明邻居路由器的RID,可以有多个邻居; |
报文字段 | 说明 |
---|---|
Interface MTU | 接口MTU字段,指明发送报文的接口在不分段的情况下,可发送的最大值 |
Options | 可选项字段,置“0”代表没有相应特性,置“1”代表具有相应特性,特性包括:E 是否允许泛洪AS-external-LSA;MC 是否允许转发IP组播报文;N 是否允许处理Type7 LSA;DC 是否允许处理按需链路; |
I | 指定连续发送多个DD报文所处的位置,置“1”代表第一个报文,置“0”代表其他报文; |
M | 指定连续发送多个DD报文所处的位置,置“0”代表最后一个报文,置“1”代表其他报文; |
M/S | 主从关系字段,本端为Master设备就置为“1”,为Salve就置为“0”; |
DD Sequence Number | 序列号字段,指定发送报文使用的序列号,保证报文的正确性和可靠性; |
LSA Header | 摘要字段,指定报文中包含的LSA头部,可以同时包含多个LSA摘要; |
注:MTU值不一致会导致状态机一直停留在Exstart状态
报文字段 | 说明 |
---|---|
LSA Type | LSA类型字段,指明请求的LSA类型,取值为1-5,对应相应类型; |
Link State ID | 指定OSPF所描述的部分区域,该字段根据LSA类型不同而不同,Type1 LSA时,该字段为产生该LSA的路由器ID;Type2 LSA时,该字段为DR;Type3 LSA时,该字段为目的网络地址;Type4 LSA时,该字段为ASBR的RID;Type5 LSA和Type7 LSA时,该字段为目的IP地址; |
Advertising Router | 通告路由类型,指定发送LSR报文的路由器ID; |
LSU 报文结构:
报文字段 | 说明 |
---|---|
Number of LSA | 指定报文中LSA的数量 |
LSAs | 包含完整详细的LSA信息,同一个报文可以有多条详细LSA |
报文字段 | 说明 |
---|---|
LSA Age | LSA时间字段,指明LSA产生后经过的时间,单位为秒。LSA在本地LSDB会随时间老化,当泛洪扩散时,路由器会将LSA的老化增加一个Trans-delay时间; |
Options | 可选项字段,置“0”代表具有相应特性,置“1”代表具有相应特性,特性包括:E 是否允许泛洪AS-external-LSA;MC 是否允许转发IP组播报文;N 是否允许处理Type7 LSA;DC 是否允许处理按需链路; |
LSA Type | LSA类型字段,指明应答的LSA类型,取值为1-5,对应相应类型; |
Link State ID | 指定OSPF所描述的部分区域,该字段根据LSA类型不同而不同,Type1 LSA时,该字段为产生该LSA的路由器ID;Type2 LSA时,该字段为DR;Type3 LSA时,该字段为目的网络地址;Type4 LSA时,该字段为ASBR的RID;Type5 LSA和Type7 LSA时,该字段为目的IP地址; |
Advertising Router | 通告路由字段,指定发送LSAck报文的RID; |
LSA Sequence Number | LSA序列号字段,指定发送报文使用的序列号,保证报文的正确性和可靠性; |
LSA Checksum | 校验和字段,对LSAck报文进行校验,确保接收方收到该报文是可靠的,安全的; |
Length | 长度字段,标识LSAck的字节大小; |
介绍各个状态机的作用以及迁移过程。
- Down:所有OSPF设备的初始状态,发送包含有自己RID等信息的Hello请求报文;
- Attempt:在NBMA网络中,邻居失效时间超时后,仍没收到hello应答报文,然后不断轮询发送hello报文;
- Init:收到不包含有自己DR的hello报文就跳转到Init;
- 2-way:收到包含有自己DR的hello报文就跳转到2-way;
- Exstart:进行DR/BDR选举,建立邻居关系。发送空的DD报文,用于选举Master/Salve设备,并确定序列号;
- Exchange:发送带有LSA摘要的DD报文并接收邻居发送的DD报文,用于比较本设备LSDB(链路状态数据库)里所缺失的LSA;
- Loading:向其他设备发送LSR报文请求缺少的LSA,其他设备按照LSR报文回复LSU报文;
- Full:两端设备的LSDB同步完成后,相互发送LSAck报文;
注:状态机的切换不一定要依次切换,只要符合某个状态机的工作情况就会切换到该状态;
在初始阶段,两端设备都处于Down状态,假定在广播网络且R1首先发送只包含有自己DR的Hello请求报文,R2收到对端发送hello报文时,发现该报文不包含有自己的RID,就从Down切换到Init状态,然后发送包含有自己和邻居RID的hello应答报文;
R1收到对端发送hello应答报文后,发现该报文中包含有自己的RID,就会从Down切换到2-way状态,然后将对端的RID加入到本地的邻居表里,再次发送包含有自己和R2路由器ID的hello应答报文,当R2收到包含有自己RID的hello报文,就会从Init切换到2-way状态;
R1和R2都进入2-way状态后,根据先前交互的Hello报文信息,共同进入Exstart状态。在Exstart状态下,R1和R2会选举出DR/BDR(比较优先级和RID),DR/BDR选举完成后,就会发送不含有LSA摘要的DD报文,用于选举出主设备和从设备(RID大的为主设备),并以主设备DD报文的序列号为基础(R1为主设备),主从确定后,从设备R2以主设备的序列号向主设备R1发送LSA Header字段为空,M/S为0(表明自己为从设备)的DD报文并切换至Exchange状态,主设备R1收到R1发送的空DD报文,也从Exstart切换至Exchange状态;
主设备R1开始不断的向从设备R2发送LSA Header不为空的DD报文(LSDB包含有很多的LSA,因此会拆分发送),从设备R2依次收到R1发送的DD报文后,都会按照主设备DD报文的序列号进行响应,当R1发送送完所有的不为空的DD报文就会从Exchange切换到Loading状态,当R2发送完LSA Header为空的DD响应报文后,也会从Exchange切换到Loading;
主设备发送完LSA摘要后,从设备R2根据这些LSA摘要信息查看本地LSDB发现有部分主设备的LSA没有包含,就会向R1发送LSR报文请求自己缺少的LSA,主设备R1收到LSR就会按照要求发送LSU报文(包含有LSR请求的LSA详细信息),R2收到LSU报文后,会将LSU报文包含的LSA详细信息添加进本地LSDB,然后回复LSAck报文,表明自己收到了LSU报文,如果从设备R2发现自己的部分LSA信息主设备R1没有,R2就会变为主设备向R1发送LSA Header不为空的DD报文,R1再发送LSA Header为空的DD应答报文(全部发送完毕),R1就会向R2发送LSR报文,R2收到LSR报文后发送相应的LSU报文,R1回复LSAck报文,至此R1和R2的LSDB同步完成,就切换进Full状态;
注:两端路由的MTU值不同就会一直处于Exstart状态;由于双发都有可能没有对方的LSA,故在DD报文交互的过程中主从关系不是固定的;
上述过程,如下图:
注:“进行DR/BDR选举”、“交互空的DD报文,确定主从设备关系”和"相互进行LSDB同步直至LSA重传列表为空(建立邻接关系)"均为双向交互的过程