首页 > 其他 > 详细

动态路由协议

时间:2020-11-15 18:55:52      阅读:43      评论:0      收藏:0      [点我收藏+]

动态路由协议


基于距离矢量协议RIP 、BGP

基于链路状态协议OSPF、IS-IS

IGP(内部网关协议):RIP 、OSPF、IS-IS

EGP(外部网关协议):BGP

RIP动态路由协议(简单)


RIP(Routing Information Protocol)路由信息协议,是一种经典的,基于距离矢量的路由协议,由于存在缺陷,现在已经用的很少了,主要用在规模较小的网络,复杂的网络环境和大型网络环境不建议RIP.基于UDP,端口520

它主要是利用跳数(所经过路由器的数量)来度量到达目的网络的距离

基本机制

路由器们通过周期性地以发送广播的形式和周围路由器交换路由表,从而学习到到达其他网络的路线

最一开始,路由器的路由表中只有直线的网络

在初次路由信息的交换后,学到了旁边路由器的路由表的所有信息

再次交换路由表的信息,从而学到更远路由器的位置信息

(信息指,去到某个网络要从哪个端口出去,要经过几个路由器)

技术分享图片

最终路由收敛完成,达到全网互通的目的。

RIP的不足一:路径选择不优

技术分享图片

如下图假如从R1要向R5发送数据,因为走上面的路由路径cost=2 所以信息会选择从上面路由路径走

但实际上,下面的路由路径的宽带比上面的大得多,更应该选的是下面的

导致这问题的根本就是:RIP是以距离矢量作为度量标准的。

RIP的不足二:路由环路问题

技术分享图片

假如在C路由直连网络10.0.4.0断开了,就会在C的路由表中删除条目,但是在下一个RIP周期,路由器相互学习路由表信息,C会收到来自B的信息,里面写着到10.0.4.0的跳数是1 (实际已经不可达),会更新自己表中到10.0.4.0的跳数为2,这时候如果一个pc请求10.0.4.0,会在B出得到信息,往GE0/0/1走,到了C又得到信息说目标网络在GE0/0/0口,最终形成环路。

解决方案:

定义最大跳数

水平分割(C从一个接口收到信息,不能通过这个接口再发出去)

路由中毒(C直接宣告所有人10.0.4.0不可达)

路由优先级的概念

用来描述,路由器会通过很多不同的协议来获取路由信息,如直连(Direct)、静态路由(Static)、RIP协议、OSPF协议

最终哪里学来的信息会被写入路由表中。优先级高(数值小)的写入。


OSPF动态路由协议


概念

ospf(Open Shortest Path First)开放最短路径优先

LSA(Link State Alerm)链路状态通告,一些信息如,自己直连接口,直连接口的网段等等,LSA有助于每台路由器去了解自己周围网络的拓扑结构

LSDB(Link State Database)链路状态数据库 路由器收集信息后放在自己的数据库中

SPF(Shortest Path First)最短路径优先 :每台路由器基于自己的LSDB,计算出一个以自己为ROOT,覆盖全网的无环的树。

Cost(开销):指从源路由到目的路由所经过的入站cost的总和

ospf的三张表

邻居表:ospf是一种可靠的路由协议,要求路由器在发送链路状态通告前,必须先发hello包建立邻居关系,再经过一系列的ospf消息交互最终建立毗邻关系,邻居表用来存放邻居信息

链路状态数据库(LDB):LSA用来描述网络拓扑信息,然后用LDB来储存这些信息。

路由表:基于LDB用最短路径优先算法(Dijkstra)计算得到路由表

ospf报文类型

hello:建立和维护邻居关系

DBD:链路状态数据库描述信息,描述LDB中LSA的头部信息

LSR:链路请求

LSU:链路状态更新

LSAck:对LSU中的LSA进行确认

工作机制

1)每台路由器学习激活的直接相连的网络。
2)每台路由器和直接相连的路由器互交,发送Hello报文,建立邻居关系。
3)每台路由器构建包含直接相连的链路状态的LSA(Link-State Advertisement,链路状态通告)。链路状态通告(LSA)中记录了所有相关的路由器,包括邻路由器的标识、链路类型、带宽等。
4)每台路由器泛洪链路状态通告(LSA)给所有的邻路由器,并且自己也在本地储存邻路由发过来的LSA,然后再将收到的LSA泛洪给自己的所有邻居,直到在同一区域中的所有路由器收到了所有的LSA。每台路由器在本地数据库中保存所有收到的LSA副本,这个数据库被称作"链路状态数据库(LSDB,Link-State Database)"
5)每台路由器基于本地的"链路状态数据库(LSDB)"执行"最短路径优先(SPF)"算法,并以本路由器为根,生成一个SPF树,基于这个SPF树计算去往每个网络的最短路径,也就得到了最终的路由表。

Dijkstra算法:https://xie.infoq.cn/article/feff5e0c3c0c49edd9116990e

基本特点

适应范围广

快速收敛:当网络拓扑结构发生变化的时候,立即发送更新报文

无自环:因为是通过收集到的链路状态来执行SPF算法,算法本身就保证了不会出现环路

DR和BDR

技术分享图片

如图在存在多个路由器的时候,他们相互之间就会有多个邻居关系,为了去维护这些邻居关系可能要消耗很多设备资源

技术分享图片

因此,为了减少网络中的ospf流量,会在网络中选举出一个指定路由器DR和备用指定路由器BDR。

这样,下面的路由器称作DRother

这些DRother的ASL会发给DR,再由DR泛洪,从而减少ospf流量

DRother通过224.0.0.6通知DR/BDR

DR/BDR通过224.0.0.5发送更新通知给其他路由器

BGP动态路由协议(难,内容多)

BGP(Border Gateway Protocol)边界网关路由协议

由于实现AS之间的路由信息的交互。

BGP协议特征

  • BGP使用TCP为运输层协议,使用端口179(熟知端口)

  • BGP路由器之间用tcp建立BGP会话,对等体之间无需直连。

  • 运行BGP的路由器叫做BGP Speaker,两台路由器需要建立对等体关系才能交互BGP路由

  • 对等体建立好后,BGP不会周期性刷新,只会发送增量刷新和触发刷新

  • 目前主要版本是v4和MP-BGP

BGP的报文类型

技术分享图片

BGP是建立tcp之上的,所以BGP packet 前面有个tcp头部(tcp的端口为179),然后再封装在IP头部。

BGP报文有一个相同的头部和报文类型有五种(如图)

每一种报文类型都有不同意义,对应着BGP间建立连接的过程

BGP报文头部

技术分享图片

Marker:用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全“FF”)。

Length:BGP消息总长度(包括报文头在内),以字节为单位。长度范围是19~4096。

Type:BGP消息的类型。Type有5个可选值,表示BGP5类报文

TYPE值 报文类型
1 OPEN
2 UPDATA
3 NOTIFICATION
4 KEEPALIVE
5 REFRESH

BGP Open报文格式

OPEN报文用于BGP建立,Type为1.

技术分享图片

Version:指使用的BGP版本,目前为版本4

My AS :自己的AS区域号

Hold Time::发送者自己设定的hold time值(单位:秒),用于协商BGP对等体间保持建立连接关系,发送KEEPALIVE或UPDATE等报文的时间间隔。

BGP Keepalive报文格式

BGP Keepalive报文只有BGP报文头,为固定的19个字节,无其他特殊内容,用于保持BGP连接

技术分享图片

BGP Update报文格式

update是几种报文中最复杂的,也是最核心的一种报文,用于路由之间通告信息。

格式如下
头部后面跟了两个内容

  • Withdrawn Routes:包含要撤销的路由列表,列表中的每个单元包含1字节的Length域和可变长度的Prefix域。
  • Total Path Attribute Length:标明Path Attributes部分的长度。其值为零时,表示没有路由及其路由属性要通告。如下图所示:TPAL 24bytes = Path arrtibutes的总长度,4 + 13 + 7 = 24 (https://www.ietf.org/rfc/rfc4271.txt

技术分享图片

BGP Notification报文格式

type=3,NOTIFICATION报文用于处理BGP进程中的各种错误。

Error code:定义错误的类型,非特定的错误类型用零表示。

Error subcode:指定错误细节编号,非特定的错误细节编号用零表示。

DATA:后面跟错误指定内容

技术分享图片

BGP Refresh报文格式

REFRESH报文用于动态的请求BGP路由发布者重新发布UPDATE报文,进行路由更新。

技术分享图片

建立过程示意图

技术分享图片

建立过程wireshark抓包分析

可见为什么说"BGP是运行于TCP之上的一种AS路由协议"

首先开启BGP协议的路由双方要进行tcp三次握手

接下来的报文传输,都要基于tcp的确认

技术分享图片

BGP协议技术细节

IBGP水平分割原则

最基本的BGP防环措施是用AS-PATH

例如A(as-100),B(as-200),C(as-300)

报文经过A AS_PATH:100

再报文经过B AS_PATH:200 100

再报文经过C AS_PATH:300 200 100

如果一个路由器收到的一个报文,AS_PATH中已经有自己的AS区域号,则会丢弃。

但是这样的方法只用于as之间的防环,对于as内部防环,则要用到水平分割原则

原则规定:不将通过一个IBGP获悉的路由传播给其他IBGP邻居

因为水平分割原则的存在,也要保证IBGP全网互联

技术分享图片

所以要让全网互通,这样B的信息才可以传到E,从而到达F。

IBGP和IGP同步

背景:

技术分享图片

ABEF为BGP路由器,CD为非BGP路由器

假设AS-65101发送一条路由1.1.1.0/24到B,B可以与E进行tcp连接、建立BGP会话

从而E也学习到了1.1.1.0/24这条路由,也发送给F路由器。

现在假如F路由器的数据想发给A,数据首先到达E路由器

E的信息想要发给B,但是E和B之间并不是直连,E会进行递归查找

结果把信息交给了D或者C

而D C 收到报文实际上他们是不知道1.1.1.0/24的,因为他们不是BGP路由器

报文在这里被丢弃,形成路由黑洞

解决方法采用IBGP与IGP同步

【概念】BGP路由器从IGP邻居学习到一条路由之后,是不会转发(不启用)的,除非它再次通过IGP学习到了相同的一条路由信息,才会启用,从而避免路由黑洞问题。

动态路由协议

原文:https://www.cnblogs.com/cjz12138/p/13977677.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!