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):路由器建立起完全的邻接关系
邻居建立过程:
互相发送HELLO包来协商一些参数。
OSPF会周期性的从启用OSPF的接口上发送HELLO包,OSPF启动之初,就进入了INIT状态。直到从邻居的HELLO包中看到了自己的RID,才会将邻居的状态转为2-WAY
发送第一个DBD报文,来协商主从关系(是空的DBD报文,仅仅用来协商主从关系)
R1:
R2:
协商过主从关系以后,状态就从Exstart转到Exchange,并且开始交互剩下的DBD报文:
DBD报文间用序列号进行确认,主发送的序列号递增,从序列号跟随主序列号,来进行确认。这算一种隐性的确认方法。
从邻居收来的DBD报文中会携带LSA头部信息,如果有本地没有的,或更新的LSA,将他放入我自己的链路状态请求列表,然后去发送LSR来请求这条LSA的完整信息。直到自己的链路状态请求列表为空。
有可能在交互DBD的中间,Exchange状态的时候,就开始发送了LSR,来请求LSA的信息。LSR只包含被请求LSA的头部信息。
在Exchange状态下,如果LSU和LSR的交互完成了,则直接转到FULL状态,如果还有,则转到Loading状态。
接收到LSR的路由器,会返回一个LSU,包含被请求的LSA的详细信息。
MA网络和其他网络的区别,1.需要选举DR/BDR,建立完整的FULL状态最少40S,wait time:在开始选举DR和BDR之间,路由器等待邻居路由器的Hello数据包通告DR和BDR的时长。
并不是先启动OSPF进程的路由器就是DR,而是有一个时间间隔让路由器来等待其他路由器,在这个时间间隔内,路由器相互监听Hello包中的DR和DBR字段中的信息,并且服从优先级原则,可以这样认为——选举是公平的。(要充分考虑是否真实情况40S内一个MA网络的OSPF能跑完)
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会刷新此计时器