BGP--边界网关协议
属于EGP--外部网关协议的一种
IEP--内部网关协议--使用在AS网络内部
AS--自治系统--由单一机构或组织管理的一系列ip网络及其设备的集合
划分AS网络--就是为让全球的网络不成为一个整体,避免负载太大,无法快速运行
自治划分原因--
1.网络范围太大,协议跑不过来,需要进行换分
2.自治管理
为了方便区分和标定不同的AS,我们给每个自制系统设计了一个编号--AS号--16位二进制构成--
0--65535(0和65535为保留值,不使用)所以AS号真正取值范围1-65534
从64512-65534的AS号称为私有AS号
IANA组织来分配AS号(1-64511),IP地址,ipV6地址
因为传统的AS号存在不够用的问题,所以目前也存在拓展版的AS号--32位构成--目前绝大多数设备已经支持拓展版的AS号
EGP(大型外部网关协议)中之前还存在一种EGP(外部网关协议)-但是由于其功能有限,后来在其基础上进行优化和改进,产生了现有的优化后产生BGP协议---目前AS之间使用最广泛地协议就是BGP协议
在目前的IPV4的环境下,目前最广泛地BGP版本是BGPV4,但是市场上已经存在BGPV4+
也叫作MP-BGP---支持多种地址的BGP协议--最简单的描述就是可以支持IPV6了(支持多种地址族的应用)
VPNV4
VPNV6
还有很多的协议存在
BGP--实现边界路由器之间的自治系统之间的传递
两个AS之间的路由器(边界设备)--双向重发布之后就变成了ASBR设备,两个AS之间就能互通信息了
但是这里不用重发布技术而使用BGP
在没有BGP协议的时候,使用重发布技术,也可以实现AS之间的路由信息的贡献,但是,之所以不采用这种方案,原因:
1.多点重发布会造成选路不佳的情况出现--原因:多点重发布--有种子度量值的问题-不同协议对种子度量值的判断不同
2.中间的ASBR设备的归属问题就出现了--一旦出现问题,就会导致能够看到网络搭建的方法--比较致命
在两个AS自制系统之间使用BGP协议,传递信息时传递路由条目信息--和RIP传递形式类似
由于信息量非常大,所以只能选择路由条目信息,不能选择拓扑信息--1.是占用空间太大2.传递拓扑信息可能会被别人发现自己的AS网络内部拓扑搭建/连接情况
BGP--无类别的路径矢量性协议
距离矢量---在距离矢量型协议中,距离是开销的体现,将跳数作为开销值的评判标准---将一个路由器看做一个单位计算距离
距离矢量是算法的概念,因为IGP协议本身需要ton过算法来计算出未知网段的路由信息
路径矢量--将一个AS看作一个整体
路劲矢量不牵扯算法,因为BGP仅仅是将IGP的计算出来的路由信息发送到其他AS之中,相当于仅仅将现成的路由进行传递而不需要计算
IGP--选路佳,收敛快,占用资源少
BGP关注点
1. 可控性--AS之间需要传递大量的路由信息,所谓可控,就是可以更方便的干涉选路,更容易做路由策略
为了保证可控性,BGP舍弃了开销值,但是BGP给每条路由信息附加了很多路径属性,之后可以通过这些属性来进行选路-因为多重属性的存在,将导致我们的选路将变得更加灵活和方便,使得BGP协议具有强大的可操作性
IGP的更新是触发更新+周期更新
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中的邻居关系叫做对等体关系--petr
EBGP对等体关系---如果建立对等体的两台路由器位于不同的AS中,则他们的关系成为EBGP对等体关系(EGP-BGP对等体)
IBGP对等体关系--如果建立对等体的两台路由器位于同一的AS中,则他们的关系成为IBGP对等体关系(IGP-BGP对等体关系)
EBGP对等体一般使用直连建邻,所以EBGP对等体之间发送的数据包的TTL值改为1,就锁死了,只能连接两台位于不同的AS的两台边界路由器(这个TTL值可以进行更改,如果遇到EBGP对等体之间需要进行非直连建邻,就需要手工修改TTL值)
IBGP对等体一般使用非直连建邻,所以IBGP对等体之间发送的数据包的TTL值改为255,就可以在AS内部开始互相建邻
3.AS-BY-AS---在BGP中,我们将AS看做一个整体
BGP协议是不支持负载均衡的--在BGP当中,如果到达同一目标网段存在多条路径可走,BGP会根据其中的路径属性来选择一条最优的加载到路由表中,而不会进行负载均衡
例:
从AS1分别向AS2AS3发送信息,然后AS4会收到2个信息,但是不可能会造成负载均衡,上下都走的情况,因为AS2AS3的具体情况不确定,导致他们的传输信息的速率不同
1.BGP的数据包--
没有ACK包--是因为传输层是TCP协议--保证了BGP协议的所有数据包的传输的可靠性
所有的BGP数据包均 基于TCP建立的会话通道发送
OSPF的hello--可以周期性发现,建立和保活邻居关系--
在BGP中,发现邻居关系的过程变为由人手工指定,主要因为TCP协议需要建立会话通道高,之后才会基于通道发送数据宝
open包--建立BGP对等体关系---邻居关系的建立无非是参数协商的过程,BGP建立邻居关系需要通过OPEN包来携带参数,进行比对协商
AS号:在创建邻居关系是需要指定邻居所在的AS号,这个参数江北携带OPEN报文中发送给对方,双方将比对这AS号,和本地所在的AS号,是否一致,如果一致,则可以正常建立邻居关系
认证--BGP建邻也可以做认证,做认证后将携带认证口令,认证口令双方需要比对,一致则可以正常建立邻居关系
ROUTR-ID--区分和标定路由器的,也是由32位二进制构成,按照IP地址的格式来表示
1. 手工配置2.自动获取(先看设备是否存在环回接口,如果存在则将选择环回接口中IP地址最大的地址作为RID,如果没有环回接口,则将在物理接口中选择IP地址最大的作为RID)
这个 RID将在OPEN包中携带,发送到对端之后,对端将检测这个RID,如果和本地的RID不同,则将可以正常建立邻居关系
手工建立邻居关系时,所指定的建邻的IP地址必须和收到的OPEN包中的源IP地址相同才能正常建立邻居关系,否则,邻居关系建立失败
holdtime-将被携带在OPEN 报文中-保活时间-180s(可以改变-如果两端的时间不一致,不影响建立邻居关系的建立--但是在保活的时候,还是要一致,按照时间短的保活时间来使用)-类似于OSPF里面的deadtime,如果一定时间内收不到对方发送的Keeplive数据包或者update包,则将判定邻居死亡,断开BGP邻居关系
Keeplive包和update包都可以进行保活
路由器是否支持刷新功能也将成为OPEN报文中所携带的协商参数
Keeplive包---周期保活
周期发送时间的等于保活时间的1/3,默认保活时间是180s,默认的周期发送时间就是60s
如果两个AS的保活时间不一致,按照短的来使用,这里的周期发送时间也是保活时间的1/3
除了保活之外,Keeplive包还在OPEN报文协商参数时,临时充当确认包的作用--确认还是由TCP来确认的,但是TCP确认的是数据包的收到,Keeplive包是确认OPEN报文里面的参数是否认可,不认可就不会发送Keeplive数据包---这之后才能确定参数被认可,双方都收到确认后,才能建立邻居关系
update包--更新包
携带需要传递的路由信息的数据包--携带的是表示一条路由条目信息(目标网络号,子网掩码信息,以及一些路径属性)
在更新包当中,存在一个撤销路由条目字段,在这个字段下的路由条目,将需要对端删除,而不再需要通过带毒传输的方式来表达
notification包--纯粹是BGP中设计的告警机制
在邻居关系的建立失败后,对方回包告诉建立失败的原因是什么
peer 12.0.0.2(对方边界路由器的端口的IP地址) AS2(对方的AS区域号)
如果这两个出现错误,就会发送一个notification包来发送说明是那个程序出错了
Route-refresh包--(不太常用)--用于改变路由策略变更后请求对等体重新发送路由信息(前提条件:双方支持路由刷新功能--也是个协商支持的过程--如果一方不支持,就无法进行)
2, BGP的状态机
BGP的状态机描述的是BGP对等体建立过程中状态的变化。因为BGP 这个协议可以将邻居建立过程和路由收发过程分开进行。BGP的状态机---6种Peer状态名称
用途开始准备TCP的连接并监视远程对等体,启用BGP时,要准备足够的资源
Idle--空闲状态--路由器启动BGP进程后,先处于这个状态,当手工指定邻居关系后,BGP将进入下一个检查环节,检查指定IP地址在本地路由表中是否可达,如果可达,则进入下一个状态--Connect状态(连接状态),失败则进入Active状态,反复尝试连接TCP连接没建立成功,反复尝试TCP连接
Active OpenSent
Connect--连接状态,该状态完成TCP会话的建立
如果TCP会话建立成功,则将进入到opensent状态,发送open报文
如果TCP会话建立失败,则将进入到ACTIVE状态,尝试重新建立TCP会话
在TCP会话建立过程中,因为双方都会主动发起建立会话的过程,而最终建立的都是一个双向的会话,所以,最终只需要保持一个会话通道即可,选择的方式是通过后续的open报文中的RID进行比较,选择保留RID大的设备发起的CP会话
Opensent---发出本地的open报文,收到对端发送的open报文,查看里面的参数,之后如果确认参数无误,则将回复keeplive报文作为确认
Openconfirm--open报文确认状态--对端也收到本地发送的open报文,之后根据里面的参数进行确认,如果确认无误将发送keeplive报文,本段收到对方发送的keeplive报文之后将进入下一个状态
Established--建立状态--标志着BGP对等体关系的建立
3.BGP的工作过程
1.基于IGP协议实现IP可达
2.指定邻居关系,通过三次握手,建立TCP会话通道,之后所有的BGP的数据报文都将基于TCP会话通道进行传递
3.使用open报文和keeplive报文进行邻居关系的建立,之后将邻居关系收集到一张表中--邻居表
4.通过update报文传递路由信息,传递的路由条目信息中主要包含目标网络号,掩码信息,以及各种路径属性,之后,设备会将所有自己发出的以及收到的路由信息,记录在一张表中--BGP表
5.之后将BGP表中的最优路径加载到路由表中
6.收敛完成后,BGP将周期使用keeplive报文进行周期保活--保活时间默认为180s,周期发送时间默认为保活时间的1/3,即60s
7.若出现错误信息,将使用notification报文进行告警
8.如发生结构突变,则将使用updata报文进行触发更新
4.BGP的路由黑洞
R1R3建立一个EBGP对等体
R2R7建立EBGP对等体
R3R7建立IBGP对等体
信息从R2到R7,R7递归查找到R4
这里的R4就出现问题了--控制层面的流量能够到,但是数据层面的流量就过不去,到不了R1了
路由黑洞---由于BGP支持非直连建邻,故可能出现BGP协议跨越未运行BGP协议的路由器,导致BGP路由传递后,控制层面可达(路由信息能发送到位),但是数据层面,在经过未运行BGP协议的路由器时无法通过,形成路由黑洞
解决方法--保证R4上有这个路由信息,能够通过R4来
如果写缺省,直接指向R3,这样是凭运气过去的,但是当信息发送到R4,可能也会传回来,到达R7,再传给R4,R4在传给R7,,这样也有问题
1.重发布的方法:在R3上将BGP协议的路由信息重发布到IGP当中
2.直接在R4上运行BGP协议,如果走R5R6,就也要在R5R6上面写BGP了
由于前面两种方法都有缺陷,所以一般在遇到路由黑洞时,使用第三个方法
3.MPLS--
为了避免路由黑洞的情况产生,BGP提出同步机制--即当一台路由器从自己的IBGP对等体学习到一条BGP路由时,他将不能把他通告给自己的EBGP对等体,除非他又从IGP协议当中学习到这条路由,这样才能允许发送出去--华为设备默认不开启
5.BGP的防环--
BGP使用的防环机制--水平分割机制
分为两种
EBGP水平分割--一种专门应用在EBGP对等体之间的,用来解决EBGP对等体之间可能出现的环路问题
这种情况下,R1将信息给R3,R3将信息给R2,R2在将消息给R1,R1也会学习R2发送的信息
这样就形成环路了
所以为了防止环的产生
有
BGP协议将在路由条目中记录所经过得到AS编号--AS_PATH--记录AS路径上的一个属性(这个属性除了可以接收到 )
--接收到的BGP路由条目中,其中的AS_PATH属性中国,若存在本地的AS号,则拒绝接收
IBGP水平分割--一种专门应用在EBGP对等体之间的,用来解决EBGP对等体之间可能出现的环路问题
当一个路由器从一个IBGP对等体处学习到某条BGP路由时,他将不能在这调路由信息通告给其他的IBGP对等体信息--但是可以分给其他的EBGP对等体
因为IBGP水平分割的限制,导致IBGP对等体之间的路由信息,只能传递一跳,这种情况下,可能会造成通信障碍,解决方案是
1.构建全连的IBGP对等体关系---这样的方法弊端在于1.全连建邻可能会导致资源消耗增加2.可能会导致网络的可拓展性降低
2.路由反射器
3.联邦