OSPF邻居:



OSPF路由器需要邻居路由器在几种状态间转换,然后会到达FULL



失效状态(down):一个会话的初始状态,除了在NBMA网络中,其他类型的网络不会发送hello包给那些失效的邻居路由器。如果邻居状态转到了失效状态,路由器将会清空链路状态重传列表,数据库摘要列表和链路状态请求列表



尝试状态(Attempt):仅适用于NBMA网络,如果具有DR选举资格的路由器连接其他路由器的接口变为active的时候(本地接口),这台路由器会把邻居路由器的状态转换到Attempt状态,使用hello间隔代替Pollinterval向邻居发送hello包.因为他无法动态的去发现邻居



初始状态(init):表明在最近的deadinterval中收到了来自邻居路由器的hello包,双向通信依然没有建立,路由器会在hello包的邻居字段中包含,在此状态或者更高状态下,所有学习到的所有邻居RID,如果是第一个hello包,为空(接收到的hello中有RID)



双向通信状态(2-way):表示本地路由器从来自邻居的hello包的邻居字段中看到了自己的RID。意味着双向通信建立成功,在MA网络中,路由器只有在此状态或者更高的状态中才有资格参与DR/BDR选举,如果在init状态下从邻居收到数据库描述报文,也可使本地路由器直接进入2-way状态



信息交换初始状态(ExStart):本地路由器和他的邻居将在这一状态下建立主/从关系,确定数据库描述数据包的序列号,为后面的DBD交换做准备。具有最大RID的路由器为主路由器



信息交换状态(Exchange):本地路由器将向他的邻居路由器发送数据库描述包,此状态下,也会发送链路状态请求数据包给邻居,用来请求LSA



信息加载状态(Loading):本地路由器向他邻居路由器发送链路状态请求,用来请求最新LSA,虽然在Exchange状态发现了新的LSA,但是本地路由器还没有收到这些LSA



完全邻接状态(full):路由器建立起完全的邻接关系



 



邻居建立过程:



ospf邻居建立成功但是没有路由怎么办 ospf邻居full但是没有路由_OSPF

互相发送HELLO包来协商一些参数。

ospf邻居建立成功但是没有路由怎么办 ospf邻居full但是没有路由_数据结构与算法_02

OSPF会周期性的从启用OSPF的接口上发送HELLO包,OSPF启动之初,就进入了INIT状态。直到从邻居的HELLO包中看到了自己的RID,才会将邻居的状态转为2-WAY

ospf邻居建立成功但是没有路由怎么办 ospf邻居full但是没有路由_数据结构与算法_03

发送第一个DBD报文,来协商主从关系(是空的DBD报文,仅仅用来协商主从关系)

R1:

ospf邻居建立成功但是没有路由怎么办 ospf邻居full但是没有路由_网络_04

R2:

ospf邻居建立成功但是没有路由怎么办 ospf邻居full但是没有路由_ospf邻居建立成功但是没有路由怎么办_05

协商过主从关系以后,状态就从Exstart转到Exchange,并且开始交互剩下的DBD报文:

ospf邻居建立成功但是没有路由怎么办 ospf邻居full但是没有路由_数据库_06

ospf邻居建立成功但是没有路由怎么办 ospf邻居full但是没有路由_OSPF_07

ospf邻居建立成功但是没有路由怎么办 ospf邻居full但是没有路由_数据库_08

DBD报文间用序列号进行确认,主发送的序列号递增,从序列号跟随主序列号,来进行确认。这算一种隐性的确认方法。

从邻居收来的DBD报文中会携带LSA头部信息,如果有本地没有的,或更新的LSA,将他放入我自己的链路状态请求列表,然后去发送LSR来请求这条LSA的完整信息。直到自己的链路状态请求列表为空。

有可能在交互DBD的中间,Exchange状态的时候,就开始发送了LSR,来请求LSA的信息。LSR只包含被请求LSA的头部信息。

ospf邻居建立成功但是没有路由怎么办 ospf邻居full但是没有路由_数据库_09

在Exchange状态下,如果LSU和LSR的交互完成了,则直接转到FULL状态,如果还有,则转到Loading状态。

接收到LSR的路由器,会返回一个LSU,包含被请求的LSA的详细信息。

ospf邻居建立成功但是没有路由怎么办 ospf邻居full但是没有路由_OSPF_10

MA网络和其他网络的区别,1.需要选举DR/BDR,建立完整的FULL状态最少40S,wait time:在开始选举DR和BDR之间,路由器等待邻居路由器的Hello数据包通告DR和BDR的时长。

并不是先启动OSPF进程的路由器就是DR,而是有一个时间间隔让路由器来等待其他路由器,在这个时间间隔内,路由器相互监听Hello包中的DR和DBR字段中的信息,并且服从优先级原则,可以这样认为——选举是公平的。(要充分考虑是否真实情况40S内一个MA网络的OSPF能跑完)

ospf邻居建立成功但是没有路由怎么办 ospf邻居full但是没有路由_OSPF_11

R1先启动OSPF,40S以后,R2启用OSPF。看DR/BDR的选举

(config-router)#do show ip os int f0/0

FastEthernet0/0 is up, line protocol is up 

  Internet Address 12.0.0.1/24, Area 0 

  Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 1

  Transmit Delay is 1 sec, State DR, Priority 1 

  Designated Router (ID) 1.1.1.1, Interface address 12.0.0.1

  Backup Designated router (ID) 2.2.2.2, Interface address 12.0.0.2

 

DR/BDR的选举规则,先选举BDR,然后这个BDR成为DR,再选出一个BDR。(因为所有路由器在开始的时候并没有声明自己是DR/BDR,优先级又一样,故RID大的成为BDR,然后这个BDR成为DR,再重新找一个RID次大的,成为BDR)

如果是串口,默认是点到点的网络类型,是不需要选举DR/BDR的。邻居建立的方式差不多,只是不需要等待40S那么长时间。

DR/BDR指的是一个接口的概念,虚链路也是指的接口。

 

注:所谓的隐式确认和显式确认,隐式确认指的是DBD的确认和LSR的确认,这两个确认是和Retransmit计时器有关的。显式确认只有LSAck。



OSPF接口:



OSPF协议通过路由器的接口来了解链路信息,分清接口和链路的概念。



观察接口结构



R1#show ip ospf interface serial 1/0



Serial1/0 is up, line protocol is up 



  Internet Address 12.0.0.1/24, Area 0 



  Process ID 1, Router ID 1.1.1.1, Network Type POINT_TO_POINT, Cost: 64



  Transmit Delay is 1 sec, State POINT_TO_POINT,



  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5



    oob-resync timeout 40



    Hello due in 00:00:08



  Index 1/1, flood queue length 0



  Next 0x0(0)/0x0(0)



  Last flood scan length is 1, maximum is 1



  Last flood scan time is 0 msec, maximum is 0 msec



  Neighbor Count is 1, Adjacent neighbor count is 1 



    Adjacent with neighbor 2.2.2.2



  Suppress hello for 0 neighbor(s)



Internet Address:此接口所配置的ip/mask



Area 0:指定的区域ID,始发这个接口的OSPF数据包使用这个区域ID



Process ID:进程ID,CISCO私有,依靠这个CISCO来在同一设备中使用多个OSPF进程,仅仅本地有效



Router ID:路由器ID,选举规则见LS协议最后一节



Network Type:和接口相连的网络类型:广播,点到点,点到多点,NBMA,虚链路等。



Cost:发出数据包的出站代价,即数据层面的出接口,控制层面的入接口。



OSPF带宽计算规则:10的8次方/接口带宽,这样会有一个问题凡是大于100M的,cost都为1.无法衡量出不同链路的带宽



使用auto-cost reference-bandwitch修改分母



InfTransDelay=Transmit Delay :LSA从接口发送经历的时间,LSA发出后会引发此参数不断变大 cisco中默认是1S 



ip ospf transmit-delay来更改



因为网络类型关系,没有DR/BDR的显示



Wait 40:在serial 口中没有意义,表示的是在开始选取DR/BDR之前,路由器等待邻居路由器的HELLO数据包通告DR/BDR的时长。



Retransmit:在没有得到确认的情况下,重传OSPF数据包等待的时间长度,ip ospf retransmit-interval更改



neighbor:只有建立邻接关系的路由器才会在此有显示。



如果开启认证,此命令最后输出也会有显示。如果没有使用或使用了null认证,则不会显示。



 



每台路由器都会维护一个邻居数据结构表:



R1#show ip ospf neighbor 2.2.2.2



 Neighbor 2.2.2.2, interface address 12.0.0.2



    In the area 0 via interface FastEthernet0/0 



    Neighbor priority is 1, State is FULL, 6 state changes



    DR is 12.0.0.2 BDR is 12.0.0.1



    Options is 0x52



    LLS Options is 0x1 (LR)



    Dead timer due in 00:00:36



    Neighbor is up for 00:00:59



    Index 1/1, retransmission queue length 0, number of retransmission 1



    First 0x0(0)/0x0(0) Next 0x0(0)/0x0(0)



    Last retransmission scan length is 1, maximum is 1



    Last retransmission scan time is 0 msec, maximum is 0 msec



Neighbor :邻居路由器的RID



interface address:邻居路由器的IP地址



areaID:收到的hello包中的areaID需要和接收hello包接口的areaID一致,保证互为邻居路由器



 interface :本地通过哪个接口连接到这个邻居



state:从本地看邻居的状态,此输出来看是full



DR/BDR:DR/BDR的IP地址,包含在hello包中的DR/BDR字段



Dead timer:收到hello会刷新此计时器



 


转载于:https://blog.51cto.com/zhangchiccie/689908