OSPF在HCIA中已经简单的接触到了,现在在IP中更加详细的学习了,但是内容增加很多,要反复看才不会忘掉
RIP是基于距离矢量算法的路由协议,应用在大型网络中存在收敛速度慢、度量值不科学、可扩展性差等问题。
IETF提出了基于SPF算法的链路状态路由协议OSPF(Open Shortest Path First)。通过在大型网络中部署OSPF协议,弥补了RIP协议的诸多不足。
OSPF协议基础
所谓Link State(链路状态)指的就是路由器的接口状态。在OSPF中路由器的某一接口的链路状态包含了如下信息:
- 该接口的IP地址及掩码。
- 该接口的带宽。
- 该接口所连接的邻居。
- ……
OSPF作为链路状态路由协议,不直接传递各路由器的路由表,而传递链路状态信息,各路由器基于链路状态信息独立计算路由。
所有路由器各自维护一个链路状态数据库。邻居路由器间先同步链路状态数据库,再各自基于SPF(Shortest Path First)算法计算最优路由,从而提高收敛速度。
在度量方式上,OSPF将链路带宽作为选路时的参考依据。 “累计带宽”是一种要比“累积跳数”更科学的计算方式。
OSPF的路由计算过程可以简化描述为:
- 路由器之间发现并建立邻居关系。
- 每台路由器产生并向邻居泛洪链路状态信息,同时收集来自其他路由器链路状态信息,完成LSDB(Link State Database)的同步。
- 每台路由器基于LSDB通过SPF算法,计算得到一棵以自己为根的SPT(Shortest Path Tree),再以SPT为基础计算去往各邻居连接网络的最优路由,并形成路由表。
OSPF协议报文头部
RIP路由器之间是基于UDP 520的报文进行通信,OSPF也有其规定的通信标准。OSPF使用IP承载其报文,协议号为89。
在OSPF Packet部分,所有的OSPF报文均使用相同的OSPF报文头部:
- Version :对于当前所使用的OSPFv2,该字段的值为2。(OSPFv2.v3)
- Type:OSPF报文类型。
- Packet length:表示整个OSPF报文的长度,单位是字节。
- Router ID:表示生成此报文的路由器的Router ID。
- Area ID:表示此报文需要被通告到的区域。
- Checksum:校验字段,其校验的范围是整个OSPF报文,包括OSPF报文头部。
- Auth Type:为0时表示不认证;为1时表示简单的明文密码认证;为2时表示加密(MD5)认证。
- Authentication:认证所需的信息。该字段的内容随AuType的值不同而不同。
OSPF报文类型
-
Type=1为Hello报文,用来建立和维护邻居关系,邻居关系建立之前,路由器之间需要进行参数协商。(通过Keepalive机制维护邻居关系)
- 掩码
- Hello报文发送时间间隔
- 可选项
- 路由器的优先级---选举DR/BDR
- Hello报文的死亡时间:默认是4倍的hello time
- DR/BDR的RID---DR和BDR的选举在hello报文交互的阶段就已经完成了。
- 邻居的RID
哪些参数会影响建立邻居关系(包括OSPF报文头的)?
- RID不能冲突。
- 直连的邻居区域ID要一样。
- 验证的类型和密码。
- 掩码一致。(在NBMA P2MP Broadcast)
- Hello时间间隔要一致。
- 可选项。(特殊区域)
-
Type=2为数据库描述报文(DD),用来向邻居路由器描述本地链路状态数据库,使得邻居路由器识别出数据库中的LSA是否完整。(确定主从关系型,交互LSDB摘要)
接口MTU:为0的含义指的是OSPF没有使能MTU检查功能。为0的情况下,两端接口MTU不一致,不影响OSPF邻居为full。但是非0的话,两端接口的MTU必须一致,否则,邻居的状态会停留在exstart状态。
确定了主从关系以后(MS位),后续的DD报文就携带了LSDB中,LSA报文头的信息。
-
Type=3为链路状态请求报文(LSR),路由器根据邻居的DD报文,判断本地数据库是否完整,如不完整,路由器把这些LSA记录进链路状态请求列表中,然后发送一个LSR给邻居路由器。(请求LSA)
-
Type=4为链路状态更新报文(LSU),用于响应邻居路由器发来的LSR,根据LSR中的请求列表,发送对应LSA给邻居路由器,真正实现LSA的泛洪与同步。
-
Type=5为链路状态确认报文(LSAck),用来对收到的LSA进行确认,保证同步过程的可靠性。
在OSPF中,hello默认是以组播的方式发送的。如果在某些不支持组播的场景,比如帧中继场景。邻居关系的建立就必须采用单播手动的方式
DD、LSR、LSU、LSAck与LSA的关系:
- DD报文中包含LSA头部信息,包括LS Type、LS ID、Advertising Router 、LS Sequence Number、LS Checksum。
- LSR中包含LS Type 、LS ID和Advertising Router。
- LSU中包含完整的LSA信息。
- LSAck中包含LSA头部信息,包括LS Type、LS ID、Advertising Router、LS Sequence Number、LS Checksum。
OSPF的接口网络类型
OSPF划分了四种网络类型并以此来组成拓扑信息的一部分。
-
P2P网络
仅两台路由器互连。
支持广播、组播。
线缆如果为PPP/HDLC的时候。
Hello time 10。不需要DR/BDR的选举。
P2P网络的例子:两台通过PPP(Point-to-Point Protocol)链路相连的路由器网络。
-
广播型网络
两台或两台以上的路由器通过共享介质互连。
支持广播、组播
线缆为以太网的线缆,是默认的接口网络类型。
Ospf hello time为10S。需要选举DR/BDR
广播型网络的例子:通过以太网链路相连的路由器网络。
-
NBMA网络
非广播多点可达。接口类型为帧中继的时候。
Ospf hello time 为30S。需要选举DR/BDR
不支持广播、组播。
在NBMA网络上,OSPF模拟在广播型网络上的操作,但是每个路由器的邻居需要手动配置。
NBMA(non-broadcast multiple access)型网络的例子:通过全互连的帧中继链路相连的路由器网络。在现在的网络部署中,NBMA网络已经很少了。
-
P2MP网络
点到多点。我们一般都NBMA的接口网络类型修改为P2MP。
Hello time 为30S、不需要选DR/BDR
P2MP可以看作是多个P2P的集合,P2MP可以支持广播、组播的转发。
没有一种链路层协议默认属于P2MP类型网络,也就是说必须是由其他的网络类型强制更改为P2MP。常见的做法是将非完全连接的帧中继或ATM改为P2MP的网络。
-
V-Link
OSPF的度量方式
OSPF在计算接口的cost时,cost=参考带宽/实际带宽,默认参考带宽为100M。
当计算结果有小数位时,只取整数位;结果小于1时,cost取1。
若需要调整接口cost值有两种方式:
- 直接在接口下配置,需要注意的是,配置的cost是此接口最终的cost值,作用范围仅限于本接口。
- 修改OSPF的默认参考带宽值,作用范围是本路由器使能OSPF的接口。建议参考整个网络的带宽情况建立参考基线,所有路由器修改相同的参考带宽值,从而确保选路的一致性。
OSPF以“累计cost”为开销值,也就是流量从源网络到目的网络所经过所有路由器的出接口的cost总和,以RTA访问RTC Loopback 1接口192.168.3.3为例,其cost=G1’s cost+G3’s cost。
DR与BDR
DR(Designated Router)即指定路由器,其负责在MA网络建立和维护邻接关系并负责LSA的同步。
DR与其他所有路由器形成邻接关系并交换链路状态信息,其他路由器之间不直接交换链路状态信息。这样就大大减少了MA网络中的邻接关系数量及交换链路状态信息消耗的资源。(减少邻接关系,降低OSPF协议流量)
DR一旦出现故障,其与其他路由器之间的邻接关系将全部失效,链路状态数据库也无法同步。此时就需要重新选举DR,再与非DR路由器建立邻接关系,完成LSA的同步。为了规避单点故障风险,通过选举备份指定路由器BDR,在DR失效时快速接管DR的工作。
伪节点是一个虚拟设备节点,其功能需要某台路由器来承载,下面将介绍DR/BDR的选举规则。
选举规则:DR/BDR的选举是基于接口的。
- 接口的DR优先级越大越优先。
- 接口的DR优先级相等时,Router ID越大越优先。
优先级为0不参加选举,优先级最大也不一定是DR/BDR,可以手动配置
OSPF域内路由
OSPF区域内路由由两种LAS算出来的
1类LSA和2类LSA传播的范围仅限于本区域。计算区域内的拓扑和路由。不可能区域0的type1和type2传播到了区域1.
LSDB
Router-LAS----1类LSA
-
P2P接口网络类型的1类LSA
P2P接口网络类型的LSA同时携带了路由信息和拓扑信息(上面是拓扑信息,下面是路由信息)
P2P接口网络类型的LSA同时携带了路由信息和拓扑信息一条Router-LSA可以描述多条链接,每条链接描述信息由Link ID,Data,Link Type和Metric组成
链接类型(并非OSPF定义的四种网络类型),Router LSA描述的链接类型主要有:
- Point-to-Point:描述一个从本路由器到邻居路由器之间的点到点链接,属于拓扑信息。
- TransNet:描述一个从本路由器到一个Transit网段(例如MA网段或者NBMA网段)的链接,属于拓扑信息。
- StubNet:描述一个从本路由器到一个Stub网段(例如Loopback接口)的链接,属于路由信息。
-
MA网络的1类LSA
只携带拓扑信息
Network-LAS----2类LSA
-
在P2P接口网络类型中,是没有2类LSA的。
-
在MA网络类型/NBMA中,把路由的信息放在了2类LSA中
产生2类LSA的角色是DR。
SPF算法
本质就是Dijkstra算法
OSPF域间路由
OSPF区域内是SPF算法,区域间OSPF是DV算法。本区域是不知道其他区域的拓扑的。本区域是如何学习其他区域路由的呢,靠3类LSA,在OSPF中,这就是一条路由。在区域间传递用的。
骨干区域area 0 必须要有,其他区域必须和骨干区域相连。其他非骨干区域之间学习路由,靠骨干区域区域传递的。这么做的目的是为了防止区域间路由环路的。
3类LAS由ABR产生,并且进行传递的。并规定从骨干区域传来的三类LSA不再传回骨干区域。也是为了防止路由环路
V-LINK技术是为了解决骨干区域被分割的问题,以及非骨干区域没有和骨干区域相连的问题。
LS算法和DV算法,这两种算法各有特点,详细参考路由选择算法 LS DV
OSPF外部路由
在ASBR上引入的其他路由,被引入的路由就是域外路由。
ASBR会产生一条5类的LSA,能够在整个OSPF区域泛洪的。描述一条域外路由。
Options字段为E表示该LSA支持泛洪。
度量值:种子度量值。不管该外部路由原先的度量值为多少,引入到OSPF区域的时候,初始度量值一律为1。
E type :2 -----标识了OSPF域外路由的类型。Type 1 的域外路由(计算域内和域外开销总和的),type 2的域外路由(只计算域内的开销)。缺省的情况下,引入的外部路由都是type 2类型的。
Forwarding address:转发地址。指导其他路由器怎么样去往外部路由的网段。
-
全0:0.0.0.0------路由器回去查询ASBR的位置。
-
非0----192.168.1.1 会去查询该地址怎么走。
如果ASBR上和域外相连的接口启动了OSPF,那么FA的地址就是该接口的地址。
LSA
1类LSA和2类LSA作用算出本区域的拓扑。
2类的作用是作为辅助计算。传播范围仅仅局限于本区域内
3类LSA的作用传播其他区域的路由。由ABR产生的,传播范围仅两个区域间。
4类LSA的作用是辅助5类LSA的,由ABR产生的作用是告诉其他路由器ASBR的位置。
5类LSA就是一条域外的路由。能在整个OSPF区域泛洪
7类LSA也是一种域外路由。在ASBR第一次引入外部路由的时候,实际上是以7类的形式引入的,只不过普通的OSPF区域规定不能传递7类。在ASBR上把7类LSA转变了5类LSA。
OSPF中的次优路径
在OSPF 中进行路由的优选的顺序:
域内的路由>区域间的路由>type 1的外部路由>type 2 的外部路由
OSPF特殊区域
随着网络规模的增大,边缘设备性能较差,维护的路由表象过多,导致转发性能的降低。
OSPF特殊区域的作用:较少OSPF路由表项,加快性能较差设备的转发效率。
OSPF的特殊区域减少路由表项的原理通过较少LAS传递。用默认路由进行取代。
传输区域和末端区域
对于OSPF各区域,可分为两种类型:
- 传输区域:除了承载本区域发起的流量和访问本区域的流量外,还承载了源IP和目的IP都不属于本区域的流量,即“穿越型流量”,如Area 0。
- 末端区域:只承载本区域发起的流量和访问本区域的流量,如Area 1。
对于末端区域,需要考虑下几个问题:
- 保存到达其他区域明细路由的必要性:访问其他区域通过单一出口,“汇总”路由相对明细路由更为简洁。
- 设备性能:网络建设与维护必须要考虑成本因素。末端区域中可选择部署性能相对较低的路由器。
OSPF路由器计算区域内、区域间、外部路由都需要依靠收集网络中的大量LSA,大量LSA会占用LSDB存储空间,所以解决问题的关键是在不影响正常路由的情况下,减少LSA的数量。
Stub区域
Stub区域的ABR不向Stub区域内传播它接收到的自治系统外部路由(对应四类、五类LSA),Stub区域中路由器的LSDB、路由表规模都会大大减小。
为保证Stub区域能够到达自治系统外部,Stub区域的ABR将生成一条缺省路由(对应三类LSA),并发布给Stub区域中的其他路由器。
Stub区域是一种可选的配置属性,但并不建议将每个区域都配置为Stub区域。通常来说,Stub区域位于自治系统的末梢,是那些只有一个ABR的非骨干区域。
配置Stub区域时需要注意下列几点:
- 骨干区域不能被配置为Stub区域。
- 如果要将一个区域配置成Stub区域,则该区域中的所有路由器必须都要配置成Stub路由器。
- Stub区域内不能存在ASBR,自治系统外部路由不能在本区域内传播。
虚连接不能穿越Stub区域建立。
Totally-Stub区域
Totally Stub区域既不允许自治系统外部路由(四类、五类LSA)在本区域内传播,也不允许区域间路由(三类LSA)在本区域内传播。
Totally Stub区域内的路由器对其他区域及自制系统外部的访问需求是通过本区域ABR所产生的三类LSA缺省路由实现的。
与Stub区域配置的区别在于,在ABR上需要追加no-summary参数。
Stub区域、Totally Stub区域存在的问题
RTD和RTA同时连接到某一外部网络,RTA引入外部路由到OSPF域,RTD所在的Area 1为减小LSDB规模被设置为Stub或Totally Stub区域。RTD访问外部网络的路径是“RTD->RTB->RTA->外部网络”,显然相对于RTD直接访问外部网络而言,这是一条次优路径。
OSPF规定Stub区域是不能引入外部路由的,这样可以避免大量外部路由对Stub区域设备资源的消耗。
对于既需要引入外部路由又要避免外部路由带来的资源消耗的场景,Stub和Totally Stub区域就不能满足需求了。
然后引入了NSSA区域
NSSA区域
OSPF NSSA区域(Not-So-Stubby Area)是在原始OSPF协议标准中新增的一类特殊区域类型。
NSSA区域和Stub区域有许多相似的地方。两者的差别在于,NSSA区域能够将自治域外部路由引入并传播到整个OSPF自治域中,同时又不会学习来自OSPF网络其它区域的外部路由。
NSSA LSA(七类LSA):
- 七类LSA是为了支持NSSA区域而新增的一种LSA类型,用于描述NSSA区域引入的外部路由信息。
- 七类LSA由NSSA区域的ASBR产生,其扩散范围仅限于ASBR所在的NSSA区域。
- 缺省路由也可以通过七类LSA来产生,用于指导流量流向其它自治域。
七类LSA转换为五类LSA:
- NSSA区域的ABR收到七类LSA时,会有选择地将其转换为五类LSA,以便将外部路由信息通告到OSPF网络的其它区域。
- NSSA区域有多个ABR时,进行7类LSA与5类LSA转换的是Router ID最大的ABR。
Totally NSSA和NSSA区别:
- Totally NSSA不允许三类LSA在本区域内泛洪。
- Totally NSSA与NSSA区域的配置区别在于ABR上需要追加no-summary参数。
LSA总结
LSA作用:
- Router LSA(一类):每个路由器都会产生,描述了路由器的链路状态和开销,在所属的区域内传播。
- Network LSA(二类):由DR产生,描述本网段的链路状态,在所属的区域内传播。
- Network-summary-LSA(三类):由ABR产生,描述区域内某个网段的路由,并通告给其他相关区域。
- ASBR-summary-LSA(四类):由ABR产生,描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。
- AS-external-LSA(五类):由ASBR产生,描述到AS外部的路由,通告到所有的区域(除了Stub区域和NSSA区域)。
- NSSA LSA(七类):由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。
特殊区域的局限性
特殊区域不仅有效减少了区域内LSA的数量以及路由计算的压力,而且一定程度上也缩小了网络故障的影响范围。但特殊区域的局限性在于其作用范围只在本区域内,对于其他区域,如何才能减少LSA、降低路由计算的压力呢