网络学习笔记(1)-OSPF介绍
OSPF 知识点概要
OSPF 基本配置,查看OSPF 的 3 张表,OSPF 5 种报文 ,7种邻居状态,4 种网络类型,4 种特殊区域,7类LSA,4 种 link type,标识一条LSA的 3 个要素,OSPF 邻居与邻接关系,单区域、多区域、OSPF 认证(keychain),DR 的选举,OSPF 被动接口,OSPF 域间聚合,外部聚合,不规则区域的解决办法(虚链路),OSPF 开销值、协议优先级及计时器的修改,OSPF 外部路由引入,下放默认路由,OSPF 在FR 中的应用,OSPF 协议中 Forwarding Address 的理解。
路由协议分类
按工作区域分OSPF、RIP、IS-IS属于IGP(内部网关协议),BGP属于EGP外部网关协议。如果按工作机机制及算法分类OSPF、IS-IS属于链路状态路由协议,RIP属于距离矢量路由协议。
==名词解析==
- BGP使用一种基于距离矢量算法修改后的算法,该算法被称为路径矢量(Path Vector)算法。因此在某些场合下,BGP也被称为路径矢量路由协议。
- IGP(内部网关协议)在同一个自治系统内交换路由信息,IGP的主要目的是发现和计算自治域内的路由信息。
- EGP(外部网关协议)主要用于AS(自治系统)之间的互联。
距离矢量路由协议
运行距离矢量路由协议的路由器周期性地泛洪自己的路由表。通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加载进自己的路由表中,然后再通告给其他相邻路由器。对于网络中的所有路由器而言,路由器并不清楚网络的拓扑,只是简单的知道要去往某个目的网段方向在哪里,开销有多大。
链路状态路由协议
链路状态路由协议通告的的是链路状态而不是路由信息。
LSA泛洪
运行链路状态路由协议的路由器之间首先会建立邻居关系,然后彼此之间开始交互LSA(Link State Advertisement,链路状态通告)。
LSDB维护
每台路由器都会产生LSA,路由器将接收到的LSA放入自己的LSDB(Link State DataBase,链路状态数据库)。路由器通过对LSDB中所存储的LSA进行解析,进而了解全网拓扑。
SPF计算
每台路由器基于LSDB,使用SPF(Shortest Path First,最短路径优先)算法进行计算。每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的“树”。有了这棵“树”,路由器就已经知道了到达所有网段的优选路径。
路由表生成
路由器将计算出来的优选路径,加载进自己的路由表(Routing Table)。
++链路状态路由协议有四个步骤++:
- 第一步是建立相邻路由器之间的邻居关系。
- 第二步是邻居之间交互链路状态信息和同步LSDB。
- 第三步是进行优选路径计算。
- 第四步是根据最短路径树生成路由表项加载到路由表。
OSPF概述
OSPF是IETF定义的一种基于链路状态的内部网关路由协议。目前针对IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740)。
OSPF有以下优点:
- 基于SPF算法,以“累计链路开销”作为选路参考值
- 采用组播形式收发部分协议报文
- 支持区域划分
- 支持对等价路由进行负载分担
- 支持报文认证
OSPF基本术语
Router ID
Router ID用于在自治系统中唯一标识一台运行OSPF的路由器,它是一个32位的无符号整数。
Router ID选举规则如下:
- 手动配置OSPF路由器的Router ID(建议手动配置)
- 如果没有手动配置Router ID,则路由器使用Loopback接口中最大的IP地址作为Router ID
- 如果没有配置Loopback接口,则路由器使用物理接口中最大的IP地址作为Router ID
==Router ID一旦选定,之后如果要更改的话就需要重启OSPF进程。==
在实际工程中,推荐手工指定OSPF路由设备的Router ID。首先规划出一个私有网段用于OSPF的Router ID选择,例如:192.168.1.0/24。在启用OSPF进程前在每个OSPF路由器上建立一个Loopback接口,使用一个32位掩码的私有地址作为其IP地址,这个32位的私有地址即作为该路由设备的Router ID。如果没有特殊要求,这个Loopback接口地址可以不发布在OSPF网络中。
区域
OSPF Area用于标识一个OSPF的区域。
区域是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。
OSPF的区域ID是一个32bit的非负整数,按点分十进制的形式(与IPv4地址的格式一样)呈现,例如Area0.0.0.1。为了简便起见也会采用十进制的形式来表示。
几个例子:Area0.0.0.1等同于Area1,Area0.0.0.255等同于Area255,Area0.0.1.0等同于Area256。许多网络厂商的设备同时支持这两种区域ID配置及表示方式。
度量值
OSPF使用Cost(开销)作为路由的度量值。每一个激活了OSPF的接口都会维护一个接口Cost值,缺省的接口Cost = 100 Mbit/s / 接口带宽 。其中100 Mbit/s为OSPF指定的缺省参考值,该值是可配置的。
OSPF以“累计cost”为开销值,也就是流量从源网络到目的网络所经过所有路由器的出接口的cost总和。
在实际应用中,推荐根据接口带宽大小手动配置Cost值,而不是修改OSPF参考带宽。
OSPF三大表项
- 邻居表:使用display ospf peer查看
- LSDB:使用命令行display ospf lsdb查看LSDB表
- OSPF路由表:使用命令display ospf routing查看OSPF路由表
OSPF报文
OSPF一共定义了5种类型的报文,不同类型的OSPF报文有相同的头部格式。
OSPF报文直接采用IP封装,在报文的IP头部中,协议号为89。
Type | 报文名称 | 报文功能 |
---|---|---|
1 | Hello | 发现和维护邻居关系 |
2 | DD(Database Description) | 交互链路状态数据库摘要 |
3 | LSR(Link State Request) | 请求特定的链路状态信息 |
4 | LSU(Link State Update) | 发送详细的链路状态信息 |
5 | LSA(Link State Ack) | 确认LSA |
重要字段解释
- Version :对于当前所使用的OSPFv2,该字段的值为2。
- Router ID:表示生成此报文的路由器的Router ID。
- Area ID:表示此报文需要被通告到的区域。
- Type:类型字段。
- Packet length:表示整个OSPF报文的长度,单位是字节。
- Checksum:校验字段,其校验的范围是整个OSPF报文,包括OSPF报文头部。
- Auth Type:为0时表示不认证;为1时表示简单的明文密码认证;为2时表示加密(MD5)认证。
- Authentication:认证所需的信息。该字段的内容随AuType的值不同而不同。
OSPF工作过程
邻居关系建立
- R1和R2路由器相互发送Hello报文,第一个Hello报文包含的邻居列表为空。
- R2收到R1发送的Hello报文后,如果各项参数匹配,再次发送Hello报文时,将R1加入自己的邻居列表。
- 在以太网链路上,通常以组播形式发送Hello报文:
- 224.0.0.5的组播地址为OSPF设备的预留IP组播地址。
- 224.0.0.6的组播地址为OSPF DR/BDR的预留IP组播地址。
- 对于不支持组播的链路,OSPF支持采用单播的方式发送Hello报文。
==Hello报文的作用:==
- 邻居发现:自动发现邻居路由器。
- 邻居建立:完成Hello报文中的参数协商,建立邻居关系。
- 邻居保持:通过周期性发送和接收,检测邻居运行状态。
邻接关系建立
- R1和R2的Router ID分别为10.0.1.1和10.0.2.2并且二者已建立了邻居关系。当R1的邻居状态变为ExStart后,R1会发送第一个DD报文。此报文中,M-bit设置为1,表示后续还有DD报文要发送,MS-bit设置为1,表示R1宣告自己为Master。DD序列号被随机设置为X,I-bit设置为1,表示这是第一个DD报文。
- 同样当R2的邻居状态变为ExStart后,R2也会发送第一个DD报文。此报文中,DD序列号被随机设置为Y(I-bit=1,M-bit=1,MS-bit=1,含义同上)。由于R2的Router ID较大,所以R2将成为真正的Master。收到此报文后,R1会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange。
- 当R1的邻居状态变为Exchange后,R1会发送一个新的DD报文,此报文中包含了LSDB的摘要信息,序列号设置为R2在步骤2中使用的序列号Y,I-bit=0,表示这不是第一个DD报文,M-bit=0,表示这是最后一个包含LSDB摘要信息的DD报文,MS-bit=0,表示R1宣告自己为Slave。收到此报文后,R2将邻居状态从ExStart变为Exchange。
- 当R2的邻居状态变为Exchange后,R2会发送一个新的DD报文,此报文包含了LSDB的摘要信息。DD序列号设置为Y+1, MS-bit=1,表示R2宣告自己为Master。
- 虽然R1不需要发送新的包含LSDB摘要信息的DD报文,但是作为Slave,R1需要对Master发送的每一个DD报文进行确认。所以,R1向R2发送一个新的DD报文,序列号为Y+1,该报文内容为空。发送完此报文后,RTA产生一个Exchange-Done事件,将邻居状态变为Loading。R2收到此报文后,会将邻居状态变为Full(假设R2的LSDB是最新最全的,不需要向R1请求更新)。
- R1开始向R2发送LSR报文,请求那些在Exchange状态下通过DD报文发现的、并且在本地LSDB中没有的链路状态信息。
- R2向R1发送LSU报文,LSU报文中包含了那些被请求的链路状态的详细信息。R1在完成LSU报文的接收之后,且没有其他待请求的LSA后,会将邻居状态从Loading变为Full。
- R1向R2发送LSAck报文,作为对LSU报文的确认。
DR与BDR的作用
简化邻接关系,减少重复的LSA泛洪,避免计算资源浪费。
在MA网络中选举DR:
- DR(Designated Router,指定路由器)负责在MA网络建立和维护邻接关系并负责LSA的同步。
- DR与其他所有路由器形成邻接关系并交换链路状态信息,其他路由器之间不直接交换链路状态信息。
- 为了规避单点故障风险,通过选举BDR(Backup Designated Router,备份指定路由器) ,在DR失效时快速接管DR的工作。
==MA==( Multiple Access,多路访问 )分为BMA( Broadcast Multi-Access,广播多路访问)和NBMA(Non-Broadcast Multiple Access,非广播多路访问)。以太网链路组成的网络是典型的BMA网络。帧中继链路通过逻辑上的划分组成典型的NBMA网络(注:帧中继相关知识不再介绍)。
DRother:既不是DR也不是BDR的路由器就是DRother路由器。
DR与BDR的选举规则
- DR/BDR的选举是非抢占式的。
- DR/BDR的选举是基于接口的。
- 接口的DR优先级越大越优先。
- 接口的DR优先级相等时,Router ID越大越优先。
- 现有网络中已经存在一个DR和一个BDR,这时新加入网络中的路由器,不论它的Router ID或者DR优先级有多大,都会承认现网中已有的DR和BDR。
- 当DR因为故障Down掉之后,BDR会继承DR的位置,剩下的优先级大于0的路由器会竞争成为新的BDR。
- 只有当不同Router ID,或者配置不同DR优先级的路由器同时起来,在同一时刻进行DR选举才会应用DR选举规则产生DR。
不同网络类型中DR与BDR的选举操作
P2MP:point-to-multipoint,点到多点。
一些命令
display ospf interface all可查看当前设备所有激活OSPF的接口信息:
- 时间参数,例如Hello报文发送间隔,死亡时间。
- 接口的链路类型、接口的MTU。
- 对于以太网链路,可查看DR的接口地址,DR的优先级。
[R2]display ospf interface all
OSPF Process 1 with Router ID 10.0.2.2
Area: 0.0.0.0
Interface: 10.0.12.2 (GigabitEthernet0/0/0)
Cost: 1 State: DR Type: Broadcast MTU: 1500 Priority: 1
Designated Router: 10.0.12.2
Backup Designated Router: 10.0.12.1
Timers: HELLO 10 , Dead 40 , Poll 120 , Retransmit 5 , Transmit Delay 1
Interface: 10.0.235.2 (GigabitEthernet0/0/1)
Cost: 1 State: DROther Type: Broadcast MTU: 1500 Priority: 1
Designated Router: 10.0.235.5
Backup Designated Router: 10.0.235.3
Timers: HELLO 10 , Dead 40 , Poll 120 , Retransmit 5 , Transmit Delay 1
Interface: 10.0.24.2 (Serial1/0/1) --> 10.0.24.4
Cost: 48 State: P-2-P Type: P2P MTU: 1500
Timers: HELLO 10 , Dead 40 , Poll 120 , Retransmit 5 , Transmit Delay 1
display ospf peer可查看当前设备的邻居状态:
- 邻居路由器的Router ID。
- 邻居状态,例如FULL,TWO-WAY,DOWN等。
<R2>display ospf peer
OSPF Process 1 with Router ID 10.0.2.2
Area 0.0.0.0 interface 10.0.12.2(GigabitEthernet0/0/0)'s neighbors
Router ID: 10.0.1.1 Address: 10.0.12.1
State: Full Mode:Nbr is Slave Priority: 1
DR: 10.0.12.2 BDR: 10.0.12.1 MTU: 0
Dead timer due in 28 sec
Retrans timer interval: 5
Neighbor is up for 00:01:31
Authentication Sequence: [ 0 ]
Area 0.0.0.0 interface 10.0.235.2(GigabitEthernet0/0/1)'s neighbors
Router ID: 10.0.3.3 Address: 10.0.235.3
State: Full Mode:Nbr is Master Priority: 1
DR: 10.0.235.5 BDR: 10.0.235.3 MTU: 0
Dead timer due in 30 sec
Retrans timer interval: 5
Neighbor is up for 00:01:31
Authentication Sequence: [ 0 ]
display ospf lsdb可查看当前设备的LSDB:
- LSDB由多种类型的LSA构成,所有的LSA都有相同的报文头部格式,其中关键字段如Type、LinkState ID、AdvRouter等。下节课程将重点介绍LSA的详细信息。
display ospf routing可查看当前设备的OSPF路由表:
- 从R2的OSPF路由表可看出,它已经通过OSPF获知到达全网的路由。
总结图
作者:废权
链接:https://blog.yjscloud.com/archives/137
声明:如无特别声明本文即为原创文章仅代表个人观点,版权归《废权的博客》所有,欢迎转载,转载请保留原文链接。
共有 0 条评论