BGP ---- 无类别的路径矢量型协议
距离矢量
在距离矢量型协议中,距离是开销的体现,将跳数作为开销值的评判标准。将一个路由器看作是一个单位计算距离
路径矢量
将AS看作一个整体,仅将现成的路由进行传递而不需要计算
BGP协议的关注点
(1).可控性
AS之间需要传递大量的路由信息,所谓可控,就是可以更方便的干涉选路,更容易做路由策略
(2).可靠性
需要保证数据传输的可靠。BGP为了保证传输的可靠性,其传输层协议直接选择使用TCP协议。使用TCP的179号端口进行工作
IGP ---- 选路佳,收敛快,占用资源少
IGP协议不选择使用TCP的原因:
(1).TCP传输效率较低
(2).TCP传输占用资源较大
(3).TCP协议只能实现单播,所以,无法通过组播或者广播的形式发送,则将导致IGP协议无法自动发现邻居关系,只能手工指定
AS ---- 自治系统 ---- 由单一机构或组织管理的一些列IP网络及其设备的集合
为了方便区分和标定不同的AS,我们给每个自治系统设计了一个编号 ---- AS号
AS号
16位二进制构成,其范围为0 - 65535;其中0和65535为保留值,所以AS号真正的取值范围为1 - 65534;我们将64512 - 65534 AS号称为私有AS号
EGP:在其基础上进行优化和改进,生成现在的BGP协议,目前AS之间使用最广泛的协议就是BGP协议
在没有BGP协议的情况下,仅使用重发布技术,也可以实现AS之间的路由信息共享。但是,之所以不采用这种方案,有两个原因:
(1).重发布技术本身存在缺陷
在多点重发布中,因为种子度量值问题,必然造成选路不佳
(2).ASBR设备的归属问题
BGP不使用拓扑信息的原因:
(1).拓扑信息资源占用量太大,而BGP需要传递的数量是巨大的
(2).传递拓扑信息将暴露本AS内部的拓扑连接情况
在BGP中,我们将邻居关系称为对等体关系
EBGP对等体关系
如果建立对等体的两台路由器位于不同的AS中,则他们的关系被称为EBGP对等体关系
IBGP对等体关系
如果建立对等体的两台路由器位于同一的AS中,则他们的关系被称为IBGP对等体关系
AS-BY-AS:在BGP中,我们将一个AS看作一个整体
BGP协议是不支持负载均衡的,在BGP中,如果到达同一目标网段存在多条路径可以走时,BGP将会根据其中的路径属性来选择一条最优的加载到路由表中,而不会进行负载均衡
BGP的数据包:BGP协议所有数据包的传输的可靠性均由TCP协议来保证。所有BGP数据包均基于TCP建立的会话通道发送
OSPF的hello:可以周期性的发现,建立和保洁邻居关系
open 包:建立BGP对等体关系
(1).AS号
在创建邻居关系时需要指定邻居所在的AS号,这个参数将被携带在open报文中发送给对方,对方将比对这个AS号和本地所在的AS号是否一致,如果一致,则可以正常建立邻居关系
(2).认证
BGP建邻也可以做认证,做认证后将携带认证口令,认证口令双方需要比对,一致则可以正常建立邻居关系
(3).route-id
区分和标定路由器的,也是由32位二进制构成,按照IP地址的格式来表示
手工配置
自动获取
(4).holdtime ---- 保洁时间
默认时间为180S,在保洁时间内,如果没有收到对方发送的keeplive包或者update包,则将断开BGP邻居关系。这个参数在open报文中将被携带,但是,双方不一致不会影响邻居关系的建立,但是在执行时,这个时间必须是一致的,则将采用双方中较小的保洁时间来使用
keeplive包:周期保洁 ---- 周期发送时间等于保洁时间的1/3。默认保洁时间180S,则默认的周期发送时间为60S。
除了保洁之外,keeplive包还将在open报文协商参数时临时充当确认包的作用,TCP协议进行确认的目的是为了保证数据传输的可靠性,而keeplive报文确认的目的是为了确认认可对方发送的open报文中的参数
update包:更新包 ---- 携带更新传递的路由信息的数据包。表示一条路由条目信息,需要携带的参数主要就是目标网络号和子网掩码信息,以及路径属性。
notification包:BGP中设计的一个告警机制
route-refresh包:用于改变路由策略变更后请求对等体重新发送路由信息(前提条件是双方均支持路由刷新功能才行)
BGP的状态机:BGP的状态机描述的是BGP对等体建立过程中状态的变化
BGP的状态机分为6种
idle ---- 空闲状态
路由器启动BGP进程之后,将先处于idle状态
connect ---- 连接状态
该状态完成TCP会话的建立
如果TCP会话建立成功,则将进入到opensent状态,发送open报文。
如果TCP会话建立失败,则将进入到active状态,尝试重新建立TCP会话。
active:TCP连接没建立成功,反复尝试TCP连接
opensent:发出本地的open报文。收到对端发送的open报文,查看里面的参数,之后,如果确认参数无误。则将回复keeplive报文作为确认
openconfirm ---- open报文确认状态
对端也收到本地发送的open报文,之后根据里面的参数进行确认。如果确认无误则将发送keeplive报文。本段收到对方发送的keeplive报文之后将进入下一个状态
established ---- 建立状态
标志着BGP对等体关系的建立
BGP的工作过程
(1).基于IGP协议实现IP可达
(2).指定邻居关系,通过三次握手,建立TCP的会话通道,之后所有BGP的数据报都将基于TCP会话通道来进行传递
(3).使用open报文和keeplive报文进行邻居关系的建立,之后将邻居关系收集到一张表中 ---- 邻居表
(4).通过update报文传递路由信息。传递的路由条目信息中主要包含目标网络号,掩码信息,以及各种路径属性。之后,设备会将所有自己发出的以及收到的路由信息记录在一张表中 ---- BGP表
(5).将BGP表中的最优路径加载到路由表中
(6).收敛完成后,BGP将周期使用keeplive报文进行保洁
(7).若出现错误信息,将使用notification报文进行告警
(8).若发生结构突变,则将使用update报文进行触发更新
BGP的路由黑洞:由于BGP协议支持非直连建邻,故可能出现BGP协议跨越未运行BGP协议的路由器。导致BGP路由传递后,控制层面可达,但是数据层面,在经过未运行BGP协议的路由器无法通过,形成路由黑洞。
(1).在R3上将BGP协议的路由信息重发布到IGP当中
(2).直接在R4上运行BGP协议
(3).MPLS
为了避免路由黑洞的情况产生,BGP提出了同步机制
当一台路由器从自己的IBGP对等体学习到一条BGP路由时,他将不能把他通告给自己的EBGP对等体,除非他又从IGP协议中学到这条路由
BGP的防环
BGP使用的防环机制 ---- 水平分割机制
EBGP的水平分割 ---- 一种专门应用在EBGP对等体之间,用于解决EBGP对等体之间可能出现的环路问题
IBGP的水平分割 ---- 一种专门应用在IBGP对等体之间,用来解决IBGP对等体之间可能出现的环路问题,当一个路由器从一个IBGP对等体处学习到某条BGP路由时,他将不能在将这条路由信息通告给其他的IBGP对等体关系
因为IBGP水平分割的限制,可能会出现通信障碍,解决方法:
(1).构建全连的IBGP对等体关系
弊端在于:
全连建邻会导致资源消耗增加
可能会导致网络的可拓展性降低
(2).路由反射器
(3).联邦