主要内容:
本文中的所有设备都特指思科的网络设备,包括路由器、三层交换机、交换机等等。
本文中的所有终端设备都特指网络末端的设备,比如服务器、PC等等。
OSPF(Open Shortest Path First,开放式最短路径优先)协议,是IETF(Internet Engineering Task Force,互联网工程任务组)定义的一种基于链路状态的内部网关路由协议。OSPF的出现,是为了解决基于距离矢量算法的路由协议RIP无法解决的三个问题:
既然说OSPF协议是基于链路状态的内部网关路由协议,那么想要了解它就避不开这个“基于链路状态”的协议。如果说基于距离矢量的路由协议为路由器提供的是“如果我想去那里,我应该怎么走”的路标,那么链路状态协议(Link State Protocol)为路由器提供的就是“地图”。经过这个协议,每个路由器都会了解整个网络的链路状态,从而计算出到目的地的最短路径。
链路状态协议工作过程如下:
了解路由器自身所连接的链路(即与其直连的网络)
对于链路状态协议来说,直链链路指的就是路由器上一个能够正常工作的接口。它需要以下条件才能被链路状态协议所了解:
向邻居发送Hello数据包
每台运行链路状态协议的路由器都负责“问候”其直连网络中的相邻路由器,这个“问候”就是通过Hello数据包达成的。路由器使用Hello数据包来发现其链路上的所有邻居(所有启用了相同链路状态协议的直连的任何路由器),从而形成一种连接关系。Hello数据包不会只发送一次,而是以一定的频率重复发送,以确定邻居是否还在。如果路由器不再收到某个其他邻居路由器的Hello数据包,则认为该邻居已无法到达,邻接关系破裂。
创建LSP
每台路由器都会创建一个链路状态数据包(Link State Packet),其中包含了与该路由器直连的所有链路的状态信息,包括直连网络的信息,邻居id,链路类型和带宽。一旦建立了邻接关系,即可创建LSP,并仅向邻居路由器发送LSP。
LSP并不需要定期发送,它仅在两种情况下发送:
LSP泛洪
每台路由器将LSP发送给自己的所有邻居,邻居们会保存该LSP,并且立即将其泛洪给其他所有邻居,确保该网络中的所有路由器都能收到这个LSP为止。所有的路由器都会在数据库内保存这个LSP。
泛洪: 一种交换机或网桥使用的数据流传递技术,它指的是从某个接口收到数据并且将其从该接口以外的所有接口转发出去的这个数据流传递过程。它和广播的区别在于广播的生效范围是所有接口,泛洪不会将收到数据的这个接口算进生效范围内。
因为泛洪的过程中并不对LSP进行处理,直到泛洪结束才会开始处理LSP,所以速度非常快,也就解决了距离矢量路由协议的第一个问题:收敛慢。
建立LSDB
泛洪结束后,路由器根据收到的其他所有路由器的LSP建立链路状态数据库(LSDB,Link State Database),并根据数据库和算法(OSPF协议的算法是SPF算法)建立完整的网络拓扑图。有了网络拓扑图,每个路由器就自己可以确定到达每个网络的最短路径,得出到达目的网络的最佳路由,并将其加入路由表中。
相关信息
常见的链路状态协议有OSPF协议和IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)协议。
提示
SPF(Shortest Path First)算法,也叫Dijksrta算法,是使用类似广度优先搜索的方法解决赋权图的单源最短路径问题的一种算法。SPF算法可以解决距离矢量路由协议的第二个问题的一部分:易产生路由回路。因为SPF算法计算最短路径时会以当前路由器为根节点,生成一棵最短路径树,树是一定不会产生回路的。所以在OSPF协议的一个区域内,一定不会产生路由回路。
OSPF协议是基于链路状态路由协议做的,链路状态路由协议需要进行LSP和LSDB的存储,LSP泛洪和构建网络拓扑等等一系列消耗内存和运算资源的操作。如果是小型网络还好说,如果是几十个路由器构成的超大型网络,路由器链路的组成结构极其复杂,不仅LSP泛洪会占用部分带宽,路由表和LSDB会变得非常大,每个路由器再生成这个网络的完整拓扑再计算路径也很占用CPU资源。这就是OSPF设置区域的目的:
OSPF协议划分的区域主要包括两种:
使用OSPF协议的网络的底层物理连接必须与两层区域结构匹配,即所有非骨干区域直接与骨干区域连接。
提示
在不划分区域的情况下(即单区域OSPF),所有路由器工作在骨干区域。
划分区域后,各个区域间仍然能够进行路由,但区域内的路由器只保存该区域内所有链路和所有其他路由器的信息。当LSP需要再次发送时,仅在该区域内进行LSP泛洪,区域外的路由器则不受影响,这大大降低了路由器的LSDB,网络拓扑图和路由表的更新频率,从而降低了路由器的CPU资源占用。
提示
思科建议一个区域内包含的路由器不超过50台,每台路由器所属的区域不超过3个。
基于OSPF区域的划分,OSPF协议中路由器的类型和作用也有所不同,它们决定了数据流在区域间的流向。
LSA(Link State Advertisement,链路状态公告):发送LSP的这个行为就叫LSA,LSP泛洪和LSA泛洪是差不多的意思。
提示
一个路由器可以属于多种类型。如果一个路由器同时连接骨干区域,非骨干区域和其他域,那它既是ABR也是ASBR。
对于每个路由器来说,一个区域对应一个LSDB。因此ABR和ASBR有至少两个LSDB。
SPF算法的目标是对赋权图找到单源最短路径,那么这个“权”就需要OSPF协议来计算,计算出的值即为度量值,它的作用在于指示每条链路的开销。
默认情况下,路由器根据接口的配置带宽来计算OSPF开销,带宽越高,开销越低。公式为,B的单位为Mbit/s。如果修改了链路的带宽,OSPF开销也会跟着变化。对于每个接口,只能指定一种开销。开销可以手动定义,定义后的开销将覆盖默认开销。
Router id:一个32位的值,是在一个OSPF自治系统内的一个路由器的唯一标识。Router id可以手动配置,或者指定一个ip成为该路由器的Router id。
如果没有手动配置Router id,路由器会自动选择逻辑接口中最大的ip地址作为Router id;如果没有配置逻辑接口,路由器则会自动选择物理接口的最大的ip地址作为Router id。
提示
DR(Designated Router):指定路由器,作用是收集LSU,统一发送的过程。
BDR(Backup Designated Router):备用指定路由器,如果DR发生故障,BDR能够接替而保证网络运行正常。
选举的目的在于减少LSU数量,从而减少占用带宽。
如果网络中有10个路由器,不设置带宽的情况下,每个路由器都要收到其他所有路由器的LSU来创建和更新LSDB。那么网络上至少要发送90个LSU。
如果这10个路由器中有1一个选举成为DR,那么所有的LSU都会先发送到DR,再由DR发送到其他的路由器上。那么网络上只需要18个LSU即可。
提示
选举的真正意义在于减少邻接关系的数量,LSU占用带宽只是它带来的实际好处。邻接关系的说明还在后面。
网络类型是至少含有两个及以上的路由器的广播型网络和NBMA网络,点到点网络和P2MP网络不需要进行选举。
NBMA(non-Broadcast Multiple Access Network)网络:非广播多路访问网络,网络类型的一种,它能连接多个主机,但数据仅通过虚电路和交换结构直接从一台计算机传输到另一单个主机。
点到点网络(Peer-to-Peer):又称点对点技术。对,它就是你想的那个P2P。与有中心服务器的中央网络系统不同,对等网络的每个用户端既是一个节点,也有服务器的功能,任何一个节点无法直接找到其他节点,必须依靠其户群进行信息交流。
P2MP(Point to Multiple Point)网络:点对多点网络,一种特定的一对多的连接类型的通信。
选举过程是?
状态名 | 状态意义 | 状态行为 | 状态跳转条件及跳转目标 |
---|---|---|---|
Down(不可用状态) | 最开始刚启动的状态,邻居表是空的,等待建立邻居关系 | 循环发送HELLO包,也在等着别人的HELLO包 | 如果发送过自己的HELLO包,并且收到了对端发送的HELLO包,但是HELLO包中并没有自己这边的Router id,就进入Init状态 |
Init(初始化状态) | 确认对端的Router id | 循环发送HELLO包,也在等着别人的HELLO包 | 如果发送过HELLO包,并且对端发送的HELLO包中有自己这边的Router id,就进入Two-way状态 |
Two-way(双向状态) | 进入该状态标志着两端路由器的双向邻居关系建立完成;选举DR和BDR | 比较互相的接口优先级和Router id来确定DR和BDR | 如果网络符合选举条件,才会进行DR和BDR的选举,选举完成后会进入ExStart状态;如果网络不符合选举条件,则直接进入ExStart状态 |
ExStart(预启动状态) | 开始建立邻接关系,进行主从关系的选举 | 双端路由器互相传递空的DBD包,比较两个路由器的Router id,从而确定主从关系 | 主从关系选举完成后,进入Exchange状态 |
Exchange(交换状态) | 传输DBD包以方便对端确定需求来发送LSR | 传输DBD包 | DBD包发送完成后,进入Loading状态 |
Loading(加载状态) | 互相交换对方需要的链路状态 | 互相发送LSR、LSU、LSACK | 当所有的LSR都有LSU发送完成,并且收到LSACK后,跳转到Full状态 |
Full(完全邻接状态) | 已经更新了LSDB,确认了邻接关系,开始正常工作 | 每10秒发送HELLO包看看邻居还在不在,同时每1800秒进行一次LSA。如果有40秒没能收到邻居的HELLO包,就认为这个邻居寄了,该删的删;如果有3600秒没有收到某个路由器的LSA,则认为路由失效,该删的删 | 最终状态 |
以聊天群举例的话:
首先要声明的是,邻接和邻居不是一个概念。在OSPF工作的过程中,邻居关系≠邻接关系。
DRother:除了DR和BDR的路由器。
LSA头格式:
LSA种类 | 由谁产生 | 作用 | 传递范围 |
---|---|---|---|
LSA1,Router LSA | 所有运行OSPF的路由器都可以产生 | 描述设备的直连链路信息,路由信息 | 只在其所属区域内泛洪/传递,无法穿透ABR |
LSA2,Network LSA | DR | DR与其它设备之间的拓扑信息,与DR广播网络的路由信息 | 同LSA1 |
LSA3,Summary-Network LSA | ABR | 因为LSA1和LSA2只能在所属区域内泛洪/传递,因此其他区域如果想要知道这个区域的路由信息,就需要LSA3 | 可以跨区域进行传递 |
LSA4,ASBR-Summary LSA | ABR | 由于5类LSA传递过程中,下一跳不会被改变,所以流量得先到ASBR之后才知道怎么走。4类LSA就是描述流量怎么到达ASBR的 | 通告给除ASBR所在区域以外的其他区域 |
LSA5,SA-External LSA | ASBR | 描述到OSPF域外的路由,这类LSA在传递过程中,下一跳不会被改变 | 整个OSPF域 |
LSA7,NSSA LSA | NSSA区域内的ASBR | 描述到达OSPF域外的路由,与5类LSA功能一样 | 只能在始发区域内泛洪/传递,穿透ABR时,会被转换为5类LSA |
4类,5类LSA说明:
7类LSA说明:
除了骨干区域以外,非骨干区域有五种分类:
拓扑图如下:
默认拓扑图中的VLAN已经配置完成。
服务器配置:
PC设备DNS配置:
三层交换机配置OSPF协议示例:
enable config t router ospf 10 // 启用OSPF协议 后面跟的数字是进程号 network 192.168.10.0 0.0.0.255 area 1 // 宣告自己所持有的网段 参数是网段号 网段的反掩码 区域号 同一区域内区域号必须一致 network 192.168.20.0 0.0.0.255 area 1 network 192.168.50.0 0.0.0.255 area 1
两个交换机都宣告完了之后,可以通过do show ip route
来确认是否有路由信息。前缀是C的是三层交换机自己连接的网段,带O的就是通过OSPF协议获知的路由信息。
OSPF协议配置完成后,终端设备就能访问服务器了。
如果宣告不成功,可以通过do show ip ospf neighbor
来查看该三层交换机的邻居信息:
CCIE工程师社区 | OSPF 的 Area 类型汇总(包括特殊区域:Stub Area、Total Stub Area、NSSA Area、Total NSSA Area)
本文作者:御坂19327号
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!