文章目录
前言
RIP是基于距离矢量算法的路由协议,由于应用在大型网络中存在收敛速度慢、度量值不科学、可扩展性差等问题,IETF提出了基于SPF算法的链路状态路由协议OSPF(Open Shortest Path First)
一、OSPF简介
动态路由OSPF,开放式最短路径协议
OSPF v3没有认证
属于IGP(内部网关)协议,链路状态路由协议——不直接传递各路由器的路由表,而传递链路状态信息。
Link State(链路状态)指的是路由器的接口状态
LSA(Link State Advertisement)是路由器之间链路状态信息的载体。
LSA是LSDB的最小组成单位,LSDB由一条条LSA构成。
基本特点
- 收敛速度快:所有路由器各自维护一个链路状态数据库。邻居路由器先同步状态数据库,再各自基于SPF(Shortest Path First)算法计算最优路由,从而提高收敛速度。
- 触发增量更新:一有变动马上更新改变之后的数据。
- 无路由自环
- 支持无类域间路由(CIDR)
- 使用IP组播收发协议数据
- 支持多条等职路由
- 支持协议报文的认证
工作过程:
- 路由器之间发现并建立邻居邻接关系;
- 每台路由器产生并向邻居泛洪链路状态信息,完成LSDB(Link State Database)的同步;
- 通过SPF算法选择最优路由,并形成路由表。
二、Route ID
AS自治系统(Autonomous System):
一个自治系统是指使用同一种路由协议交换路由信息的一组路由器。
以三层设备为主的一个大型网络(比如,ISP互联网提供商)
公有AS 1-64511
私有AS 64512-65535
2字节 1-65535
4字节 65535.65535
Route ID:
一个32位的无符号整数,其格式和IP地址的格式是一样的,用于在自治系统中唯一标识一台运行OSPF的路由器,每台运行OSPF的路由器都有一个Route ID。
Route ID选举规则:
- 自动选举
- 未手动配置,则选Loopback接口中最大的IP地址作为Route ID
- 无Loopback接口,则选物理接口中最大的地址作为Route ID
- 手动配置OSPF路由器的Route ID(通常建议手动配置)
手动配置命令:
[r1] router id 1.1.1.1 (作用于所有需要Router ID的协议)
[r1] ospf 1 router-id 1.1.1.1 (仅用于OSPF)
重置OSPF进程更新Route ID
三、邻居建立
1、Hello报文
Hello报文的作用:
- 邻居发现:自动发现邻居路由器。
- 邻居建立:完成Hello报文中的参数协商,建立邻居关系。
- 邻居保持:通过Keepalive机制,检测邻居运行状态。
OSPF路由器之间在交换链路状态信息之前,首先需要通过Hello报文自动发现并彼此建立邻居关系;同时在形成邻居关系过程中,路由器通过Hello报文完成一些参数的协商;邻居关系建立后,周期性的Hello报文发送实现邻居保持的功能。
2、邻居建立
OSPF-state 状态含义:
- Down:邻居的初始状态,表示没有从邻居收到任何信息。
- Iint:路由器已经从邻居收到了Hello报文,但尚未与邻居建立双向通信关系。
- 2-Way:路由器自己的Route ID存在于收到Hello报文的邻居列表中,已确认可以双向通信。
- Full:表示路由器之间已建立邻接关系。
OSPF采用组播发送报文,自动建立邻居
路由器RTA(Route ID为1.1.1.1)与 RTB(Route ID为2.2.2.2)的邻居建立过程如下:
- RTA启动OSPF后发送第一个Hello报文给RTB,此报文邻居列表为空,RTB收到RTA的Hello报文后,状态由Down转为Init。
- RTB发送Hello报文给RTA,此报文邻居列表为空,RTA收到RTB的Hello报文后,状态由Down转为Init。
联想记忆:RTA与RTB此时并不认识,通过Hello打招呼,相互认识
- RTB向RTA发送邻居列表为1.1.1.1(即:RTA的Route ID)的Hello报文,RTA在收到Hello报文邻居列表中发现自己的Route ID,状态由Init转为2-Way。
- RTA向RTB发送邻居列表为2.2.2.2(即:RTB的Route ID)的Hello报文,RTB在收到Hello报文邻居列表中发现自己的Route ID,状态由Init转为2-Way。
联想记忆:RTA与RTB经过交谈(即:相互发送Route ID),发现大家都住自己隔壁,成为邻居
OSPF采用单播方式,手动建立邻居
对于不支持组播的网络,OSPF支持通过单播方式手动配置实现邻居的发现与维护,但当网络规模较大或设备更新频繁,相关联的OSPF路由器都需要更改静态配置,手动更改配置工作量大且易出错。一般情况下不建议手动配置的方式。
四、链路状态
链路信息主要包括:
- 链路类型;
- 接口IP地址及掩码;
- 链路上所连接的邻居路由器;
- 链路的带宽(开销)
数据链路层的协议类型多种多样,工作机制各不相同,我们必须考虑各类链路层协议在组网时的应用场景,来适配多种数据链路层协议。那OSPF又是如何定义多种网络的?
OSPF所支持的网络类型(OSPF能够在哪些二层协议使用)
OSPF(三层)
网络类型(二层协议)
二层协议:Ethernet以太网(广播型网络)、PPP点到点、FR帧中继
广播,Ethernet
非广播,FR
点到点,PPP
点到多点(不是默认的网络类型)
FR默认的网络类型是NBMA非广播多路访问
全连接,保持默认不变
非全连接,建议修改成为点到多点
MA、P2P网络类型
Timers:Hello 10,Dead 40
NBMA、P2MP网络类型
Timers:Hello 30,Dead 120
LSA(链路状态)类型
谁发的、内容是什么、作用是什么?
OSPF路由器把自身每条链路的情况发给自己的邻居;
1、 所有路由器都会发;链路状态(纯粹的) Router
2、 DR路由器,邻接列表 Network
3、 BDR路由器,将区域间的路由信息相互传递(抽象的路由信息) Sum-Net
4、 BDR路由器,通告ASBR的状态(数据通过ABR再到ASBR,传输至外网。通告ASBR的状态,便是告诉数据传输至外网的出口路径)Sum-Asbr
5、 ASBR路由器,OSPF外部路由信息,标准区域 External
7、ASBR路由器,OSPF外部路由信息,非纯末梢区域 NSSA
MOSPF 组播使用类型6
网络类型 | P2P 网络 | 仅两台路由互连; 支持广播、组播 |
例:两台通过PPP(Point-to-Point Protocol)链路相连的路由器网络 | ||
广播型网络 | 两台或两台以上的路由器通过共享介质互连; 支持广播组播 |
|
例:通过Ethernet以太网链路相连的路由器网络 | ||
NBMA网络 | 两台或两台以上路由器通过VC互连; 不支持广播、组播 |
|
通过全互连的帧中继链路相连的路由器网络 | ||
P2MP网络 | 多个PPP(Point-to-Point Protocol)网络的集合; 支持广播、组播 |
|
例:将非完全连接的帧中继或ATM改为P2MP的网络 |
OSPF为什么有这么多链路状态?
为了便于精确控制链路状态,优化OSPF协议传递,尽可能减少传递OSPF协议数据的带宽,将更多的带宽预留给用户。
核心理念:网络的所有的资源都应该尽可能的预留给用户。
五、OSPF的度量方式
Cost成本值:根据带宽计算成本值
数值越低越好
带宽越高,数值越低,越好
Cost = 参考带宽(默认值100M)/实际带宽
参考带宽默认值 100M
Cost = 100M/100M
Cost = 100M/1000M = 0.1 ? (取值没有小数,只有自然整数;结果小于1时取1)
1000M链路Cost值默认也是1,
所以需要注意100M与1000M网络混合部署的情况,
不然可能会出现次优链路以及不合理的负载均衡
更改cost的两种方式:
- 直接在接口配置;
- 修改参考带宽(所有路由器都需要修改,确保选路一致性)。
命令:
修改Cost值(只作用于这个接口):[g0/0/0] ospf cost XXX
修改参考带宽(作用于所有接口):[ospf-1]bandwidth-reference 1000
OSPF以 “累计cost” 开销值,也就是流量从源网络到目的网络所经过所有路由器的出接口cost总和。
六、报文类型及作用
RIP | OSPF |
---|---|
UDP | IP层 |
端口 520 | 协议号 89 |
OSPF协议报文头部
在OSPF Packet部分,所有OSPF报文均使用相同的OSPF报文头部:
Version(版本):对于当前所使用的OSPF报文均使用相同的OSPF报文头部。
Type(类型):OSPF报文类型。
Packet length(报文长度):表示整个OSPF报文的长度,单位是字节。
Router ID(路由器ID):表示此报文的路由器的Router ID。
Area ID(区域ID):表示此报文需要被通过到的区域。
Checksum(校验和):校验字段,其校验的范围是整个OSPF报文,包括OSPF报文头部。
Auth Type(认证类型):为0时表示不认证;为1时表示简单的明文密码认证;为2时表示加密(MD5)认证。
Authentication(认证):认证所需的信息。该字段的内容随Auth Type的值不同而不同。
OSPF报文类型
Type | 报文名称 | 报文功能 |
1 | Hello | 发现和维护邻居关系 |
2 | Database Description | 交互链路状态数据库摘要 |
3 | Link State Request | 请求特定的链路状态信息 |
4 | Link State Update | 发送详细的链路状态信息 |
5 | Link State Ack | 发送确认报文 |
各个报文作用:
- Hello报文:用来建立和维护邻居关系,邻居关系建立之前,路由器之间需要进行参数协商。(“你第一次与邻居见面、打招呼、交谈”)
- 数据库描述报文(DD):向邻居路由器描述本地链路状态数据库,使得邻居路由器识别出数据库中的LSA是否完整。(“向邻居发送自己的基本信息即摘要,使他知道你是他的邻居”)
- 链路状态请求报文(LSR):路由器根据邻居的DD报文,判断本地数据库是否完整,如不完整,路由器把这些LSA记录进链路状态请求列表中,然后发送一个LSR给邻居路由器。(“判断邻居是否知道你的信息,若不知道,则将信息存储起来,向你发出请求信息”)
- 链路状态更新报文(LSU),响应邻居路由器发来的LSR,根据LSR中的请求列表,发送对应LSA给邻居路由器,真正实现LSA的泛洪与同步。(“根据邻居发送来的请求,再次发送他想要的你自己的信息给他”)
- 链路状态确认报文(LSAck),对收到的LSA进行确认,保证同步过程的可靠性。(“邻居确认收到信息,保证信息没有丢失”)
OSPF报文的功能需求
功能 | 实现分析 |
发现邻居与保持 | Hello机制即可实现 |
LSA同步 | 双方互相发送LSA,完成同步; 同时同步速度更快,占用资源更少 |
可靠性 | 确保LSA同步过程的可靠性 |
七、LSDB同步
LSDB同步即两个路由器建立邻接关系建立在两个路由器互为邻居关系之上。
状态含义:
- Down:邻居初始状态,没有从邻居收到任何信息。
- Attempt:此状态只在NBMA网络上存在,没有收到邻居的任何信息。但是已经周期性的向邻居发送报文,发送时间间隔为HelloInterval。
- Init:尚未与邻居建立双向通信关系(路由器已经从邻居收到Hello报文,但是自己不在所收到的Hello报文的邻居列表中)。
- 2-Way Received:路由器发现与邻居的双向通信已经开始(自己在邻居发送的Hello报文的邻居列表种)。
- 2-Way:双向通信已经建立,但是没有与邻居建立邻接关系(建立邻接关系以前的最高级状态)。
- 1-Way Recieved:路由器发现自己没有在邻居发送Hello报文的邻居列表种(通常是由于对端邻居重启造成)。
- ExStart:路由器开始向邻居发送DD报文(即数据库描述报文)。
- Exchange:路由器与邻居之间相互发送包含链路状态信息摘要的报文,描述本地LSDB内容。
- Loading:路由器与邻居之间相互发送LSR(LS Request)报文请求LSA、LSU(LS Update)报文T通告LSA、LSAck报文。
- Full:LSDB同步过程完成,路由器与邻居之间形成完全的邻接关系。
八、DR与BDR的选举及作用
MA网络中的问题:
- 个邻接关系,管理复杂
- 重复的LSA泛洪,造成资源浪费
DR作用:
- 减少邻接关系
- 降低OSPF协议流量
BDR作用:
- 规避DR单点故障风险
DR与BDR选举规则
DR/BDR的选举是基于接口的
- 接口的DR优先级越大越优先
- 优先级相等时,Router-ID越大越优先
什么是DR和BDR?
避免邻接关系重复建立,链路状态重复描述。
DR邻接关系不能抢占,为什么?
1、 导致邻接关系不稳定
2、 链路状态不稳定
3、 路由表不稳定
4、 数据转发不稳定
命令:
优先级修改:[g0/0/0] ospf dr-prtority 5
修改ospf网络类型:[g0/0/0] ospf network-type ?
两个路由器之前进行Hello 10,每10S一次,进行4次,若四次后即40S后无反应Dead 40,则重新选路。Poll间隔:链路故障检测的时间间隔,120S
MA、P2P网络类型
Timers:Hello 10,Dead 40
NBMA、P2MP网络类型
Timers:Hello 30,Dead 120
只有MA和NBMA网络才需要选举DR,点到点和点到多点不需要选举DR;
OSPF路由器之间先建立邻居关系后,进行LSDB同步,最终形成邻接关系。
网络类型 | 是否和邻居建立邻接关系 |
P2P | 是 |
Broadcast | DR与BDR、DRother建立邻接关系 BDR与DR、DRother建立邻接关系 DRother之间只建立邻居关系 |
NBMA | |
P2MP | 是 |