OSPF协议基础
IETE(互联网工程任务组)提出了基于SPF算法的链路状态路由协议OSPF。
OSPF基本特点:支持无类域间路由(CIDR)、无路由自环(区域内无环、区域间不一定,利用其他防环机制)、收敛速度快、使用IP组播收发协议数据、支持多条等值路由、支持协议报文的认证-明文/密文,在HELLO包中
路由信息传递与路由计算分离
基于SPF算法
以“累计链路开销”作为选路参考值
链路状态算法的路由计算过程
LSA:用来描述每台路由器周边的网络情况和直连邻居的信息
link:接口IP地址、掩码、cost值(带宽)--反比
state:邻居的信息
形成拓扑结构
区域内 LS LSA SPF算法 选路最优、无环 LSDB要一致
区域间 DV 抽象化为路由信息 选路不一定最优、不一定100%无环 LSDB不要求一致
OSPF的工作过程
step1:邻居建立
step2:同步链路状态数据库
step3:计算最优路由
自治系统:
Router ID:
用于在自治系统中唯一标识一台运行OSPF的路由器,每台运行OSPF的路由器都有一个RID(32位的无符号整数,其格式和IP地址的格式一致)。
运行OSPF协议的每台路由器的名字、标识。跟路由完全没任何关系
表现形式:点分十进制,例1.1.1.1 可配任意,排除0.0.0.0
自动选举原则:
(1)逻辑口(取大)
(2)物理号(取大)
RID一旦选举出来,在邻居关系建立起来的情况下就是一个稳定状态
推荐手动配置RID,更加稳定
[R1] router id 1.1.1.1 //指定全部进程的RID为1.1.1.1
[R1]ospf 1 router id 1.1.1.1(优先) //指定ospf进程1的RID为1.1.1.1,更精确
要求:全网唯一,如果直连的两台路由器RID冲突,则无法建立邻居关系;如果不直连的两台路由器RID冲突,则学习不到LSA--路由消息
network宣告
(1)network命令所包含的接口将会周期性的向外发送路由更新或hello包
(2)network命令所包含的接口所属的网络号信息将会被通告给其他路由器
推荐:精确到接口IP来宣告
OSPF中的邻居和邻接关系
邻居(2-way):交互了hello包,但不会传递LSA或路由
邻接(full):交互了LSA或路由
ospf邻居关系建立的必要条件
(1)RID不能冲突
(2)两端宣告进同一区域中
(3)网络类型要保持一致
(4)MA网络中接口的掩码长度要一致
(5)认证类型和密码要保持一致
发现并建立邻居--Hello报文
Hello报文的作用:
- 邻居发现:自动发现邻居路由器,为后续可达性信息的同步做准备
- 邻居建立:完成Hello报文中的参数协商,建立邻居关系
- 邻居保持:通过Keepalive机制,检测邻居运行状态--周期性的Hello报文发送可以实现邻居保持的功能
OSPF邻居建立过程
状态含义:
Down:邻居的初始状态,表示没有从邻居收到任何信息。
Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己的RID不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。
2-way:在此状态下,路由器发现自己的RID存在于收到的Hello报文的邻居列表中,已确认可以双向通信。
注:因为邻居是未知的,OSPF采用组播的形式发送Hello报文(目的地址 224.0.0.5)
发现并建立邻居--手动建立
对于不支持组播的网络可以通过手动配置实现邻居的发现与维护。
应用场景不太多
链路状态信息
链路信息主要包括:
1、链路的类型
2、接口IP地址及掩码
3、链路上所连接的邻居路由器
4、链路的带宽(开销)
区别于RIP路由器之间交互的路由信息,OSPF路由器同步的是最原始的链路状态信息,而且对于邻居路由器发来的链路状态信息,仅作转发。最终所有路由器都将拥有一份相同且完整的原始;链路状态信息。
每台运行OSPF协议的路由器所描述的信息中都应该包括链路的类型、接口IP地址及掩码、链路上的邻居、链路的开销等信息。
网络类型
所谓网络类型是指运行OSPF网段的二层链路类型
一、P2P网络
仅两台路由互连
没有DR和BDR的选举
直接形成FULL状态的邻接关系
注:P2P网络是指一段链路上只能连接两台设备的环境,例如PPP链路
当两台设备通过PPP链路进行连接,设备上采用的接口封装协议就是PPP,当激活OSPF时,OSFP会根据接口的数据链路层封装将它网络类型设置为P2P,采用HDLC封装时,缺省网络类型也为P2P。
在P2P网络类型中,5种OSPF报文都是通过组播地址224.0.0.5来发送的。在缺省状态下,接口会以10s的周期去发送hello报文。
二、广播型网络
以太网网络
需要进行DR和BDR的选举
注:BMA是一个支持广播的网络环境,允许多台设备接入,任意两台设备都可以进行二层通信。
在BMA网络中需要选举DR和BDR
BMA中以组播的形式发送hello报文,LSU报文,LSAck报文,以单播的形式发送DD报文和LSR报文。
所有的OSPF路由器都会侦听224.0.0.5这个组播地址,当要发送给所有路由器时,目的地址为224.0.0.5.
DR和BDR会侦听224.0.0.6这个组播地址,当要发送给DR和BDR时目的地址为224.0.0.6.
此处的发送指的是OSPF报文。
缺省情况下,BMA发送hello报文的时间间隔为10s
三、NBMA网络
非广播多路访问(完全相连的FR网络)
不能发送广播和组播报文,所以在帧中继网络中,OSPF没有办法通过发送hello包来建立邻居,只能使用单播方式,命令为peer x.x.x.x
注:NBMA虽然也允许多台设备接入,但是它并不具备广播功能。为了顺利的进行邻接关系的建立,一般用单播的形式去发送hello报文。在NBMA网络中,也会进行DR和BDR的选举。
缺省情况下,hello报文会以30s的周期被接口发送。
四、P2MP网络
不完全相连的FR网络
不需要进行DR和BDR的选举
注:这种网络类型并不是根据接口封装自己设置的,而是需要管理员手动配置。在这种网络种无需选举DR和BDR。
OSPF在P2MP网络类型的接口上,以组播的形式发送hello报文,以单播的形式发送其他报文。
缺省状态下hello报文的发送间隔为30s.
修改网络类型:int g 0/0/0 ospf network-type broadcast/nbma/p2mp/p2p
OSPF的度量方式
某接口cost=参考带宽/实际带宽,默认带宽为100M。当计算结果有小数点时,只取整数位;结果小于1时,cost取1
更改cost的两种方法:
1、直接在接口下配置
2、修改参考带宽(所有路由器都需要修改,确保选路一致性)
累计cost:流量从源网络到目的网络所经过所有路由器的出接口的cost值累加
报文类型及作用
1、RIP路由器之间是基于UDP 520的报文进行通信,OSPF使用IP承载其报文,协议号为89。
2、在OSPF Packet部分,所有OSPF报文均使用相同的OSPF报文头部:
Version:OSPF版本号,IPv4应当被设置成2,IPv6应当被设置为3
Type:OSPF报文类型,共有五种报文
Packet Length:OSPF报文总长度,包括报文头部。单位是字节
Router ID:生成此报文的路由器的Router ID
Area ID:此报文需要被通告到的区域
Checksum:校验字段,其校验范围是整个OSPF报文,包括OSPF报文头部
Auth Type:0表示不认证;1表示简单的明文密码认证;2表示加密(MD5)认证
Authentication:认证所需的信息,该字段的内容随Auth Type的值不同而不同(鉴定字段,其数值根据验证类型而定。当验证类型为0时未作定义;类型为1时此字段为密码信息;类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息。MD5验证数据添加在OSPF报文后面,不包含在Authenticaiton字段中。)
OSPF的报文定义了OSPF路由器之间的通信的标准与规则。
报文类型
Type | 报文名称 | 报文功能 |
---|---|---|
1 | Hello | 发现和维护邻居关系 |
2 | Database Description | 交互链路状态数据库摘要 |
3 | Link State Request | 请求特定的链路状态信息 |
4 | Link State Update | 发送详细的链路状态信息 |
5 | Link State Ack | 发送确认报文 |
Type=1为Hello报文,用来建立和维护邻居关系,邻居关系建立之前,路由器之间需要进行参数协商,一般默认周期发送10s,超时时间40s。
Type=2为数据库描述报文(DD),用来向邻居路由器描述本地链路状态数据库,使得邻居路由器识别出数据库中的LSA是否完整。
Type=3为链路状态请求报文(LSR)路由器根据邻居的DD报文,判断本地数据库是否完整。如果不完整,路由器把这些LSA记录进链路状态请求列表中,然后发送一个LSR给邻居路由器。
Type=4为链路状态更新报文(LSU),用于响应邻居路由器发来的LSR,根据LSR中的请求列表,发送对应LSA给邻居路由器,真正实现LSA的泛洪与同步。
Type=5为链路状态确认报文(LSAck),用来对收到的LSA进行确认,保证同步过程的可靠性。
DD、LSR、LSU、LSAck与LSA的关系:
DD报文中包含LSA头部信息,包括LS Type、LS ID、Advertising Router、LS Sequence Number、LS Checksum。
LSR中包含LS Type、LS ID和Advertising Router。
LSU中包含完整的LSA信息。
LSAck中包含LSA头部信息,包含LS Type、LS ID、Advertising Router、LS Sequence Number、LS Checksum。
OSPF报文的功能需求
功能 | 实现分析 |
---|---|
发现邻居与保持 | Hello机制即可实现 |
LSA同步 | 双方互相发送LSA,完成同步;同时同步速度更快,占用资源更少 |
可靠性 | 确保LSA同步过程的可靠性 |
RIP设置了Request和Response两种报文来完成路由信息的同步;
OSPF路由器之间为了完成LSA的同步,可以直接把本地所有LSA发给邻居路由器,但是邻居路由器直接同步LSA并不是最好的方式。
更快速、更高效的方式是先在邻居路由器之间传送关键信息,路由器基于这些关键信息识别哪些LSA是没有的、哪些是需要更新的,然后向邻居路由器请求详细的LSA内容。
LSDB同步过程
状态含义:
ExStart:邻居状态变成此状态以后,路由器开始向邻居发送DD报文。Master/Slave关系是在此状态下形成的,初始DD序列号也是在此状态下确定的。在此状态下发送的DD报文不包含链路状态描述。
Exchange:在此状态下,路由器与邻居之间相互发送包含链路状态信息摘要的DD报文。
Loading:在此状态下,路由器与邻居之间相互发送LSR报文、LSU报文、LSAck报文。
Full:LSDB同步过程完成,路由器与邻居之间形成了完全的邻接关系。
1、RTA开始向RTB发送LSR报文,请求那些在Exchange状态下通过DD报文发现的、并且在本地LSDB中没有的链路状态信息。
2、RTB向RTA发送LSU报文,LSU报文中包含了那些被请求的链路状态的详细信息。RTA在完成LSU报文的接收之后,会将邻居状态从Loading变为Full。
3、RTA向RTB发送LSAck报文,作为对LSU报文的确认。RTB收到LSAck报文后,双方便建立起了完全的邻接关系。
OSPF邻居状态机
这是形成邻居关系的过程和相关邻居状态的变换过程
Down:
Attempt:
Init:
2-Way Received:
2-Way:
1-Way Received:
ExStart:
Exchange:
Loading:
Full:
LSA头部
LSA是OSPF链路状态信息的载体。LSA是LSDB的最小组成单位,也就是说LSDB由一条条LSA构成的。
所有的LSA都拥有相同的头部,关键字段的含义如下:
LS age:
LS type:
Link State ID:
Advertising Router:
LS sequence number:
LS type、Link State ID和Advertising Router的组合共同标识一条LSA。
LSDB中除了自己生成的LSA,另一部分是从邻居路由器接收到的。邻居路由器之间相互更新LSA必然需要一个“通道”。
DR与BDR的选举及作用
什么情况下会选举DR、BDR:
MA(多路访问型)网络
(1)BMA(支持广播的多路访问型网络):以太网
(2)NBMA(不支持广播的多路访问型网络):帧中继
串行接口:不选举DR、BDR,直接能形成FULL状态邻接关系
MA网络中的问题
在一个有n个路由器的网络,会形成(n×(n-1))/2个邻接关系。
邻居间LSA的泛洪扩散混乱,相同的LSA会被复制多份。
选举DR的目的:
减少MA网络中的邻接关系的数量
降低OSPF协议流量
MA网络中路由器接口的角色:
DR:即指定路由器,负责在MA网络建立和维护邻接关系并负责LSA的同步
注:DR与其他所有路由器形成邻接关系并交换链路状态信息,其他路由器之间不直接交换链路状态信息。
DR一旦出现故障,其与其他路由器之间的邻接关系将全部失效,链路状态信息库也无法同步。需要重新选举DR
伪节点是一个虚拟设备节点,其功能需要某台路由器来承载。
BDR:即备份指定路由器,规避单点故障风险,通过选举备份指定路由器BDR,在DR失效时快速接管DR的工作。
DRother(既不是DR又不是BDR)
DR选举规则:
DR/BDR的选举是基于接口的;
接口的DR优先级越大越优先;
接口的DR优先级相等时,Router ID越大越优先。
修改接口优先级:
int g 0/0
ospf dr-priority 0-255
注:接口优先级设置为0,则不参与DR/BDR的选举,只能成为DRother
DR非抢占的特点:
Router Priority最大的路由器不一定是DR/BDR
wait:40s
新加入的路由器不会抢占现有的DR,只有当DR或BDR故障时,才能重新选举;
如果DR故障,BDR立刻成为新的DR,剩下的所有路由器会选举出一个BDR;
如果BDR故障,DR位置不动,剩下的所有路由器会选举出一个BDR;
总结:这种选举机制的目的是为了保持邻接关系的稳定,减小拓扑结构的改变对邻接关系的影响。
邻居(Neighbor)和邻接(Adjacency)
OSPF路由器之间建立邻居关系后,进行LSDB同步,最终形成邻接关系。
网络类型 | 是否和邻居建立邻接关系 |
---|---|
P2P | 是 |
Broadcast | DR与BDR、DRother建立邻接关系;BDR与DR、DRother建立邻接关系;DRother之间只建立邻居关系 |
NBMA | DR与BDR、DRother建立邻接关系;BDR与DR、DRother建立邻接关系;DRother之间只建立邻居关系 |
P2MP | 是 |
来源:51CTO
作者:wx59f044b59e5c3
链接:https://blog.51cto.com/13429235/2456258