动态路由的分类
动态路由按工作区域分类可以分为两类:内部网关协议-IGP和外部网关协议EGP。
IGP-内部网关协议:RIP,OSPF,IS-IS
EGP-外部网关协议:BGP
动态路由按工作机制及算法来分可以分为两类:距离矢量路由协议和链路状态路由协议。
距离矢量路由协议:RIP
链路状态路由协议:OSPF,IS-IS
按区域分:
其实IGP也好EGP也好主要是自治域AS的概念。
AS自治域就是网络管理员自己能独立管理的网络就是自治域,如果是另一个网络你管理不了另一个网络就是另一个自治域。在自治域内部使用的协议就叫IGP,在两个自治域之间使用的协议就叫EGP。
按工作状态分:
距离矢量就是:有方向有距离的参数,假设三个路由器A,B,C。当A给C传一条路由,对于C来说路由是从左边传来的,C就知道了方向,距离就是A到C经历了几跳,C从A学到了两跳,两跳就是距离。距离矢量路由协议是不知道全网拓扑图的。
链路状态就是:两个路由器之间不是传路由信息,传递的是链路状态,传递路由器接口状态:带宽,网段,掩码等,传递路由器链路状态信息,每台设备之间都会去交互链路状态,然后进行路由计算就能得到路由。OSPF就是一种链路状态路由。
OSPF实现过程
1.建立邻居关系,传递自己的LSA 。目的:为了让所有的设备获取其他设备的LSA。
2.交互LSA,组建LSDB链路状态数据库。目的:服务后续的路由计算。
3.SPF算法计算拓扑。目的:根据LSA信息计算出全网的拓扑信息。
4.路由表。计算出来的最优路径加入路由表。
OSPF基础术语
1.router-ID
作用:标识这个设备的名字,在交互LSA中产生作用
如何产生:手动配置>最大ip的环回口>最大ip的物理口
2.度量值
作用:计算路径开销,用来选出路由
如何计算:cost=参考带宽/接口带宽(参考带宽默认是100Mbit/s),沿途路由器的出接口方向开销
3.区域
作用:减小路由表规模
如何实现:不同区域只传递路由,不传递LSA,普通区域只能和骨干区域相连,骨干区域属于区域0
路由器类型:
区域内路由器IR,所有接口都属于同一个ospf区域。
区域边界路由器ABR,路由器的接口同时属于两个以上的区域,至少有一个是骨
干区域。
骨干路由器BR,至少有一个接口属于骨干区域。
自制系统边界路由器ASBR,引入外部路由的路由器。
OSPF协议报文的类型
OSPF有五种类型的协议报文。这些报文在OSPF路由器之间交互中起不同的作用。
1.Hello报文:周期性发送,用来发现和维护OSPF邻居关系。
2.Database Description报文:描述本地LSDB的摘要信息,用于两台设备进行数据库同步。
3.Link State Request报文:用于向对方请求所需要的LSA。设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。
4.Link State Update报文:用于向对方发送其所需要的LSA。
5.Link State ACK报文:用来对收到的LSA进行确认。
OSPF三大表项
OSPF有三张重要的表项,OSPF邻居表、LSDB表和OSPF路由表。
1.OSPF邻居表:OSPF在传递链路状态信息之前,需先建立OSPF邻居关系,OSPF的邻居关系通过交互Hello报文建立,OSPF邻居表显示了OSPF路由器之间的邻居状态。
2.LSDB表:LSDB会保存自己产生的及从邻居收到的LSA信息,Type标识LSA的类型,AdvRouter标识发送LSA的路由器。
3.OSPF路由表:OSPF路由表和路由器路由表是两张不同的表项,OSPF路由表包含Destination、Cost和NextHop等指导转发的信息。
OSPF工作原理
ospf有两种重要的关系,邻居关系和邻接关系。
两台路由器直连,在双方互联接口上激活OSPF,路由器开始发送及侦听Hello报文。在通过Hello报文发现彼此后,这两台路由器便形成了邻居关系。
邻居关系的建立只是一个开始,后续会进行一系列的报文交互,例如前文提到的DD、LSR、LSU和LS ACK等。当两台路由器LSDB同步完成,并开始独立计算路由时,这两台路由器形成了邻接关系。
1.邻居关系的建立过程:
1.路由器R1状态为down,因为他还不知道他的邻居有谁,于是发送一个HELLO报文,报文内容是我是R1,我不知道有谁。
2.此时R2收到了一个表里之前没有的邻居,于是将邻居表R1状态为init(初始化),将R1的信息添加到邻居表内,然后给R1发送一条HELLO报文,说我是R2,我已经发现你了。
3.R1收到一条HELLO报文,发现里面有R2的信息,于是发现邻居R2,而且R2也知道R1的位置,所以将邻居表R2的状态设为2-WAY,R1这时也给R2发送一条HELLO报文,说我是R1,我也知道R2是我的邻居了。
4.R2收到HELLO报文,知道了R1发现了自己于是将邻居表中R1的状态设为2-WAY。
这样R1与R2 的邻居关系已经建立好了。HELLO报文是组播发送,目的地址是224.0.0.5,HELLO报文信息如下:
2.邻接关系建立过程:
当邻居关系建立完毕后,他们是不会传递LSA信息的 ,需要建立邻接关系,他们才会交换LSA信息。
选择主从,由于OSPF是基于IP的协议,IP是一种尽力而为的模型,他是不知道发送的信息对方有没有收到的,所以OSPF就用主路由器的序列号来保证DD交互的可靠性。
建立流程:
1.R1向R2发送空的DD报文,报文内容为空序列号为X,R1发送信息说我是主,我的Router-id是1.1.1.1。
2.R2向R1发送空的DD报文,报文内容为空序列号为Y,R2发送信息说我是主,我的Router-id是2.2.2.2。
3.R1接收到了R2的信息之后,由于,R2的Router-id大,于是选举R2为主路由器,序列号用Y,发送DD报文LSDB里面的LSA信息摘要。
4.R2接收到了R1的LSDB中的LSA摘要后,也发送一个DD报文序列号为Y+1发送自己的LSDB中的LSA摘要。
到这里R1和R2都知道了对方LSDB中的内容了。
5.然后R1去请求一个自己没有的LSA详细信息,因为之前发的是摘要信息,发送LSR报文请求完整LSA信息。
6.R2收到之后将R1请求的LSA 信息详细发送LSU报文给R1。
7.R1收到R2发来的LSU报文之后,给R2回复一个LSACK报文,确认我已经收到了LSA信息。
这样邻接关系也建立好了。报文信息如下(随便抓了个包,没有对应关系):
其实建立邻接关系可以举个例子:
1.小明和小龙互相说:小明说我做了数学,英语。小龙说我做了英语,语文。这就是DD报文里的LSDB的LSA摘要信息。
2.然后小明说:语文借我看看,这就是LSR报文,请求LSDB中LSA详细信息
3.小龙将语文作业给小明,就是LSU报文,将LSA信息发送。
4.小明收到后和小龙说好嘞谢谢你,就相当与LSA CK报文,确认我已经收到了对方给我的东西。
DR与BDR
DR指定路由器,BDR备用指定路由器,在一个广播域里只能有一个DR/BDR,其他路由器都为drother非指定路由器。
作用:减少同一个广播域彼此之间LSA重复发送。
选举范围:一个广播域内,选举出DR/BDR。
选举规则(基于接口):接口的优先级越大越优先,0-255。优先级相等,RID大的优先,优先级为0时退出选举。
选举阶段:2-way状态后,在40S内把结果通过hello报文里面DR/BDR字段同步。
注意:DR/BDR是非抢占机制,就算后面加进来的设备优先级再高,都不会抢占DR/BDR。想要强制,可以让DR的接口优先级设置为0退出选举。drother与drother之间是2-WAY状态。
如下拓扑图
R3为DR,R2,R4为drother: