OSPF——开放式最短路径优先协议
OSPF基础
IETE——国际互联网工程任务组——RFC2328
OSPFV2和RIPV2对比
相同点
1、两者都是无类别路由协议——传播时携带真实掩码
2、两者的更新方式相同——组播
RIPV2——224.0.0.9
OSPFV2——224.0.0、224.0.06
3、两者均支持开销负载均衡
不同点
RIPV2只能应用在小型网络中,OSPFV2可以应用在中大型网络环境
OSPF区域划分——结构化部署
OSPF域(Domain)——将一系列的OSPF路由器组成的网络成为OSPF域。
区域ID:32bit
OSPF多区域划分要求
OSPF要求域中所有的非骨干区域(区域ID部位0的区域)都必须与Area0相连。
骨干区域不能被分割
OSPF区域结构部署规则的必要性
假定没有“所有非骨干区域都必须与骨干区域相连”这条规则——“远离骨干的非骨干”
定义了ABR(区域边界路由器)设备——确保所有人遵循上述规则
1、至少连接两个区域
2、连接的区域中至少有一个是区域0
3、在区域0中至少有一个活跃的邻居
作用:用于传递区域间路由
为了避免区域间的路由形成环路,非骨干区域之间不允许直接相互发布区域间路由
假定没有“骨干区域不能被分割"这条规则——不连续骨干区域
总结
OSPF有如下规则:
1、对于伪ABR设备不允许转发区域间路由信息。
2、对于真实ABR而言
能够将自己直连的非骨干区域的区域内路由信息传递给骨干区域。
能够将自己直连的骨干区域的区域内路由信息传递给非骨干区域。|
能够将自己从骨干区域学习到的区域间路由信息传递给费骨干区域。
OSPF路由器角色
内部路由器(IR)
所有接口都接入同一个区域的路由器
区域边界路由器(ABR)
骨干路由器(BR)
接入Area0的路由器,包括ABR,但不包括ASBR
ASBR(AS边界路由器)
工作在OSPF自治系统边界的路由器
并不是同时运行多种路由协议的ospf路由器就一定是ASBR,ASBR一定是将外部路由
OSPF数据包
Hello
用来周期发现、建立、保活OSPF邻居关系,通过组播224.0.0.5发送。
10S发送一次来曲儿邻居的存在
hold--time——四倍的hello时间
Router-ID (RID)
全域唯一,便是路由器身份
用IP地址形式表示(32bit,点分十进制)
配置方法
手工配置
自动配置
默认最大环回IP地址, ,若没有最大环回则选择最大物理IP地址。
[r1]display router id //查看路由器全局ID值
注意:
启动0SPF进程前,必须要有接口IP地址,若存在IP地址,则在第-次启动OSP F进程时,会选取第一一个配置的IP地址为RID。但是,若删除第一个配置的IP地址后,则回复上述规则。在华为设备在,若没有IP地址,则OSPF启动后,RID为0.0.0.0在思科设备中,若没有接口IP地址,则OSPF启动失败。
无论采用手工配置还是自动选择, -旦OSPF进程启动,RID被确定, 则无法变化,必须重启进程才能生效。
DBD
数据库描述报文
该报文携带的是路径信息的摘要(为了减少更新量,并不会直接给邻居发送TOPO信息,而是将TOPO信息的目录发送给邻居)
LSR
链路状态请求报文
基于末知的LSA (链路状态通告)信息进行查询。
LSU
链路状态更新报文
携带真正的L SA信息的数据包
LSAck
链路状态确认报文
OSPF七种状态机
down——关闭状态:一旦启动了OSPF协议,则发出hello包,并进入下一个状态
init——初始化状态:收到的hello包中,存在自己的RID值,则进入下一状态
2-way——双向通讯状态:邻居关系建立的标志
条件匹配:匹配成功则进入下一-阶段,不成功则停留在2-way|
exstart——预启动状态:使用未携带信息的DBD包进行主从关系选举, RID大的为主
exchange——准交换状态——使用携带目录信息的DBD保卫呢进行目录共享
loading——加载状态:邻居间使用LSR/LSU/LSAck来获取完整的TOPO信息
full——转发状态:修成正果——标志邻接关系的建立
条件匹配
决定了谁给谁传拓扑
设备接口名称
DR:指定路由器
BDR:备份指定路由器
DRother:其他路由器
OSPF称为邻接关系的条件
点到点——不用在选举DR和BDR——直接开始建立邻接关系(J加快收敛的方法)
MA网络——在一个网络中,不限制节点数(会选举DR和BDR)
选举规则
接口优先级:0——255:优先级越大,为DR,次一级为BDR(默认为1)
RID:越大越优先
选举范围——一个广播进行一次条件匹配
角色之间的关系
DR和DRother——邻接关系
DR和BDR——邻接关系
BDR和DRother——邻接关系
DRother和DRother——邻居关系
非抢占性选举模式
选举过程
a. DR、BDR的选举过程是通过Hello报文来实习那的,选举过程发生在2-way状态之后
b..路由器将自己的接口的DR优先级填写hello报文中的“DR优先级”字段
c.在接口试图先可以修改DR优先级(若DR优先级修改为0,则代表不具备DR和BDR的选举资格)
d.当路由器接口激活OSPF后,首先检查网络上是否已经存在DR设备,如果存在接收DR角色;若不存在,则拥有最高DR优先级的设备称为DR(RID)
e.BDR的选举过程和DR选举过程相同,但是在DR选举成功之后。(DR和BDR指的是接口)
DR设备使用组播224.0.0.5想该MA网络发送消息。
而DR和BDR使用224.0.0.6监听该MA网络的消息。
DRother使用224.0.06发送自己的LSU报文。
NBMA网络类型中存在。
在NBMA网络类型下,如果需要启动OSPF协议,需要手工指定邻居,否则不会发送hello报文。
若不发送hello报文,则邻居状态处于attempt状态。
OSPF工作状态
启动OSFP配置完成后,OSPF将向本地所有运行OSPF协议的接口组播224.0.0.5发送hello报文;hello报文中携带有本地的RID以及本地已知的邻居RID;之后生成邻居表。
邻居关系建立后,进行条件匹配;匹配失败则停留在邻居关系;仅hello报文保活
匹配成功的邻居将开始建立邻接关系。
首先使用未携带数据的DBD报文来进行主从关系选举;之后使用携带数据的DBD报文来共享数据库目录;之后本地使用LSR/LSU/LSACK报文来获取未知的LSA信息;
完成本地数据库的建立---生成数据库表。
之后本地基于数据库生成有向图和最短路径树,之后计算本地到达拓扑中所有未知网段的最短路径,并将其添加到路由表中。
收敛完成,hello报文周期保活。每30min进行一次周期更新。
结构突变
1.新增网段----直接在邻接关系的接口使用LSU进行更新,将内容告诉于邻居。并需要邻居的ACK确认。
2.断开网段----直接在邻接关系的接口使用LSU进行更新,将内容告诉于邻居。并需要邻居的ACK确认。
3.无法沟通----dead time----四倍的hello时间。
OSPF基础配置
启动OSPF进程
[r1]ospf 1 router-id 1.1.1.1 //进程号仅具备本地意义,手工配置RID方法
创建区域
[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.0.0.0 0.0.0.255 //宣告网段
宣告使用反掩码形式
32位二进制,使用点分十进制表示。连续的0+连续的1;并且0代表不可变;1代表可变
华为体系中,优先级为10;OSPF的COST====参考带宽(100Mbps)/实际带宽[r1-ospf-1]bandwidth-reference 1000 //修改参考带宽-----所有设备均需修改一条OSPF路径的Cost等于从目的地到本地路由器沿途的所有设备的入接口Cost值的总和。
OSPF报文格式
版本(Version)
对于OSPFv2而言,该字段值恒为2
类型(Type)
描述OSPF数据包的类型
Hello------1
DBD-------2
LSR--------3
LSU--------4
LSACK----5
报文长度(Packet Length)
整个OSPF报文的长度-----单位字节
路由器ID
发出该报文的路由器的RID值
区域ID
发出该报文的接口所属于的区域的ID值
校验和
验证OSPF整体数据报文的有效性
验证类型
指示该报文使用的认证类型
不认证---0;简单认证----1;MD5认证----2;
认证数据
用于报文认证所对比的内容
若认证类型为不认证,则该字段全部用0填充。
OSPF的认证功能在存在于所有的数据交互过程中,对于任何一种数据报文,都需要进行认证。
在认证的过程中,需要对比两个字段,首先对比认证类型字段。
若相同,才会对比认证数据字段。
Hello包
网络掩码(Network Mask)
该字段填充的是发送该报文的网络掩码
两台OSPF路由器如果通过以太网接口直连,那么双方的直连接口必须配置相同的网络掩码。(点到点网络不需要对比该参数)
注意:OSPF建立邻居关系需要对比子网掩码信息是华为独有,别的厂商没有这个要求。
Hello间隔
两台直连路由器需要确保直连接口的Hello时间间隔相同,否则邻居关系无法建立。
缺省情况下,P2P和BMA类型的下,为10S;P2MP和NBMA为30S。
可选项(Options)
该字段一共8bit,每个比特位都用于指示该路由器的某个特定的OSPF特性。
而OSPF邻居关系建立过程中,该字段中的某些比特位将会被检查,可能影响OSPF邻居关系 建立。(特殊区域的标记)
路由器优先级
[r2-GigabitEthernet0/0/0]ospf dr-priority ? //修改OSPF接口的DR优先级
INTEGER<0-255> Router priority value
路由器失效时间
两台直连路由器要建立OSPF邻居关系,需要保证双方接口的dead time时间相同,否则邻居关系无法正常建立。
缺省时间为hello的4倍。
指定路由器
网络中DR设备的接口IP地址。
若没有DR或DR没有选举出来,则填充0.0.0.0
备份指定路由器
网络中DR设备的接口IP地址。
若没有DR或DR没有选举出来,则填充0.0.0.0
邻居
在直连链路上发现的有效邻居,此处填充的是邻居的RID值,如果发现多个邻居,则包含多个邻居字段。
所有224.0.0.X格式的组播地址称为本地链路组播,目的IP地址是本地链路组播的数据包中的TTL值被设定为1。所有的本地链路组播都会存在对应的组播MAC地址,01-00-5e-后24位(组播IP地址的后24位)。
限制邻居关系建立的参数
子网掩码
在R2上修改网络掩码后,
R2会将与R3的状态立即修改为Down状态。而R3会在40S死亡时间之后进行状态切换。
原因在于,R2在修改IP地址的掩码后,会认为之前的连接中断,需要重新建立连接,所以重置状态机。
而R3则认为是无法沟通。故会等待死亡时间超时后才切换状态。
并且,该情况,在R3等待40S周期内,还是可以向R2转发数据,R2可以接收到该数据包,但无法回复。
影响建立连接方式
Hello时间
[r1-GigabitEthernetoro/0]ospf timer hello 20
Dead时间
[r1-GigabitEtherneto/0/0]ospf timer dead 120
注意:修改hello时间,则死亡时间随之改变,而仅修改死亡时间,hello间隔时间不变。
OSPF特殊区域标记
跟修改掩码效果相同。
认证字段
两者均需要等待死亡时间超时,才会从full状态切换到down状态。
DBD包
使用未携带数据的DBD报文进行主从关系选举
使用携带数据的DBD报文进行目录信息共享
使用未携带数据的DBD报文进行确认
接口最大传输单元(接口的MTU)
华为将该值设置为0
华为默认不对MTU值进行检测
[r1-GigabitEtherneto/0/0]ospf mtu-enable
如果两边均开启该功能,则会进行MTU检测,若两边不同,则状态卡在exstart状态。
I位——主从关系选举
如果该位置为1,则不会携带LSA头部。
M位——代表后续是否有多个DD报文
置为1,则代表后续还有DD报文
置为0,则代表该报文为最后一个DD报文
MS位——代表主设备
该比特位置为1,则代表Master
在主从关系选举完成之前,各个设备均会认为自己的master。
DD序列号
用于确保DD报文传输的有序和可靠性——DD序列号逐次加1(与TCP序列号效果相同)
DD序列号必须是由Master路由器决定,而从设备只能使用Master设备发送来的DD序列号来发送自己的DD报文。(隐性确认机制——通过对方发送序列号来起到确认机制)
LSA头部
当路由器使用DD报文来描述自己的LSDB时,LSA的头部信息被包含在内。
一个DD报文可以包含—
LSR包:链路状态请求报文
基于DBD报文请求本地未知LSA信息
LSR使用单播:修复重复更新
LSU包:链路状态通告——携带LSA具体信息
LSACK包——确认报文(显性确认机制:由LSA头部信息确认)
LSA头部:20字节——每添加一个LSA头部信息,就增加20字节
主从选举——邻居关系的路由器都进行主从选举过程(单播方式);如果用广播,会出现多个“主”
LSR使用单播:修复重复更新
主从关系确立后,‘主’先发LSR,从先发自己的数据库
OSPF的接口网络类型
广播型多路访问类型(BMA)
[r2]display ospf interface GigabitEthernet 0/0/0
OSPF在BMA网络类型的接口上通常以组播的方式发送hello报文、LSU报文和LSACK报文。以单播的 形式发送DD报文和LSR报文。
点到点类型(P2P)
OSPF在网络类型为P2P的接口上以组播的方式(224.0.0.5)发送所有的协议报文。并且OSPF在P2P类 型的网络中不会选举DR和BDR。
该接口类型信息中,缺少了在BMA网络中看到的DR优先级、DR和BDR的描述信息。
[r2]display current-configuration configuration ospf //查看所有当前配置中的关于OSPF的
环回接口(虚拟接口)
Type----P2P-----在思科中有专门定义的Loopback类型作为环回接口的类型,而华为中没有定义,使用 P2P来填充(没有意义)。
所有通过OSPF学习到的环回接口的路由掩码信息都是32位,这是因为环回接口是一个模拟的接口, 它实际上并没有连接用户,所以没有其余的IP地址存在于环回接口之下,只有一个可用的IP地址,故而 使用32位掩码来直接标识环回接口。保证路由信息的精确性。----避免产生环路或者路由黑洞。
[r1-LoopBack0]ospf network-type broadcast //修改网络类型为BMA
State:Waiting
原因在于环回接口此时并没有邻居,也就无法进行正常的DR和BDR选举,当时间超时后,环回接口会 认为自己就是DR,并将相应信息填充到该接口信息中。
华为将tunnel接口的传输速率定义为64Kbps。
P2MP接口类型
OSPF在P2MP类型的接口上通常以组播的方式发送hello报文,以单播的方式发送其它报文。 P2MP类型无法由设备自动生成,必须由管理员手工更改
P2MP类型网络不需要选举DR和BDR。
非广播型多路访问类型(NBMA)
在NBMA场景中,为了让OSPF路由器之间能够正确建立邻居关系,需要使用单播邻居的方式来发送 OSPF报文。双向配置。
[r4-ospf-1]peer ?
IP_ADDR IP address