BGP简介
目录
BGP——边界网关协议
在介绍BGP之前我们首先回顾一下AS
AS——自治系统——由单一机构或组织管理的一系列IP网络及其设备的集合
特点:
1.网络范围太大,协议运行繁忙,需要进行划分
2.自治管理
为了方便区分和标定不同的AS,我们给每个自治系统设计了一个编号——AS号——16位二进制
AS号取值范围<1-65534> 其中64512-65534称为私有AS号
这个取值范围存在不够用的问题,所以目前也存在拓展版的AS号——32位构成
大的EGP协议包括BGP,BGP的前身是小的EGP,目前AS之间使用最广泛的就是BGP协议
因为小的EGP功能优秀,后来在其基础上进行优化和改进,生成现在的BGP协议
在目前的IPV4环境下,使用最广泛的BGP版本是BGPV4,目前市场上已经存在BGPV4plus——MPBGP(多协议BGP版本,可以支持多重地址簇使用)
在没有BGP协议的情况下,也可以实现AS之间的路由信息的共享,
但之所以不采用的原因:
1.重发布技术存在缺陷——在多点重发布当中,因为种子度量值的问题,必然造成选路不佳
2.ASBR设备的归属问题
BGP之间传递路由信息的方式和RIP相似,通过传递路由条目来时间
之所以不使用拓扑信息,因为:
1.拓扑信息资源占用量太大,而BGP要传递的数量是巨大的
2.拓扑信息将暴露AS内部的拓扑链接情况
BGP——无类别的路径矢量型协议 | Rip的距离矢量型协议 |
距离矢量和路径矢量简单介绍区分
距离矢量——在距离矢量协议当中,距离是开销的体现,将跳数作为开销值的评判标准,将一个路由器看做一个单位计算距离,距离矢量是算法的概念,因为IGp协议本身需要通过计算出位置网段的路由信息
路径矢量——将一个AS看做一个整体,路径矢量不牵扯算法,因为BGP仅仅是将IGP计算出的路由信息发送发其他AS之中,相当于仅将现成的路由进行传递而不进行计算
BGP协议的关注点
1.可控性——AS之间需要传递大量的路由,需要更方便的干涉选路,更容易做路由策略
为了保证可控性——BGP舍弃了开销值,BGP给每条路由信息附加了很妒忌路径属性,
之后可以通过这些属性来选路,因为多种属性的存在,将导致选路变得更加的灵活方便
使得BGP协议具有强大的可操控性
因为BGP协议需要传递大量的路由信息,所以,它不可能存在周期更新机制,仅存在出发更新
2.可靠性——需要保证数据传输的可靠性,BGP为了保证传输的可靠性,其传输协议直接选择了TCP协议,使用TCP协议的179号端口进行工作
IGP不选择使用TCP的原因
1.TCP传输效率低
2.TCP传输占用资源大
3.TCP协议只能实现单播,所以无法通过组播或者广播的形式发送,
则将导致IGP协议无法自动发现邻居,只能手工指定
因为BGP选择使用的是TCP协议,所以,BGP需要手工建立邻居关系
BGP因为传输层使用的TCP协议,所以只要在TCP'协议可以正常建立会话的基础上可以完成BGP的建邻工作——BGP支持非非直连建邻(网络可达)——BGP的非直连建立在IGP(静态也可)之上
在BGP中我们将邻居关系称为对等体关系,(因为个人习惯所以还是喜欢叫做邻居)
EBGP对等体关系
EBGP对等体关系——如果建立对等体关系的两台路由器位于不同的AS当中,则他们的关系被称为EBGP对等关系(EGBP一般直连建立,所以对等体之间发送的数据包的TTL值设置为1,如果需要进行非直连建邻那么需要手工设置TTl)
IBGP对等体关系
IBGP对等体关系——如果建立对等体的两台路由器位于同一个的AS当中,则他们的关系被称为IBGP对等关系(非直连建立,一般TTL设置为255)
3.AS-BY-AS——在BGP当中,我们将一个AS看做一个整体
在BGP协议当中不支持负载均衡,而会通过路径属性来选择一条最优的加载到路由表中
BGP的数据包
BGP协议所有数据包的传输可靠性均由TCP协议来抱枕,所有BGP数据包均基于TCP建立的会话通道发送
对比OSPF
OSPF的hello包——周期性的发现,建立和保活邻居关系
在BGP中,发现邻居关系的过程变为由人手工指定,主要因为iTCP协议需要建立会话通道,之后才会基于通道发送数据包
1.OPEN包——建立BGP对等体关系——邻居关系的建立无非就是参数协商的过程,BGP建立对等关系需要通过open包来携带参数,进行比对协商
AS号——在创建对等关系时,需要指定对等体所在的AS号,这个参数将被携带在open报文中,
对方将比对这个AS好和本地所在的AS号是否一致,如果一直,则可以正常建立对等关系
认证——BGP建邻也可以做认证,做完认证后,open报文将携带认证口令,认证口令双方要比对
一致则可以正常建立邻居关系
RID——----区分和标定路由器——32位二进制构成,以IP地址的格式表示
同样的,它也可以手工配置
如果是自动获取的话,先看设备是否有环回接口,有的话RID=环回接口IP地址最大者
如果没有环回接口,啧再物理接口汇总选择ip地址最大的作为RID
对端会检测RID,如果和本地的RID不同,则将可以正常的建立邻居关系
手工建立邻居关系的时候所指定的建邻的ip地址必须和收到的数据包中的源ip地址相同才能正常建立对等关系,否则对等关系建立失败
Holdtime——保活时间——默认为180S,在这个时间内,如果没有收到对方发送的keeplive包或者updata包,则将端来BGP邻居关系,这个参数在open报文中会被携带,但是双方的值不一致不会影响邻居关系的建立,但是再执行是,这个时间必须是一致的,会采用双方中较小的保活时间来使用
路由器是否支持刷新功能也将成为open报文中所携带的一个协商参数
2.keeplive包——周期保活——周期发送时间等于保活时间的1/3,默认保活时间180S,则默认的发送周期为60S
除了保活之外keeplive包还在open报文协商参数是临时充当确认包的作用
TCP协议进行确认的目的是为了保证数据传输的可靠性,而keeplive报文确认的是为了确认认可对方发送的open报文的参数
3.updata包——更新包——携带需要传输的路由信息的数据包,表示一条路由条目信息
需要携带的参数主要就是目标网络号和子网掩码信息,以及路径属性
在更新包中存在一个撤销路由条目的字段,在这个字段下的路由条目将需要对端删除而不在需要通过带毒传输的方式来表达
4.notification包——BGP中设计的一个告警机制
5.route-refresh包——用于改变路由策略变更后请求对等体重新发送路由信息(需要双方都支持路由刷新)
BGP的状态机
BGP的状态机描述的是BGP对等体的建立过程中状态的变化,因为BGP这个协议可以将邻居建立过程和路由收发过程分开进行
BGP状态机——六种
1.IDLE——空闲状态
路由器启动BGP进程之后,将处于IDLE状态,当你手工指定邻居关系后,BGP将进入到一个检查环节(一个动作),检查指定的ip地址在本地的路由表中是否可以到达,可达,则将进入下一个状态——connect
2.connecti——连接状态,该状态完成TCP会话的建立。
如果TCP会话建立成功,则将进入到opensent状态,发送open报文
如果TCP会话建立失败,则进入active状态,尝试重新建立tcp会话
在建立TCP会话过程中,隐双方都会主动发起建立会话过程而最终建立的都是双向的一个会话,所以最终只需要保持一个会话通道即可。选择方式是通过后续open报文中的RID进行比较,选择保留RID大的设备发起TCP会话
3.opensent
发出本地的open报文,收到对端发送的open报文,查看里面的参数,之后确认参数无误,之后将恢复keeplive报文作为确认
4.openconfirm——open报文确认状态
——等待对端的keeplive确认报文,如果确认无误进入establish状态
5.establish——建立状态——标志着对等体关系的建立
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.将BGP的协议的路由信息重发布到IGP当中——但开销值规则不明,占用资源大
2.直接再未运行的BGP协议的路由器上运行BGP协议
3.MPLS技术
同步机制
为了避免路由黑洞的情况产生,BGP提出了同步机制——及当一台路由器从自己的IBGP对等体学习到一条BGP路由时,他将不能吧他桐高给自己的EBGP对等体,除非他又从IGP协议当中学习到这条路由
BGP的防环机制——水平分割
1.EBGP的水平分割——一种专门应用在EBGP对等体之间,用来解决EBGP之间可能出现的环路问题
AS PATH——记录AS路径的一个属性——用于水平分割和
BGP将会在路由条目中记录所经过的AS编号,也就是AS PATH,
接受到的BGP路由条目中,其中的AS_PATH属性中,如果存在本地的AS号,则将拒绝接受
2.IBGP的水平分割——一种专门应用在IBGP对等体之间,用来解决EBGP之间可能出现的环路问题
IBGP水平分割——当一个路由从一个IBGP对等体出学习到某条BGP路由时,不能再将这条路由信息通告给其他的IBGP对等体关系——这种规则会导致IBGP对等体之间的路由信息只能传递一条,在这种情况下可能导致通信障碍
解决方法
1.构建全连的IBGP对等关系——但这将会导致资源消耗增加和网络扩展性降低
2.路由反射器
3.联邦