链路状态路由协议只在网络拓扑发生变化以后产生路由更新.当链路状态发生变化以后,检测到变化的设备创建LSA(link state advertisement),通过使用组播地址传送给所有的邻居设备,然后每个设备拷贝一份LSA,更新它自己的链路状态数据库(link state database,LSDB),接着再转发LSA给其他的邻居设备.这种LSA的洪泛(flooding)保证了所有的路由设备在更新自己的路由表之前更新它自己的LSDB
Types of OSPF Packets OSPF包的5种类型如下: 1.hello:用来建立邻居关系的包 2.database description(DBD):用来检验路由器之间数据库的同步 3.link state request(LSR):链路状态请求包 4.link state update(LSU):特定链路之间的请求记录 5.link state acknowledgement(LSAck):确认包
OSPF Packet Header Format 5种OSPF包都是直接被封装在IP包里的而不使用TCP或UDP.由于没有使用可靠的TCP协议,但是OSPF包又要求可靠的传输,所以就有了LSAck包.如下图所示就是OSPF包在IP包里的形式:
可以使用show ip ospf database命令查看生存周期和序列号,如下: RTC# show ip ospf database OSPF Router with ID (203.250.15.67) (Process ID 10) Router Link States (Area 1) Link ID ADV Router Age Seq# Checksum Link count 203.250.15.67 203.250.15.67 48 0x80000008 0xB112 2 203.250.16.130 203.250.16.130 212 0x80000006 0x3F44 2 (略)
Debug IP OSPF Packet 使用debug ip ospf packet命令对OSPF包进行排错和验证,如下: Router# debug ip ospf packet OSPF: rcv. v:2 t:1 l:48 rid:200.0.0.117 aid:0.0.0.0 chk:6AB2 aut:0 auk: (略) 一些输出的含义如下: v:OSPF版本 t:OSPF包类型,如上是1,几种数字所代表的意义是:1为hello,2为DBD,3为LSR,4为LSU,5为LSAck l:定义包长度,单位字节 rid/aid:RID/area ID chk:校验和 aut:验证类型,0代表不进行验证,1代表明文密码,2代表MD5加密 auk:OSPF验证key keyed:MD5 key ID seq:序列号
式下输入network [address] [inverse-mask] area [area-id] process-id只是在本路由器有效,所以可以设置成和其他路由器的process-id一样的号码 address和inverse-mask为网络(或接口)地址和wildcard mask
来看一个配置实例,如下图:
如图A是采用的网络地址,而B是采用的接口地址
Verifying OSPF Operation 一些验证性的命令如下: 1.show ip protocols:显示基于IP的路由协议信息 2.show ip route ospf:显示OSPF已知路由条目信息 3.show ip interface:显示RID,area ID和邻居信息 4.show ip ospf:显示RID,计时器和LSA等信息 5.show ip ospf neighbor (detail):显示邻居信息包括RID,优先级,邻接状态(比如exstart,full等)和dead timer.detail为具体参数.如下 RouterB#show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 10.64.1.1 1 FULL/BDR 00:00:31 10.64.1.1 Ethernet0 10.2.1.1 1 FULL/- 00:00:38 10.2.1.1 Serial0 (略) 6.show ip ospf neighbor [type number] [neighbor-id] (detail):显示接口的邻居信息的命令.type为接口类型,number为接口号,neighbor-id为邻居ID
Manipulating OSPF Router ID 关于RID的分配,如下: 1.可以选择物理接口地址等级最高的做为RID(假如没有设置回环接口的话),接口不是必须参与OSPF进程,但是它的状态必须是up.否则将接收到如下错误提示: Router(config)#router ospf 1 2wid: %OSPF-4-NORTRID: OSPF process 1 cannot start. 2.假如回环接口存在的话,可以选举等级最高的设置为RID(因为回环接口永远不会down掉) 3.可以使用router-id命令进行设置 一旦RID设置了,将不会改变,即使设置为RID的接口down掉了,RID也不会改变,除非路由器重新启动,或者OSPF进程重启
设置下次OSPF启动以后所采用的RID,如下: 1.Router(config)#router ospf [process-id] 2.Router(config-router)#router-id [ip-address] 创建新的RID.注重假如本次设置的新RID只会在下次OSPF进程中启用.可以重启路由器或者使用clear ip ospf process命令重启OSPF进程(这将暂时性的造成网络不稳定)
要查看RID的信息可以使用show ip ospf命令
Adjacency Behavior for a Point-to-Point Link & Broadcast Network 在点到点链路中一般采用PPP或者HDLC的封装格式,OSPF自动检测接口类型,并且不需要进行DR/BDR的选举.邻居通过对多播地址224.0.0.5进行多播hello包来动态发现邻居.默认hello包的发送间隔是10秒,dead间隔是40秒在多路访问(multiaccess)广播型网络中(比如以太网和Token Ring),需要进行DR/BDR的选举,所有的非DR/BDR(即DROTHER)路由器和DR/BDR形成完全邻接关系,即DROTHER通过DR/BDR交换信息,如下图:
Electing the DR/BDR 当选举DR/BDR的时候要比较hello包中的优先级(priority),优先级最高的为DR,次高的为BDR.默认优先级都为1.在优先级相同的情况下就比较RID,RID等级最高的为DR,次高的为BDR.当你把优先级设置为0以后,OSPF路由器就不能成为DR/BDR,只能成为DROTHER