OSPF工作原理:
1、 宣告OSPF的路由器从所有启动OSPF进程的接口上发出hello数据包;
2、 邻接关系的建立是由交换Hello信息的路由器类型和网络类型决定的;
3、 每一台路由器都会在所有形成邻接关系的邻居之间发送LSA,LSA描述了路由器所有链路、接口、路由器的邻居以及链路状态信息;
4、 每一台收到从neighbor发出的LSA的路由器都会把这些LSA记录在自己的LSDB中,并且发送一份LSAcopy给其他的neighbors;
5、 通过LSA泛洪扩散到整个区域,区域内所有路由器都会形成相同的LSDB;
6、 当这些路由器的LSDB完全相同时,每一台路由器将以自身为根,使用SPF算法计算出一个无环拓扑,描述自己所知道的到达每一个目的地的shortest path.
7、 每一台路由器都将从SPF算法树中构建出自己的路由表:
1) 区域内路由(最优)
2) 区域间路由
3) E1外部路由
4) E2外部路由
OSPF邻居之间交换的Hello数据包称为keepalive,并且每30min重传一次LSA。
OSPF五种数据包
l Hello 建立并维护邻居关系。hello组播地址 224.0.0.5
l DBD DatabaseDescribe 数据库描述,建立邻居时发送,描述自身接口状态。
l LSR LinkState Request 链路状态请求,向邻居请求
l LSU LinkState Update 链路状态更新,发送的是LSA
l LSAck 对DBD、LSR、LSU进行确认
OSPF选举router-id的规则:
1) 手动配置的router-id为首选;
2) 所有loopback中最大的IP作为router-id;
3) 所有活动物理接口中最大的IP作为router-id;
(用作router-id的接口不一定非要运行OSPF协议)
使用loopback作为router-id的好处:
² Loopback比其他任何接口更稳定;
² 网络管理员能够更好地控制router-id;
OSPF Hello消息的用途:
² OSPF利用Hello通告router-id并开始建立邻居/邻接关系;
² 在两台路由器成为邻居之前,需要通告这两台路由器必须相互认可的几个参数;
² Hello在邻居路由器间担当keepalive的角色;
² 确保了邻居路由器之间的双向通信;
² 用来在NBMA网络中选举DR/BDR;
Network-Type | point-to-point | point-to-multipoint | broadcast | non-broadcast | virtual-link |
hello-interval | 10s | 30s | 10s | 30s | --- |
dead-interval | 40s | 120s | 40s | 120s | --- |
OSPF邻居建立失败的可能性参数:
« Router-id不能冲突
« Area-id不一致
« Area-Type不一致
« Hello-interval/Dead-interval不一致
« MTU不一致
« Authentication不一致
« Network-Type不一致(可能会邻居建立正常,但是不会将条目加载到路由表中)
« IP地址掩码不一致
« OSPF hello包被ACL过滤了
无论何时,路由器发送一个hello包,都会在这个Hello数据包中列出该数据链路上所出现的所有neighbors’ router-ids。如果一台路由器收到了一个有效的Hello包,并在这个Hello包中发现的自己的router-id,那么就认为Two-way Communication建立成功了。
OSPF Network-Type
要点
数据传送方式
point-to-point
point-to-point网络上的有效邻居总是可以形成Adjacency关系的。
组播,224.0.0.5,All SPF Routers
point-to-multicast
不需要选举DR/BDR,可以看成是一群point-to-point链路的集合。
单播
broadcast
选举DR/BDR,所有路由器与DR和BDR建立Adjacency关系,他们互相之间为Neighbor(DRothers)关系,DR和BDR之间也是Adjacency关系。DR/BDR不能被抢占。
DR发送数据包到224.0.0.5,
BDR发送数据包到224.0.0.5,
只有DR/BDR侦听224.0.0.6
non-broadcast
NBMA网络不具备传送Broadcast/multicast packets,需要增加额外的配置实现单播数据包,使OSPF邻居建立起来。需要选举DR/BDR,hello是单播的。
单播
virtual-link
虚链路一旦建立,就不再发送Hello消息。
单播
除了以上的5种Network Type外,所有的网络都可以归纳到下面更普通的网络类型之一:
² TransitNetwork
与两台或两台以上的路由器相连。这种网络仅仅传送那些“只需仅仅通过”的数据包,即这些数据包的始发网络和目的网络都不同于当前的Transit Network.
² StubNetwork
仅仅和一台路由器相连。末梢网络上的所有数据要么始发与这个末梢网络上的某个设备,要么终止于这个末梢网络上的某个设备。
OSPF认为Loopback口是末梢网络节点,将其作为32位主机路由来通告。
DR/BDR
² 网络中的每一台路由器都与DR形成Adjacency关系;
² DR/BDR是路由器的接口特性,并不是整个路由器的特性;
² 网络中所有的路由器都与DR和BDR形成邻接关系,DR与BDR互相形成邻接关系;
² OSPF路由器的每一个BMA或者NBMA接口都有一个priority,大小为0~255,cisco路由器的默认priority为1,可以通过接口下ip ospf priority来修改;
² 将接口priority改为0,该路由器将退出DR/BDR的选举进程,即没有选举DR/BDR的资格;
² 选举进程由Hello包承载所需要的参数字段(priority、DR/BDR’srouter-id);
² DR/BDR的选举过程
1) 路由器必须和邻居路由器建立Two-way communication状态;(具有选举DR/BDR的资格:priority必须大于0,并且邻居状态必须进入Two-way状态)
2) 多路访问链路上选举priority最高的路由器为DR;次优的为BDR;
3) 若路由器priority相同,则根据最高router-id来选举;
4) 在DR/BDR已经存在的多路访问链路上,如果有新的OSPF路由器加入,则接受已经存在的DR/BDR,即使拥有最高的priority也不会去抢占DR/BDR的角色;
5) 若DR失效,则BDR接管DR的角色,并重新激活一个新的BDR选举进程;
² DR将OSPF packets发往224.0.0.5,所有的OSPF路由器都会接受;DRothers将OSPF packets发往224.0.0.6,只有DR/BDR路由器侦听该地址并接受数据;
² 如果在一个多路访问网络上只有唯一的一台路由器具有选举资格,那么该路由将成为DR,而且网络中将不会存在BDR,这是允许的;
² 如果多路访问网络中的所有路由器都没有资格选举,那么邻居状态将卡在Two-way状态,即没有DR/BDR产生;
OSPF邻居
要成功建立一个OSPF邻接关系,通常需要4个阶段:
1. 邻居路由器发现阶段;
2. Two-way双向通信阶段;
3. Database Synchronization数据库同步阶段;
路由器之间交换DBD、LSR、LSU、LSAck数据包,确保邻居间拥有相同的LSDB。执行这一步骤的目的是使其中一台邻居路由器成为Master(router-id高的路由器),另一台成为Slave,Master将控制DBD的信息交换过程;
4. Full Adjacency完全邻接状态;
OSPF邻居状态
1. Down
2. Attempt
该状态仅仅使用于NBMA网络上的邻居,在NBMA网络上的邻居路由器是手动配置。当NBMA网络上具有DR选举资格的路由器和邻居路由器的接口开始变为Active时或者成为DR/BDR时,这台具有DR选举资格的路由器将会把邻居路由器的转该转换到Attempt状态。在Attempt状态下,路由器使用Hello-interval的时间作为Poll-interval的时间来作为向邻居发送Hello数据包的时间间隔。
3. Init
该状态表示在最近的dead-interval时间内路由器收到了来自邻居的Hello包,但是双向通信没有建立。
4. Two-Way
该状态表示本地路由器已经在来自邻居的Hello包的邻居字段中看到了自己的router-id,即双向通信建立。在多路访问网络中,该状态意味着路由器开始选举DR/BDR。如果在Init状态下从邻居那里收到一个DBD,将引起邻居状态直接转换到Two-way状态。
5. ExStart
该状态下,本地路由器与邻居建立起Master/Slave关系,确定DBD的序列号,为DBD的信息交换做准备。router-id最高者成为Master。
6. Exchange
该状态下,本地路由器向邻居发送描述自己的DBD,同时在Exchange状态下,本地路由器也会发送LSR给邻居路由器,请求最新的LSA。
Exchange状态下邻居路由器之间开始同步LSDB,同步LSDB的操作是通过它们互相描述各自的LSDB的所有条目来实现的。
7. Loading
该状态下,本地路由器向邻居发送LSR,请求最新的LSA通告,虽然在Exchange状态下已经发现了这些最新的LSA通告,但是本地路由器还没有收到这些LSA通告。
8. Full
OSPF Virtual-Link的创建规则:
² Virtual-link必须配置在两台ABR之间;
² 配置了Virtual-link所经过的区域必须拥有全部的路由选择信息,即必须是Transit Area;
² Transit Area不能是Stub Area;
² 另外,如果网络中有Virual-link存在,则被认为该网络是一个设计的比较糟糕的网络;
OSPF LSDB
² Type 1 ——Router LSA
每一台路由器都会产生RouterLSA通告。这个最基本的LSA列出了路由器所有的链路或接口,并指明了它们的状态和沿每条链路方向出站的cost,以及该链路上所有已知的OSPF邻居,这些LSA通告只会在始发它们的区域内部进行泛洪扩散。
² Type 2 ——Network LSA
每一个多路访问网络中的DR都会产生NetworkLSA通告,Network LSA通告列出了所有与之相连的路由器,包括DR路由器本身,与Router-LSA一样,Network LSA也仅仅在产生这条Network LSA的区域内进行泛洪扩散。
² Type 3 ——Network Summary LSA
由ABR路由器发出,ABR发送NetworkSummary LSA到一个区域,用来通告该区域外部外部的目的地址;
当ABR始发一条Network Summary LSA时,将包括从它本身到正在通告的这条LSA的目的地所耗费的cost;
当其他的路由器从一台ABR收到一条Network Summary LSA时,它并不运行SPF算法,只是简单加上从它到那台ABR之间的路由的cost,并将这个新的cost包含在这个LSA通告中;(这种行为类似于距离矢量协议的行为,这说明OSPF虽然在一个区域内使用的是链路状态协议,但是在查找不同域间路由时,使用的是距离矢量算法)
² Type 4 ——ASBR Summary LSA
也是由ABR始发的。ASBR SummaryLSA除了通告的目的地是一台ASBR路由器而不是一个网络外,其他的和Network Summary LSA是一样的,即通过ASBR Summary LSA通告的是一个32位主机路由,告诉OSPF系统内所有路由器怎么去往ASBR。
² Type 5 ——AS External LSA
是由ASBR始发,用来通告到达OSPF自治系统外部的目的网段。AS ExternalLSA将在整个OSPF自治系统内进行泛洪扩散。
² Type 6 ——Group Membership LSA(用于MOSPF)*
² Type 7 ——NSSA External LSA
由ASBR始发,几乎与ASExternal LSA一模一样,只是不像ASExternal LSA一样在整个OSPF自治系统内进行泛洪扩散,而是仅在始发这个NSSA External LSA的NSSA区域内进行扩散。
NSSA External LSA的头部有个P-bit的标志(0或者1):
l 如果ABR接收到的NSSAExternal LSA的P-bit被置为1,则将该Type 7 LSA转化为Type 5 LSA,并将这条LSA泛洪扩散到其他区域中区;
l 如果ABR接收到的NSSAExternal LSA的P-bit被置为0,则不会将该Type 7 LSA转化为Type 5 LSA,这条LSA只能被限制在本地NSSA区域中传递;
OSPF特殊区域
² Stub Area
Stub Area是一个不允许AS External LSA在其内部泛洪扩散的区域。如果在一个区域里没有Type 5 LSA,那么Type 4 LSA也没必要了。因此位于Stub Area边界的ABR路由器将使用Type 3 - Network Summary LSA来向Stub Area内通告一条指向ABR自己的默认路由;StubArea内的所有路由器都将使用默认路由经过ABR去往OSPF的外部网络目的地;
² Totally Stub Area
Totally Stub Area把Type 3 LSA也过滤掉了,不仅使用默认路由去往OSPF自治系统外部的目的地,而且使用默认路由到达其他OSPF区域的目的地;
² Not-So-Stub-Area(NSSA)
NSSA区域允许外部路由被重分布进来,而同时保留OSPF自治系统其他的Stub区域特性。在NSSA区域内的ASBR将始发Type 7 – NSSA External LSA来通告那些外部的目的网络。这些Type 7LSA将在整个NSSA区域中泛洪扩散,但是会在ABR路由器的地方被阻塞;(根据Type 7 LSA头部的P-bit来决定是否转换成Type 5 LSA)
² Totally NSSA
OSPF是根据路由器的每一个接口指定的cost来决定最短路径的。一条路由的cost是指沿着到达目的网络的路由路径上所有出站接口的cost之和。
cisco默认使用cost=10^8/BW,BW可以使用接口命令bandwidth来修改,单位kbit/s;可以使用命令auto-costreference-bandwidth来修改参考带宽,解决在带宽>100M的接口上计算出的cost始终为1的尴尬局面;
OSPF路由类型
² Intra-area path(域内路由)
² Inter-area path(域间路由)
² Type 1 - external path(E1)
在OSPF中,OE1的外部路由的cost是这条路由到达ASBR的每跳cost之和+ASBR通告该外部路由时赋予的起始外部cost值;
² Type 2 - external path(E2)
在OSPF中,OE2的外部路由的cost始终保持ASBR当初通告时赋予的起始外部cost不变,不管它后来是在OSPF内怎么传输的。
OE1和OE2类型的路由给网络管理员提供了一个选择的机会:是选择真正意义上距离外部网络最近的站点(OE1),还是选择通过距离外部网络最近的ASBR(OE2),去到达目标网络。
简单点,OE1参照外部路由被传进来后沿路所累加的cost值,来决定从最短的路径走;OE2忽略外部路由在OSPF区域内的传输过程,只考虑ASBR距离外部网络的远近(由通告的cost决定)。
路由汇总
在ABR上汇总
ABR(config-router)#area 1 range 172.16.0.0 255.255.252.0
//ABR上汇总OSPF area 1的路由
在ASBR上汇总
ASBR(config-router)#summary-address 172.16.0.0 255.255.252.0