OSPF协议
是是无类别链路状态型IGP协议;由于其基于拓扑进行更新收敛,故更新量会随着拓扑的变大而呈指数上升;故ospf协议为了能在大、中型网络中运行,需要结构化的部署----合理的区域划分、良好的地址规划。
支持正常等开销负载均衡;
跨层封装协议,协议号是89;
组播更新 224.0.0.5 224.0.0.6 触发更新+周期更新(30min)
周期更新的目的是为了什么?
保活
路由协议工作原理分类如下:
距离矢量 | 链路状态LS |
---|---|
RIP | OSPF |
EIGRP | ISIS |
距离矢量:邻居间共享路由条目;传闻性协议 | |
链路状态:邻居间传递的是拓扑;本地计算路由 |
链路状态协议为什么这么干?把自己搞的那么复杂是为了什么?
避免出环
链路状态工作的缺点是什么?
资源耗费大
三个方面判断路由协议好不好:
- 收敛速度
- 选择路径佳(前提防环)
- 占用资源少
OSPF的数据包—5种
hello包 — 组播收发,用于邻居、邻接关系的发现、建立、周期保活
DBD — 数据库描述包,本地LSDB(链路状态数据库)目录
LSR — 链路状态请求,用于询问对端本地未知的LSA信息
LSU — 链路状态更新,用于共享具体的每一条LSA
LSack — 链路状态确认,确认包
LSA — 链路状态通告,具体的一条一条路由或者拓扑信息,不是一种数据包,所欲的LSA是使用LSU这种包来转发的;
OSPF的数据包是跨层封装与3层报头后方,协议号89
OSPF的状态机
两台OSPF路由器间不同关系的阶段
Down 一旦接收到对端的hello包进入一个状态;
Init初始化 若接收到的hello包中存在本地的RID,那么进入下一个状态机;
2way双向通讯 邻居关系建立的标志;
条件:点到点网络直接进入下一个状态机;MA网络进行DR/BDR选举,非DR/DBR之间不能进入下一个状态机;
Exstart预启动 使用不携带数据库目录信息的DBD包,进行主从关系的选举,RID数值大为主,优先进入下一个状态机;
exchange准交换 使用携带数据库目录信息的DBD包,进行目录共享,需要ACK确认;
loading加载 接收到其他邻接目录信息后,和本地进行比对,若本地存在未知的LSA信息,将使用LSR询问对端,对端使用LSU来更新这些LSA信息,直到双方数据库一致;LSU需要ACK确认;
full转发 标志着邻接关系已经建立;
OSPF的工作过程
路由器上启动OSPF协议后,直连的邻居间开始组播收发hello包,hello包中将存储本地已知邻居的RID,在双方RID均已知的情况下,建立邻居关系,生成邻居表;
邻居关系建立后,邻居间将进行条件匹配,匹配失败将停留为邻居关系,仅hello包存活即可;匹配成功将进行邻接关系的建立;
邻接关系间的路由器,将使用DBD/LSR/LSU/LSack来获取本地未知的所有LSA信息;使得同一区域内所有路由器的数据库完全一致;----数据库表
当本地数据库完成同步后,将数据库—>有向图—>树形结构图—>将本地到达所有未知网段的最短路径加载在本地路由表中;
收敛完成,仅hello包周期保活即可;正常30min,邻接关系再进行一次DBD的对比,若一致及正常;若不一致将马上进行同步;
结构突变:触发更新
- 断开网段
直连断开网段的设备,直接使用LSU告知邻接,需确认 - 新增网段
直连新增网段的设备,直接使用LSU告知邻接,需确认 - 无法沟通
hello time对应的dead time;dead time 到时时,断开邻居关系,去除基于该邻接共享的LSA计算所得路由;
OSPF的基本配置
[r1]ospf 1 router-id 1.1.1.1 启动时,定义进程号,仅具有本地意义;建议配置RID
RID格式为IPV4地址,且需要全网唯一;
优先级:手工配置--->环回接口上去最大值的ip地址---物理接口上最大ip地址的数值
宣告:1、区域划分 2、接口激活协议 3、传递接口信息
[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—区域边界路由器 两个区域间必须依靠ABR连接
启动配置完成后,邻居间使用hello包创建邻居关系,生成邻居表;
hello包----组播收发 周期发送—hello time 10s或30s dead time为hello time 4倍;
邻居间hello包中有一些参数必须完成一致,否则无法间例邻居关系;
hello和dead time、区域ID、认证参数、末梢区域标记;另外在华为的设备中OSPF要求邻居间接口上配置的ip地址、掩码长度必须一致;
[r1]display ospf peer 查看邻居表
[r1]display ospf peer brief 查看邻居关系简表
当邻居关系建立后,邻居间进行条件匹配,匹配失败,将保持邻居关系;匹配成功,将建立邻接关系,邻接关系间将使用DBD/LSR/LSU/LSack来获取本地未知的所有LSA信息,同步生成数据库表—LSDB链路状态数据库
[r1]display ospf lsdb 查看数据库表
数据库表同步完成后,邻居间的互动完成,仅hello包保活;之后本地基于本地的数据库表转换为有向图,在转换为树型结构,最终将本地到达所有未知网段的最短路径加载于本地的路由表中;
<r1>display ip router-table protocol ospf 查看ospf路由
默认ospf协议在华为设备中,优先级为10;度量为cost值;
cost值=开销值=参考宽带/接口宽带 默认参考宽带为100M;
ospf协议将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
修改默认带宽
切记:一旦修改,整个网络所有ospf路由需要一致;
关于ospf的MTU问题:
在ospf协议的DBD包中将携带本地接口的MTU值,若两端一致可以正常建立邻居关系;若不一致将无法建立邻接关系;
默认华为设备不携带MTU;
[r1-ospf-1]int g0/0/1
[r1-GigabitEthernet0/0/1]ospf mtu-enable
两端设备均需开启
关于ospf协议从邻居建立成为邻接的条件
根据网络类型决定
在点到点网络中,所有的邻居关系必然成为邻接关系
在MA网络中从邻居到邻接前将利用一个周期dead time;进行DR/BDR选举;先比较这些参选接口的优先级,默认1,取值范围0-255;越大越好,0表示不参选;
DR优先级最大,BDR次大;选举非抢占,故若希望干涉选举,需要重启ospf进程,或者将非DR/BDR修改为0;
[r2]int g0/0/1
[r2-GigabitEthernet0/0/1]ospf dr-priority 3 修改dr优先级
<r2>reset ospf process
Warning:The OSPF process will be reset.Continue?[Y/N]:y
重启进程
非DR/BDR间为邻居关系;
ospf的接口网络类型
ospf协议在不同的网络类型中工作方式也不同
[r1]display ospf interface GigabitEthernet 0/0/1
网络类型 | ospf接口网络类型工作方式 |
---|---|
LoopBack | P2P(LoopBack)无hello 环回使用32位主机 |
点到点(PPP/HDLC/GRE) | P2P 10s hello time 不选DR/BDR |
BMA(以太网) | Broadcast 10s hello time 选DR/BDR |
NBMA(MGRE) | P2P |
在Tunnel接口上,ospf的默认工作方式为P2P,这种工作方式,只能建立一个邻居,故在MGRE环境中将无法正常工作; |
修改接口默认工作方式:
[r1]interface Tunnel0/0/0
[r1-Tunnel0/0/0]ospf network-type ?
broadcast Specify OSPF broadcast network
nbma Specify OSPF NBMA network
p2mp Specify OSPF point-to-multipoint network
p2p Specify OSPF point-to-ponit network
切记:一个网段中所有接口的ospf工作方式必须一致;否则将无法建立邻居关系,或因为不同工作方式的hello time一样,错误建邻,无法收敛;
MGRE可以构建不同的拓扑结构:
当MGER环境中,使用OSPF,切所有tunnel接口修改为broadcast工作方式后,必须基于拓扑接口考虑DR位置问题;
1.星型–中心到站点–轴辐状 中心站点为DR,取消BDR
2.全连网状----不需要在关注DR
3.部分网状—基于能够全网段内正常共享LSA来考虑最佳DR位置