1. OSPF的背景

由于RIP在大型网络中收敛速度慢,度量值不科学,可扩展性差等问题。提出了OPSF协议来弥补RIP协议的诸多不足

1.1. RIP协议的特性

【零基础收藏必备】全网最详细OSPF协议基础文档_java

1.2. 如何解决


【零基础收藏必备】全网最详细OSPF协议基础文档_java_02

2. OSPF工作过程

2.1. 邻居的建立

2.2. 同步链路状态数据库

2.3. 使用SPF算法计算最优路由


【零基础收藏必备】全网最详细OSPF协议基础文档_java_03

3. OSPF工作原理

3.1. Router ID

3.1.1. Router ID概念

用于唯一标识一台OSPF路由器,格式和IPv4地址格式一样

3.1.2. Router ID的选举规则

1. 选择手工配置的Router ID

2. 没有手工配置Router ID,选择Loopback接口中最大的IP地址

3. 没有配置Loopback接口,选择链路接口中最大的IP地址

(Router ID的选举不能被抢占)

3.2. 邻居的发现和建立(Hello报文)

3.2.1. Hello报文的作用

发现邻居:自动发现邻居的路由器

邻居建立:通过Hello报文进行参数的协商,建立邻居关系

邻居保持:通过Keeplive机制,检测邻居运行状态

3.2.2. 邻居建立的过程

【零基础收藏必备】全网最详细OSPF协议基础文档_java_04

1. 路由器启动OSPF后都会发送hello报文进行邻居的查找。此时Hello报文中Router ID为自己的,neighbor为空,此时双方邻居状态都为Down

2. 当RB收到一个Hello包,有对方的Router ID且neighbor为空,此时就会将自己的邻居状态变为Init。同时回送一个Hello包,Router ID为自己(2.2.2.2),neighbor为对方的Router ID(1.1.1.1)

同理R1也是一样

3. 此时R1收到R2发来的Hello报文(带有Router ID和neighbor)就会将自己的邻居变为2-Way

4. 当双方的邻居状态都为2-Way时,邻居关系建立完成了

Hello包的发送使用组播地址(244.0.0.5)
224.0.0.5 代表所有OSPF路由器
224.0.0.6 代表OPSF的DR\BDR

3.3. 报文的类型及作用

3.3.1. OPSF协议的报文头部


【零基础收藏必备】全网最详细OSPF协议基础文档_java_05

3.3.2. OSPF报文类型

【零基础收藏必备】全网最详细OSPF协议基础文档_java_06

3.3.3. OPSF报文的功能需求

【零基础收藏必备】全网最详细OSPF协议基础文档_java_07

3.4. LSDB同步过程

【零基础收藏必备】全网最详细OSPF协议基础文档_java_08

1. 邻居在ExStart状态时,通过DD报文进行主从选举(不含链路状态的信息)

此时报文包含了Seq、Init、More、Master

Init:表示初始报文

More:后续还有其他报文

Master:表示自己为主路由器(开始都认为自己是主路由器)

第一次发送时Init、More、Master全部置位,双方比较Router ID,Router ID大的为主路由器,此后在LAS的交互中,使用R2的序号

2. 在完成主从协商之后,就可以开始数据库的交互了,此时双方为Exchange状态

此时由从路由器发送DD报文(携带LSA信息),使用主路由器的Seq,并将自己的Master置为0,Init此时也置0。(More=0代表DD报文发送完毕)

3. 完成数据库的交互之后,OPSF路由器会对自己没有的LSA发出请求

通过LSR(请求报文),路由器会请求自己需要的LSA的具体信息

4. 收到LSR的路由器会发送对方需要的LSA

通过LSU(更新报文),路由器会发送对方需要的LSA的具体信息

在第三、四步的时候,邻居状态为Loading

5. 双方完成LSA的更新后,此时变为邻接关系,状态Full

OSPF邻居状态机


【零基础收藏必备】全网最详细OSPF协议基础文档_java_09

3.5. 链路状态信息(LSA)

3.5.1. 链路状态信息的内容(LSA)


【零基础收藏必备】全网最详细OSPF协议基础文档_java_10

链路的类型

P2P网络:仅两台路由器互联;支持广播、组播

广播型网络:两台或两天以上的路由器通过共享介质相连;支持广播组播

NBMA网络:两台或两台以上的路由器通过VC相连(帧中继);不支持广播、组播(需要手动指定邻居)

P2MP网络:多个P2P的集合;支持广播、组播

接口IP地址及掩码

链路上所连接的邻居路由器

链路的开销

OPSF接口开销的计算:Cost=参考带宽值/实际带宽

更改OSPF开销的方式

1. 直接在接口下配置

2. 修改参考带宽(所有路由器都需要修改,以确保选路一致性)

OPSF总开销的计算


【零基础收藏必备】全网最详细OSPF协议基础文档_java_11

3.5.2. 链路状态信息(LSA)头部


【零基础收藏必备】全网最详细OSPF协议基础文档_java_12

LS age:表示LSA的存活时间,越大越旧,越小越新

LS type:LSA的种类

Link State ID:LSA描述的内容(LSA的种类和不同,Link State ID的取值和含义也不同)

Advertisting Router:LSA是由谁产生的

LS Sequnece number:也表示LSA的新旧,越大越新,越小越旧

LS checksum:也代表LSA的新旧,越大越新

Length:长度

比较LSA新旧的时候,先LS Sequnece number、LS checksum、LS age依次比较,如果都比较不出来表示为同一个LSA

3.6. DR和BDR的选举及作用

3.6.1. MA网络中的问题


【零基础收藏必备】全网最详细OSPF协议基础文档_java_13

在这种网络中,会有n×(n-1)/2个邻接关系,管理复杂

重复的LSA泛洪,造成资源的浪费

3.6.2. DR和BDR的作用

减少邻接关系

降低OSPF协议流量

BDR是DR的备份

3.6.3. DR和BDR选举

选举规则:DR和BDR的选举是基于端口的

接口的DR优先级越大越优先

接口的DR优先级相同时,Router ID越大越优先

(DR/BDR的选举不能被抢占)

3.6.4. 邻居和邻接关系


【零基础收藏必备】全网最详细OSPF协议基础文档_java_14