
OSPF 协议
OSPF 协议简介
开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议。目前针对IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740)。如无特殊说明,本文中所指的OSPF均为OSPF Version 2。
OSPF 出现的目的
在OSPF出现前,网络上广泛使用RIP(Routing Information Protocol)作为内部网关协议。
由于RIP是基于距离矢量算法的路由协议,存在着收敛慢、路由环路、可扩展性差等问题,所以逐渐被OSPF取代。
OSPF作为基于链路状态的协议,能够解决RIP所面临的诸多问题。此外,OSPF还有以下优点:
1.OSPF采用组播形式收发报文,这样可以减少对其它不运行OSPF路由器的影响。
2.OSPF支持无类型域间选路(CIDR)。
3.OSPF支持对等价路由进行负载分担。
4.OSPF支持报文加密。
由于OSPF具有以上优势,使得OSPF作为优秀的内部网关协议被快速接收并广泛使用。
OSPF协议特点
+ OSPF把自治系统AS(Autonomous System)划分成逻辑意义上的一个或多个区域
+ OSPF通过LSA(Link State Advertisement)的形式发布路由;
+ OSPF依靠在OSPF区域内各设备间交互OSPF报文来达到路由信息的统一;
+ OSPF报文封装在IP报文内,可以采用单播或组播的形式发送。
报文字段与LSA类型
报文类型 | 报文作用 |
---|---|
Hello报文 | 周期性发送,用来发现和维持OSPF邻居关系。 |
DD报文(Database Description packet) | 描述本地LSDB(Link State Database)的摘要信息,用于两台设备进行数据库同步。 |
LSR报文(Link State Request packet) | 用于向对方请求所需的LSA。 设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。 |
LSU报文(Link State Update packet) | 用于向对方发送其所需要的LSA。 |
LSAck 报文(Link State Acknowledgment packet) | 用来对收到的LSA进行确认。 |
LSA类型 | LSA作用 |
---|---|
Router-LSA(Type1) | 每个设备都会产生,描述了设备的链路状态和开销,在所属的区域内传播。 |
Network-LSA(Type2) | 由DR(Designated Router)产生,描述本网段的链路状态,在所属的区域内传播。 |
Network-summary-LSA(Type3) | 由ABR产生,描述区域内某个网段的路由,并通告给发布或接收此LSA的非Totally STUB或NSSA区域。例如:ABR同时属于Area0和Area1,Area0内存在网段10.1.1.0,Area1内存在网段11.1.1.0,ABR为Area0生成到网段11.1.1.0的Type3 LSA;ABR为Area1生成到网段10.1.1.0的Type3 LSA,并通告给发布或接收此LSA的非Totally Stub或NSSA区域。 |
ASBR-summary-LSA(Type4) | 由ABR产生,描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。 |
AS-external-LSA(Type5) | 由ASBR产生,描述到AS外部的路由,通告到所有的区域(除了STUB区域和NSSA区域)。 |
NSSA LSA(Type7) | 由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。 |
Opaque LSA(Type9/Type10/Type11) | Opaque LSA提供用于OSPF的扩展的通用机制。其中: Type9 LSA仅在接口所在网段范围内传播。用于支持GR的Grace LSA就是Type9 LSA的一种。 Type10 LSA在区域内传播。用于支持TE的LSA就是Type10 LSA的一种。 Type11 LSA在自治域内传播,目前还没有实际应用的例子。 |
邻居状态机
在OSPF网络中,为了交换路由信息,邻居设备之间首先要建立邻接关系,邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念。
邻居关系:OSPF设备启动后,会通过OSPF接口向外发送Hello报文,收到Hello报文的OSPF设备会检查报文中所定义的参数,如果双方一致就会形成邻居关系,两端设备互为邻居。
邻接关系:形成邻居关系后,如果两端设备成功交换DD报文和LSA,才建立邻接关系。
OSPF共有8种状态机,分别是:Down、Attempt、Init、2-way、Exstart、Exchange、Loading、Full。
状态 | 描述 |
---|---|
Down | 邻居会话的初始阶段,表明没有在邻居失效时间间隔内收到来自邻居路由器的Hello数据包。 |
Attempt | 该状态仅发生在NBMA网络中,表明对端在邻居失效时间间隔(dead interval)超时前仍然没有回复Hello报文。此时路由器依然每发送轮询Hello报文的时间间隔(poll interval)向对端发送Hello报文。 |
Init | 收到Hello报文后状态为Init。 |
2-way | 收到的Hello报文中包含有自己的Router ID,则状态为2-way;如果不需要形成邻接关系则邻居状态机就停留在此状态,否则进入Exstart状态。 |
Exstart | 开始协商主从关系,并确定DD的序列号,此时状态为Exstart。 |
Exchange | 主从关系协商完毕后开始交换DD报文,此时状态为Exchange。 |
Loading | DD报文交换完成即Exchange done,此时状态为Loading。 |
Full | LSR重传列表为空,此时状态为Full。 |
OSPF 简单 Demo
我们创建两个AR路由器,然后设置它们的g0/0/0
接口的IP网段为10.1.12.x
,设置的L0网卡分别为1.1.1.1
和2.2.2.2
。
配置AR1路由器。
# 创建名称
system-view
sysname AR1
# 创建l0网段
int l0
ip a 1.1.1.1 32
dis this
q
# 为g0/0/0接口附上ip
int g0/0/0
ip a 10.1.12.1 24
dis this
q
配置AR2路由器。
# 创建名称
system-view
sysname AR2
# 创建lo0网段
int l0
ip a 2.2.2.2 32
dis this
q
# 为g0/0/0接口附上ip
int g0/0/0
ip a 10.1.12.2 24
dis this
q
ping 1.1.1.1
我们发现它们并不能ping通,因为没有设置静态路由。
dis ip routing-table
配置ospf
在配置ospf网络的时候,需要配置区域;区域相当于在相同区域下的设备可以通过ospf进行连接。
# AR1 配置ospf
ospf router-id 1.1.1.1
# 配置为0区域
area 0
# 宣告1.1.1.1网络
network 1.1.1.1 0.0.0.0
# 宣告 10.1.12.0
network 10.1.12.0 0.0.0.255
# AR2 配置ospf
ospf router-id 2.2.2.2
# 配置为0区域
area 0
# 宣告1.1.1.1网络
network 2.2.2.2 0.0.0.0
# 宣告 10.1.12.0
network 10.1.12.0 0.0.0.255
ping 1.1.1.1
我们可以看到一些刚刚表中的状态信息。
我们还可以通过下面的命令来查询邻居。
dis ospf peer b
当我们一端停止g0/0/0
接口时,邻居信息将会移除,AR1设备举例。
int GigabitEthernet 0/0/0
shutdown
dis ospf peer b
然后我们再次激活,会看见一些启动起来的包,并且通过查看routing的方式我们发现已经学习到了对端地址,并且是通过OSPF的方式。
undo shutdown
# 等30秒再次查看
dis this
q
dis ospf peer b
# 查看ospf routing
dis ospf routing
dis ospf routing-table
当然我们要退出一条网络可以通过下面的命令进行实现
undo network 2.2.2.2 0.0.0.0
undo network 10.1.12.0 0.0.0.255
如果我们在一台设备上添加一条ip地址希望其他端学习到,我们可以添加一条0.0.0.0 255.255.255.255
的网络(两个设备都添加)。
network 0.0.0.0 255.255.255.255
# 然后我们查看状态到full为止
dis ospf peer brief
q
然后添加一条ip 3.3.3.3
到我们的AR1上,AR2可以学习到。
# 在AR1添加ip 3.3.3.3
int l0
ip a 3.3.3.3 32
# 在AR2查询路由
dis ip routing-table
# ping
ping 3.3.3.3
OSPF Router-ID用于在OSPF domain中唯一地表示一台OSPF路由器,从OSPF网络设计的角度,我们要求全OSPF域内,禁止出现两台罗尤其拥有相同的Router-ID。
OSPF Router-ID的设定可以通过手工配置的方式,或者通过协议自动选取的方式。当然,在实际网络部署中,强烈将以手工配置OSPF的Router-ID,因为这关系到协议的稳定。
广播多路访问网络
在广播多路访问网络(Multi Access)中,所有的路由器的接口都是相同网段,这些接口两两建立OSPF邻居关系,这就意味着,网络中共有:n(n-1)/2。维护如此多的邻居关系不仅额外消耗资源,更增加了网络中LSA的泛洪数量。
———为减小多路访问网络中的 OSPF 流量,OSPF 会在每一个MA网络(多路访问网络)选举一个指定路由器 (DR)和一个备用指定路由器 (BDR)。
——DR选举规则:最高OSPF接口优先级拥有者被选作DR,如果优先级相等(默认为1),具有最高的OSPF Router-ID的路由器被选举成DR,并且DR具有非抢占性。
——指定路由器 (DR):DR 负责使用该变化信息更新其它所有 OSPF 路由器(DR Rother)。
——备用指定路由器 (BDR):BDR 会监控 DR 的状态,并在当前 DR 发生故障时接替其角色。
——注意OSPF为“接口敏感型协议”,DR及BDR的身份状态是基于OSPF接口的。
——MA网络中,所有的DRother路由器均只与DR和BDR建立邻接关系,DRother间不建立全毗邻邻接关系。
——如此一来,该多路访问网络中设备需要维护的OSPF邻居关系大幅减小:M= (n-2)×2+1,LSA的泛洪问题也可以得到一定的缓解。
简单来讲:在一个小组里面,学习路由找人,你直接找组长或副组长就可以了。
成为组长(DR)或副组长(BDR)通过router-id
进行选举,数值越大越优先。
如果组长出事了或者请假了、挂了由职务又由副组长代替。
Demo案例
抱歉诸位,关于下面的命令需要大家自己去尝试了,我本地交换机不知道为什么跑不起来。
配置AR4设备。
sysname AR4
interface Ethernet 0/0/0
# 由于该设备是交换机的口,所以先关闭交换机的接口
undo portswitch
# 添加IP
ip a 1.1.1.4 24
int l 0
ip a 100.100.100.100 32
dis ip int b
配置AR6设备。
sysname AR6
int Ethernet 0/0/0
undo portswitch
ip a 1.1.1.6 24
int l 0
ip a 20.20.20.20 32
dis ip int b
配置AR5设备。
system-view
sysname AR5
int Ethernet 0/0/0
undo portswitch
ip a 1.1.1.5 24
int l0
ip a 5.5.5.5 32
dis ip int b
配置AR8设备。
system-view
sysname AR8
int Ethernet 0/0/0
undo portswitch
ip a 1.1.1.8 24
int l0
ip a 8.8.8.8 32
dis ip int b
配置AR7设备。
system-view
sysname AR7
int Ethernet 0/0/0
undo portswitch
ip a 1.1.1.7 24
int l0
ip a 7.7.7.7 32
dis ip int b
配置AR4设备的OSPF。
ospf router-id 100.100.100.100
area 0
network 0.0.0.0 255.255.255
dis this
配置AR6设备的OSPF。
ospf router-id 20.20.20.20
area 0
network 0.0.0.0 255.255.255
配置AR5设备的OSPF。
ospf router-id 5.5.5.5
area 0
network 0.0.0.0 255.255.255
配置AR8设备的OSPF。
ospf router-id 8.8.8.8
area 0
network 0.0.0.0 255.255.255
配置AR7设备的OSPF。
ospf router-id 7.7.7.7
area 0
network 0.0.0.0 255.255.255
dis ospf peer brief
多区域
通过不同区域的交换机连接进行通信。
system-view
sysname AR4
int g0/0/0
ip a 10.1.45.4 24
int l0
ip a 4.4.4.4 32
dis this
dis ip int b
q
system-view
sysname AR5
int g0/0/0
ip a 10.1.45.5 24
int l0
ip a 5.5.5.5 32
q
dis ip int b
int g0/0/1
ip a 10.1.56.5 24
q
system-view
sysname AR6
int g0/0/0
ip a 10.1.56.6 24
int l0
ip a 6.6.6.6 32
dis ip int b
# 测试直连情况
ping 10.1.56.5
AR4
ospf router-id 4.4.4.4
area 0
network 0.0.0.0 255.255.255.255
dis this
q
AR5
int g0/0/0
ospf router-id 5.5.5.5
area 0
network 10.1.45.0 0.0.0.255
dis ospf peer b
network 5.5.5.5 0.0.0.0
dis this
q
int g0/0/1
network 10.1.56.0 0.0.0.255
dis ospf peer b
AR6
ospf router-id 6.6.6.6
area 1
network 0.0.0.0 255.255.255.255
dis ospf peer b
q
AR4
ping 6.6.6.6
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

