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),它处理在一个自治系统中,路由器的网络的路由表信息。 |