内容简介: 上一篇文章中我们简单的了解了RIP距离矢量这种路由协议,现在开始我们目前使用最广泛,应用最多,也是最实用的内部网管协议OSPF的学习。OSPF协议是IETF(Internet网络工程部)基于SPF算法(shortest path first 最短路径优先)开发的协议。当时是大家想开发一款开放的最短路径优先协议,所以就叫做open shortest path frist 这也就是OSPF名字全称。下面我们开始正式了解OSPF吧。 OSPF协议相对的确比较复杂,我们会花不少时间讲解其中比较重要的几个概念
上一篇文章中我们简单的了解了RIP距离矢量这种路由协议,现在开始我们目前使用最广泛,应用最多,也是最实用的内部网管协议OSPF的学习。OSPF协议是IETF(Internet网络工程部)基于SPF算法(shortest path first 最短路径优先)开发的协议。当时是大家想开发一款开放的最短路径优先协议,所以就叫做open shortest path frist 这也就是OSPF名字全称。下面我们开始正式了解OSPF吧。
1 OSPF基础
OSPF协议相对的确比较复杂,我们会花不少时间讲解其中比较重要的几个概念,我们需要注意的就是也是最重要的俩个就是OSPF报文类型以及LSA类型。
OSPF允许在一个自治系统里划分区域的做法,相邻的网络和它们相连的路由器组成一个区域(Area)。每一个区域有该区域自己拓扑数据库,该数据库对于外部的区域是不可见的,每个区域内部路由器的链路状态信息数据库实际上只包含着该区域内的链路状态信息,他们也不能详细地知道外部的链接情况,在同一个区域内的路由器拥有同样的拓扑数据库。和多个区域相连的路由器拥有多个区域的链路状态信息库。划分区域的方法减少了链路状态信息数据库的大小、并极大地减少了路由器间交换状态信息的数量。
1.1 OSPF报文类型及基本特性
OSPF协议的基本特性如下:
1.OSPF是IGP协议,是Link-State协议,基于IP 协议之上,协议号为89。 2.采用SPF算法(Dijkstra算法)计算最佳路径。 3.能够快速响应网络变化,和RIP不一样,OSPF只计算更新的那一部分路由,不会每次都整表进行更新,并且他是触发更新,这一部分会在报文交互过程中详细讲解。 4.支持等价的负载均衡。
ospf报文会有五种报文类型,每种报文的功能如图:
讲解报文之前这里说明一下,ospf交互状态有七种,然后又有邻居和邻接俩个概念。
其中OSPF路由器启动后,通过OSPF接口向外发送Hello报文。并且收到Hello报文的OSPF路由器会检查报文中所定义的参数,如果双方一致就会形成邻居关系。
邻接是只有当双方成功交换DD报文,交换LSA并达到LSDB的同步之后,才形成真正意义上的邻接关系
我们来通过一系列图片认识这一过程:
这是建立邻居的开始
这是邻接关系的开始
达到同步建立完毕
2 OSPF详情
Hello报文:周期性发送,用来发现和维持OSPF邻居关系。内容包括一些定时器的数值、DR(Designated Router,指定路由器)、BDR(Backup DesignatedRouter,备份指定路由器)以及自己已知的邻居。 DD(Database Description,数据库描述)报文:描述了本地LSDB中每一条LSA的摘要信息,用于两台路由器进行数据库同步。 LSR(Link State Request,链路状态请求)报文:向对方请求所需的LSA。两台路由器互相交换DD报文之后,得知对端的路由器有哪些LSA是本地的LSDB所缺少的,这时需要发送LSR报文向对方请求所需的LSA。内容包括所需要的LSA的摘要。 LSU(Link State Update,链路状态更新)报文:向对方发送其所需要的LSA。 LSAck(Link StateAcknowledgment,链路状态确认)报文:用来对收到的LSA进行确认。内容是需要确认的LSA的Header(一个报文可对多个LSA进行确认)。
表1 OSPF路由协议包类型
| 包类型 | 目的 |
|---|---|
| Hello协议包 | 发现和维护邻居 |
| 数据库描述 | 汇总数据库内容 |
| 链路状态请求 | 数据库下载 |
| 链路状态更新 | 数据库上载 |
| 链路状态确认 | 扩散确认 |
2.1 五类报文
2.1.1 hello报文
Hello协议用于寻找和维护路由器所连网络上的邻居关系。通过周期性地发出Hello包,来确定和维护邻居路由器接口是否仍在起作用。Hello包被发送到网络上的每个活动的路由器接口。在广播和非广播的多点访问的网络上,DR和BDR的选举也是通过Hello包来完成的。在不同的物理网络上,Hello包的目的地址是不同的;在点到点和广播网络上,其目的地址是AllSPFRouter(224.0.0.5);在虚链路上是单播,也就是从虚链路的源端直接发送到链路的另一端;而在点到多点的网络上,分离的Hello包分别发送到相连的每一个邻居;在非广播的多点访问网络上,Hello包的发送要看各个路由器的配置信息。
Hello协议的作用是发现和维护邻居关系、选举DR和BDR。在广播型网络上每一个路由器周期性地广播Hello包(目的地址是AllSPFRouter),使得它能够被邻居发现。每一个路由器的每个接口都有一个相关的接口数据结构,当Hello包里的特定参数(如Area ID, Authentication,
Network Mask, HelloInterval, RouterDeadInterval 和Options
values)相匹配时,Hello包才能被接收。Hello包中包含着本路由器所希望选举的DR和该DR的优先级、BDR和BDR的优先级、还有本路由器通过交换Hello协议包所“看”到的其它路由器。从Hello包里得到的邻居被放在路由器的邻居列表里。当从接收到的Hello包里看到自己时,就建立了双向通信。建立了双向通信的路由器才有可能建立连接(adjacency)关系,能否建立连接关系,要看连接两个邻居的网络的类型。通过Hello协议包的交换,得知了希望成为DR和BDR的路由器以及他们的优先级,下一步的工作是选举DR和BDR。
2.1.2 DD报文
在OSPF中,保持区域范围内的所有路由器的链路状态数据库同步极为重要。通过建立并保持邻接关系,OSPF使具有邻接关系的路由器的数据库同步,进而保证了区域范围内所有路由器数据库同步。数据库同步过程从建立邻接关系开始,在完全邻接关系已建立时完成。当路由器的端口状态为ExStart时,路由器通过发一个空的数据库描述包来协商“主从”关系以及数据库描述包的序号,Router ID大的为主,反之为从。序号也以主路由器产生的初始序号为基准,以后的每一次数据库描述包的发送,序号都要加1。主路由器发送链路状态描述包(数据库描述包),从路由器接收链路状态描述包后来检查自己的链路状态数据库,如果发现链路状态数据库里没有改项,则进行添加该项,并将该项加入链路状态请求列表,准备向主路由器请求新的链路状态,并向主路由器发送确认包。主路由器收到链路状态请求包时,发出链路状态的更新包,进行链路状态的更新。从路由器收到链路状态更新包后发出确认包,进行确认,表示收到该更新包,否则主路由器就在重发定时器的启动下进行重复发送。每一个路由器向它的邻居发送数据库描述包来描述自己的数据库,每一个数据库描述包由一组链路状态广播组成,邻居路由器接收该数据库描述包,并返回确认消息。这两个路由器形成了一种“主从”关系,只有主路由器能够向从路由器发送数据库描述包,反之则不行。当所有的数据库请求包都已被主路由器处理后,主从路由器也就进入了邻接完成状态。当DR与整个区域内所有的路由器都完成邻接关系时,整个区域中所有路由器的数据库也就同步了。
2.1.3 LSR报文
两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的和哪些LSA是已经失效的,这时需要发送LSR报文(Link State Request Packet)向对方请求所需的LSA
内容包括所需要的LSA的摘要。
LS type、Link State ID和Advertising Router可以唯一标识出一个LSA,当两个LSA一样时,需要根据LSA中的LS sequence number、LS checksum和LS age来判断出所需要LSA的新旧。
2.1.4 LSU报文
用来向对端路由器发送所需要的LSA,内容是多条LSA(全部内容)的集合。
LSU报文(Link State Update Packet)在支持组播和广播的链路上是以组播形式将LSA泛洪出去。
为了实现Flooding的可靠性传输,需要LSAck报文对其进行确认。对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。
2.1.5 LSAck报文
用来对接收到的LSU报文进行确认。
内容是需要确认的LSA的Header(一个LSAck报文可对多个LSA进行确认)。
LSAck(Link State Acknowledgment Packet)报文根据不同的链路以单播或组播的形式发送
当链路状态数据库达到同步以后,各个路由器就利用同步的数据库以自己为根节点来并行地计算最优树,从而形成本地的路由表。
当收到IP包需要查询路由表时,按照以下规则完成路由查找:
(1)在路由表中选择相匹配的路由记录。相匹配的记录是指需转发IP包的目的地址“落在”该匹配路由记录的目的地址范围内(该匹配记录可能有多个)。如:如果有路由表项为172.16.64.0/18,172.16.64.0/24和172.16.64.0/27供目的地址172.16.64.205选择,则选择最后一项。因为它是最匹配的一个。也就是说要选择一个掩码最长的一个。缺省路由是最后要选择的,因为它的掩码最短。如果没有匹配的路由表项供选择,则有ICMP发送一个目标不可到达的控制报文,而且该IP包将被丢弃。
(2)如果有多个路径匹配,根据路由的类型来进行进一步的选择,它们的优先级依次为区域内的路径,区域间得额路径,E1型的外部路径,E2型的外部路径。
(3)如果有类型和费用都相等的多条路径,则OSPF将同时利用它们。
(4)最后利用所寻找的路径来进行IP包的转发。
3 总结
OSPF协议内容比较多,今天讲的可能有点乱,下一篇我会整理好把其他关键点打通,让大家更明白这一过程,今天我们记住五大报文类型即可。hello报文,DD报文,LSR报文,LSU报文,LSAck报文。
以上所述就是小编给大家介绍的《IGP网络协议之OSPF详解一》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Open Data Structures
Pat Morin / AU Press / 2013-6 / USD 29.66
Offered as an introduction to the field of data structures and algorithms, Open Data Structures covers the implementation and analysis of data structures for sequences (lists), queues, priority queues......一起来看看 《Open Data Structures》 这本书的介绍吧!