OSPF(链路状态路由协议):Open Shortest Path First开放式最短路径优先协议

是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部。OSPF支持等开销负载均衡。

无类别链路状态型IGP协议

链路状态协议的更新量随着网络范围的扩展指数性的上升,因此ospf协议为了在中大型网络中工作,需要结构化的部署:区域划分、合理ip地址规划。

周期更新(30min),触发更新;组播更新:224.0.0.5-all ospf 224.0.0.6-DR/BDR

跨层封装3层报头

协议号:89

SPF算法

区域水平分割

区域内传拓扑,区域间传路由。

版本区别:

OSPFv2用于IPv4,基于网络运行。

OSPFv3用于IPv6,基于链路的。

特点:

无环路,收敛快,扩展性好,支持认证

OSPF的数据包类型:
OSPF数据包的头部类型:

Version Number:版本号

Type:类型

Packet Length:包长

Router ID:标识路由器号

Area ID:区域号

Checksum:校验位

Authentication Type:认证类型

Authentication:认证密码

Data:数据

工作原理:
相关名词:

LSA:链路状态通告;一条包含了路由及拓扑的信息,但它不是一个包,是被LSU包来携带。

LSA洪泛:OSPF的收敛行为,需要整个网络接收到同一条LSA。

LSDB:链路状态数据库;所有LSA的集合。

LSDB同步:OSPF的收敛行为,整个网络LSDB需要一致。

三张表:

邻居表:主要记录形成邻居关系路由器。

数据库表:记录链路状态信息。

路由表:通过数据库表得出。

五种包:

Hello包:发现并建立邻居、邻接关系,周期保活;携带Router ID。Hello time:10s或30s,Dead time为Hello time的4倍。

DBD包:数据库描述包;本地数据库目录;发送链路状态头部信息。

LSR包:链路状态请求;把从DBD中找出需要的链路状态头部信息传给邻居,请求完整信息。

LSU包:链路状态更新;将LSA发给邻居。

LSACK包:链路状态确认;收到LSU报文后确认该报文。

七个状态机:

HELLO包

1.Down:一旦接收到hello包,进入下一个状态机;没有启用OSPF的状态机,邻居失效后变为该状态。

2.Init:初始化状态,一旦收到对端发来的hello包,存在本地的RID时,进入到下一个状态机。

3.2-way:邻居状态,邻居关系建立的标志;相互间周期发送hello的状态(双向通讯)。

关注条件:点到点网络类型直接进入下一个状态机

DBD包

4.Exstart:预启动,交换信息的初始化状态;发送不携带目标信息的DBD包(包含本地的LSA的摘要信息),选举主从路由器利用hello包中的RID和优先权来进行选举,RID大为主,不允许抢占,DR没了,BDR才能上),然后进入下一个状态机;解决了目录共享时的无序。

5.Exchange:准交换,交换信息的状态;使用携带目标信息的DBD包,共享本地数据库目录。

6.Loading:加载状态(没有学习完的状态);查看完邻接的DBD信息后,对比本地,然后基于本地未知的LSA进行查询;使用LSR向对端查询,对端使用LSU来传输这些LSA信息,本地收到后需要LSACK来进去确认。

7.Full:邻接状态(学习完的状态),邻接关系建立的标志;彼此的LSDB同步,即所有的LSA相同。

工作过程:

启动配置完成后,邻居间开始收发hello包,hello包中将携带本地及本地所有已知邻居的Router ID,建立邻居关系,之后生成邻居表,邻居间需要关注是否可以成为邻接的条件。

若不能建立为邻接,将保持为邻居关系,仅hello包周期保活即可。

若可以建立邻接关系,将使用DBD进行本地数据库目录的对比,之后基于对比的结果,使用LSR/LSU/LSACK来获取本地未知的LSA信息,使邻接关系间数据库(LSDB)完成同步(一致),生成数据库表

之后本地基于LSDB,使用spf算法,生成有向图->最短路径树->计算本地到达所有未知网段的最短路径,将其加载到路由表中,收敛完成。

收敛完成后,邻居和邻接关系间均hello每10s保活,每30min一次邻接关系间周期数据库比对,保障一致。

结构突变:

1.新增网段:直连新增网段的设备,直接使用更新包告知本地的所有的邻接。

2.断开网段:直连断开网段的设备,直接使用更新包告知本地的所有的邻接

3.无法沟通:dead time为hello time的4倍即在4次周期内未收到对端的hello包,将断开与其的邻居关系,删除通过该邻居计算所得路由。

基础配置:

[R1]ospf 1 router-id 1.1.1.1 启动时可以定义进程号、routerD,默认进程1;Router ID格式为IPV4地址,全网唯一;取Router ID顺序:手工配置->环回接口最大数值->物理接口最大数值

宣告:1.划分区域 2.共享拓扑 3.建立邻居

ospf在宣告时,需要使用反掩码,来匹配宣告的地址范围

[R1-ospf-1]
 [R1-ospf-1]area 0
 [R1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0 精确宣告
 [R1-ospf-1-area-0.0.0.0]network 12.1.1.0 0.0.0.255 范围宣告
区域划分规则:

1、星型结构:中心到站点,编号0为骨干区域(中心),大于0为非骨干区域(分支);非骨干区域必须直连骨干区域。

2、必须存在ABR:区域边界路由器,两个区域间互联的设备。

启动配置完成后,邻居间收发hello包,建立邻居关系,生成邻居表

[R2]display ospf peer 查看邻居关系

[R2]display ospf peer brief 查看邻居简表

邻居间在进行邻居关系建立时,hello包有几个参数必须完全一致,否则无法建立邻居关系:

Hello and dead intervals

Area ID(ABR)

Authentication password认证字段

Stub area flag末梢区域标记

华为设备还要求邻居间建立邻居的接口ip地址子网掩码必须一致。

邻居关系建立后,进行条件匹配;匹配失败将保持为邻居关系,仅hello包周期保活;匹配成功可以建立为邻接(毗邻)关系;邻接关系间,将使用DBD进行主从关系选举,再使用DBD进行数据目录的交互,通过LSR/LSU/LSACK来获取本地未知的LSA信息,最终实现所有设备的LSDB一致,生成数据库表

关于DBD几个参数:

1.MTU:OSPF协议会在DBD包中携带与邻居直连接口的MTU值,要求邻居的MTU值必须完全一致,否则将卡在exstart状态机,默认华为设备间不检测这个MTU值。

[R1]int g0/0/1

[R1-g0/0/1]ospf mtu-enable 在于邻居间直连的接口上开启MTU检测,若一端开启,另一端也必须开启

2.隐形确认:一台设备使用和另一台设备一样的序列号来确认对端的数据,OSPF中从向主进行隐性确认。

3.描述字段:I为1标识本地发出的第一个DBD,M为0本地发出的最后一个DBD,MS 为1代表主,S为0代表从。

[R2]display ospf lsdb 查看完整的本地的LSDB(数据库表)

当数据库同步完成后,OSPF将基于本地的LSDB进行SPF算法,生成有向图->最短路径树->计算本地到达所有未知网段的最短路径,将其加载到路由表中。

display ip routing-table protocol ospf 查看ospf路由

display ospf routing 查看本地所有与OSPF相关的路由,发出+接收的度量为cost

华为设备优先级默认10,度量为cost值,cost值=开销值

ospf cost = 参考带宽/接口带宽 默认参考带宽为100M

ospf优选cost值之和最小,为最佳路径;若两条链路cost值之和相同,等开销负载均衡;

若接口带宽大于参考带宽,cost为1,将可能导致选路不佳,建议修改默认的参考带宽。切记:若修改参考带宽,全网需修改的一致。

[R1]ospf 1

[R1-ospf-1]bandwidth-reference ?

INTEGER<1-2147483648> The reference bandwidth (Mbits/s)

[R1-ospf-1]bandwidth-reference 1000

路由表的加表规则:

当学习到多条路由条目时,先比较优先级,优先级值越小(优先级越大)优先加表,如果优先级一致,比较cost值,cost值小的优先加表,如果cost也相同,则同时加表 等开销负载均衡。

扩展配置:
1.DR/BDR选举 减少网络更新量 非抢占型选举

邻居成为邻接关系的条件,与网络类型有关。

OSPF从邻居关系建立为邻接关系的条件:

点到点网络:邻居关系必然成为邻接关系。

MA网络: 由于OSPF不支持接口的水平分割,故若两两设备间均为邻接关系,将导致大量的重复更新,因此必须进行DR/BDR选举,DR/BDR使用组播224.0.0.6;在一个网段中仅DR/BDR与其他路由器为邻接关系;非DR/BDR之间为邻居关系。

选举规则:

1.先比较该网段所有参选设备接口的优先级,越大越优;默认优先级为1;取值范围0-255,0标识不参选。

2.若所有参选者优先级相同,比较参选设备的Router ID,数值大优。

干涉选举:

1.DR优先级最大,BDR次大 注意:ospf的选举是非抢占性的,故在修改完优先级后,需要所有路由器重启OSPF进程。

[R1]interface GigabitEthernet 0/0/1

[R1-GigabitEthernet0/0/0]ospf dr-priority 2 修改接口优先级

reset ospf process DR选举为非抢占行为,故修改优先级需要重启ospf进程

Warning: The OSPF process will be reset. Continue? [Y/N]:y

2.DR优先级修改为最大,BDR次大;其他设备修改为0,退出选举;无需重启进程。

OSPF接口网络类型:

OSPF协议在不同网络类型接口上不同的工作方式。

[R1]display ospf interface GigabitEthernet 0/0/1 查看OSPF协议在该接口的工作方式。

环回:显示P2P,实际为环回专用工作方式 无hello包 32位主机路由传递

点到点(串线、HDLC、PPP):P2P hello time 10s 不选DR 自建立邻居关系

BMA(以太网):Broadcast hello time 10s 选DR/BDR(40s)

NBMA(MGRE):默认接口工作方式为p2p,该工作方式仅允许建立一个邻居关系,导致在MGRE环境中无法建立所有的邻居关系。

可以通过修改接口的工作方式来解决:

注意:在MGRE环境下,若一个网段的部分接口修改为broadcast,其他依然为点到点。由于建邻的条件匹配,故可以建立邻居关系,但Broadcast需要DR,点到点不需要,所以最终不能正常收敛,需要该网段所有节点均为Broadcast。

[R1]int t0/0/0

[R1-Tunnel0/0/0]ospf network-type broadcast 修改接口工作方式为Broadcast

拓扑结构:

中心到站点(轴辐状-星型结构):DR必须定在中心站点,没有BDR 接口全改为Broadcast 三个路由,两个路由只有中心站点路由为邻居,两路由之间不为邻居

全连网状结构:DR/BDR选举正常 接口全为Broadcast 固定ip 路由间均能发送伪广播即三个路由间均为邻居

部分网状结构:基于实际环境关注是否固定DR

2.区域汇总

OSPF协议不支持接口汇总,只能在ABR上将a区域拓扑计算所得路由,共享给B区域时进行汇总。

[R2]ospf 1

[R2-ospf-1]area 0

[R2-ospf-1-area-0.0.0.0]abr-summary 1.1.0.0 255.252.0.0

R2为一台连接区域0和其他区域的ABR;以上操作为:R2将通过区域0学习到的拓扑计算所得的路由,传递给其他区域时进行汇总,汇总网段为1.1.0.0/22。

3.被动接口(沉默接口)

仅接收不发送路由协议信息;用于连接用户终端的接口,不得用于连接邻居路由器的接口,否则无法建立邻居关系。

[R2]ospf 1
 [R2-ospf-1]silent-interface GigabitEthernet 0/0/0
4.认证
 接口认证在直连邻居或邻接的接口上配置,保障更新的安全。
 [R1-GigabitEthernet0/0/1]ospf authentication-mode md5 1 cipher 123456 模式、编号、密码要求邻居间一致
5.加快收敛
 邻居间计时器:10s hello time 40s dead time
 邻居间,修改本端的hello time,本端的dead time自动4倍关系匹配,但ospf中邻居间的hello time和dead time必须完全一致,否则无法建立邻居关系。
 [R1]interface GigabitEthernet 0/0/0
 [R1-GigabitEthernet0/0/0]ospf timer hello 5
6.缺省路由
 边界路由器上配置后,将自动向内网下放一条缺省路由,之后内网设备将自动生成缺省路由指向边界。
 [R4]ospf 1
 [R4-ospf-1]default-route-advertise always
 如果边界路由器已经存在缺省
 [R4]ospf 1
 [R4-ospf-1]default-route-advertise