基于距离矢量协议RIP 、BGP
基于链路状态协议OSPF、IS-IS
IGP(内部网关协议):RIP 、OSPF、IS-IS
EGP(外部网关协议):BGP
RIP(Routing Information Protocol)路由信息协议,是一种经典的,基于距离矢量的路由协议,由于存在缺陷,现在已经用的很少了,主要用在规模较小的网络,复杂的网络环境和大型网络环境不建议RIP.基于UDP,端口520
它主要是利用跳数(所经过路由器的数量)来度量到达目的网络的距离
路由器们通过周期性地以发送广播的形式和周围路由器交换路由表,从而学习到到达其他网络的路线
最一开始,路由器的路由表中只有直线的网络
在初次路由信息的交换后,学到了旁边路由器的路由表的所有信息
再次交换路由表的信息,从而学到更远路由器的位置信息
(信息指,去到某个网络要从哪个端口出去,要经过几个路由器)
最终路由收敛完成,达到全网互通的目的。
如下图假如从R1要向R5发送数据,因为走上面的路由路径cost=2 所以信息会选择从上面路由路径走
但实际上,下面的路由路径的宽带比上面的大得多,更应该选的是下面的
导致这问题的根本就是: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(Open Shortest Path First)开放最短路径优先
LSA(Link State Alerm)链路状态通告,一些信息如,自己直连接口,直连接口的网段等等,LSA有助于每台路由器去了解自己周围网络的拓扑结构
LSDB(Link State Database)链路状态数据库 路由器收集信息后放在自己的数据库中
SPF(Shortest Path First)最短路径优先 :每台路由器基于自己的LSDB,计算出一个以自己为ROOT,覆盖全网的无环的树。
Cost(开销):指从源路由到目的路由所经过的入站cost的总和
邻居表:ospf是一种可靠的路由协议,要求路由器在发送链路状态通告前,必须先发hello包建立邻居关系,再经过一系列的ospf消息交互最终建立毗邻关系,邻居表用来存放邻居信息
链路状态数据库(LDB):LSA用来描述网络拓扑信息,然后用LDB来储存这些信息。
路由表:基于LDB用最短路径优先算法(Dijkstra)计算得到路由表
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算法,算法本身就保证了不会出现环路
如图在存在多个路由器的时候,他们相互之间就会有多个邻居关系,为了去维护这些邻居关系可能要消耗很多设备资源
因此,为了减少网络中的ospf流量,会在网络中选举出一个指定路由器DR和备用指定路由器BDR。
这样,下面的路由器称作DRother
这些DRother的ASL会发给DR,再由DR泛洪,从而减少ospf流量
DRother通过224.0.0.6通知DR/BDR
DR/BDR通过224.0.0.5发送更新通知给其他路由器
BGP(Border Gateway Protocol)边界网关路由协议
由于实现AS之间的路由信息的交互。
BGP使用TCP为运输层协议,使用端口179(熟知端口)
BGP路由器之间用tcp建立BGP会话,对等体之间无需直连。
运行BGP的路由器叫做BGP Speaker,两台路由器需要建立对等体关系才能交互BGP路由
对等体建立好后,BGP不会周期性刷新,只会发送增量刷新和触发刷新
目前主要版本是v4和MP-BGP
BGP是建立tcp之上的,所以BGP packet 前面有个tcp头部(tcp的端口为179),然后再封装在IP头部。
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 |
OPEN报文用于BGP建立,Type为1.
Version:指使用的BGP版本,目前为版本4
My AS :自己的AS区域号
Hold Time::发送者自己设定的hold time值(单位:秒),用于协商BGP对等体间保持建立连接关系,发送KEEPALIVE或UPDATE等报文的时间间隔。
BGP Keepalive报文只有BGP报文头,为固定的19个字节,无其他特殊内容,用于保持BGP连接
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 )
type=3,NOTIFICATION报文用于处理BGP进程中的各种错误。
Error code:定义错误的类型,非特定的错误类型用零表示。
Error subcode:指定错误细节编号,非特定的错误细节编号用零表示。
DATA:后面跟错误指定内容
REFRESH报文用于动态的请求BGP路由发布者重新发布UPDATE报文,进行路由更新。
可见为什么说"BGP是运行于TCP之上的一种AS路由协议"
首先开启BGP协议的路由双方要进行tcp三次握手
接下来的报文传输,都要基于tcp的确认
最基本的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。
背景:
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