13 BGP协议原理及配置BGP协议原理24.docx
《13 BGP协议原理及配置BGP协议原理24.docx》由会员分享,可在线阅读,更多相关《13 BGP协议原理及配置BGP协议原理24.docx(22页珍藏版)》请在冰豆网上搜索。
13BGP协议原理及配置BGP协议原理24
BGP协议原理及配置(BGP协议原理)
课程目标:
●掌握BGP的基本原理
第1章BGP协议原理
1.1BGP基本概念
因特网,在20世纪60年代末还只是一个小规模的实验网,也就是DARPA(美国国防部的高级研究项目管理局)。
随着研究机构、学院和政府加入,形成了最早的ARPANET。
后来,美国国家科学基金会又开发了NSFNET(1995年4月停用)。
发展到现在,因特网成为世界上规模最大用户最多的网络。
出于管理和扩展的目的,当前的国际互联网是由许多个具有独立管理机构及选路策略的自治系统(AS)汇集而成。
BGPv4(BordergatewayprotocolVersion4)——边界网关协议(定义于RFC1771),是现行因特网的实施标准,它是用来连接自治系统,实现自治系统间的路由选择功能的。
1.1.1IGP与BGP
所有的路由选择协议可以被分成IGP(内部网关协议)和EGP(外部网关协议)两种。
要了解IGP和EGP的概念,应该首先了解自治系统(AS)的概念。
传统的AS定义(RFC1771):
自治系统(AS)是单一管理机构下的路由器的集合,它们使用一种内部网关协议和一致的度量标准来对数据包进行AS内部的路由,而使用外部网关协议对接收或发出到其它AS的路由进行过滤或者配置策略。
发展到现在,已经允许并且时常采用在一个自治系统AS中使用多个内部网关协议,甚至多个路由选择的度量标准。
所以,现在的自治系统被扩展的定义为:
共享同一路由选择策略的一组路由器。
IGP(Interiorgatewayprotocols)——内部网关协议,定义为在一个自治系统内部使用的路由协议(包括动态路由协议和静态路由)。
IGP的功能是完成数据包在AS内部的路由选择。
RIPv1&v2,OSPF,ISIS都是典型的IGP。
EGP(Exteriorgatewayprotocols)——外部网关协议,定义为在多个自治系统之间使用的路由协议。
它主要完成数据包在AS间的路由选择。
BGP4就是一种EGP。
IGP只作用于本地AS内部,而对其他AS一无所知。
它负责将数据包发到主机所在的网段(segment)。
EGP作用于各AS之间,它只了解AS的整体结构,而不了解各个AS内部的拓扑结构。
它只负责将数据包发到相应的AS中,其他工作便交给IGP来做。
每个自治系统AS都有唯一的标识,称为AS号(ASnumber),由IANA(InternetAssignedNumbersAuthority)来授权分配。
这是一个16位的二进制数,范围为1~65535,其中65412~65535为AS专用组(RFC2270),不在Internet上传播。
类似于IP地址中的私有地址。
BGP-4是典型的外部网关协议,是现行的因特网实施标准。
它完成了在自治系统AS间的路由选择。
可以说,BGP协议是当代整个Inetnet的支架。
BGP经历了4个版本:
RFC1105(BGP-1),RFC1163(BGP-2),RFC1267(BGP-3),RFC1771(BGP-4),并且还涉及其他很多的RFC文档。
在RFC1771新版本中,BGP开始支持CIDR(Classlessinterdomainsrouting)和AS路径聚合,这种新属性的加入,可以减缓BGP表中条目的增长速度。
支持IPV6的BGP版本是BGP4+,标准是RFC2545。
1.1.2BGP的特征
BGP是用来在自治系统之间传递选路信息的路径向量协议。
这里的路径向量是指BGP选路信息中携带的AS号码序列,此序列指出了一条路由信息通过的路径,同时它能够有效的控制路由循环。
BGP是用来完成AS之间的路由选择的,BGP路由信息中携带有其经过的AS号码序列,此序列指出了一条路由信息通过的路径,它能够有效的控制路由循环。
每一个AS可以看作一个跳度,所以我们称BGP协议是一种距离矢量(Distancevector)的路由协议,但是比起RIP等典型的距离矢量协议,它又有很多增强的性能。
BGP使用TCP作为传输协议,使用端口号179。
在通信时,要先建立TCP会话,这样数据传输的可靠性就由TCP协议来保证,而在BGP的协议中就不用再使用差错控制和重传的机制,从而简化了复杂的程度。
另外,BGP使用增量的、触发性的路由更新,而不是一般的距离矢量协议的整个路由表的、周期性的更新,这样节省了更新所占用的带宽。
BGP还使用“保活”消息(Keepalive)来监视TCP会话的连接。
而且,BGP还有多种衡量路由路径的度量标准(称为路由属性),可以更加准确的判断出最优的路径。
BGP工作流程如下:
首先,在要建立BGP会话的路由器之间建立TCP会话连接,然后通过交换OPEN信息来确定连接参数,如运行版本等。
建立对等体连接关系后,最开始的路由信息交换将包括所有的BGP路由,也就是交换BGP表中所有的条目。
初始化交换完成以后,只有当路由条目发生改变或者失效的时候,才会发出增量的触发性的路由更新。
所谓增量,就是指并不交换整个BGP表,而只更新发生变化的路由条目;而触发性,则是指只有在路由表发生变化时才更新路由信息,而并不发出周期性的路由更新。
比起传统的全路由表的定期更新,这种增量触发的更新大大节省了带宽。
路由更新都是由UPDATE消息来完成。
1.1.3对等体
建立了BGP会话连接的路由器被称作对等体(peersorneighbors),对等体的连接有两种模式:
IBGP(InternalBGP)和EBGP(ExternalBGP)。
IBGP是指单个AS内部的路由器之间的BGP连接,而EBGP则是指AS之间的BGP连接。
1.1.3.1EBGP
BGP是用来完成AS之间的路由选择的,这种在不同AS之间建立的BGP连接,称为EBGP连接。
EBGP连接的路由器一般是物理直接相连,也有少数情况下存在非物理直接相连的特殊情况。
对于EBPG的使用,在路由器配置的时候,需要特别注意。
因为缺省情况下,路由器对于EBGP通信的BGP协议数据包的TTL值设置为1。
必要时需要更改其TTL值的设置。
1.1.3.2IBGP
IBGP是用来在AS内部完成BGP更新信息的交换。
虽然这种功能也可以由“重分布”(Redistribution)技术来完成—将EBGP传送来的其他AS的路由“再分布”到IGP中,然后将其“再分布”到EBGP传送到其他AS。
但是这样丧失了BGP路由条目的丰富的属性,失去了BGP进行路由选择和策略控制的元素。
因此,使用IBGP连接把不同AS的路由进行传递。
IBGP的功能是维护AS内部连通性。
BGP规定,一个IBGP的路由器不能将来自另一IBGP路由器的路由发送给第三方IBGP路由器。
这也可以理解为通常所说的Split-horizon规则。
当路由器通过EBGP接收到更新信息时,它会对这个更新信息进行处理,并发送到所有的IBGP及余下的EBGP对等体;而当路由器从IBGP接收到更新信息时,它会对其进行处理并仅通过EBGP传送,而不会向IBGP传送。
所以,在AS中,BGP路由器必须要通过IBGP会话建立完全连接的网状连接,以此来保持BGP的连通性。
如果没有在物理上实现全网状(fullmeshed)的连接,就会出现连通性上的问题。
为避免完全网状连接的复杂性,应运而生了路由反射器和联盟等相关技术。
与传统的内部路由协议相比,BGP还有一个独特的特性,就是使用BGP的路由器之间,可以被未使用BGP的路由器隔开。
这是因为BGP使用TCP协议进行工作,只要2台路由器直接能够建立TCP连接即可,所以进行BGP会话连接的路由器能被多个运行内部路由协议的路由器分开,不过要确保相关IGP协议的正常工作,使得BGP路由器之间的TCP连接的路由通畅。
1.2BGP报文类型与连接状态
1.2.1BGP消息类型
BGP消息有四种类型:
OPEN,UPDATE,NOTIFICATION和KEEPALIVE,分别用于建立BGP连接,更新路由信息,差错控制和检测可到达性。
BGP报文的报头格式相同,均由19个字节组成。
16个字节的标记字段,2个字节的长度字段和1字节的类型字段。
下图表示了BGP报文报头的基本格式。
16bytes
2bytes
1byte
标记字段
报文长度
报文类型
标记字段用来鉴别进入的BGP报文或用来检测两个BGP对等体之间同步的丢失。
标记字段在OPEN报文中或无鉴别信息的报文中必须置为“1”,在其他情况下将作为鉴别技术的一部分被计算。
长度指整个BGP报文包括报头在内的总长度,长度值在19到4096之间。
对于KEEPALIVE报文而言,其没有具体报文内容,所以长度始终为19个字节。
类型用来指示报文类型,分为以下四种:
1.OPEN
2.UPDATE
3.NOTIFICATION
4.KEEPALIVE
1.2.1.1BGP建立消息
OPEN消息是在建立TCP连接后,向对方发出的第一条消息,它包括版本号、各自所在AS的号码(ASNumber)、BGP标识符(BGPIdentifier)、协议参数、会话保持时间(Holdtimer)以及可选参数、可选参数长度。
下图列出了OPEN报文的格式。
1byte
2bytes
2bytes
4bytes
1byte
可变长度
版本号
我的自治系统
保持时间
BGP标识符
可选参数长度
可选参数
版本号:
1字节无符号整数,它表示BGP协议的版本BGP-4。
在BGP对等体磋商时,对等体之间都试图使用彼此都支持的最高版本。
在BGP对等体版本已知的情况下,通常使用静态设置版本,缺省就是BGP4。
自治系统识别码:
它指出了本地运行BGP协议的路由器的AS号码。
此号码通常是由互联网登记处或提供者分配。
保持时间:
指两个相继出现的KEEPALIVE报文或UPDATE报文之间消耗的最大时间,该时间以秒计算。
此处用到一个保持计数器,当收到KEEPALIVE报文或UPDATE报文时,保持计数器复位到零。
如果保持计数器超过了保持时间,而KEEPALIVE报文或UPDATE报文还未出现,那么就认为该相邻体不存在了。
保持时间可以是零,表示无需KEEPALIVE报文,推荐的最小保持时间是3秒。
在2台路由器建立BGP连接前,通过OPEN报文,协商上双方一致认可的Holdtime时间,以2者OPEN报文中的较小值为准。
BGP标识符:
4字节无符号整数,表示发送者的ID号。
ZXR10路由器选取此ID号时,首先从Loopback地址中选择最小的;如果没有Loopback地址,则从接口地址中选择最小的IP地址,而不论接口是否UP。
目前ZXR10路由器采取自动选取的方式,暂不能手工指定。
可选参数长度:
1字节无符号整数,它表示以字节为单位的可选参数字段的总长度。
长度为“0”表示无可选参数出现。
可选参数:
这是一个可变长度字段,表示BGP相邻体对话磋商期间使用的一套可选参数。
该参数分为三部分,分别是参数类型﹑参数长度﹑参数值。
其中参数类型﹑参数长度各为一个字节,参数值为可变长度。
1.2.1.2BGP保活信息
KEEPALIVE报文是在对等体之间进行交换的周期性报文,据此判断对等体是否可达。
KEEPALIVE报文以保证保持时间不溢出的速率发送(保持时间在OPEN报文中已详细说明),推荐的速率是保持时间间隔的三分之一,一般为60秒。
KEEPALIVE报文没有实际的数据信息,即KEEPALIVE报文长度为19个字节。
1.2.1.3BGP更新信息
BGP协议的核心是路由更新,路由更新是通过在BGP对等体之间传递UPDATE报文实现。
路由更新包括了BGP用来组建无循环互联网结构所需的所有信息。
下图是UPDATE报文的结构:
2bytes
可变长度
2bytes
可变长度
可变长度
不可达路由长度
撤消路由
总路径属性长度
路径属性
网络层可到达信
不可达路由长度:
指以字节计算的撤消路由的总长度。
不可达路由长度为“0”时表示没有可撤消的路由。
撤消路由:
当那些不可到达的或不再提供服务的选路信息需要从BGP路由表中撤消时,需要用到撤消路由表项。
撤消路由格式与网络层可到达信息格式相同,由<长度,前缀>的二维数组组成,每条撤消路由占用8字节。
网络层可达信息(NLRI):
BGP-4提供了一套支持无类别域间选路(CIDR)的新技术,CIDR概念是从传统的IP类别(A,B,C,D)向IP前缀概念的转变。
IP前缀是带有组成网络号码的比特数(从左到右)指示的IP网络地址。
UPDATE报文中提供网络层可到达信息,使得BGP协议能够支持无类别选路。
NLRI通过二维数组的方式在选路更新中列出了要通知的其他BGP相邻体的目的地信息。
数组内容为<长度,前缀>,长度内容为32比特,左边连续的1的位数表示特定前缀的掩码的长度。
路径属性:
该属性是一套参数,用来标记随后路由的特定属性,这些参数在BGP过滤及路由决策过程中将被使用。
属性的内容包括路径信息﹑路由的优先等级﹑路由的下一跳及聚合信息等等。
路径属性由属性类型﹑属性长度及属性值三部分组成,属性值在以下章节BGP属性控制中将详细阐述,属性长度则根据属性值的不同而相应改变。
1.2.1.4BGP差错通告消息
BGP对等体之间交互信息时,可能检测到差错信息。
每当检测到一个差错,相应的对等体将会发送一个NOTIFICATION报文,随后对等体连接被关闭。
网络管理者需要分析NOTIFICATION报文,根据差错码判断选路协议中出现的差错特定属性。
NOTIFICATION报文格式如下图所示:
1byte
1byte
可变长度
差错代码
差错子代码
差错数据
差错代码:
指示该差错通知的类型,以下列出可能的BGP差错代码:
1––––BGP报文报头差错
2––––OPEN报文差错
3––––UPDATE报文差错
4––––保持计时器溢出
5––––有限状态机差错
6––––停机
差错子代码:
指示差错代码中更加详细的信息。
通常每个差错代码可能有一个或多个差错子代码。
下面对差错代码为1-3的对应差错子代码进行描述:
BGP报文报头差错
1––––连接不同步
2––––报文长度无效
3––––报文类型无效
OPEN报文差错
1––––不支持的版本号码
2––––无效的对等体AS
3––––无效的BGP标识符
4––––不支持的可选参数
5––––鉴别失败
6––––不能接受的保持时间
UPDATE报文差错
1––––属性列表形式不对
2––––公认属性识别不到
3––––公认属性丢失
4––––属性标记差错
5––––属性长度差错
6––––起点属性无效
7––––AS选路循环
8––––下一跳属性无效
9––––可选属性差错
10––––网络字段无效
1.2.2BGP连接状态
BGP建链过程中其连接状态有以下6种:
1.IDLE
2.CONNECT
3.ACTIVE
4.OPENSENT
5.OPENCONFIRM
6.ESTABLISHED
下面分别对每个状态下的处理过程进行描述:
1.IdleStatus
当BGP连接启动时,FSM状态处于IdleStatus。
由系统产生Start消息使它对所有的BGP资源和TCP连接进行初始化,并启动ConnectRetry定时器。
所有这些工作完成之后状态迁移至Connect状态。
在Idle状态下拒绝所有的BGP连接请求。
如果在BGP报文处理过程中出现错误,则要求断开TCP连接进入Idle状态。
等待重新连接定时器超时或管理员发出连接命令而产生Start消息,从而迁出Idle状态,重新进行建立连接的操作。
2.ConnectStatus
在该状态下BGP等待TCP连接完成。
如果连接成功,则清除ConnectRetry定时器,向对端BGPPeer发送OPEN消息,进入OpenSent状态。
若连接失败,复位ConnectRetry定时器,进入Active状态,监听对端BGPPeer可能初始化发来的连接请求。
如果ConnectRetry定时器超时,重新初始化BGP连接并复位ConnectRetry定时器,继续停留在Connect状态,等待对端BGPpeer发来的连接。
该状态下收到除START以外的所有消息都要求将该连接的所有BGP资源释放并将状态迁至Idle状态。
3.ActiveStatus
在该状态下BGP试图收到对端BGPpeer发来的TCP连接。
如果连接成功,则清除ConnectRetry定时器,并发送OPEN消息到对端的BGPpeer。
其中OPEN报文中的HoldTimer应设定为一个较大的数值(4分钟)。
如果连接失败,将关闭连接并复位ConnectRetry定时器,仍然停留在Active状态。
等待超时后重新建立TCP连接。
当ConnectRetry定时器超时事件发生时,重新初始化TCP连接并复位ConnectRetry定时器,并进入Connect状态。
同样,该状态下除了收到START消息不做任何处理外,对于其他所有消息处理都要求将该连接的所有BGP资源释放并将状态迁至Idle状态。
4.OpenSentStatus
在这个状态BGP等待从它的peer发来的OPEN消息。
当收到OPEN消息时,要求检查消息中所有的内容的正确性。
如果消息检查中发现错误,则发送NOTIFICATION消息并将状态迁至Idle。
如果OPEN消息中没有错误,BGP发送KEEPALIVE消息同时设置KeepAlive定时器。
对于Hold定时器,将替换为通过协商得到的定时值。
如果协商的定时值为0,那么Hold定时器和KeepAlive定时器将不起做用。
若收到的OPEN报文中自治系统号与本地自治系统号相同,那么与该BGPpeer的BGP连接为IBGP,否则为EBGP。
最后状态迁至OpenConfirm。
如果收到底层传输协议发来的disconnect消息,将关闭BGP连接,同时复位ConnectRetry定时器,进入Active状态重新等待对端的TCP连接请求。
如果Hold定时器超时或收到STOP事件,向对端发送NOTIFICATION消息,状态迁至Idle。
5.OpenConfirmStatus
该状态下,BGP等待KEEPALIVE和NOTIFICATION消息。
一旦收到KEEPALIVE消息,状态迁至Established。
如果在收到KEEPALIVE消息之前,HOLD定时器超时,发送NOTIFICATION消息到对端并将状态迁至Idle,如果KEEPALIVE定时器超时,则发送KEEPALIVE消息,并复位KEEPALIVE定时器
在收到底层传输协议发来的disconnect消息,或对端发来的NOTIFICATION消息,释放该连接所有的BGP资源,并将状态迁至idle。
对于其他事件,除了START消息不做任何处理外,都要求将向对端发送NOTIFICATION消息并将该连接的所有BGP资源释放,状态迁至Idle。
6.EstablishedStatus
该状态下BGP可以与它的peer交换KEEPALIVE,UPDATE,NOTIFICATION消息。
如果系统收到UPDATE消息或KEEPALIVE消息,首先要将Hold定时器复位(Hold定时值不为0)。
对于UPDATE消息需要进行正确性检查。
如果正确,则由UPDATE消息处理过程进行处理。
如果不正确,则向对端发送NOTIFICATION消息,将状态迁至Idle。
当收到KEEPALIVE消息时复位Hold定时器。
如果KEEPALIVE定时器超时,则向对端发送KEEPALIVE消息并复位该定时器。
如果收到STOP事件或Hold定时器超时,发送NOTIFICATION消息,将状态迁至Idle。
对于TCP发来disconnect或对端发来NOTIFICATION消息,状态迁至Idle。
当状态迁至Idle时,必须释放所有的BGP连接资源。
1.3BGP路由通告原则
运行BGP协议的路由器首先通过TCP与其对等体之间建立连接,然后通过交换OPEN报文相互验证身份,当彼此确认可行,则使用UPDATE报文进行路由信息交互。
BGP路由器接收UPDATE报文,对此报文运行某些策略或进行过滤处理产生新的路由表,再把新的路由传递给其它BGP对等体。
为了更好的阐述BGP协议,对其运行过程建立模型,模型包括以下部件:
1––––路由器从其对等体收到一群路由
2––––输入策略机,对输入路由进行过滤或属性控制
3––––决策过程,决定路由器本身将使用哪些路由
4––––路由器本身使用的一群路由
5––––输出策略机,对输出路由进行过滤或属性控制
6––––路由器通告给其它对等体一群路由
模型如下图所示。
BGP从外部或内部的对等体接收路由,这些路由的部分或全部将做成路由器的BGP表格。
输入策略机将基于不同的参数进行过滤处理,并且通过控制路径属性来干预其本身的决策过程。
过滤参数包括IP地址前缀﹑AS路径信息和属性信息。
决策过程将对通过输入策略机作用后得到的路由信息进行决策,当到达同一目的地有多条路由时,通过决策选出最佳路由。
最佳路由信息将被路由器本身使用,放进IP路由表中,同时通告给其它对等体。
路由器将其使用的路由(最佳路由)及在本地产生的路由交给输出策略机,输出策略机再通过过滤及属性控制产生输出路由信息。
输出策略机在输出信息时,同时区别内部对等体和外部对等体,从内部对等体产生的路由不应再次传到内部对等体。
BGP路由表是独立于IGP路由表的,但是这两个表之间可以进行信息的交换,这就是“路由重分布”技术(Redistribution)。
信息的交换有两个方向:
从BGP注入IGP,以及从IGP注入BGP。
前者是将AS外部的路由信息传给AS内部的路由器,而后者是将AS内部的路由信息传到外部网络,这也是BGP路由更新的来源。
把路由信息从IGP注入BGP涉及到一个重要概念——同步(Synchronization)。
同步规则,是指当一个AS为另一个AS提供了过渡服务时,只有当本地AS内部所有的路由器都通过IGP的路由信息的传播收到这条路由信息以后,BGP才能向外发送这条路由信息。
当路由器从IBGP收到一条路由更新信息时,在转发给其他EBGP对等体转之前,路由器会对同步性进行验证。
只有该路由器上IGP认识这个更新的目的时(即IGP路由表中有相应的条目),路由器才会将其通过EBGP转发;否则,路由器不会转发该更新信息。
同步规则的主要目的是为了保证AS内部的连通性,防止路由循环的黑洞。
但是在实际的应用中,一般都会将同步功能禁用,而使用AS内IBGP的全网状连接结构来保证连通性,这样即可以避免向IGP中注入大量BGP路由,加快路由器处理速度,又可以保证数据包不丢失。
要安全的禁用同步,需要满足以下两个条件之一:
1.所处的AS是单口的,或者说是末端AS(StubAS)――即是指只有一个点与外界网络连接。
2.虽然所处的AS是过渡型的(指一个AS可以通过本地AS,与第三方AS建立连接的),但是在AS内部的所有路由器都运行BGP。
第2种情况是很常见的,因为AS内所有的路由器都有BGP信息,所以IGP只需要为本地AS传送路由信息。
同步功能在路由器上缺省是启用的,可以用命令进行取消。
1.4BGP路由通告方式
1.4.1network命令方式
BGP是用来通告路由的,每台运行BGP协议的路由器都把本地网络通告到Internet上,这样几十万台路由器通告的路由