OSPF动态路由协议
从0到熟练,史上最详细的讲解!!!!!!!!
ospf:开放式最短路径优先协议;
ospf使用范围:IGP(内部网关协议);
ospf算法特点:链路状态型路由协议,采用SPF算法;
ospf传递路由时会传递网络掩码;
ospf的协议封装:基于IP协议封装(跨层封装),协议号为89;
ospf的特点:
1:ospf是一种典型的链路状态型路由协议,既传递路由信息,又传递拓扑信息;
2:ospf传递的信息称作LSA,LSA链路状态通告,其中包含路由信息和拓扑信息;
路由LSA:描述本路由器上接口的路由信息
拓扑LSA:描述路由器之间的连接状态
3:ospf协议的更新方式:触发更新(网络稳定不发信息,网络发生变化发送信息)+30分钟的链路状态刷新;ospf路由学习方式是先传递再计算(先将所有的路由信息学习下来);一条LSA最多存活30分钟,30分钟之后就会重新刷新;
4:ospf更新地址:组播更新和单播更新;224.0.0.5(本地组播地址) 224.0.0.6(本地组播地址,只DR可以支持);TTL值为1,所以在建立邻居邻接关系时只能是在直连之间建立;当一个路由器运行ospf后,就会加入到224.0.0.5这个组播组;只有DR和BDR才会加入到224.0.0.6这个组播组;
5:支持路由认证
6:支持手工汇总
7:支持区域划分
8:ospf比较消耗设备资源
ospf区域划分:
区域划分的意义:通过区域划分,将一些复杂的大的LSA限制在单个区域;减少LSA的数量;减少LSA的传播范围;为了提高ospf在大型网络中的性能;
ospf在单个区域中会传递路由信息和拓扑信息,但是在区域与区域之间只传递路由信息;
ospf的区域划分是基于接口的(链路);一条链路的两端属于某一个区域;
ospf的区域标记:使用32个二进制: 1.十进制 2.类似于IP地址(A.B.C.D)
ospf区域分类: 骨干区域:区域标记为0或者0.0.0.0
非骨干区域:区域标记不等于0或者0.0.0.0
ospf区域设计原则:
1:ospf网络中必须存在并且唯一的骨干区域(单区域除外)
2:若存在非骨干区域,非骨干区域必须与骨干区域直接相连;
ospf中路由器的角色:
1:骨干路由器:一个路由器的所有接口全在骨干区域
2:非骨干路由器:一个路由器的所有接口全在非骨干区域
ABR:区域边界路由器,一个路由器属于骨干区域和非骨干区域的边界那么这个路由就是ABR
ASBR:自治系统边界路由器,如果一个路由器属于OSPF网络与非OSPF网络边界并且将非OSPF路由引入到OSPF网络中,那么这个路由器叫做ASBR;
OSPF的消息数据包和邻居状态机制:
注意:ospf消息数据包和邻居状态机制是发生在同一过程;
ospf消息数据包
ospf的消息数据包有5个:HELLO DBD LSR LSU LSACK
在这5个包中除了hello包之外,其他包都需要进行确认;因为只有hello包是周期性发送的,能够保证其可靠性;
DBD的确认方式:DBD使用序列号进行确认,从的序列号设置和主的序列号一致,主的序列号加一;所以DBD是使用DBD进行确认的;
LSR链路状态请求:LSR使用LSU进行确认;由LSU中的标识一条LSA的三个头部信息进行确认的(Link-State Advertisement Tpye(lsa的类型),Link State ID,Advertising Router)
LSU:LSU使用LSACK进行确认;LSACK直接将你所请求的LSU的头部信息再次发送给你;
LSACK:LSACK使用隐式确认;
Hello包:
Hello:周期性发送,周期时间为10s或者30s(根据不同的网络类型,默认的时间不同),死亡时间为40s;
目的:建立并维持OSPF的邻居关系**(当邻居关系建立之后充当保活功能)**
Hello数据包结构:
Options字段:E位,N位特殊区域标识;
-
DR:指定路由器,只发生在MA网络中,所有的路由器只和DR进行LSA的交互,他们之间不会进行LSA交互;为了减少邻接关系的数量,减少LSA的传播次数;
DR的选举是先比优先级再比Router ID;越大越优
DR是一个接口的概念;DR的默认优先级默认为1,范围:0-----255;如果优先级为0代表该接口不参与选举;
BDR:备份指定路由器,其实就是DR的备份;只有当DR出现故障时,BDR才会成为DR;注意:DR和BDR的抢占是关闭的
选举过程:在选举过程中先选举BDR,选举完BDR后由于没有DR则该BDR直接成为DR;之后再选举一个BDR;
Source OSPF Router(Router id):用来标识该路由器在整个OSPF网络中的唯一性,ospf是链路状态型路由协议;
1.可以手工指定,手工指定最优先;
2.如果没有手工指定选择换回接口中ip最大的一个;
3.如果没有手工指定也没有环回接口那么使用最大的物理接口的ip地址;
- 在点对点和以太网的结构中,默认hello时间为10s,死亡时间为(40s);
hello时间:发送hello包的间隔;
死亡时间:死亡计时器,邻居关系的超时计时器;如果连续40s都没有收到邻居的正确hello报文时会认为邻居关系down掉了;
OSPF邻居关系建立条件:
ospf要建立邻居关系那么他们的Router ID必须不同;
Area ID:发送Hello包的接口所属的区域,在ospf邻居关系建立过程中区域ID必须保持一致;
ospf邻居关系建立认证类型(Auth Type)和认证数据(Auth Data)必须匹配
Network Mask:网络掩码,如果在点对点的结构中(p---p)网络掩码没有要求;但如果在非点对点网络中(MA网络)网络掩码必须一致,否则邻居关系建立不了;
hello时间和死亡时间必须保持一致;
特殊区域标识必须一致;
必须同时使用单播或者组播;
更新源检测(双方的IP地址必须在同一段网络);
MTU值保持一致;
DBD包:
DBD的报文有两种:主从选举DBD报文和LSA目录DBD报文;
华为在发送DBD报文时默认不携带MTU值,里面看到的就是0;其他的厂商默认携带MTU值;
注意:如果包含了MTU值,那么就会进行MTU的匹配;如果MTU不匹配那么邻居状态机制就会卡在exstart状态;
DB Description:
第一个bit:R(保留字段)
第二个bit:I(初始化,代表我是第一个DBD报文)
第三个bit:M(更多位,代表后续还会发送别的DBD报文)
第四个bit:MS(主从位,1代表主,0代表从)
注意:默认在进行主从选举的时候谁都不想当从,默认自己就是主;在比较了之后如果是主就还是1,如果为从就改为0;
主从选举比router-id,大的为主,小的为从;
DD Sequence:序列号;(在ospf所有的消息数据包里面除了DBD有序列号以外其余的都没有序列号);
LSR包:
LSR:链路状态请求;根据LSA目录向对方请求LSA信息;请求某条LSA信息;
由Link-State Advertisement Tpye(lsa的类型),Link State ID,Advertising Router三个参数标识一条LSA;
LSU包:
LSU包其中包含着我们请求的具体的LSA信息;
LSACK包:
对收到的LSU信息进行确认;
OSPF邻居状态机制
OSPF的邻居状态机制有---------Down init attempt(尝试,过渡) two-way exstart exchange Loading full
attempt(尝试,过渡)状态只会在nbma网络中出现,华为中一般不出现;
two-way状态和full状态是一个稳定的持久的状态;
Down
代表不存在是一个关闭的状态;1:没有激活ospf;2:在ospf邻居建立过程中出现了某些故障(比如邻居关系建立条件不匹配)就会退回Down状态;
Init
初始化状态,最开始的状态;一旦开始发送hello报文就会进入初始化状态;
Two-way(邻居状态)
-------双向通信状态,一旦接收到包含自己router-id的对方的hello报文就会进入Two-way状态;
如上:AR1接收到AR2的hello报文,其中包含自己的router-id(91.1.1.1),那么此时AR1就会立刻进入到two-way状态;
- 当进入Two-way状态后,就要判断是否进行DR和BDR的选举;
DR,BDR的选举时间:40s;
DR和BDR的选举于网络类型有关;
p2p p2mp bma nbma:p2p和p2mp都属于点对点的网络,不进行DR和BDR的选举;bma和nbma都属于MA网络,进行DR和BDR的选举;
MA网络中进行DR(指定路由器)和BDR(备份指定路由器)的选举,首先比较优先级(0-255,越大越优),当优先级相同时再比较router-id越大越优;
DR的抢占是关闭的;DR和BDR是一个接口的概念,当其优先级为0时代表不参与选举;
只有DR和BDR才会监听224.0.0.6这个组播组;
当DR和BDR选举完成时,所有的其他路由器只会将LSA等信息发向DR和BDR(即向224.0.0.6这个组播组发);其他的路由器之间是不会互发的,当DR和BDR接收完所有的信息后,只有DR会向其他路由器发送所有的LSA信息;
exstart
-------预启动状态;该状态已经建立了邻居关系(two-way),但没有LSA信息发送;我们要进行主从的选举和LSA目录的发送;一旦发送DBD报文就会进入exstart状态;
-
注意:为了防止LSA的重复学习(即对方的LSA与自己的LSA有重复),在发送LSA信息之前双方会发送自己的LSA目录(即LSA的名称和头部信息)
-
为什么不能直接发送LSA信息:
1.再AR1和AR2双方都有许多的LSA信息,它们之间学习LSA需要进行ACK的确认;所以我们要先进行主从的选举我们要在两个交互LSA的双方进行master(主)和slave(从)的选举;因为只有两方,所以必然有一方是主,有一方是从;注意主从的选举与DR和BDR的选举没有关系;比如AR1成为了主,它是用来控制LSA的学习的过程的;由于主想向从学,从也想向主学所以有很多的LSA都需要学习,由主来控制最多只有一个等待需要ACK确认的信息;它担心发了很多的LSA,有些LSA没有进行ACK确认,主来控制最多我们只能等最多只能有一个等待需要被ACK确认LSA信息,当这个确认了之后我们才能够发新的LSA信息;
也就是说当发送了一条LSA信息后只有当对方发送了ACK(确认)之后才能发新的;
主从选举比router-id,大的为主,小的为从;
exchange
---------预交换状态,到该状态就意为着主从选举的完成,进行LSA目录的发送;
此时我们可能会发送LSR(链路状态请求),针对发送的LSA目录进行请求;对方根据我们请求的LSR信息发送LSU,一旦我们收到该LSU信息就会立即进入Loading状态;
该状态绝对不会有LSA的发送;
- 进入exchange状态的标志:
主从选举完成,发送LSA目录,并进行部分的链路状态请求(LSR)
Loading
loading------------加载状态;学习LSA的状态;互相学习LSA;发送LSU标志进入Loading状态;
FULL
full-------邻接状态;此时LSA的同步完成;当自己的请求列表和重传列表全部清空时就会进入FULL(邻接)状态;
-
在路由器中,会针对方发过来的LSA目录中需要学习的LSA信息生成一个请求列表,里面是自己需要向对方学习的LSA信息;该路由器会将该请求列表发送给对方,对方会将需要自己学习的LSA信息放在重传列表中;随着双方的不断请求和不断发送,每学习一条就会删除一条LSA请求目录和一条对方的重传目录,当自己的请求目录和对方的重传目录清空后就代表自己将对方的LSA已经学完了;
此时对方会进行相同的操作,保证对方也将自己的LSA信息学习完成;
判断邻居状态建立过程中卡在某一状态的原因:
Down------关闭状态,正常情况下看不到;只有在它们曾经建立过邻居或者邻接,但是突然邻居关系建立条件不匹配或者死亡计时器超时此时就会出现Down状态;如果看见持续的Down那么就是邻居关系建立条件不匹配;
我给对方发送了一个hello包而对方没有给我发hello包或者对方给我发的hello包中邻居关系不匹配,此时不可能一直初始化状态(Init),会等待一个死亡计时器(40s或者120s)之后会将初始化状态(Init)回退到Down状态;此时的另一端如果是主机或者交换机那么是不可能建立邻居关系的;此时在Down状态还会10s一个hello包,这就浪费资源的行为;针对这种情况我们可以将连接主机的接口做为被动接口,也可以发慢速hello包120s一个;当对方给我发送了一个正常的hello包后就会恢复发送hello包的间隔;
Init------初始化状态;不是一个持久的状态;初始化状态在一个死亡计时器中,如果邻居建立不起来就会退回Down状态;
two-way-----双向通信状态;在选取DR和BDR的网络中一直选不出来DR和BDR就会一直卡在two-way状态;建立邻接关系的前提是至少有一个DR;
exstart-----预启动状态;MTU值不匹配;华为MTU值默认关闭;对MTU大的一方不影响;
exchange-----预启动;也是MTU值不匹配;
Loading-----加载状态;卡在该状态有两种原因:一是该设备接收不了这么多的LSA(LSA不同步),二是可能为了保护设备做了LSA的限制;
FULL------正常工作的状态;
OSPF的基本配置
1:创建进程 [r1]ospf 100 router-id 91.1.1.1 ---------启动ospf进程并指定router-id;
-
router-id:手工指定最优,如果没有手工指定则为逻辑接口(环回接口)最大的ip地址;如果即没有手工指定也没有逻辑接口则选择最大的物理接口的ip地址;
在华为中:若不满足以上条件,则创建router-id固定为0.0.0.0,当路由器出现逻辑接口或者物理接口时这个接口会自动成为router-id,该接口可以是关闭状态(只要有ip就行,不用满足双up;如果一台路由器启用了多个ospf进程可以用同一个router-id(不过不是很推荐,容易出现问题);
在思科中:如果不能满足以上几点则该设备无法启用ospf;在使用逻辑接口或者物理接口时接口必须双up;该接口可以不通告到ospf中;当同一个路由器上启多个ospf进程时router-id必须不同;
2:通告
通告的方式有两种:
1):在ospf进程里面通告
[r1-ospf-100]area 0 -----创建并进入区域
[r1-ospf-100-area-0.0.0.0]network 12.1.1.0 0.0.0.255 -----通告该区域的网段,在通告时是用反掩码来进行通告;
2):直接在接口里面通告
[r2]interface LoopBack 0
[r2-LoopBack0]ip a 2.2.2.2 24
[r2-LoopBack0]ospf enable 100 area 0 ---------100为ospf的进程,0为区域
3:我们可以进入接口开启mtu的检测
[r1-GigabitEthernet0/0/0]ospf mtu-enable ---------开启mtu的检测;
修改mtu值:
[r1-GigabitEthernet0/0/0]mtu ?
<46-1600> MTU value
[r1-GigabitEthernet0/0/0]mtu 1400 --------如果mtu值不一致则两个接口就无法建立邻居关系;
ospf中3张表
1.邻居表:
[r2]display ospf peer ----------查看ospf邻居表
OSPF Process 100 with Router ID 92.1.1.1
Neighbors
Area 0.0.0.0 interface 12.1.1.2(GigabitEthernet0/0/0)'s neighbors
Router ID: 91.1.1.1 Address: 12.1.1.1
State: Full Mode:Nbr is Slave Priority: 1
DR: 12.1.1.1 BDR: 12.1.1.2 MTU: 1400
Dead timer due in 31 sec
Retrans timer interval: 5
Neighbor is up for 00:03:06
Authentication Sequence: [ 0 ]
State: Full-----表示r2与邻居91.1.1.1的邻居状态
Mode:Nbr is Slave ------表示自己的邻居91.1.1.1为从;
Priority: 1 ------表示邻居91.1.1.1的优先级;
Retrans timer interval: 5 ----表示重传间隔5s;我给对方发送一个需要进行确认的报文(比如:DBD,LSU,LSR等),如果对方一直没有回复那么我们5s之后再次发送该报文;
Neighbor is up for 00:03:06 -----表示建议邻居有多长时间了
Authentication Sequence: [ 0 ] -----表示认证编号,这里认证编号为0意味着不认证;
0----代表不认证;
1----代表明文认证;
2----代表md5认证;
[r2]display ospf peer brief ------查看ospf邻居摘要表
OSPF Process 100 with Router ID 92.1.1.1
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet0/0/0 91.1.1.1 Full
----------------------------------------------------------------------------
该条信息表示:在ospf进程100,router-id为92.1.1.1的路由器上,在area0区域通过接口g0/0/0与router-id为91.1.1.1的路由器建立了邻接关系;
2,链路状态数据库目录表
[r2]display ospf lsdb ------查看ospf的链路状态数据库目录表
OSPF Process 100 with Router ID 92.1.1.1
Link State Database
Area: 0.0.0.0
Type LinkState ID AdvRouter Age Len Sequence Metric
Router 92.1.1.1 92.1.1.1 1241 36 80000009 1
Router 91.1.1.1 91.1.1.1 1242 36 8000000E 1
Network 12.1.1.1 91.1.1.1 1242 32 80000001 0
[r2]
[r2]display ospf lsdb router ----查看具体的机类LSA信息;router(1类lsa);
OSPF Process 100 with Router ID 92.1.1.1
Area: 0.0.