BGP
一、简介
BGP(Border Gateway Protocol,边界网关协议)是一种AS(Autonomous System,自治系统)之间的动态路由协议。AS是拥有同一选路策略,在同一技术管理部门下运行的一组路由器。
早期发布的三个版本是BGP-1(RFC 1105)、BGP-2(RFC 1163)和BGP-3(RFC 1267),当前使用版本是BGP-4(RFC 1771,已更新至RFC 4271)。BGP-4作为事实上的Internet外部路由协议标准,被广泛应用于ISP(Internet Service Provider,因特网服务提供商)之间。
二、特性描述
- BGP是一种外部网关协议(Exterior Gateway Protocol,EGP),与OSPF、RIP等内部网关协议(Interiro Gateway Protocol,IGP)不同,其着眼点不在于发现计算路由,而在于控制路由的传播和选择最佳路由。
- BGP使用TCP作为其传输层协议(端口号179),提高了协议的可靠性。
- BGP支持CIDR(Classless Inter-Domain Routing,无类别域间路由)。
- 路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。
- BGP路由通过携带AS路径信息彻底解决路由环路问题。
- BGP特工了丰富的路由策略,能够对路由实现灵活的过滤和选择。
- BGP易于扩展,能够适应网络新的发展。
发送BGP消息的路由器称为BGP发言者(BGP Speaker),它接收或产生新的路由信息,并发布(Advertise)给其它BGP发言者。当BGP发言者收到来自其它自治系统的新路由时,如果该路由比当前已知路由更优、或者当前还没有该路由,它就把这条路由发布给自治系统内所有其它BGP发言者。
相互交换消息的BGP发言者之间互称对等体(Peer),若干相关的对等体可以构成对等体组(Peer group)。
BGP在路由器上以虾类两种方式运行:
- IBGP(Internal BGP):当BGP运行于同一自治系统内部时,被称为IBGP;
- EBGP(External BGP):当BGP运行于不同自治系统之间时,称为EBGP。
三、BGP的消息类型
- 消息头格式
BGP有5种消息类型:Open,Update,Notification,Keepalive和Route-refresh。这些消息有相同的报文头,其格式如图:
字段解释:
-
- Marker:16字节,用于标明BGP报文边界,所有比特均为1。
- Length:2字节,BGP消息总长度(包括报文头在内),以字节为单位。
- Type:1字节,BGP消息的类型。其取值从1到5。
2、Open消息:Open消息是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。消息格式如下:
字段解释:
-
- Version:BGP的版本号。对于BGP-4来说,其值为4.
- My autonomous system:本地AS号,通过比较两端的AS号可以确定是EBGP连接还是IBGP连接。
- Hold time:保持时间。在建立对等体关系时两端要协商Hold time,并保持抑制,如果在这个时间内未收到对端发来的Keepalive消息或Update消息,则认为BGP消息中断。
- BGP identifier:BGP标识符,以IP地址的形式表示,用来识别BGP路由器。
- Opt Parm Len(Optional Parameters Length):可选参数的长度。若为0则没有可选参数。
- Optional parameters:可选参数,用于多协议扩展(Multiprotocol Extensions)等功能。
3、Update消息:Update消息用于在对等体之间交换路由信息。它既可以发布可达路由信息,也可以撤销不可达路由信息。消息格式如下:
一条Update报文可以通告一类具有相同路径属性的科大路由,这些路由放在NLRI(Network Layer Reachable Information,网络层可达信息)字段中,Path Attributes字段携带了这些路由的属性,BGP根据这些属性进行路由的选择;同时Update报文还可以携带多条不可达路由,被撤销的路由放在Withdrawn Routes字段中。
字段解释:
-
- Unfeasible routes length:不可达路由字段的长度,以字节为单位,若为0则说明没有Withdrawn Routes字段。
- Withdrawn routes:不可达路由的列表。
- Total path attribute length:路径属性字段的长度,以字节为单位,若为0则说明没有Path attribute字段。
- Path Attribute:与NLRI相关的所有路径属性列表,每个路径属性由一个TLV(Type-Length-Value)三元组构成。BGP正是根据这些属性值来避免环路,进行选路,协议扩展等。
- NLRI(Network Layer Reachability Information):可达路由的前缀和前缀长度二元组。
4、Notification:当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。消息格式如下:
字段解释:
-
- Error code:差错码,指定错误类型。
- Error subcode:差错子码。错误类型的详细信息。
- Data:用于辅助发现错误的原因,它的内容以来于具体的差错码和差错子码,记录的是出错部分的数据,长度不固定。
5、Keepalive:BGP会周期性地向对等体发出Keepalive消息,用于保持连接的有效性,其消息格式只包含报文头,欸有附加其他任何字段。
6、Route-refresh:Route-refresh消息用来要求对等体重新发送指定地址族的路由信息,其消息格式如下:
字段解释:
-
- AFI:adderss family identifier,地址族标识。
- RES:保留,必须置0。
- SAFI:Subsequent Address Famliy Identifier,子地址族标识。
四、BGP的路由属性
路由属性的分类
BGP路由属性是一组参数,它对特定的路由进行了进一步的描述,使得BGP能够对路由进行过滤和选择。可分为4类:
- 公认必须遵循(Well-Known mandatory):所有BGP路由器都必须能够识别这种属性,且必须存在Update消息中,如果缺少这种属性,路由信息就会出错。
- 公认可选(Well-known discretionary):所有BGP路由器都可以识别,但不要求必须存在于Update消息中,可以根据具体情况来操作。
- 可选过渡(Optional transitive):在AS之间具有可传递性的属性,BGP路由器可以不支持此属性,但它仍然会接收带有此属性的路由,并通告给其他对等体。
- 可选非过渡(Optional non-transitive):如果BGP路由器不支持此属性,该属性被忽略,且不会通告给其他对等体。
属性名称 | 类别 |
ORIGIN |
公认必须遵循 |
AS_PATH | 公认必须遵循 |
NEXT_HOP | 公认必须遵循 |
LOCAL_PREF | 公认可选 |
ATOMIC_AGGREGATE | 公认可选 |
AGGREGATOR | 可选过渡 |
COMMUNITY | 可选过渡 |
MULTI_EXIT_DISC(MED) | 可选非过渡 |
ORIGINATOR_ID | 可选非过渡 |
CLUSTER_LIST | 可选非过渡 |
几种重要的路由属性
1、 源属性(ORIGIN):ORIGIN属性定义路由信息的来源,标记一条路由时怎么成为BGP路由的,分为三种类型:
-
- IGP:优先级最高,说明路由产生于本AS内。
- EGP:优先级次之,说明路由通过EGP学到。
- incomplete:优先级最低,它并不是说明路由不可达,而是标识路由的来源无法确定。
2、AS路径属性(AS_PATH):AS_PATH属性按照一定次序记录了某条路由从本地到目的地址所要经过的所有AS号。当BGP将一条路由通告到其他AS时,便会把本地AS号添加在AS_PATH列表的最前面,收到此路由的BGP路由器根据AS_PATH属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
3、下一跳属性(NEXT_HOP):BGP的下一跳属性和IGP的有所不同,不一定就是邻居卢欧气的IP地址。按照取值可分为3种:
-
- BGP发言者把自己产生的路由发给所有邻居时,将把该路由信息的下一跳属性设置为自己与对端连接的接口地址;
- BGP发言者把接收到的路由发送给EBGP对等体时,将把该路由信息的下一跳属性设置为本地与对端连接的接口地址;
- BGP发言者把从EBGP邻居得到的路由发给IBGP邻居时,并不改变该路由信息的下一跳属性,如果配置了负载分担,路由被发给IBGP邻居时则会修改下一跳属性。
4、MED(MUTIL_EXIT_DISC):MED属性仅在相邻两个AS之间交换,收到此属性的AS一方不会再将其通告给任何其他第三方AS。MED属性相当于IGP使用的度量值(metrics),它用于判断流量进入AS时的最佳路由,当一个运行BGP的路由器通过不同的EBGP对等体得到的目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。
5、本地优先属性(LOCAL_PREF):LOCAL_PREF属性仅在IBGP对等体之间交换,不通告给其他AS。它表明BGP路由器的优先级。LOCAL_PREF属性用于判断流量离开AS时的最佳路由。当BGP的路由器通过不同的IBGP对等体得到的目的地址相同但下一跳不同的多条路由时,将优先选择LOCAL_PREF属性值较高的路由。
6、团体属性(COMMUNITY):团体属性用来简化路由策略的应用和降低维护管理的难度,它是一组有相同特征的目的地址的集合,没有物理上的边界,与其所在的AS无关,公认的属性有:
-
- INTERNET:缺省情况下,所有路由都属于INTERNET团体,具有此属性的路由可以被通告给所有的BGP对等体。
- NO_EXPORT:具有此属性的路由在收到后,不能被发布到本地AS之外,如果使用了联盟,则不能被发布到联盟之外,但可以发布给联盟中的其他子AS。
- NO_ADVERTISE:具有此属性的路由被接收后,不能被通告给任何其他的BGP对等体。
- NO_EXPORT_SUBCONFED:具有此属性的路由被接收后, 不能被发布到本地AS之外,也不能发布到联盟中的其他子AS。
五、BGP的选路规则
1、BGP选路策略:在目前的实现中,BGP选路时采用下列策略:
-
- 首先丢弃下一跳(NEXT_HOP)不可达的路由;
- 优选Preferred-value值最大的路由;
- 优选本地优先级(LOCAL_PREF)最高的路由;
- 优选聚合路由;
- 优选AS路径(AS_PATH)最短的路由;
- 依次选择ORIGIN类型为IGP、EGP、Incomplete的路由;
- 优选MED值最低的路由;
- 依次选择从EBGP、联盟、IBGP学来的路由;
- 优选下一跳Cost值最低的路由;
- 优选CLUSTER_LIST长度最短的路由;
- 优选ORIGINATOR_ID最小的路由;
- 优选Router ID最小的路由器发布的路由。
- 优选地址最小的对等体发布的路由。
2、应用BGP负载分担时的选路:在BGP中,由于协议本身的特殊性,它产生的路由的下一跳地址可能不是当前路由器直接相连的邻居。常见的一个原因是:IBGP之间发布路由信息时不改变下一跳。这种情况下,为了能够将报文正确转发出去,路由器必须先找到一个直接可达的地址(查找IGP建立的路由表项),通过这个地址到达路由表中指示的下一跳。在上述过程中,去往直接可达地址的路由被称为依赖路由,BGP路由依赖于这些路由指导报文转发。根据下一跳地址找到依赖路由的过程就是路由迭代(recursion)。
目前系统支持基于迭代的BGP负载分担,即如果依赖路由本身是负载分担的(假设有三个下一跳地址),则BGP也会生成相同数量的下一跳地址来指导报文转发。需要说明的是,基于迭代的BGP负载分担在系统上始终启用。
在实现方法上,BGP的负载分担与IGP的负载分担有所不同:
- IGP是通过协议定义的路由算法,对到达同一目的地址的不同路由,根据计算结果,将度量值(metric)相等的(如RIP、OSPF)路由进行负载分担,选择的标准很明确(按metric)。
- BGP本身并没有路由计算的算法,它只是一个选路的路由协议,因此,不能根据一个明确的度量值决定是否对路由进行负载分担,但BGP有丰富的选路规则,可以在对路由进行一定的选择后,有条件地进行负载分担,也就是将负载分担加入到BGP的选路规则中去。
3、BGP发布路由的策略:在目前的实现中,BGP发布路由时采用如下策略:
- 存在多条有效路由时,BGP发言者只将最优路由发布给对等体;
- BGP发言者只把自己使用的路由发布给对等体;
- BGP发言者从EBGP获得的路由会向它所有BGP对等体发布(包括EBGP对等体和IBGP对等体);
- BGP发言者从IBGP获得的路由不向它的IBGP对等体发布;
- BGP发言者从IBGP获得的路由发布给它的EBGP对等体(关闭BGP与IGP同步的情况下,IBGP路由被直接发布;开启BGP与IGP同步的情况下,该IBGP路由只有在IGP也发布了这条路由时才会被同步并发布给EBGP对等体);
- 连接一旦建立,BGP发言者将把自己所有的BGP路由发布给新对等体。
六、大规模BGP网络所遇到的问题
1、路由聚合:在大规模的网络中,BGP路由表十分庞大,使用路由聚合(Routes Aggregation)可以大大减小路由表的规模。
路由聚合实际上是将多条路由合并的过程。这样BGP在向对等体通告路由时,可以只通告聚合后的路由,而不是将所有的具体路由都通告出去。
目前系统支持自动聚合和手动聚合方式。使用后者还可以控制聚合路由的属性,以及决定是否发布具体路由。
2、BGP路由衰减:BGP路由衰减(Route Dampening)用来解决路由不稳定的问题。路由不稳定的主要表现形式是路由振荡(Route flaps),即路由表中的某条路由反复消失和重现。
发生路由振荡时,路由协议就会向邻居发布路由更新,收到更新报文的路由器需要重新计算路由并修改路由表。所以频繁的路由振荡会消耗大量的带宽资源和CPU资源,严重时会影响到网络的正常工作。
在多数情况下,BGP协议都应用于复杂的网络环境中,路由变化十分频繁。为了防止持续的路由振荡带来的不利影响,BGP使用衰减来抑制不稳定的路由。
BGP衰减使用惩罚值来衡量一条路由的稳定性,惩罚值越高则说明路由越不稳定。路由每发生一次振荡(路由从激活状态变为未激活状态,称为一次路由振荡),BGP便会给此路由增加一定的惩罚值(1000,此数值为系统固定,不可修改)。当惩罚值超过抑制阈值时,此路由被抑制,不加入到路由表中,也不再向其他BGP对等体发布更新报文。
被抑制的路由每经过一段时间,惩罚值便会减少一半,这个时间称为半衰期(Half-life)。当惩罚值降到再使用阈值时,此路由变为可用并被加入到路由表中,同时向其他BGP对等体发布更新报文。
3、对等体组:对等体组(Peer Group)是一些具有某些相同属性的对等体的集合。当一个对等体加入对等体组中时,此对等体将获得与所在对等体组相同的配置。当对等体组的配置改变时,组内成员的配置也相应改变。
在大型BGP网络中,对等体的数量会很多,其中很多对等体具有相同的策略,在配置时会重复使用一些命令,利用对等体组在很多情况下可以简化配置。
将对等体加入对等体组中,对等体与对等体组具有相同的路由更新策略,提高了路由发布效率。
4、团体:对等体组可以使一组对等体共享相同的策略,而利用团体可以使多个AS中的一组BGP路由器共享相同的策略。团体是一个路由属性,在BGP对等体之间传播,它并不受到AS范围的限制。
BGP路由器在将带有团体属性的路由发布给其它对等体之前,可以改变此路由原有的团体属性。
除了使用公认的团体属性外,用户还可以使用团体属性列表自定义扩展团体属性,以便更为灵活地控制路由策略。
5、路由反射器:为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。假设在一个AS内部有n台路由器,那么应该建立的IBGP连接数就为n(n-1)/2。当IBGP对等体数目很多时,对网络资源和CPU资源的消耗都很大。
利用路由反射可以解决这一问题。在一个AS内,其中一台路由器作为路由反射器RR(Route Reflector),其它路由器作为客户机(Client)与路由反射器之间建立IBGP连接。路由反射器在客户机之间传递(反射)路由信息,而客户机之间不需要建立BGP连接。
既不是反射器也不是客户机的BGP路由器被称为非客户机(Non-Client)。非客户机与路由反射器之间,以及所有的非客户机之间仍然必须建立全连接关系。
6、联盟:联盟(Confederation)是处理AS内部的IBGP网络连接激增的另一种方法,它将一个自治系统划分为若干个子自治系统,每个子自治系统内部的IBGP对等体建立全连接关系,子自治系统之间建立联盟内部EBGP连接关系。
七、BGP GR
基于BGP的GR Restarter为了与BGP对等体建立一个BGP会话连接,首先要发送一个包含了GR能力的OPEN消息到对端,BGP对等体收到该消息后,得知发送方已具有GR能力。这样,通过OPEN消息交互GR能力,GR Restarter与其BGP对等体之间协商建立起GR Session连接。如果双方都没有交换GR能力的信息,建立起的会话也就不具备GR能力。
对于分布式设备,当进行主备倒换时,会话项将丢失,此时具备GR感知能力的BGP对等体会将所有与该GR Restarter有关的路由进行失效标记。但在GR Time内仍按照这些路由进行报文转发,这样确保了在从BGP对等体重新收集路由信息的过程中没有报文丢失。
对于分布式设备,主备倒换后,GR Restarter会重新与BGP对等体建立GR Session连接,同时发送新的GR消息以宣告其重启完毕。此时两个BGP对等体间进行路由信息交换。交换完成后,GR Restarter根据新的路由转发信息更新路由表和转发表,删除失效的路由,完成BGP协议收敛。
八、MP-BGP
1、MP-BGP概述
传统的BGP-4只能管理IPv4单播路由信息,对于使用其它网络层协议(如IPv6等)的应用,在跨自治系统传播时就受到一定限制。
为了提供对多种网络层协议的支持,IETF对BGP-4进行了扩展,形成MP-BGP,目前的MP-BGP标准是RFC 4760(Multiprotocol Extensions for BGP-4,BGP-4的多协议扩展)。
支持BGP扩展的路由器与不支持BGP扩展的路由器可以互通。
2、MP-BGP属性
BGP-4使用的报文中,与IPv4地址格式相关的三条信息都由Update报文携带,这三条信息分别是:NLRI、路径属性中的NEXT_HOP、路径属性中的AGGREGATOR(该属性中包含形成聚合路由的BGP发言者的IP地址)。
为实现对多种网络层协议的支持,BGP-4需要将网络层协议的信息反映到NLRI及NEXT_HOP。MP-BGP中引入了两个新的路径属性:
- MP_REACH_NLRI:Multiprotocol Reachable NLRI,多协议可达NLRI。用于发布可达路由及下一跳信息。
- MP_UNREACH_NLRI:Multiprotocol Unreachable NLRI,多协议不可达NLRI。用于撤销不可达路由。
这两种属性都是可选非过渡(Optional non-transitive)的,因此,不提供多协议能力的BGP发言者将忽略这两个属性的信息,不把它们传递给其它邻居。
3、地址族
MP-BGP采用地址族(Address Family)来区分不同的网络层协议,关于地址族的一些取值可以参考RFC 1700(Assigned Numbers)。目前,系统实现了多种MP-BGP扩展应用,包括对VPN的扩展、对IPv6的扩展等。
九、参考文献
h3c.com/cn BGP技术介绍.pdf(451.63 KB)
今天的文章BGP协议概述_bgp协议基于什么算法分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/46836.html