一些基于OSPF报文格式的介绍本篇文档针对一些对OSPF路由协议有一定的感性认识的技术人员,提供一些基于OSPF报文格式的介绍,来达到了解OSPF路由协议的特性和特有的一些概念的了解。 

一.OSPF的特性: 

快速收敛; 

能够适应大型网络; 

能够正确处理错误路由信息(原文:less susceptibility to bad routing information.注释:产生错误路由信息的几率更小,算法先进嘛); 

使用区域,能够减少单个路由器的CPU负担,构成结构化的网络 

(原文:makes possible the construction of hierarchical internetwork topologies 

注释:可以更好的构建层次化的网络结构); 

支持无类路由,完全支持超网,可变长子网等无类特性; 

支持多条路径负载均衡; 

使用组播地址来进行信息互通,减少了非OSPF路由器的负载; 

使用路由标签来表示来自外部区域的路由。 

二.NeighborAdjacency的定义: 

Neighbor: 

在网络中,OSPF路由器可以发送Hello报文来进行邻居寻找,当Hello报文中的几个字段的内容是互相一致的时候,相邻的OSPF路由器就会形成Neighbor关系。 

Neighbor是保存在Neighbor表里,需要有Router IDIP地址信息。 

Router ID的确定: 

1. 选择IP地址最大的Loopback接口的IP地址为Router ID;如果只有一个Loopback接口,那么Router ID就是这个Loopback的地址。 

2. 如果没有Loopback接口,就选择IP地址最大的物理接口的IP地址为Router ID,但是作为Router ID的物理接口,就不能运行OSPF,也就是说这个接口无法发送接受OSPF报文。 

(原 文:If no loopback interfaces are configured with IP addresses, the router chooses the numerically highest IP address on any of its physical interfaces. The interface from which the Router ID is taken does not have to be running OSPF. 

注释:如果路由器的loopback端口没有配置ip地址,选择路由器物理端口上ip地址最大的一个作为Router ID,该物理端口不必运行ospf协议,也即不必一定是ospf-enabled interface). 

使用LoopbackIP地址作为Router ID的好处: 

a. Loopback接口是逻辑接口,永远不会down,有利于OSPF的稳定运行; 

b. 便于控制OSPF路由器的Router ID。 

Hello协议的特点: 

1. 目的: 

a. 用来发现OSPF Neighbor; 

b. Hello报文包含了多个需要OSPF路由器协商的参数,以形成Neighbor的关系; 

c. 他可以用来维持邻居之间链接的存活; 

(原文:Hello packets act as keepalives between neighbors.) 

d. 用来确定DRBDR路由器的选择。 

2. 报文内容: 

a. Router ID 

b. Area ID 

c. IP地址和掩码 

d. 认证方式和认证信息 

e. Hello IntervalDead Interval 

f. Router优先权 

g. DRBDRRouter ID 

h. 五个字节的特性控制信息 

i. 距上次Hello报文后,在Dead Interval中,路由器的NeighborRouter ID列表 

每个OSPF路由器收到收到hello报文,将会协商上述信息,是否符合,如果不符合,Hello报文会遭到丢弃。 

并且当一个路由器收到一个Hello报文,其中Neighbor Router ID List里有它的Router ID时,就会进入2-way模式,一旦进入2-way模式,就会建立Adjacency。 

(注释:一旦进入2-way模式,不一定就会建立Adjacency,还要看端口的network type)。 

3. DRBDR使用224.0.0.5(ALLSPFRouter Address)发送Hello Packet,而收到报文的路由器以224.0.0.6(ALLDRRouter Address)发送确认报文,表示收到了Hello Packet。 

(注 释:broadcast network不论是DR,BDR,DRother,大家发送hello packet的时候目标地址都是AllSPFRouter(224.0.0.5),DRotherDR,BDR发送DD,LSA request或者LSA UPdate时目标地址是AllDRouter(224.0.0.6);DR,BDRDRother发送DD,LSA Request或者LSA Update时目标地址是AllSPFRouter(224.0.0.5),retransmitLSA都是unicast,LSA ACK要看是explicit ack(unicast)还是implicit ack(multicast 224.0.0.6). 

4. Point-to-Multipoint:相当与多个点对点网络的集合,但是不会产生DRBDR的选举,通过组播报文发送路由信息报文。 

(注释:point-to-Multipoint,发送helloLSA都用unicast的方式)

5. 只有NBMA网络和采用虚拟链路的网络发送的是单播报文。 

(注释:point-to-multipoint也是) 

6. Stub Network:只有一个出口连接到路由器的网络,通常产生的报文的原地址和目的地址都是本网络中。 

DRBDR的选择,特性: 

1. DRBDR是接口的特性,和路由器本身无关。 

2. DRBDRmultiaccess网络中其他的路由器形成adjancency,但他们之间没有形成adjancency。 

(注释:如果一个broadcast网段中有n个路由器,其中包括1个DR,1个BDR,一般情况下会生成多少个adjacency,(n - 2)*2 + 1 其中1DRbdr之间的adjacency) 

3. 每个接口上都会有优先级,如果优先级为0时,表示不参加选择DRBDR。 

Adjacency: 

是在OSPF Neighbor之间形成的虚拟的连接,这些连接有不同的性质,根据路由器连接的不同网络类型。 

形成Adjacency的步骤: 

1. 邻居发现 

2. 双向通信 

3. 数据库同步 

为了使路由器能够实现数据库的一致和同步,通过交换DDLSRLSU报文来达到数据库同步的目的。 

4. 完全形成连接 

MasterSlave的关系和选择 

ExStart状态下,邻居之间进行协商,以决定由哪个路由器来控制Database sychronization。 

Neighbor表项的数据结构: 

Neighbor表项中的信息是通过路由器从Hello报文中学到的,关于邻居的一些信息。 

1. Neighbor ID 

2. Neighbor IP Address 

3. Area ID 

4. Interface 

5. Neighbor Priority 

6. State 

7. PollInterval 

这是用于NBMA网络的一个概念,由于NBMA网络无法用组播来发送报文,也就是说无法自动发现邻居,如果当Neighbor处于down的状态时候,Hello报文每隔一个PollInterval时间就会发送一次,来发现和维护邻居关系。 

8. Neighbor Option 

9. Inactivity Time 

10. DR 

11. BDR 

12. Master/Slave 

13. DD Sequence Number 

14. Last Received Database Description Packet 

15. Lik State Retransmission List 

是指已经发送出去的LSA,但是还没有收到Acknowledge的报文,如果超过RxmtInterval还没有收到,就会进行重传。 

16. Database Summary List 

database synchronization时,所发送的LSA的表单。 

17. Link State Request List 

是指最新收到的在Database Description报文中所带的LSA清单,路由器会发送LSRNeighbor要最新的LSA,收到LSU后,会把list里的相应条目删掉。 

三.Neighbor状态机制 

1. Down 

没有收到任何Hello报文的时候,或是在DeadInterval中,没有收到Hello报文 

2. Attempt 

只有在NBMA网络里才有,手工进行Neighbor的指定。 

3. Init 

收到了Hello报文 

4. 2-way 

当路由器看到自己的Router ID在邻居发来的Hello报文里;在广播网络里,DRBDR开始被选举。 

5. ExStart 

决定Master/Slave关系,以初始化DD 报文序列号来交换Database Description报文 

6. Exchange 

路由器开始交换DD报文的过程 

7. Loading 

发送LSR报文已处在Loading状态的报文,请求最新的通过Exchange DD报文发现的未收到的LSA 

8. Full 

完成了路由器和网络的LSA的交换 

当路由器收到LSA后,会把LSA存到数据库中,然后会把收到LSA复制并从其它的OSPF接口发送出去,直到整个网络区域的LSA Database获得同步一致。然后每个路由器根据LSA Database里的Link信息进行SPF运算,算出没有回路的最短路径。 

四.Database Description报文 

它是包含了路由器所有的LSA信息的报头,可以使路由器知道,Neighbor上有多少LSA是自己不知道的,可以通过LSR报文来请求新的LSA。