Ospf首先是一种内部网关协议,其描述的路由信息属于同一个自制系统。所谓自制系统,即属于该自制系统的路由器都必须使用同一种内部网关协议。在这里,即为ospf。
- Ospf的一些常用术语:
Ospf协议的内容比较丰富,涉及的术语、定义较多。在这里有一些常用的定义:
- 自制系统(AS):一组使用相同路由协议交换路由信息的路由器
- Router-id:一个32位的数字,在一个AS中每个路由器都有其独一无二的router-id
- Network:ospf可以适用于多种网络,有点对点,广播网络,非广播网络。在这里,我们指的都是以太网
- 邻居路由器:两台路由器都有接口接在同一网络中,即接口的ip须属于这一网络
- 区域/area:ospf会将整个AS划分为多个区域(其主要目的是为了减少宽带负载,减少LSA数量,降低cpu和内存负担)
- DR:指定路由器,在一个网段中选举一个特定的路由器,在广播网络中负责与网段中的其他路由器交换信息
- BDR:备份指定路由器,与网段中的其他路由器同样建立邻接关系,平时和普通的DRother一样,在DR失效时,顶替DR的工作
- ABR:连接多个区域的路由器(广播网络里,ABR必须连接area 0)
- ASBR:与属于其他AS的路由器交换路由信息的路由器
- ospf的建立过程:
首先一个最简单的ospf的配置:
PA-5500-U20A(config)#router ospf --进入ospf视图
PA-5500-U20A(config-router-ospf)#router-id 1.1.1.1 设置该路由器的router-id标识(在AS中唯一)
PA-5500-U20A(config-router-ospf)#area 0 设置该路由器可以属于的区域,在这里是区域0,也可以配置路由器同时属于区域1或其他区域
PA-5500-U20A(config-router-ospf)#network 10.0.0.0 24 area 0 --设置该路由器在区域0 中所运行ospf协议的网段
PA-5500-U20A(config-router-ospf)#ospf enable --启动ospf协议
PA-5500-U20A(config)#interface ge 0/0/1 --配置路由器运行ospf协议的接口,以1口为例
PA-5500-U20A(config-if-Ge0/0/1)#ip address 10.0.0.1 24 配置接口ip以运行ospf。由于我们刚才设置运行网段为10.0.0.0 24 故配属于该网段的ip即可
PA-5500-U20A(config)local-security ospf ospf --配置ospf的本地安全
这是一个运行ospf协议的最基本配置,我们来看ospf的运行过程:
- 发送hello包,寻找邻居路由器
- 建立邻接关系,请求以及更新LSA信息
- 根据LSA信息建立的数据库,构造SPF树
- 计算ospf路由表
在建立过程中,会用到ospf的一些特有的数据包:
1.Hello:发现邻居,建立、维持邻居关系,选举DR、BDR,确保双向通信
2.DBD:数据库描述数据包(主要描述始发路由器数据库中的一些或者全部LSA信息),主要包括接口的MTU,主从位MS,数据库描述序列号等);
3.LSR:链路状态请求数据包(查看收到的LSA是否在自己的数据库,或是更新的LSA,如果是将向邻居发送请求);
4.LSU:链路状态更新数据包(用于LSA的泛洪扩散和发送LSA去响应链路状态请求数据包);
5.LSACK:链路状态确认数据包(用来进行LSA可靠的泛洪扩散,即对可靠包的确认)。
2.1发送hello包,寻找邻居路由器:
以我们刚才的配置为例,当你对路由器做了如上的配置后,后台的ospf进程会每间隔10s发出一个hello包,hello包的发送是基于组播的。在你启动如上的配置后,ospf会将该接口的ip10.0.0.1加入到组播地址224.0.0.5(这个地址是ospf专用的)。故hello包即为源地址为10.0.0.1到目的地址224.0.0.5。而hello包中内容是所在区域\area、router-id、路由器优先级等设置的信息,以及当前路由器所认为的DR和BDR、和目前该路由器所探测到的邻居所组成的邻居列表。
HELLO包发送到组播地址224.0.0.5以后,组播会将该hello包洪泛到加入该组的其他组成员中。例如 (fw1)(ge 0/0/1)-----(fw2)(ge 0/0/1)
在fw1上我们做了如上的配置,在fw2上我们可以做类似的配置,相同区域,相同网段。不同的只是router-id以及所使能的接口的ip地址,在这里,假设router-id配置2.2.2.2。接口ip我们配置成10.0.0.2 24。当然fw2也会将接口加入组224.0.0.5.也会发送hello包到组224.0.0.5。他的hello中的内容也是类似的。
当路由器收到洪泛过来的hello包后(DR将使用组播地址224.0.0.5泛洪扩散更新的数据包到DRothers,DRothers使用组播地址224.0.0.6发送更新数据包),会将该路由器加入到自己的邻居列表中,同时会检测收到的hello包中的邻居列表是否已包含自己,(由于是第一次收到该hello包,自然是没有)。继续发送hello包,hello包的邻居列表里已包含刚才收到的路由器id。当再次收到hello包时,若检测到收到的包里的邻居列表含有自己时,则证明双方的通信是互通的。路由器的状态则由init状态转换为2-way状态。
注意,由于这里是广播网络,在收发hello包的同时,会发送自己认为的DR、BDR,也会收到其他路由器认为的DR,BDR。在这一过程中,会利用hello包来进行网络中DR,BDR 的选举。DR选举的过程基本是根据路由器自身设置的优先级(优先级为0不参与选举),router-id等的大小来进行选举。BDR的选举过程也是类似。(是否参与DR,BDR的选举是都可以人为的手动设定的,确定参与DR的选举则不能参