一、ospf的基本知识
ospf 开放最短路径优先协议 链路状态类路由协议
属于3层,没有使用上层的tcp或者udp,所以没有确认机制。但是使用自己的lsack来确认更新
五个包,hello,DBD,LSR,LSU,LSACK。

二、spf算法
一句话简短的概括:节点以自己为根节点,计算确定到目标节点的最短路径。
路由器创建三个库。用来运行spf算法。
1、树数据库:通过向数据库中添加分支实现向最短路径树中添加链路(分支),最终这个库描述最短的路径
2、候选对象数据库:按顺序从链路数状态数据库向该库中复制链路,作为向树中添加的候选对象
3、链路状态数据库:这个数据库中,存有所有的链路

spf运行过程:
路由器以自己为根节点,先从链路状态数据库中,取出离自己最近的几台(他的邻居)路由器,将他们放到候选对象数据库,在候选对象数据库中,计算到他们的代价,把最小的代价   的“一条”链路放到树数据库中。这里之所以说是“一条”,假如说上面候选对象数据库中有三条链路,但是他们前往的是不同的目标,但是只放“一条”,然后再重复查找候选对象数据库,再找”一条“最短的候选对象,放到树数据库。当在候选对象数据库中有两条到同一目标的候选对象,将花费最小的放到树数据库,其他的删除。
然后再以根节点最近的那几台路由器(上一步中假设的三台路由器)为跟节点,重复上面的步骤。
这样一级一级的扩散,感觉上类似于RSTP那样,一级一级的扩散。直到最后计算完成。
在SPF算法计算完成后
候选对象数据库应该是空的。
链路状态数据库不变,里面依然有所有的路径
树数据库中应该有到达所有目标的最佳路径。(就是路由表中的路径)

三、区域的概念
在距离矢量路由协议中,路由更新是扩散在整个AS中的。这样浪费了很多的带宽,白白消耗了资源(如cpu、内存),广播(组播)范围很大。而且没有层次结构。不适合大型的网络拓扑。
这些缺点,在ospf中都得到了克服。因为ospf引入了区域的概念。
在一个ospf区域一般情况是不希望超过50台路由器。因为区域内路由器的数量和路由器的性能有很大的关系。比如,路由器需有用spf算法计算路径,CPU的性能就比较重要,路由器数很多,要求的cpu就比较高。内存中存着ospf中的数据库,如果路由器很多,对内存的要求也比较大
注:在这里再说一下,在一个区域内,是路由器是根据LSDB中的信息,确定路径。但是在区域间,是依赖中间路由器来确定相应的路径。这就不是链路状态了,而是距离矢量了。

四、ospf主要的四类区域
1、广播:多路访问广播网络,如:以太网。
2、点到点:将一对路由器连起来的网络。
3、虚链路:默认所有的普通区域都要和骨干区域(area 0)相链,如果有个别区域因为没规划好,没有办法和骨干区域相连,就要建立虚链路。
4、NBMA:非广播多路访问。感觉上一般是应用的帧中继环境上。(ATM、X.25都属于NBMA)
5、点到多点:属于NBMA中一个特殊的情况。

五、路由器端口的角色、邻接关系、邻居关系
这里主要说多路访问环境
1、多路访问环境:
路由器端口会选举DR、BDR。DR的职责是同步该多路访问环境中的链路状态数据库(下面称LSDB),这个在后面还会细说。BDR是在DR的备份,当DR挂掉的时候,BDR直接接管DR的工作。DRother会去像DR同步LSDB
这里需要强调几点:

a、DR,BDR是基于端口的。为什么这么说,假如一台路由器跨越两个区域(ABR),两个区域的端口是独立选举DR的。
b、DR的选举规则,是先比较优先级,cisco默认为1,越大越优先。如果优先级为0,那么相当于主动放弃DR选举的权利。当优先级相等,那么再比较routeID,越大越优先。routeID的选举规则为,手动指定>环回接口>IP最大的活动的物理接口。
c、刚开还没收敛的时候,每一个路由器都宣告自己是DR,收敛完成以后,选举出一个DR。
d、DR具有不抢占特性。当一个多路网络环境选举完DR以后,再接入一个优先级更大的路由器,不会改变DR。除非重启区域内所有的ospf进程,才会从新选举。
DRother之间,建立双向关系(2-way),这种关系称为邻居关系。他们之间不同步LSDB
DRother和DR,DRother和BDR之间,处于full状态。这种关系称为邻接关系。他们之间同步LSDB

2、点到点环境:
这个相对简单一点,两台路由器之间通过串行线链接在一起,他们不选举DR或者BDR。但是他们建立邻接关系(full),所以他们之间一定会同步LSDB。


六、ospf的两个组播地址
allrouteradress:224.0.0.5 所有路由器地址。这个地址接受者是所有的路由器,一般是由DR,BDR发出
allDRadress:224.0.0.6   DR地址,这个地址接收者是DR,一般是DRother发给DR用的
注:在广播(多路访问)环境中,使用的是两个组播来进行发送路由更新,hello
在点到点链路中,通过使用224.0.0.5这个组播来发送更新和hello
在虚链路,NBMA中,是通过单播来进行通信的。

七、细说五个包:
1、hello:
作用:发现邻居、路由器间几个基本信息的确认、确定邻居活着、选举DR、BDR。

hello中的信息:

a、自己的routeID
b、自己的区域ID
c、始发接口地址
d、认证信息
e、hello、dead时间
f、路由器优先级
g、指定DR、BDR