1.1. OSPF入门童话
可以把整个网络(一个自治系统AS)看成一个王国,这个王国可以分成b几个区(area),现在我们来看看区域内的某一个人(你所在的机器root)是怎样得到一张世界地图(routing table)的。
首先,你得跟你四周的人(同一网段如129.102)建立基本联系。你大叫一声“我在这!”(发HELLO报文),于是,四周的人知道你的存在,他们也会大叫,这样你知道四周大概有哪些人,你与他们之间建立了邻居(neighbor)关系,当然,他们之间也有邻居关系。
在你们这一群人中,最有威望(PRiority优先级)的人会被推荐为首领(Designated Router)首领与你之间是上下级关系(adjacency邻接),它会与你建立单线联系,而不许你与其它邻居有过多交往,他会说:“那样做的话,街上太挤了”。
你只好通过首领来知道更多的消息了,首先,你们互通消息,他告诉你他知道的所有地图的地名,你也会告诉他你现知道的地名,当然上也许只有你一个点。(Database Description数据库描述报文)
你发现地名表中有你缺少的或比你新的东西,你会问他要一份更具体的资料,他发现你的地名表中有他需要的东西,他也会向你索求新资料。(Link State Request连接状态请求报文)
当然,你们毫不犹豫地将一份具体资料发送给对方。(Link State Update连接状态升级报文)
收到地图后,互相致谢表示收到了。(Link State Ack连接状态响应报文)现在,你已经尽你所能得到一份地图(Link State DataBase连接状态数据库),你去查找地图把到所有地方的路挑一条最近(shortest path最短路)的,记为一张表格(routing table路由表),当然以后查这份表格就知道到目的地的一条最近的路了。地图也要收好,万一表格上的某条路不通了可以通过图去找一条新的路。
其实跟你有联系的,只是四周一群人,外面的消息要通过首领来知道。因为你的地图是跟首领的一致,我们假设你是首领,你要去画一份世界地图。
你命令所有手下向你通报消息,你可以知道你这一群人的任何一点点小动静(event事件)。你手下还会有同时属于两群人的家伙(同一区内两网段),他会告诉你另一群人的地图,当然也会把你们这一群人的地图泄露,(不过,无所谓啦)。这样,整个区的地图你知道了(对于不知道的那也没办法,我们尽力了)。
通过不停地交换地图,现在,整个区的人都有同样的地图了,住在区边境上的人义不容辞地把这个区的地图(精确到每一群人)发送到别的区,把别的区信息发送进来。国王会把这些边境的人命名为骨干(backbone area)。通过骨干人士的不懈努力,现在,整个国家的地图你都了解得一清二楚了。
有些人“里通外国”(AS Boundary Router自治系统边界路由器) ,他们知道一些“出国”(AS External route自治系统外部路由)的路,当然他们会把这些秘密公之与众(import 引入),通过信息的传递,现在,你已经有一张完整的“世界地图”了。
OSPF是这样标记最短的路的:对于某个目的地,首先,考虑是否有同一区内部到目的地的路(intra area区域内),假如有,则在其中取一条离你最近的(花费最小),写进你的表格中,这个目的地可能是到本群体某个人也可能是到其他群体的,对于经过其他区域的路由,你会不予考虑,跟自己人(同区域)打交道总比与外人(其他区域)打交道好;假如没有本区的路,你只好通过别的区域了(区域间),你只要在地图上找最近的就是了;假如你发现目的地在国外,你也只能先把它标记到你的表格上,期待什么时候王国扩张到那,你就可以把它标记到国内地图上了。
OSPF就是这样,给你一份“世界地图”,并且在上面标记了最短的路,如此而已罢了。
1.2. 背景介绍
TCP/IP协议中,寻找一台计算机到另一台计算机的路由是很重要的.
1.要判定是否能找到路
2.找到路后找一条短的路(花费时间最小)
3.在找路时不能循环
4.最好还应该能动态处理路由变化,如:接口的UP或DOWN,时间花费的变化,网络结构的改变等。
IETF(Internet Engineering Task Force)于1988年提出的OSPF是一个基于链路状态的动态路由协议,
[协议的基本思路如下:在自治系统中每一台运行OSPF的路由器收集各自的接口/邻接信息称为链路状态,通过Flooding算法在整个系统广播自己的链路状态,使得在整个系统内部维护一个同步的链路状态数据库,根据这一数据库,路由器计算出以自己为根,其它网络节点为叶的一根最短的路径树,从而计算出自己到达系统内部可达的最佳路由]。
OSPF是一类Interior Gateway Protocol(内部网关协议IGP),它处理在一个自治系统中,路由器的网络的路由表信息。
1.3. 术语和基本概念
OSPF路由协议术语:
OSPF路由协议:Open Shortest Path First 最短路径优先协议
路由器(router):第三层的IP包交换机,以前在IP文献中也叫做网关
自治系统(autonomy system):一群路由器通过相同的路由协议来交换路由信息,
缩写为AS区域(area):自治系统的划分单元,一个自治系统可以划分为多个区域.
区域 ID(area ID):自治系统内区域的32-bit标识
内部网关协议(internal gateway protocol):属于一个自治系统的路由器上运行的路
由协议,缩写为IGP,每一个自治系统有一个单独的IGP,不同的自治系统可能
运行不同的IGP。OSPF是内部网关协议的一种
路由器的ID(router ID):一个32位的标号对每个运行OSPF的路由器,在自治系
统内是唯一的
网络(network):在这种意义下,是IP网络/子网/超网,可能是标记了多重复合IP
地址的子网,我们把它们看成是分离的网络,点到点的物理网络是个特例,它们
只是被当作简单的网,不管对它们怎样指定IP号。
网络掩码(network mask):一个32位的数指示IP网络的IP地址范围,以十六进
制数显示,例如一个C类网的掩码是0xfffff00,在文字上写成255.255.255.0。
点到点网络(point to point network):由一对路由器简单组成的网络,例如一个
56Kb的串口线的连接
广播网:网络支持许多(两个以上)的路由器。都有能力将地址信息发送到所有连
接的路由器上(广播)邻居路由器被OSPF的hello协议动态地发现,OSPF使这种
广播能力能得到更大的应用,假如它存在,它上的每一对路由器都假定能和对方
直接相连,以太网是一个广播网的例子。
非广播网:网络支持许多(两个以上)路由器,但没有广播能力,邻结点也是通过OSPF hello报文来维持,但是由于设有广播能力一些邻居需要靠配置来发现,在邻居间,OSPF协议报文也是互相传送的,X.25网是一个例子。
OSPF可以在两种非广播网上运行,一种是非广播多重访问,(NBMA)它类似于OSPF在广播网上的操作,第二种类型叫点到多点,可看为多个点到点的连接的集合。非广播网类型的判别依靠于对网络的操作模式。
接口(interface):一个路由器与它连接的一个网络 的连接称为接口,一个接口有它的状态信息,可以通过底层协议或是路由协议本身来得到。每个接口有一个唯一一个IP地址和掩码(除非是不标号的点到点连接),一个接口有时也指一个连接。
邻居路由器(neighbor):两台路由器有接口连向共同的网络,邻居关系通过OSPF hello协议被维持(通常是动态的)。
邻接(adjacency):为交换路由而在邻居间建立的关系,不是每对邻居都成都为邻接的。
连接状态传送(Link State Advertise):描述本地路由器或网络的数据单元 对路由器来说,它描述了路由器的接口状态和邻接状态,第一个连接状态传送会发送到整个路由领域,所有的连接状态传送组成了协议的连接状态数据库,这在全局范围内使用,缩写为LSA
连接状态数据库(Link State DataBase):所有连接状态传送组成了连接状态数据库.
Stub网络:只有一个接口与外部相连的网络,如一个PPP可视为一个stub网络
骨干区域(Backbone Area):所有区域边界路由器和它们之间的路由组成骨干区域.
自治系统外部路由(AS external route):指由非OSPF协议得到的路由,如BGP(边界网关协议),RIP(Routing Information Protocol),系统的静态配置路由等,系统的静态路由是由配置得到的,其他协议的路由是通过引入操作得到的,外部路由的指定是由用户决定的.
路由(route):指两节点之间的连通路径。
路由表(routing table):到每个目的地有路由,这样的表叫路由表。
基本概念:
OSPF把整个网络(Internet上的子网或其他类型的网)看成一个自治系统(AS)
每一个AS内若干个物理上相邻的路由器(Router),网络(Network)组成Area,这些Area内部一般是不相交的,它们划分了整个AS。
如图是一个典型的自治系统划分的例子:
Rxx代表路由器,N*代表网络,
1.R1,R2,R3,R4,N1组成区域1,R3,R4是区域边界路由器(ABR)
2.R7,R8,R10,N2,N3组成区域2,R7,R10,R11是区域边界路由器(ABR)
3.R9.R11,R12,N4组成区域3,R11是区域边界路由器(ABR)
4.所有区域边节点(R3,R4,R7,R10,R11)及R5,R6共同组成了骨干区域,(backbone are