BGP基础知识
Posted 傲然*
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BGP基础知识相关的知识,希望对你有一定的参考价值。
文章目录
BGP介绍
边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的路径矢量路由协议。目前在IPV4环境下主要使用BGPV4,目前市场上也存在BGPV4+,BGPV4+在BGPV4的基础上支持多个地址族,如IPv6。
BGP协议本身不产生路由,而是转发本地路由表中来自其他协议生成的路由条目;AS之间正常存在大量的BGP邻居关系,且BGP协议不会计算最佳路径;因此在BGP协议中管理员需要进行策略来干涉选路
AS-自治系统
- AS(自治系统),由单一的机构或组织所管理的一系列IP网络及设备所构成集合。
- 划分AS的原因:1.整个地球上的网络范围太大,单个网络收敛很慢且网络延迟大;2.每个网络可能是某个组织或公司组建的,他们并不想将自己辛苦组建的网络交给别人管理,所以需要自治管理
- 为了方便对自治系统进行管理,给每一个自治系统设计了一个号,即AS号。AS号由16位二进制构成,取值范围:0 - 65535,其中1 - 64511号为公有AS号, 64512 - 65534被设定为私有AS号。
- 因为传统的AS号存在不够用的情况,所以,目前大部分设备均支持拓展的AS号,由32位二进制构成。中国由于加入互联网较晚,所以中国的AS号大多都是扩展AS号。
BGP原理概述
想要AS之间互相通信,我们可以使用重发布,通过重发布将AS的路由信息导入到其他AS以达到AS间的互通,和重发布类似,BGP也是通过发送AS的路由信息以实现全网可达。那为什么AS间更多的是使用BGP而不是重发布呢?
BGP和重发布的区别
-
重发布要求AS间需要有ASBR,ASBR同时具有两个AS的路由信息,通过ASBR实现路由共享;而BGP是没有ASBR的,由于AS是自治系统,如果有ASBR,那这个ASBR归谁管理?如果只归一方管理,那他可以通过路由策略提高自己AS的流量的转发速度,所以BGP是AS间各出一个或多个运行BGP的路由器,让这些运行BGP的路由器建立邻居关系后交换路由信息。
-
重发布在导入路由时会洗掉开销值,会造成选路不佳的问题,而BGP具备强大的路由策略,BGP为路由信息设计了路径属性,通过属性进行选路,是的选路过程更加灵活,可控性更高。
BGP特性
-
BGP协议是无类别的路径矢量协议。无类别即BGP在传递路由时会携带子网掩码;路径矢量,不同与距离矢量,路径矢量是以一个AS为单位,而距离矢量是以一个路由为单位,距离矢量是一种路由算法,而BGP不需要计算路由,它只需将以计算好的路由传递给了邻居即可。
-
我们对IGP(内部网关协议)和EGP(外部网关协议)的要求不同,IGP需要在一个AS内计算路由,所以我们要求IGP选路佳、收敛快、占用资源少;而EGP不同,EGP协议只需传递AS以计算好的路由,所以我们对EGP的可控性、可靠性要求更高。
-
EGP的追求:可控性: AS之间需要传递大量的路由信息,所谓可控,就是可以更方便的干涉选路,更容易做策略,以弥补重发布的不足。为了保证路由传递的可控性,更方便干涉选路,BGP协议舍弃了开销值,取而代之的是他为路由信息设计了很多路径属性。可以通过属性进行选路,是的选路过程更加灵活,可控性更高。
-
EGP的追求:可靠性:BGP协议设备间需要交互大量的路由条目,但又不能选择周期更新来占用链路资源,故只能进行触发更新;又为了保证传输的可靠性,直接选择TCP协议作为传输层的协议来完成数据收发,使用的是TCP 179号端口。但使用TCP协议通讯也会造成一些问题,传输效率降低,只能单播通讯(TCP需要去建立会话),占用资源会加大 ,用TCP之后,便不能通过广播或者组播去自动发现邻居进行通信了。
-
由于BGP依靠TCP协议传输数据,BGP协议可以实现非直连建邻,非直连建邻的前提条件是邻居双方网络可达, BGP的非直连建邻是建立在IGP的基础上。
-
BGP的邻居更准确的说是BGP的对等体,我们可以根据邻居关系的建立情况,将BGP的邻居关系分为两种:
-
因为EBGP对等体之间一般采用直连建邻的方法,所以,我们将EBGP对等体之间的数据包中的TTL值设置为1;而IBGP对等体之间往往需要非直连建邻,所以,IBGP对等体之间的数据报中的TTL值我们设置为255;当然,如果EBGP对等体之间需要非直连建邻,则需要手工修改TTL值。
-
EGP的追求::AS-BY-AS:BGP将一个AS作为一个单位来看待,以一个AS为一跳,
BGP特点总结
- 无类别路径矢量 -----距离矢量的升级版—AS–BY–AS
- 使用单播更新来发送所有信息;基于TCP 179端口工作
- 增量更新,仅触发更新,无周期更新
- 具有丰富的属性来取代IGP中度量进行选路,有多个参数控制协议
- 可以在进项和出项对流量实施强大的策略,可控性非常强大
- 默认不被用于负载均衡-----通过各种选路规则仅仅产生一条最佳路径
- BGP支持认证和聚合(将现有的IP地址合并成较大的、具有更多主机地址的路由域)
BGP的数据包
BGP协议中所有的数据包均需要在tcp会话建立后,基于TCP的会话来进行传输及可靠性的保障。
Open包
Open包主要用来建立邻居关系,正常进收发一次即可,Open包会携带一些建邻需要协商的参数,邻居互相认同对方的参数才可以建立邻居关系。以下为Open包会携带的一些参数:
- AS号:在手工建立邻居关系需要时声明邻居的AS号。对端收到后会检查声明的AS号是否和本地的AS号一致,一致才可以建立邻居关系。
- 认证:BGP在建邻时如果做认证的话,需要比对双方认证口令,不一致则无法建立邻居关系。
- Router-ID:主要区分和标定路由器。OPEN报文中携带RID的目的是为了确保双方的RID不一致。确保其唯一性,如果相同,则无法正常建立邻居关系。
这里的RID和OPSF的格式一致,也是由32位二进制构成,并且遵循IP地址的格式。也可以通过两种方法获取,一种是手工配置;另一种是自动获取(先在自己路由器的环回接口中选择最大的IP地址作为RID,如果没有环回接口,则在自己物理接口中选择IP地址最大的作为RID)。
注意:在接收邻居数据包时,其中的源IP地址和手工指定的邻居的IP地址一致才可以正常建立邻居关系。
- holdtime:保活时间, 这个参数默认值为 180S,即180S内若收不到对方发送的keeplive或者UPdate包则将判定BGP链接中断。双方建邻时携带这个值,但是并不要求必须相同。但是,执行时必须相同,所以,将会选择二者中较小的作为执行时间
keeplive包
- 用来保活邻居关系,默认周期1min查询邻居关系是否存在;实际保活TCP会话。
- Keeplive报文的发送周期为保活时间(hold time)的1/3,保活时间默认为180S,则周期发送时间默认为60S。
- KeepLive包还有一个作用:在收到对方发送的OPEN报文后,临时充当确认包的作用。
TCP本身具有确认机制,可以确保传输的可靠性,这里的确认主要是确认OPEN报文中携带的参数,如果认同对方的参数,则将回复Keeplive包进行确认。
Update包
- BGP中的更新包,用来携带路由条目,包括目标网段,子网掩码信息以及BGP的各种属性
- 在UPdate包中存在撤销路由字段,我们可以直接将不可达的路由信息放在该字段下进行通告,以达到传递失效信息的目的。而不需要像RIP那样采用带毒传输的方式。
Notification包
- BGP设计的一个告警机制,出现错误数据时收发,当BGP检测到一个错误的时候,将会用这个包进行告警,告知对端错误点在哪
Route-refresh包
- 用于改变路由策略后请求对等体重新发送路由信息,前提是对等体双方均支持路由刷新
BGP的状态机
BGP的状态机仅描述BGP对等体建立过程中的状态变化。因为BGP可以做到建立邻居关系和发布路由分开完成。
- idle状态:空闲状态,一旦指定邻居,就处于idle状态,然后BGP会首先检查指定的IP地址在本地路由表中是否可达,如果可达,则开始尝试建立TCP会话,进入下一个状态;如果不可达,则将停留在idle状态
- connect状态: 进行TCP会话连接的状态。如果TCP会话建立成功,则进入下一个状态;如果TCP会话建立失败,则进入Active状态,该状态会反复尝试TCP连接,如果尝试超时,则放弃重连,退回到idle状态。
注意:在建立TCP会话连接时,双方都会尝试建立连接,一方建立成功,则将创建一个双向的TCP会话通道;双方都建立成功,则将会出现两个双向通道。则需要关闭一个TCP通道。后面开始发送OPEN报文,其中会携带RID,双方将比较RID,仅保留RID大的一端发起的TCP连接,RID小的一端发起的TCP连接通道将被断开。
- OpenSent: 开始发送OPEN报文,报文中携带建立邻居关系所需的参数。当收到对端发送的OPEN报文后,并且报文里的参数没有问题,则将回复一个keeplive作为确认,进入下一个状态;
- OPENConfirm:在该状态,本段在等待对端keeplive包,当对端收到本端的Open报文且确认参数无误,发送keeplive包进行确认进入下一个状态。
- Established : 建立完成状态 ,标志着对等体关系的建立。
BGP的工作过程
- 配置完成后,邻居间单播TCP三次握手,目标端口179,建立TCP的会话;之后所有的BGP协议数据包基于该会话进行传输
- 会话建立后,邻居间正常收发一次open报文,并互发keeplive包进行确认建立BGP的邻居关系,并生成邻居表
- 邻居关系建立后,默认每1min,使用keeplive周期保活邻居关系,周期保活TCP会话
- 邻居关系建立后,管理员选择性将本地路由表中通过任意来源获取的路由条目,向BGP协议中进行宣告;使用updata数据包进行邻居间路由共享;之后生成BGP表;
- 本地对BGP表中的路由进行选择,默认将最优路径加载于路由表中(最优-仅仅基于BGP的选路规则,不一定为最佳路径;BGP默认不支持负载均衡)
- 若出现错误信息,邻居间将使用Notification报文进行报错操作
- 收敛完成,仅keeplive周期保活即可,默认保活时间为180S,周期发送时间为60S。
- 若发生结构突变,则将直接发送UPdate报文进行触发更新。
BGP的路由黑洞
- AS间通过EBGP对等体交换路由信息,然后通过单播将获取到的路由信息发送给IBGP对等体,使AS所有运行BGP的设备拥有了所有AS的路由信息,如下:R3从R1学到AS100的1.0.0.0/8的路由信息,然后通过单播传给R7,R7传给R2,所有AS内运行BGP的路由器都学到了1.0.0.0/8的路由信息
- 矢量协议的特点是谁发给我这条路由,我到这条路由就找谁,如果R7想ping1.0.0.0/8,那R7就会将ping包发送给R3,由R3转发。在R7发送ping包时,它首先查看路由表查找R3的位置,假设R7通过R4找R3,那R7就会将ping包发给R4,当这个ping包来到R4上,R4看二层是找自己的,解封装看三层,发现这个ping包的DIP为1.0.0.0/8网段的,但R4上没有运行BGP,没有收到关于1.0.0.0/8网段的路由信息,所以R4就会把这个ping包丢弃,虽然R7上有1.0.0.0/8的网段路由信息,但无法与R1通信,这就是BGP的路由黑洞。
- BGP的路由黑洞:由于BGP协议可以非直连建邻,故可能出现BGP协议跨越未运行BGP协议的路由器,导致BGP路由传递后,显示控制层面可达,但是,数据层面,流量经过未运行BGP协议的路由器时,无法通过,形成路由黑洞。
解决路由黑洞
-
AS内的设备全部运行BGP:既然路由黑洞是未运行BGP协议的路由器导致的,那就让AS内所有的设备都运行BGP获取路由信息。但这个方法是不现实的,可以承载越多路由信息的路由器其价格也就越昂贵,每一台运行BGP的路由器需要承载所有AS的路由信息,可以承载世界上几万几十万的路由信息的路由器价格也是上百万的,所以,是不可能让AS内的设备拥有全部路由信息的。
-
AS内运行BGP的设备将从BGP重发布到AS内运行的IGP协议里:通过重发布将BGP所有路由导入到IGP协议里,同样需要AS内所有设备可以承载所有AS的路由信息,同第一条一样不现实。
-
物理、逻辑拓扑全连:直接让AS内运行BGP协议的所有设备互相连接,使IBGP间通信不需要经过未运行BGP协议的设备,但由一个AS地理范围可能很大,IBGP间距离较远,所以使用真实链路连接IBGP也不现实,所以我们可以用GRE/MGRE等vpn技术,通过虚拟链路连接IBGP对等体
-
MPLS:当前工程中主要使用的解决BGP路由黑洞方案,MPLS后续会讲。
BGP为了防止BGP路由黑洞的产生,提出了BGP同步机制:即当一台路由器从自己IBGP对等体学习到一条BGP路由时,他不能将这条路由通告给自己的EBGP对等体,除非他又从IGP协议中(包含静态路由)学习到这条路由。也就是要求IBGP路由和IGP路由同步。
同步要求将BGP路由重发布到IGP协议中,但我们已经说过这种方法并不现实,所以华为设备默认关闭同步机制。
注意:在目前我们的学习情况下,我们在做BGP实验时都是用第一种方法解决路由黑洞
BGP的防环机制—水平分割
EBGP水平分割
- 下图中有三个AS,其中AS:1的一条路由信息传给了AS:2,AS:2将这条路由信息传给AS:3,如果AS:3又将这条路由信息传回给AS:1且AS:1将这条路由信息加表,就会导致路由环路。
- BGP协议在路由条目中有一条专门记录所经过的AS编号的路径属性,在上图中AS:1发出的路由信息会携带编号1,AS:2将这条路由信息转发给R3时,添加编号2;AS:3将这条路由信息转发给AS:1时,也会添加编号3;最终AS:1收到这条路由信息的AS_PATH属性记录了1、2、3,R1发现该属性中有自己的编号则拒绝接受这条路由信息,避免环路产出。
IBGP水平分割
-
下图在AS:64513内,R2、R3、R4两两建邻,如果R2发布一条路由信息由R4到R3,再到R2,并且R3转发给R2的路由信息改变了R2的路由表,则会形成环路。
-
因为BGP的AS-BY-AS的特性,导致AS内部被认为是一个整体,在默认情况下,路由的属性是不会发生变化的,所以,无法通过属性来进行防环。
-
IBGP水平分割:当一个路由器从一个IBGP对等体出学习到某一条BGP路由时,他将不再把这条路由信息通告给其他的IBGP对等体。
-
IBGP水平分割可以有效的解决IBGP对等体之间路由回传造成的环路问题,但是,也会引发路由信息传递障碍问题。如下图中,如果R1学到其他AS的路由信息,它会将这些路由信息传递给R2,但由于IBGP水平分割,R2不能将这些路由信息传递给R3,R3就无法获取R1收集到的路由信息。
-
想要避免IBGP水平分割带来的问题,可以让所有AS内部运行BGP的路由器均建立IBGP对等体关系, 这种建立全连的IBGP对等体的方案并不是最佳解决方案,因为,当一个AS内运行BGP协议的路由器数量较多时,建立全连的邻居关系,将造成大量的资源浪费,并且降低网络的可扩展性。
-
BGP存在两个技术专门用于解决IBGP水平分割带来的问题:1.路由反射器,2.联邦。
BGP基本配置
EBGP对等体直连建邻
- 启动BGP进程,1 指的时该路由器所在的AS号;因为一个路由只能属于一个AS中,所以一个路由器只能启动一个BGP进程
[r1]bgp 1
[r1-bgp]
- 配置RID,BGP要求邻居间的RID不能相同,可以手工配置,也可以自动获取
[r1-bgp]router-id 1.1.1.1
- 指定建邻的IP地址和邻居所在的AS的编号,指定邻居IP后,如果该邻居可达,则尝试建立TCP会话。
[r1-bgp]peer 12.0.0.2 as-number 2 -- #邻居关系指定是双向的
IBGP对等体环回建邻
- 由于,IBGP邻居处于同一个AS中,正常一个AS中存在大量的备份路径,若使用物理接口建立邻居关系,将浪费这些备份或者负载均衡的路径;故建议使用环回接口来进行IBGP对等体关系的建立。
[r2-bgp]peer 3.3.3.3 as-number 2 --- #指定建邻的IP地址和邻居所在的AS的编号
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0 ---- #指定发送给邻居的数据包的源IP为该接口的IP
- 由于邻居在收到数据包时,会检测该包的源IP和本地指定的邻居IP是否相同,不同则无法建邻。所以一旦使用环回地址作为建邻地址,同时需要修改源IP地址未本地环回地址。
EBGP对等体环回建邻
- EBGP间使用环回建邻首先要有一条路由可以去往邻居的环回,一般我们使用静态路由
[r1]ip route-static 2.2.2.2 32 12.1.1.2
- 因为EBGP对等体之间一般采用直连建邻的方法,所以,EBGP对等体之间的数据包中的TTL值设置为1,这意味着R1只能与R2的g 0/0/0口通信而不能与R2的环回通信,所以使用EBGP对等体环回建邻时需要修改数据报的TTL值。
[r1-bgp]peer 2.2.2.2 ebgp-max-hop 2 --- #将发往该邻居的数据包的ttl值修改为2
[r1-bgp]peer 2.2.2.2 ebgp-max-hop ---- #后面不加数字,相当于将TTL值改为最大值,255。
总结:再建立对等体关系时,建议EBGP对等体间直连建邻;IBGP对等体间建议使用环回接口进行建邻。
BGP基础
BGP基础
BGP是应用于自治系统间的路由协议(注意此处的自治系统是指使用同一个路由协议的网络集合,要跟OSPF、EIGRP的进程号等加以区分),通过使用BGP,我们可以将使用不同路由协议的自治系统连接起来,组成一个更大的网络,虽然这个功能使用重分发也可以实现,但是使用BGP,一方面可以简化路由表,另一方面让我们可以精确的控制路由条目。下面的一些简单说明也许能让你更加清晰的理解BGP。
一、基础要点
通常在AS(自治系统)内部运行某种IGP协议,用于AS内部的路由学习和管理;而在AS的边界运行BGP,用于AS之间交换路由信息。借助BGP,各AS可以独立选择自己适合的IGP协议,并通过BGP来获得其它AS的路由信息。
自治系统号是一个16位的数字,
取值范围是1-65535
私有自治系统号:64512-65535(互联网不可用,一般在ISP边界把这样的自治系统号过滤掉)
自治系统内部使用IGP,自治系统之间使用BGP
BGP的工作方式类似于距离矢量路由协议,但邻居通告过来的不是距离,而是一系列复杂的属性值。称为路径矢量路由协议
BGP属于EGP(外部网关路由协议)
跨越ISP进行通信可使用:帧中继、MPLS VPN、静态路由、BGP
一个自治系统内的路由器想通过明细路由条目到达另一个自治系统时使用BGP
BGP是基于IGP的,BGP并不是直接建立邻居关系,而是跨越IGP建立一条逻辑链路。所以一定要确保建立邻居关系时所使用的IP地址互相可达
基于TCP 179 端口号,属于应用层协
BGP发送任何报文只能通过单播
二、企业与ISP之间的连接关系
企业到运营商(ISP)连接选项:单宿、双宿、多宿、双多宿:
单宿:
连接到一个ISP,并且只有一条链路与之连接
使用默认路由
使用BGP:客户端向ISP通告其共有网络,ISP向客户通告一条默认路由
双宿:
到同一个ISP有两条链路链接
可以使用一个或者两个企业边界路由器
可以使用静态路由或者BGP
多宿
连接到两个或者两个以上不同的ISP
可使用单个或多个企业边界路由器
使用BGP
双多宿
连接两个或者两个以上不同的ISP,并且到每个ISP有两条链路
使用多个企业边界路由器,每个路由器连接一个不同的ISP
使用BGP
三、关于BGP使用的几点说明
单链路使用默认路由,多链路使用BGP
不同自治系统之间运行BGP时,称为外部BGP(EBGP);同一自治系统内路由器之间运行BGP时,称为内部BGP(IBGP)
EBGP:
保证无环路
基于策略的路由选择
BGP支持任何遵守逐跳路由模式的策略
什么时候使用BGP:
中转自治系统
自治系统是多宿主的
必须对自治系统间的路由选择进行控制
本文出自 “丶Adrenaline” 博客,请务必保留此出处http://lizitong.blog.51cto.com/12914119/1942137
以上是关于BGP基础知识的主要内容,如果未能解决你的问题,请参考以下文章