1.AS(autonomous system)自治系统(BGP一个路由器只能处于一个AS)
AS是指在一个实体管辖下的拥有相同选路策略的IP网络。BGP网络中的每个AS都被分配一个唯一的AS号,用于区分不同的AS。AS号分为2字节AS号和4字节AS号,其中2字节AS号的范围为1至65535,4字节AS号的范围为1至4294967295。支持4字节AS号的设备能够与支持2字节AS号的设备兼容。
IGP:内部网关路由选择协议:RIP、OSPF、ISIS,
EGP:外部网关路由选择协议
BGP边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议。
不同于最初的EGP,BGP能够进行路由优选、避免路由环路、更高效率的传递路由和维护大量的路由信息。
虽然BGP用于在AS之间传递路由信息,但并不是所有AS之间传递路由信息都需要运行BGP。比如在数据中心上行的连入Internet的出口上,为了避免Internet海量路由对数据中心内部网络的影响,设备采用静态路由代替BGP与外部网络通信。
优点
BGP从多方面保证了网络的安全性、灵活性、稳定性、可靠性和高效性:
• BGP采用认证和GTSM的方式,保证了网络的安全性。
• BGP提供了丰富的路由策略,能够灵活的进行路由选路,并且能指导邻居按策略发布路由。
• BGP提供了路由聚合和路由衰减功能用于防止路由振荡,有效提高了网络的稳定性。
• BGP使用TCP作为其传输层协议(端口号为179),并支持BGP与BFD联动、BGP Tracking和BGP GR和NSR,提高了网络的可靠性。
• 在邻居数目多、路由量大且大部分邻居具有相同出口策略的场景下,BGP使用按组打包技术极大的提高了BGP打包发包性能。
2.BGP特点:
BGP可以跨越多跳路由器建立邻居关系(基于TCP)。可以在BGP路由中携带丰富的属性值。
3.BGP建立邻居关系
单播建邻居,TCP 179端口
BGP工作在OSI 4层
RIP UDP 520端口工作在4层
OSPF IP 89端口工作在3层
ISIS组播mac工作在2层
4.BGP邻居关系
EBGP:运行于不同AS之间的BGP称为EBGP。为了防止AS间产生环路,当BGP设备接收EBGP对等体发送的路由时,会将带有本地AS号的路由丢弃。
IBGP:运行于同一AS内部的BGP称为IBGP。为了防止AS内产生环路,BGP设备不将从IBGP对等体学到的路由通告给其他IBGP对等体,并与所有IBGP对等体建立全连接。为了解决IBGP对等体的连接数量太多的问题,BGP设计了路由反射器和BGP联盟。
BGP必须手动建立邻居。
BGP配置:
EBGP建立邻居关系一般使用直连接口建邻居(优先级255)
IBGP建立邻居关系一般使用环回接口建邻居(提高会话可靠性);(优先级255)
BGP报文交互中角色:speaker、peer
BGP的路由器号(Router ID)
Router ID是一个用于标识BGP设备的32位值,通常是IPv4地址的形式,在BGP会话建立时发送的Open报文中携带。对等体之间建立BGP会话时,每个BGP设备都必须有唯一的Router ID,否则对等体之间不能建立BGP连接。
Router ID在BGP网络中必须是唯一的,可以采用手工配置,也可以让设备自动选取。缺省情况下,BGP选择设备上的Loopback接口的IPv4地址作为BGP的Router ID。如果设备上没有配置Loopback接口,系统会选择接口中最大的IPv4地址作为BGP的Router ID。一旦选出Router ID,除非发生接口地址删除等事件,否则即使配置了更大的地址,也保持原来的Router ID。
5.BGP报文类型
Open | 协商BGP参数 |
Keepalive | 检测BGP邻居关系 |
Update | 传BGP路由 |
Notification | 错误消息 |
Refresh | 刷新报文,重新发/收 |
6.BGP的邻居建立过程
Idle空闲 | 在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态 |
---|---|
Connect | 连接状态,TCP三次握手,TCP三次握手未完成BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态。TCP连接失败,那么BGP转至Active状态。如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态。 |
Opensent | TCP的三次握手成功,发OPEN报文协商BGP相关参数(AS,version,auth) 。BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态。如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。 |
Openconfirm | BGP等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。 |
Establish | BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文。如果收到正确的Update或Keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接。如果收到错误的Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至Idle状态。Route-refresh报文不会改变BGP状态。如果收到Notification报文,那么BGP转至Idle状态。如果收到TCP拆链通知,那么BGP断开连接,转至Idle状态。Active Tcp的三次握手建立失败,3次尝试,回退到Idle |
7.BGP引入IGP路由
BGP协议本身不发现路由,因此需要将其他路由引入到BGP路由表,实现AS间的路由互通。当一个AS需要将路由发布给其他AS时,AS边缘路由器会在BGP路由表中引入IGP的路由。为了更好的规划网络,BGP在引入IGP的路由时,可以使用路由策略进行路由过滤和路由属性设置,也可以设置MED值指导EBGP对等体判断流量进入AS时选路。
Network宣告 | 逐条将IP路由表中已经存在的路由通告到BGP路由表中 |
---|---|
Import引入 | 根据运行的路由协议(RIP,OSPF,ISIS等)将路由引入到BGP路由表中,同时import命令还可以引入直连和静态路由。 |
8.BGP对等体之间的交互原则
BGP设备将最优路由加入BGP路由表,形成BGP路由。BGP设备与对等体建立邻居关系后,采取以下交互原则:
从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体。
从EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体。
当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体。
路由更新时,BGP设备只发送更新的BGP路由。
所有对等体发送的路由,BGP设备都会接收。
路由黑洞解决办法:
1.运营商核心网MPLS LDP,完美的解决方案。
BGP使用认证和通用TTL安全保护机制GTSM(Generalized TTL Security Mechanism)两个方法保证BGP对等体间的交互安全。
BGP安全性
BGP使用认证和通用TTL安全保护机制GTSM(Generalized TTL Security Mechanism)两个方法保证BGP对等体间的交互安全。
BGP认证
BGP认证分为MD5认证和Keychain认证,对BGP对等体关系进行认证是提高安全性的有效手段。MD5认证只能为TCP连接设置认证密码,而Keychain认证除了可以为TCP连接设置认证密码外,还可以对BGP协议报文进行认证。
BGP GTSM
BGP GTSM检测IP报文头中的TTL(time-to-live)值是否在一个预先设置好的特定范围内,并对不符合TTL值范围的报文进行允许通过或丢弃的操作,从而实现了保护IP层以上业务,增强系统安全性的目的。
例如将IBGP对等体的报文的TTL的范围设为254至255。当攻击者模拟合法的BGP协议报文,对设备不断的发送报文进行攻击时,TTL值必然小于254。如果没有使能BGP GTSM功能,设备收到这些报文后,发现是发送给本机的报文,会直接上送控制层面处理。这时将会因为控制层面处理大量攻击报文,导致设备CPU占用率高,系统异常繁忙。如果使能BGP GTSM功能,系统会对所有BGP报文的TTL值进行检查,丢弃TTL值小于254的攻击报文,从而避免了因网络攻击报文导致CPU占用率高的问题。
BGP缺省配置
参数 | 缺省值 |
---|---|
BGP | 未使能 |
Keepalive消息发送间隔 | 60秒 |
对等体邻接关系保持时间 | 180秒 |
12.BGP属性
公认必遵:rigin、as_path、next_hop
• 公认必须遵循(Well-known mandatory):所有BGP设备都可以识别此类属性,且必须存在于Update报文中。如果缺少这类属性,路由信息就会出错。
所有BGP路由器必须识别,且必须存在于Update消息中。
缺少这种属性路由信息会出错。
公认任意:local pref、atmoic aggregate
• 公认任意(Well-known discretionary):所有BGP设备都可以识别此类属性,但不要求必须存在于Update报文中,即就算缺少这类属性,路由信息也不会出错。
可选过渡:aggregator、community
在BGP对等体之间具有可传递性的属性
BGP路由器可以不支持此属性,但它仍然会接收这类属性,并传递给其他对等体 (不认识,也可以传)
可选非过渡:MED
• 可选非过渡(Optional non-transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,则会被忽略该属性,且不会通告给其他对等体。
在BGP路由表中,到达同一目的地可能存在多条路由。此时BGP会选择其中一条路由作为最佳路由,并只把此路由发送给其对等体。BGP为了选出最佳路由,会根据BGP的路由优选规则依次比较这些路由的BGP属性。
下面介绍几种常用的BGP路由属性:
• Origin属性
Origin属性用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的。它有以下3种类型:
IGP:具有最高的优先级。通过network命令注入到BGP路由表的路由,其Origin属性为IGP。
EGP:优先级次之。通过EGP得到的路由信息,其Origin属性为EGP。
Incomplete:优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete。
• AS_Path属性
AS_Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。在接收路由时,设备如果发现AS_Path列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路。
当BGP Speaker传播自身引入的路由时:
o 当BGP Speaker将这条路由通告到EBGP对等体时,便会在Update报文中创建一个携带本地AS号的AS_Path列表。
o 当BGP Speaker将这条路由通告给IBGP对等体时,便会在Update报文中创建一个空的AS_Path列表。
当BGP Speaker传播从其他BGP Speaker的Update报文中学习到的路由时:
o 当BGP Speaker将这条路由通告给EBGP对等体时,便会把本地AS编号添加在AS_Path列表的最前面(最左面)。收到此路由的BGP设备根据AS_Path属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
o 当BGP Speaker将这条路由通告给IBGP对等体时,不会改变这条路由相关的AS_Path属性。
• Next_Hop属性
Next_Hop属性记录了路由的下一跳信息。BGP的下一跳属性和IGP的有所不同,不一定就是邻居设备的IP地址。通常情况下,Next_Hop属性遵循下面的规则:
o BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
o BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
o BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。
• Local_Pref属性
Local_Pref属性表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由。当BGP的设备通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由。Local_Pref属性仅在IBGP对等体之间有效,不通告给其他AS。Local_Pref属性可以手动配置,如果路由没有配置Local_Pref属性,BGP选路时将该路由的Local_Pref值按缺省值100来处理。
• MED属性
MED(Multi-Exit Discriminator)属性用于判断流量进入AS时的最佳路由,当一个运行BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。
MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS。MED属性可以手动配置,如果路由没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理。
• 团体属性
团体属性(Community)用于标识具有相同特征的BGP路由,使路由策略的应用更加灵活,同时降低了维护管理的难度。
团体属性分为自定义团体属性和公认团体属性。公认团体属性如表所示。
表 公认团体属性
团体属性名称 | 团体属性号 | 说明 |
---|---|---|
Internet | 0(0x00000000) | 设备在收到具有此属性的路由后,可以向任何BGP对等体发送该路由。 |
No_Advertise | 4294967042(0xFFFFFF02) | 设备收到具有此属性的路由后,将不向任何BGP对等体发送该路由。 |
No_Export | 4294967041(0xFFFFFF01) | 设备收到具有此属性的路由后,将不向AS外发送该路由。 |
No_Export_Subconfed | 4294967043(0xFFFFFF03) | 设备收到具有此属性的路由后,将不向AS外发送该路由,也不向AS内其他子AS发布此路由。 |
BGP选路13条:
当到达同一目的地存在多条路由时,BGP依照如下策略顺序进行路由选择:
如果此路由的下一跳不可达,忽略此路由
- 优选协议首选值(PrefVal)最高的路由(私有属性,仅本地有效,默认0,华为特有)
- 优选本地优先级(Local_Pref)最高的路由(默认100)
- 路由生成方式:Aggregate>summary automatic>Network>import>从对等体学到的)
- BGP优选AIGP较小的路由(AIGP属性是一种新的BGP路由属性 )
- AS路径(AS_Path)最短的路由
- 比较Origin code,IGP>EGP>incomplete。
- 优选MED值最小的路由(默认0,越小越优先)
- 优选从EBGP邻居学来的路由(EBGP>IBGP)
- BGP优选达到下一跳IGP Cost较小的路由.
- 以上全部相同,则为等价路由,可以负载分担
注:AS-PATH必须一致, 当负载分担时,以下3条无效 - 优选Cluster_List长度最短的路由
- Originator_ID最小的路由
- 优选Router ID最小的路由器发布的路由
- 优选从具有较小IP地址的对等体学来的路由。
BGP路由聚合
好处:1.减少路由表大小。2.减小网络震荡
聚合方法:
1.静态聚合
路由器通过路由聚合屏蔽明细路由,只将一条聚合后的路由10.1.8.0/22发布给AS200内的RTB。
2.自动聚合
自动聚合只对引入BGP的路由进行聚合,聚合到自然网段后发送给邻居。Summar automatic
自动聚合只能聚合import的路由。 (带来环路)
3.手动聚合
手动聚合既能聚合network的路由,又能聚合import的路由。(最好)
路由聚合带来的问题-潜在环路
解决方法:当发生聚合后,如果需要聚合路由携带所有明细路由经过的AS号来防止环路,则在配置聚合的命令后添加AS-SET参数。
路由反射器
路由反射器RR(Route Reflector):允许把从IBGP对等体学到的路由反射到其他IBGP对等体的BGP设备,类似OSPF网络中的DR。
客户机(Client):与RR形成反射邻居关系的IBGP设备。在AS内部客户机只需要与RR直连。
非客户机(Non-Client):既不是RR也不是客户机的IBGP设备。在AS内部非客户机与RR之间,以及所有的非客户机之间仍然必须建立全连接关系。
始发者(Originator):在AS内部始发路由的设备。Originator_ID属性用于防止集群内产生路由环路。
集群(Cluster):路由反射器及其客户机的集合。Cluster_List属性用于防止集群间产生路由环路。
原理
同一集群内的客户机只需要与该集群的RR直接交换路由信息,因此客户机只需要与RR之间建立IBGP连接,不需要与其他客户机建立IBGP连接,从而减少了IBGP连接数量。
RR向IBGP邻居发布路由规则如下:
从非客户机学到的路由,发布给所有客户机。
从客户机学到的路由,发布给所有非客户机和客户机(发起此路由的客户机除外)。
从EBGP对等体学到的路由,发布给所有的非客户机和客户机。
Cluster_List属性
路由反射器和它的客户机组成一个集群(Cluster),使用AS内唯一的Cluster ID作为标识。为了防止集群间产生路由环路,路由反射器使用Cluster_List属性,记录路由经过的所有集群的Cluster ID。
当一条路由第一次被RR反射的时候,RR会把本地Cluster ID添加到Cluster List的前面。如果没有Cluster_List属性,RR就创建一个。
当RR接收到一条更新路由时,RR会检查Cluster List。如果Cluster List中已经有本地Cluster ID,丢弃该路由;如果没有本地Cluster ID,将其加入Cluster List,然后反射该更新路由。
Originator_ID属性
Originator ID由RR产生,使用的Router ID的值标识路由的始发者,用于防止集群内产生路由环路。
当一条路由第一次被RR反射的时候,RR将Originator_ID属性加入这条路由,标识这条路由的发起设备。如果一条路由中已经存在了Originator_ID属性,则RR将不会创建新的Originator_ID属性。
当设备接收到这条路由的时候,将比较收到的Originator ID和本地的Router ID,如果两个ID相同,则不接收此路由。
备份路由反射器
为增加网络的可靠性,防止单点故障对网络造成影响,有时需要在一个集群中配置一个以上的RR。由于RR打破了从IBGP对等体收到的路由不能传递给其他IBGP对等体的限制,所以同一集群内的RR之间中可能存在环路。这时,该集群中的所有RR必须使用相同的Cluster ID,以避免RR之间的路由环路。
联盟(Confederation)
联盟将一个AS划分为若干个子AS。每个子AS内部建立IBGP全连接关系,子AS之间建立联盟EBGP连接关系,但联盟外部AS仍认为联盟是一个AS。配置联盟后,原AS号将作为每个路由器的联盟ID。这样有两个好处:一是可以保留原有的IBGP属性,包括Local Preference属性、MED属性和NEXT_HOP属性等;二是联盟相关的属性在传出联盟时会自动被删除,即管理员无需在联盟的出口处配置过滤子AS号等信息的操作。
路由反射器 | 联盟 |
---|---|
不需要更改现有的网络拓扑,兼容性好。 | 需要改变逻辑拓扑。 |
配置方便,只需要对作为反射器的设备进行配置,客户机并不需要知道自己是客户机。 | 所有设备需要重新进行配置。 |
集群与集群之间仍然需要全连接。 | 联盟的子AS之间是特殊的EBGP连接,不需要全连接。 |
适用于中、大规模网络。 | 适用于大规模网络。 |