前言
BGP运行在TCP上,采用TCP179端口,BGP是唯一设计用于处理互联网规模的网络协议,也是唯一可以很好地处理与不相关路由域的多个连接的协议,BGP系统的主要功能是与其他BGP系统交换网络可达性信息,此网络可达性信息包括可达性信息经过的自治系统(AS)列表中的信息,此信息足以构建AS连接图,从中可以修剪路由环路,并可以实施AS级别的一些策略决策
一、BGP概述
1、BGP介绍
边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议,早期发布的三个版本分别是BGP-1(RFC1105)、BGP-2(RFC1163)和BGP-3(RFC1267),1994年开始使用BGP-4(RFC1771),2006年之后单播IPv4网络使用的版本是BGP-4(RFC4271),其他网络(如IPv6等)使用的版本是MP-BGP(RFC4760),MP-BGP是对BGP-4进行了扩展,来达到在不同网络中应用的目的,BGP-4原有的消息机制和路由机制并没有改变,MP-BGP在IPv6单播网络上的应用称为BGP4+,在IPv4组播网络上的应用称为MBGP(Multicast BGP)
AS是指在一个实体管辖下的拥有相同选路策略的IP网络,BGP网络中的每个AS都被分配一个唯一的AS号,用于区分不同的AS,AS号分为2字节AS号和4字节AS号,其中2字节AS号的范围为1至65535,4字节AS号的范围为1至4294967295,支持4字节AS号的设备能够与支持2字节AS号的设备兼容
2、BGP的起源
为方便管理规模不断扩大的网络,网络被分成了不同的自治系统,1982年,外部网关协议EGP(Exterior Gateway Protocol)被用于实现在AS之间动态交换路由信息,但是EGP设计得比较简单,只发布网络可达的路由信息,而不对路由信息进行优选,同时也没有考虑环路避免等问题,很快就无法满足网络管理的要求,而BGP就是为取代最初的EGP而设计的另一种外部网关协议,不同于最初的EGP,BGP能够进行路由优选、避免路由环路、更高效率的传递路由和维护大量的路由信息,虽然BGP用于在AS之间传递路由信息,但并不是所有AS之间传递路由信息都需要运行BGP,比如在数据中心上行的连入Internet的出口上,为了避免Internet海量路由对数据中心内部网络的影响,设备采用静态路由代替BGP与外部网络通信
3、BGP作用
BGP从多方面保证了网络的安全性、灵活性、稳定性、可靠性和高效性
- BGP采用认证和GTSM的方式,保证了网络的安全性
- BGP提供了丰富的路由策略,能够灵活的进行路由选路
- BGP提供了路由聚合和路由衰减功能用于防止路由振荡,有效提高了网络的稳定性
- BGP使用TCP作为其传输层协议(端口号为179),并支持BGP与BFD联动、BGP Tracking和BGP GR,提高了网络的可靠性
4、BGP的特点
① BGP是一种外部网关协议(EGP),与OSPF、RIP等内部网关协议(IGP)不同,其着眼点不在于发现和计算路由,而在于在AS之间选择最佳路由和控制路由的传播
② BGP使用TCP作为其传输层协议,提高了协议的可靠性
- BGP进行域间的路由选择,对协议的稳定性要求非常高,因此用TCP协议的高可靠性来保证BGP协议的稳定性
- BGP的对等体之间必须在逻辑上连通,并进行TCP连接,目的端口号为179,本地端口号任意
③ BGP支持无类别域间路由CIDR(Classless Inter-Domain Routing)
④ 路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息
⑤ BGP是一种距离矢量(Distance-Vector)路由协议
⑥ BGP从设计上避免了环路的发生
- AS之间:BGP通过携带AS路径信息来标记途经的AS,带有本地AS号的路由将被丢弃,从而避免了域间产生环路
- AS内部:BGP在AS内学到的路由不再通告给AS内的BGP邻居,避免了AS内产生环路
⑦ BGP提供了丰富的路由策略,能够对路由实现灵活的过滤和选择
⑧ BGP提供了防止路由振荡的机制,有效提高了Internet网络的稳定性
⑨ BGP易于扩展,能够适应网络新的发展
5、BGP的分类和区别
(1)分类
BGP按照运行方式分为EBGP(External/Exterior BGP)和IBGP(Internal/Interior BGP)
- EBGP:运行于不同AS之间的BGP称为EBGP,为了防止AS间产生环路,当BGP设备接收EBGP对等体发送的路由时,会将带有本地AS号的路由丢弃
- IBGP:运行于同一AS内部的BGP称为IBGP,为了防止AS内产生环路,BGP设备不将从IBGP对等体学到的路由通告给其他IBGP对等体,并与所有IBGP对等体建立全连接,为了解决IBGP对等体的连接数量太多的问题,BGP设计了路由反射器和BGP联盟
(2)区别
- EBGP在不同的AS号之间建立BGP关系,而IBGP与相同的AS号建立BGP关系
- 从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体
- 从EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体
6、BGP报文交互中的角色
BGP报文交互中分为Speaker和Peer两种角色
- Speaker:发送BGP报文的设备称为BGP发言者(Speaker),它接收或产生新的报文信息,并发布(Advertise)给其它BGP Speaker
- Peer:相互交换报文的Speaker之间互称对等体(Peer),若干相关的对等体可以构成对等体组(Peer Group)
7、BGP的路由器号(Router ID)
BGP的Router ID是一个用于标识BGP设备的32位值,通常是IPv4地址的形式,在BGP会话建立时发送的Open报文中携带,对等体之间建立BGP会话时,每个BGP设备都必须有唯一的Router ID,否则对等体之间不能建立BGP连接
8、BGP的报文
BGP对等体间通过以下5种报文进行交互,其中Keepalive报文为周期性发送,其余报文为触发式发送
- Open报文:用于建立BGP对等体连接
- Update报文:用于在对等体之间交换路由信息
- Notification报文:用于中断BGP连接
- Keepalive报文:用于保持BGP连接
- Route-refresh报文:用于在改变路由策略后请求对等体重新发送路由信息,只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文
9、BGP状态机
BGP对等体的交互过程中存在6种状态机:空闲(Idle)、连接(Connect)、活跃(Active)、Open报文已发送(OpenSent)、Open报文已确认(OpenConfirm)和连接已建立(Established),在BGP对等体建立的过程中,通常可见的3个状态是:Idle、Active和Established
(1)Idle
Idle状态是BGP初始状态,在Idle状态下,BGP拒绝邻居发送的连接请求,只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态,任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态
(2)Connect
在Connect状态下,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接
- 如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态
- 如果TCP连接失败,那么BGP转至Active状态
- 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态
(3)Active
在Active状态下,BGP总是在试图建立TCP连接
- 如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态
- 如果TCP连接失败,那么BGP停留在Active状态
- 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态
(4)OpenSent
在OpenSent状态下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查
- 如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态
- 如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态
(5)OpenConfirm
在OpenConfirm状态下,BGP等待Keepalive或Notification报文,如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态
(6)Established
在Established状态下,BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文
- 如果收到正确的Update或Keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接
- 如果收到错误的Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至Idle状态
- Route-refresh报文不会改变BGP状态
- 如果收到Notification报文,那么BGP转至Idle状态
- 如果收到TCP拆链通知,那么BGP断开连接,转至Idle状态
10、BGP对等体之间的交互原则
BGP设备将最优路由加入BGP路由表,形成BGP路由,BGP设备与对等体建立邻居关系后,采取以下交互原则
- 从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体
- 从EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体
- 当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体
- 路由更新时,BGP设备只发送更新的BGP路由
- 所有对等体发送的路由,BGP设备都会接收
- 所有EBGP对等体在传递过程中下一跳改变
- 所有IBGP对等体在传递过程中下一跳不变
- 默认EBGP传递时, TTL值为1
- 默认IBGP传递时,TTL值为255
11、BGP的路由属性
在BGP路由表中,到达同一目的地可能存在多条路由,此时BGP会选择其中一条路由作为最佳路由,并只把此路由发送给其对等体,BGP为了选出最佳路由,会根据BGP的路由优选规则依次比较这些路由的BGP属性
路由属性是对路由的特定描述,所有的BGP路由属性都可以分为以下4类
- 公认必须遵循(Well-known mandatory):所有BGP设备都可以识别此类属性,且必须存在于Update报文中,如果缺少这类属性,路由信息就会出错
- 公认任意(Well-known discretionary):所有BGP设备都可以识别此类属性,但不要求必须存在于Update报文中,即就算缺少这类属性,路由信息也不会出错
- 可选过渡(Optional transitive):在AS之间具有可传递性的属性,BGP设备可以不支持此属性,但它仍然会接收这类属性,并传递给其他对等体
- 可选非过渡(Optional non-transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,则会被忽略该属性,且不会通告给其他对等体
12、常见的BGP路由属性
BGP常见属性类型
(1)Origin属性
Origin属性用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的,它有以下3种类型
- IGP:具有最高的优先级,通过network命令注入到BGP路由表的路由,其Origin属性为IGP
- EGP:优先级次之,通过EGP得到的路由信息,其Origin属性为EGP
- Incomplete:优先级最低,通过其他方式学习到的路由信息,比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete
(2)AS_Path属性
AS_Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号,在接收路由时,设备如果发现AS_Path列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路
当BGP Speaker传播自身引入的路由时
- 当BGP Speaker将这条路由通告到EBGP对等体时,便会在Update报文中创建一个携带本地AS号的AS_Path列表
- 当BGP Speaker将这条路由通告给IBGP对等体时,便会在Update报文中创建一个空的AS_Path列表
当BGP Speaker传播从其他BGP Speaker的Update报文中学习到的路由时
- 当BGP Speaker将这条路由通告给EBGP对等体时,便会把本地AS编号添加在AS_Path列表的最前面(最左面),收到此路由的BGP设备根据AS_Path属性就可以知道去目的地址所要经过的AS,离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列
- 当BGP Speaker将这条路由通告给IBGP对等体时,不会改变这条路由相关的AS_Path属性
(3)Next_Hop属性
Next_Hop属性记录了路由的下一跳信息,BGP的下一跳属性和IGP的有所不同,不一定就是邻居设备的IP地址,通常情况下,Next_Hop属性遵循下面的规则
- BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址
- BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址
- BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性
(4)Local_Pref属性
- Local_Pref属性表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由,当BGP的设备通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由
- Local_Pref属性仅在IBGP对等体之间有效,不通告给其他AS,Local_Pref属性可以手动配置,如果路由没有配置Local_Pref属性,BGP选路时将该路由的Local_Pref值按缺省值100来处理
(5)MED属性
- MED(Multi-Exit Discriminator)属性用于判断流量进入AS时的最佳路由,当一个运行BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由
- MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS,MED属性可以手动配置,如果路由没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理
13、BGP的选路规则
- 若去往目的网络的路由下一跳不可达,则可以忽略此路由
- Preferred-Value优先级以数值高的路由优先
- Local-Preference优先级以数值高的路由优先
- 聚合路由优先级高于非聚合路由
- 本地手动聚合路由的优先级高于本地自动聚合的路由
- 本地通过Network命令引入的路由的优先级高于本地通过import-route命令引入的路由
- AS路径长度最短(最少个数)的路径优先级高
- 比较Origin属性, IGP优先级高于EGP, EGP优先级高于Incomplete
- 选择MED优先级较小的路由
- EBGP路由优先级高于IBGP路由
- BGP优先选择到BGP下一跳的IGP度量低的路径
- 比较Cluster-List 长度,短者优先
- 比较Originator_ID ,如果没有Originator_ID,则用Router ID比较,选择数值较小的路径
- 比较对等体的IP地址,选择IP地址数值最小的路径
14、路由环路
EBGP路由撤销时,IBGP对等体之间会出现路由环路
当RouterC发送同一条路由给它的EBGP邻居RouterA和RouterB,根据BGP选路规则从EBGP收来的路由会发给他的IBGP邻居的,所以RouterA会把从RouterC收来的路由发给它的IBGP邻居RouterB,并且RouterB也会把从RouterC收来的邻居发给它的IBGP邻居RouterA,根据选路规则RouterA和RouterB上都会优选自己从RouterC收来的路由,这样在RouterA和RouterB上分别会有两条相同前缀的路由:一条是自己从RouterC上收来的路由,一条是从IBGP邻居学习来的路由
当RouterC撤销此路由的时候,RouterA和RouterB上会收到RouterC发的一个withdraw报文,在路由表完成收敛之前,RouterA和RouterB就会根据选路规则把从对端收来的路由变成优选路由,这样,在RouterA和RouterB之间可能会产生短暂的路由环路
这个路由环路的产生会占用一定的网络带宽,有可能有造成短时间的网络拥塞,但通常情况下,路由在1S之内就可以完成收敛,对用户业务影响不大
二、BGP配置
1、案例
通过配置BGP和修改BGP属性,实现R1到R7的路径为R1->R2->R4->R5->R7,R7到R1的路径为R7->R6->R4->R3->R1
2、配置过程
(1)AR1
(2)AR2
(3)AR3
(4)AR4
(5)AR5
(6)AR6
(7)AR7
3、测试
(1)AR1
(2)AR2
结语
BGP是为了在AS之间更高效率的传递路由和维护大量的路由而产生的一个外部网关协议,BGP作为事实上的Internet外部路由协议标准,被广泛应用于ISP(Internet Service Provider)之间