可以把整个网络(一个自治系统 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 就是这样,给你一份“世界地图”,并且在上面标记了最短的路,如此而已罢了。