OSPF - open shortest path first 开放式最短路径优先(协议) 该协议属于 公有标准协议,并且是属于 OSI 模型第三层,该协议的所有的报文,直接封装在 IP 头部后面,使用的协议号为89。 OSPF 协议在不同的路由器之间运行之后,就会自动的在路由器之间动态的学习对方的链路状态信息,从而实现“邻居设备之间的数据库完全相同”这么一个最终目的。 数据库同步以后,邻居之间的状态,就达到了 Full ,称之为完全邻接。 接下来,每个路由器,都会基于自己的数据库条目内容,进行 SPF算法,计算出去往每个网段的最短的、无环的,数据转发路径。


路由分类简图: OSPF之所以出现,是因为在一定的网络规模中,RIP这种路由已经无法满足需要。因为理论上OSPF没有网络规模限制,而RIP这种距离矢量路由是有跳数限制的,也就有了规模限制。 它是一种计算路由的协议,通过路由器之间建立邻居关系,传递数据,同步数据库,然后计算路由表形成路由。


  • 那么如何让一个链路启用 OSPF 进程? 通过 ospf 中的 network 命令; 如果设备上的链路的IP地址,包含在了network命令后面所表示的范围内,则该链路就说明启用了OSPF进程。 network 命令后面所跟的网络范围,仅仅对那些直连接口有效(即,该命令只能将直连路由宣告到OSPF中)
  • 当链路启用 OSPF 进程以后: 该端口以后,就可以发送 OSPF 报文; 该端口以后,就可以接收 OSPF 报文; 该端口上的,IP地址中的,网络部分,可以直接放入到 OSPF 报文中,传输给邻居设备。

建立邻居影响因素 一、能够正常发包:确保network正确;确保接口没有配置为silent-interface 二、能够正常传包:确保中间的网络设备没有限制策略,例如ACL拒绝了OSPF的报文 三、能够接受报文:确保network正确;确保接口没有配置为silent-interface 四、比较hello包: 1.router-id 一定不能相同 2.area-id 必须相同 3.认证必须得成功 4.子网掩码相同(一些网络类型除外) 5.hello 报文发送间隔一定要相同(默认10s) 6.dead 时间一定要相同(默认40s) 7.特殊标记位(options)必须得相同 8.优先级不能全为0(一些网络类型除外)


OSPF的网络类型 一、broadcast广播:以太网;主动发包,组播,hello/dead=10/40 二、nbma非广播:ATM/FR;不主动发包,如果想发送,只能通过单播(peer),hello/dead=30/120 三、p2p点到点:ppp;主动发包,组播,hello/dead=10/40 四、p2mp点到多点:主动发包,组播,hello/dead=30/120


OSPF的五个报文


OSPF的七个邻居状态

    1.down和attempt ,down状态,邻居状态挂掉,说明出现了故障;attempt状态,只会出现在单播建立邻居的情况下
    2.init ,初始化状态,说明可以收到邻居发送过来的 hello 报文;
    3.two-way ,双向通信状态,说明可以收到邻居发送过来的hello,并且在对方的 hello 报文中发现了自己的名字;
    4.exstart ,交换初始化状态,在该阶段进行接下来的交换 DD 报文的准备工作,以确保接下来的交换工作能够稳定进行(在该阶段发送第一个DBD选举主/从路由器,为实现DBD报文的高效和可靠传输。选举原则是router-id越大越好,一旦主从路由器确定下来那么从路由器发送的DBD报文的序列号要随着主路由器变化而变化);
    5.exchange,交换状态,该阶段主要交换的是 OSPF 数据库的简要信息,即多个DBD报文,当邻居间的DBD报文传输完成以后就会相互比较,确定相互间数据库的差异;
    6.loading ,加载状态,该阶段主要进行 LSR/LSU/LSAck 的发送和接收,用于获得自己没有的数据库条目信息,从而实现双方数据库完全相同;
    7.full 	,完全邻接状态,表示的是邻居设备之间的数据库信息,完全一致。

DR和BDR介绍 在广播和NBMA网络类型中,为了能让多设备在实现数据库同步的时候能够更加的高效和稳定,需要在诸多的OSPF路由器中,选择一个DR 。当有了 DR 之后,所有的OSPF路由器,都仅仅与DR建立邻居关系,并且与之进行数据库的同步。同时,为了确保DR的稳定性,我们还可以在该网段中,再次选择一个BDR。有了BDR之后,所有的路由器,也需要与BDR建立邻居关系。即所有的OSPF路由器在同步数据库的时候,都仅仅与DR和BDR同步数据库,但是只有DR进行数据库条目的请求的回应。在进行数据库的更新与请求的过程中,为了提高效率,普通路由器都是通过组播的方式与DR和BDR进行数据库同步的,组播地址:224.0.0.6。 那么如何进行 DR 和 BDR 的选举?

  • 哪些设备才有资格参与竞选: 优先级不为0 的设备,才有资格参与进行; 如果为0 ,那么该设备只能作为 DRother出现。
  • 具体的竞选规则是什么: 1.首先比较优先级,越大越好,默认为1; 2.其次比较 router-id ,越大越好;
  • 特点: DR和BDR一旦确定,就无法进行更改,即具备稳定性。如果想更改 DR 和 BDR ,只能进行重启 OSPF 协议 或者是 路由器。 DR 有且只有一个; BDR 最多只有 一个; DR 和 BDR 都是一个接口的概念,最终是以IP地址的形式表示的。 优先级为0的路由器,只能成为 DRother。 DRother之间的状态,永远只能是 two-way 。

OSPF的数据库LSA详解 OSPF数据库:包含的是链路状态信息;也称之为:LSA,link state advertisement链路状态通告 OSPF数据库中是通过“区域”为基本单位进行管理LSA的,如果一个LSA出现在一个区域中,那么该LSA的变化只会影响这个区域中的路由器。同一个区域中的,所有的路由器,包含的数据库条目是完全相同的。

  • 1类LSA: 类型(type) : router 名字(link-id):路由器的 router-id 谁发(advRouter):路由器的 router-id 作用:在所连接的区域中,进行“自我介绍”:1.我的哪些链路启用了OSPF;2.我与谁建立了OSPF邻居;3.我怎么去连接对方;4.我和邻居之间的网段是怎样的 特点:每个区域的每个路由器都会在该区域产生一个1类LSA;该类型的 LSA 只能在一个区域内部传输;LSA在传输的过程中,是不变化的。 验证命令 :display ospf lsdb router x.x.x.x
  • 2类LSA: 类型(type): network
    名字(link-id):DR的接口IP地址 谁发(advRouter):DR的 router-id 作用:用于表示 DR 的管理范围,即2类LSA中包含的是可以与自己建立邻居关系的那些路由器的 router-id ;携带 DR 接口IP地址的子网掩码。 特点:只能在该区域内部传输;只能由DR产生。 验证命令 :display ospf lsdb network x.x.x.x
  • 3类LSA: 类型(type):Sum-Net 名字(link-id):其它区域路由的前缀 谁发(advRouter):ABR的 router-id 作用:在不同区域之间,传递路由信息 特点:只有 ABR 可以产生;该类型的 LSA 只能在一个区域内部传输;LSA在传输的过程中,在区域内部是不变的;一旦经过一个 ABR ,那么原来的3类LSA中的 advRouter 就会变成新的 ABR 的 router-id。
  • 4类LSA: 类型(type):sum-asbr 名字(link-id):ASBR 的 router-id 谁发(advRouter):与ASBR在同一个区域的ABR的router-id 作用:在不同的区域之间传递 ASBR 的 router-id 特点:在传输过程中,每经过一个 ABR,就会将自己的 advRouter 变成新的 ABR 的 router-id 。
  • 5类LSA: 类型(type) :external 名字(link-id) : 外部路由的前缀 谁发(advRouter):ASBR 的 router-id 作用:表示 OSPF 的外部路由 特点:该类型的 LSA可以在整个 OSPF 网络中任意传输。
  • 7类LSA: 类型(type) :nssa 名字(link-id) : 外部路由的前缀 谁发(advRouter):ASBR 的 router-id 作用:在 NSSA 区域中 ,表示 OSPF 的外部路由; 携带外部路由的掩码。 特点:该类型 LSA 只会出现在 NSSA区域 中;NSSA 区域中的 ABR 可以自动将 7 类LSA 转化为 5 类 LSA ;分为type1和type2。

OSPF路由的优先级:以下由高到低排列

  • 内部 -区域内部 -区域之间
  • 外部 -5类LSA表示的路由: type 1 type 2 -7类LSA表示的路由: type 1 type 2

OSPF的特殊区域:不允许4、5类LSA的区域,就叫做特殊区域!

  • 概述: 对于外部链路而言,它的连通性和稳定性,一个公司是无法保证的。同时,在这种“公司之间”的链路上,是没有办法运行OSPF的,所以,为了让内网与外部网络互通,只能够将该外部链路所表示的网络,通过import-route的方式引入到公司内部,从而该类型的网络,在内部的OSPF中,是以OSPF外部路由形式形式存在的,即以5类LSA形式存在的。但是,5类LSA在传输过程中,是没有区域概念的,即可以传输到内部OSPF网络的任何的地方。那么,如果外部链路不稳定(up/down),那么表示外部链路的5类LSA,也就会不稳定(添加/删除)。此时会影响到OSPF内部网络的所有路由器,从而导致内部网络不稳定。为了确保公司内部某些重要的区域是不受到外部链路的影响,我们可以通过以下技术,对这些重要的区域进行保护!
  • OSPF特殊区域详解: stubarea(末节区域) -该类型的区域,不接收5类LSA和4类LSA; -允许接收1、2、3类LSA以及一个特殊的表示默认路由的3类LSA(该3类LSA是由stub区域的ABR自动产生的) -配置:在该区域的所有路由器上,配置stub命令 totallystub(完全末节区域) -不接收3、4、5类LSA; -允许接收1、2、以及1个特殊的表示默认路由的3类LSA(该3类LSA是由stub区域的ABR自动产生的) -配置:仅需在该区域的ABR上,配置stub no-summary命令 NSSA(notsostubarea) -不允许4、5类LSA -允许1、2、3、7类LSA -配置:在该区域的所有路由器上都配置nssa命令 -场景:如果想保护一个区域不受到外部链路的影响,并且还希望在该区域引入其他的外部路由,那么该区域只能设置为NSSA区域。 totallyNSSA -不允许3、4、5类LSA -允许1、2、7类LSA以及1个特殊的3类LSA,用于表示默认路由(ABR自动产生的) -配置:在该区域的ABR上配置nssa no-summary命令

OSPF虚链路

  • 当OSPF网络中,出现“非骨干区域”没有与“骨干区域”直接相连的情况,此时该非骨干区域与其他区域之间是不能通信的,为了解决该问题,我们可以在该区域的“同时连接多个区域”的路由器上,与所连接的某个区域中的ABR建立一个虚链路,就可以了。虚链路建立的邻居关系,永远是属于区域0。
  • 配置举例 R5: ospf1 area45 vlink-peer4.4.4.4 R4: ospf1 area45 vlink-peer5.5.5.5 1.查看vlink所建立的邻居:display ospf vlink 2.查看R5的身份,是否变成了ABR:display ospf brief 3.确定原先的区域中已经有了其他区域的3类LSA。 在假设R9上查看数据库以及路由表,得包含其他区域的路由信息。 display ospf lsdb--->应该有大量的3类LSA display ip routing-table protocol ospf->应该有大量的区域之间的路由条目。

OSPF汇总:本质是对LSA汇总

  • 类型: 3类LSA汇总--->ABR上配置的(被汇总的路由所在的区域的ABR),例如 abr-summary 10.10.0.0 255.255.0.0 5类LSA汇总--->ASBR上配置的(产生被汇总的明细路由的ASBR),例如 asbr-summary 10.10.0.0 255.255.0.0
  • 注意: 1.汇总仅仅发生在发送LSA的时候,是在“出方向”发生的; 2.汇总后,只发汇总,不发明细LSA;
  • 作用: 1.可以减少LSA的发送数量,从而OSPF对设备资源的使用率; 2.增强OSPF网络的稳定性;

OSPF认证

  • OSPF认证类型 -链路认证;仅对所配置的链路,起作用; -区域认证;对该区域的所有的链路,都起作用;
  • OSPF加密类型 -明文,simple,即这种类型的加密方式,密码在传输过程中是不加密的; -密文,MD5,即这种类型的加密方式,密码在传输过程中是加密的; 上述的加密类型,描述的是“密码在传输过程中”的加密状态;密码在设备本地保存的时候,要看类型是: plain,在本地配置文件中依然是明文; cipher,在本地配置文件中是密文形式;
  • OSPF认证配置思路 -启用认证 -配置认证类型 -配置认证密码 (如果是md5认证,则必须保证两端的key-id相同)
  • OSPF认证配置命令 interface g0/0/0 ospf authentication-mode md5 {key-id} {密码} ospf 1 area 0 authentication-mode simple plain HAHA