OSPF童话国

来源:互联网 发布:mac电脑软件删不掉 编辑:程序博客网 时间:2024/04/25 14:46
可以把整个网络(一个自治系统AS)看成一个王国,这个王国可以分成几个区(area),每个区由若干条街道(链路)组成,每条街道上住着很多人家(路由器操作系统),每户人家对着不同的方向,可能开不同的门(接口),每个人对着的街道都是不同的,家里着人(OSPF路由程序),当然,1户人家里住多个人也是允许的(多个进程)。有些街道只能住2户人家(点到点),有些街道能住多户人家(广播),有些街道可以住多户人家,但是各自之间必需在街道之下挖通道(VC)到达(NBMA)。王国所有的街道都是封闭的,要到其他街道,要穿过不同户人家的门,这个王国的人靠为游客指路营生,现在我们来看看区域内的某一个人(你所在的机器root)是怎样得到一张世界地图(routingtable)的。

  首先,你得对着你家的任何一个门口对着的任何一个街道上面住的任何人建立联系,跟你周围的人(同一网段如129.102)建立基本联系。你大叫一声“我在这!”(发HELLO报文),于是,周围的人知道你的存在,他们也会大叫,这样你知道周围大概有哪些人,你与他们之间建立了邻居(neighbor)关系,当然,他们之间也有邻居关系。

  在你们这一群人中,最有威望(Priority优先级)的人会被推荐为首领(DesignatedRouter),如果街道上只有你一个人,你可以自己做首领,后面来的人,即使威望比你高很多,也没有办法剥夺你的位置,当然你可以让他做副首领( BDR)。首领与你之间是上下级关系(adjacency邻接),它会与你建立单线联系,而不许你与其它邻居有过多交往,他会说:“那样做的话,街上太挤了”。因为你家可能有多个门口,对着多个街道,你可以同时成为多个街道的首领,或者其中某一个街道的首领,当然也可能搞不好,你一个首领的缺都捞不着。其实你和首领的关系,相当是平等的,因为首领要依靠你来获得你家后门对着的街道信息。

  当然,你也要知道街道全部邻居的后门到底通到哪个街道,只好通过首领来知道更多的消息了,首先,你们互通消息,他告诉你他知道的所有街道的地名,你也会告诉他你现知道的地名,当然上也许只有你一个点。(DatabaseDescription数据库描述报文)

  因为你家后门的信息,前门街道的首领不知道,而你家前门邻居的后门的信息,你需通过首领知道,因此你要告诉首领你知道什么,首领也要告诉你他知道什么。

你发现街道地名表中有你缺少的或比你新的东西,你会问他要一份更详细的资料(链路状态),他发现你的地名表中有他需要的东西,他也会向你索求新资料。(LinkStateRequest连接状态请求报文)

  当然,你们毫不犹豫地将一份详细资料发送给对方。(LinkStateUpdate连接状态升级报文)。

因为所有的邻居都要把各自对着的街道信息汇总到首领,而且任何一个邻居都能从首领处获得全部信息,因此不管你在哪个街道,你都能获得100%相同的完全的每户人家的信息,他们家有多少个门,即对应对着的街道名称,甚至户主的名字(RouterID)。

  收到街道信息后后,互相致谢表示收到了。(LinkStateAck连接状态响应报文)

  现在,你已经获得很多街道的信息了,虽然这些信息都是单独的,但是已经足够根据这些信息组合,绘制地图了,你建立一份地图(LinkStateDataBase连接状态数据库),你去查找地图把到所有地方的路挑一条最近(shortestpath最短路)的,记为一张表格(routingtable路由表),说白了,这张表就是用来告诉游客(单播数据包),往哪个街道去,下一步要往自家哪个门口出去,然后找到对应街道的哪个邻居的门口。接下来怎么走,这个表格里是没有的,不用担心,因为邻居也会有1张表格,会告诉游客下一步怎么走的。当然以后查这份表格就知道到目的地的一条最近的路了。地图也要收好,万一表格上的某条路不通了可以通过图去找一条新的路,街道要烧毁了(链路down),或者哪家不干导游了(OSPF进程关闭),都得重新设计路径。

你只是依靠首领获得他管辖街道的其他邻居的信息,但首领很可能要靠你来获得外面的信息。比如说,首领家只开了1个门,你家后门几个,后门之后的街道信息,首领就都得靠你来获得了。  

其实跟你有联系的,只是周围一群人,外面的消息要通过首领来知道。因为你的地图是跟首领的一致,我们假设你是首领,你要去画一份世界地图。

  你命令所有手下向你通报消息,你可以知道你这一群人的任何一点点小动静(event事件)。你手下还会有同时属于两群人的家伙(同一区内两网段),他会告诉你另一群人的地图,当然也会把你们这一群人的地图泄露,(不过,无所谓啦)。这样,整个区的地图你知道了(对于不知道的那也没办法,我们尽力了)。


  因此那些家里开了多个门口,属于多个街道的人家,他们要把所有信息向所有街道汇报,(他不是首领的情况下)要么是向对应每个街道的首领汇报,首领再告诉其他人;(他是首领的情况下)要么是其他人向他汇报,他再通告给所有邻居。强调一点,他属于多个街道,因此可以在这个街道当首领,而在另外一个街道不是,但不管怎么样,不同的人家在获得信息上,只仅仅是获得1手信息,还是2手信息的差别而已,但信息本身则是一样的,每户人家只允许修改自家的信息,别家的信息只能原封不动通告出去。所有人最终获得的信息的量也都是一致的。

通过不停地交换信息,因为信息的内容是一样的,根据相同的信息绘制的地图,也都是一样的,现在,整个区的人都有同样的地图了,国王划定其中1个为CBD区域(骨干区域0),所有其他区域都要求很CBD连接在一起,CBD区域一般和所有区域都有连接,因此住在CBD区边境上的人义不容辞地把这个区的地图(精确到每一户人家)发送到别的区,把别的区信息发送进来。国王会把这些边境的人命名为骨干(ABR)。通过骨干人士的不懈努力,现在,整个国家的地图你都了解得一清二楚了。

  在某些人家的家里,有地下室,住着外国人(其他路由进程),这屋里的人,有些人“里通外国”(ASBoundaryRouter自治系统边界路由器),这些人家地下室有通道,这些通道连接着外国的街道。屋里人通过与外国人交流(重发布)知道他们国家的地图和“出国”(ASExternalroute自治系统外部路由)的路,当然他们会把这些秘密公之与众(import引入),通过信息的传递,现在,你已经有一张完整的“世界地图”了。

  OSPF是这样标记最短的路的:对于某个目的地,首先,考虑是否有同一区内部到目的地的路(intraarea区域内),如果有,则在其中取一条离你最近的(花费最小),写进你的表格中,这个目的地可能是到本群体某个人也可能是到其他群体的,对于经过其他区域的路由,你会不予考虑,跟自己人(同区域)打交道总比与外人(其他区域)打交道好;如果没有本区的路,你只好通过别的区域了(区域间),国王为繁荣经济,要求非CBD区域的人去往其他非CBD区域,必需经过CBD区域,因此即使你要去的街道就在你隔壁邻居的后门连接着,但是你还是得兜一大圈去CBD再想法子到达(次优路径选择)。如果你是在CBD区域,那稍为简单些,你只要在地图上找最近的就是了;如果你的区域没有和CBD连接,那么门都没有,你永远离开不了本区域,除非,按照国王的意愿,你在地下挖条隧道(virtual-link)连接到CBD区域边界的人家里。

如果你发现目的地在国外,而且出口就在你家邻居的地下室通道,你直接就可以走了,去外国的话,允许不经过CBD,国外的街道,你是只知道名称,不知道他们每户人家的信息,你也只能先把它标记到你的表格上,期待什么时候王国扩张到那,你就可以把它标记到国内地图上了
 
原创粉丝点击