大家好,我叫Open Shortest Path Fist,中文名是“开放最短路径优先”协议。
啥?为什么名字里面会有一个“Open”?说我很“开放”吗?
相对而言,的确是的。这个得从我的由来说起,我是由“Internet工程任务组”,这个名字好别扭,还是说英文吧,“Internet Engineer Tast Force”——简称“IETF”,所开发的动态路由协议。这里不得不提一下,关于IETF这个我的创造者,是一个松散的、自律的、志愿的民间学术组织(不管你们怎么看,我对这几个词语还是蛮喜欢的,挺有互联网精神的感觉)。再回到“开放”这个话题上面来,我不属于任何一个厂商或者组织私有,大家都可以免费地去使用。
相对的,还有一个叫做“EIGRP”的家伙,他由是Cisco研发的。他其实蛮强大的,收敛速度那叫一个快呀,本身也很强大,度量值算法什么的也做得很周全。可现在使用他的人并不多,因为Cisco把他私有化了,不给其他厂商使用。所以虽然本身强大,但可供施展的空间不大。
做个不是太恰当的比喻,OSPF就像是微软的Windows,而EIGRP就像是苹果的Mac OS。是的,Mac OS稳定,设计简单直观,安全快速。但是,他只是在MAC电脑上面跑,其他电脑也只能干流口水,或者自己去折腾一个“黑苹果”。而Windows则走的是另外一条路,兼容,不管什么电脑,只要是X-86构架的,就直接装上跑起来。于是,Windows大量占领市场,其他电脑厂商也很是支持和欢迎,虽然还是要给点赞助费。
于是OSPF又有了一个外号——“企业网霸主”。
身为一个动态路由协议,主要的工作还是要去好好地学习路由和维护路由表的。不过和前辈RIP不同的是,我是一个叫做“链路状态协议”的工作模式。RIP是把自己的最优的路由信息放在自己的Response包里面,发送出去。而,我则是把所知道的“路由器的链路、接口、邻居以及链路信息”给通LSA过给出去,不过由于我把链路区分得很细,所以LSA的分类也多达11种,之后还会细聊到LSA。
现在来细说一下我的工作过程:
首先,我会在宣告过我的端口上,发送一个叫做“Hello”的数据包出去打招呼。周围的路由器,如果能够收到我的“Hello”,那么我就是邻居(Neighbor)了。
可我的“Hello”包里面是携带信息的,信息量也不小,不过里面重要的是两个,“标识可选性的5个标记位”(K值)、“Hello的间隔时间”。如果有配置认证的话,则还有相关的认证内容。路由器接到“Hello”包之后,则会匹配对应的设置。若匹配,则进行下一步,建立“邻接关系”(Adjacency)。
建立好“邻接”关系之后,则会发送“Link Statement Advertisement”(LSA)这一数据包,里面包含着各种链路状态信息。路由器会把这些LSA记录在自己的“链路状态数据库”之中,并且发送一份拷贝自己的邻居。
这样通过LSA的洪泛般的传递,将其扩散到整个区域。
当这些路由器的数据库全部相同时,每个路由器都会以自己为根,通过SPF算法来计算出一个无环的拓扑图,计算的结果是到每个路由器的最短路径,然后放入路由表之中。以供转发而用。
在成功的创建了路由表之后,我则会“安静”下来,只发送“Hello”包来感知邻接关系的存在(Keepalive)。
简而言之,动态路由协议,可以按照其学习、计算路由的方式,分为两种:距离矢量协议,给邻居的是成品,只给最优的那条路由。而距离矢量协议,给的则是半成品,给自己的所有的链路状态给你,具体怎样选择,那么是你自己根据算法去选择的事情。
最后还要再补充一点OSPF的基本资料:
一个纯粹的无类路由器协议,支持VLSM(可变长子网掩码)和CIDR(无类型域间选路)。OSPF压根就不知道到什么叫做A/B/C/D/E/F类网络,只认识子网掩码。
OSPF的管理距离是110,劣于 静态路由(默认为1)、EIGRP(90)、EBGP(20);优于 IS-IS(115)、RIP(120)、ExEIGRP(170)、IBGP(200)。算是一个优先级比较靠中的协议。
度量值的COST的计算方法,“100M/带宽”,有小数的用进一法来处理。当然,现在的主干网上面的带宽都是用GB来作为单位的。所以,OSPF很灵活的可以去修改那个“100M”的标准,来适应现代网络的需要。
OSPF是一个第三层的协议,直接封装在IP层即第三层,所以只有协议号,是89。