通常可以将路由协议分为IGP(内部网关协议)和EGP(外部网关协议)。EGP主要用于ISP之间的交换路由信息。目前使用最为广泛的EGP是BGP版本4,它是第一个支持 CIDR和路由汇总的BGP版本。而RFC4760中定义的BGP4+是对BGP4的扩展,支持包括IPv6在内的多种协议
BGP是什么?
- BGP是Border Gatreway Protcol边界网关路由协议,
- 属于路径矢量路由协议 作用:在AS自治系统之间传递路由信息
- 4个版本:V1、V2、V4、V4+(即MBGP)
目录
BGP是什么?
AS知识点说明
为什么使用BGP---BGP价值传递?
使用BGP的三大理由:
使用BGP连接lnternet
什么是多宿主
BGP路径矢量路由器
AS之间的防环:
BGP特征
至少存在以下条件之一时,BGP是最合适的:
BGP并不总是适合的,如果满足以下条件,则不需要使用BGP:
BGP被称为基于策略的路径矢量路由协议,它的任务是在自治系统之间交换路由信息同时确保没有路由环路,其特征如下:
BGP数据库
BGP消息类型
BGP报文类型总结:
BGP工作流程——邻居状态机—览表
BGP术语
BGP属性
公认必遵(well-Known Mandatory)
公认自决(well-known discretionary)
选过过渡(Optional Transitive)
可选非过渡(Optional Nontransitive)
BGP消息类型及格式
BGP报头
标记:16字节,用来检测对等体之间同步的丢失。当支持验证功能用来验证消息,当不使用验证时所有比特均为”1“
Open消息
Update消息
Notification消息
Keepalive消息
BGP路由决策
BGP路由抑制
AS知识点说明
- AS:autonomous system 自治系统,指的是在同一个组织管理下使用相同策略的设备的集合。
- 不同AS通过AS号区分,AS号取值范围1-65535,其中64512-65535是私有AS号。
- 中国电信163 AS号:4134 中国电信CN2 AS号:4809 中国联通AS号:9929
为什么使用BGP---BGP价值传递?
使用BGP的三大理由:
- 大量路由需要承载,IGP只能容纳千条,而BGP可以容纳上万。
- 支撑MPLS/VPN的应用,传递客户VPN路由。
- 策略能力强,可以很好的实现路由决策与数据控制。
使用BGP连接lnternet
- lnternet是一组互联在一起的自主系统,让自主系统之间能够互相通信,BGP在这里提供路由选择功能!
- 企业通过一家或者多家ISP连接到lnternet,如果只有一条ISP的话没必要运行BGP(默认路由),如果有多家ISP连接,那么BGP是最好的选择!
- 单宿:只跟一个AS建立BGP邻居
- 多宿:跟多个AS建立BGP邻居
- 双多宿:跟多个AS建立多个BGP邻居
什么是多宿主
连接到两个或更多的ISP以增加以下内容:
- 可靠性(连接的可靠性):如果一个ISP的连接失败,还能上网。
- 性能(连接的性能):通往普通互联网目的地的路径选择是更好的。
BGP路径矢量路由器
- IGPs宣布网络并描述到达这些网络的度量(内部路由协议通告- -组网络和前往各个网络的度量值.)
- BGP宣布路径及路径尽头可达的网络。BGP使用与度量类似的属性来描述路径.(BGP路由器交换被成为路径矢量的可达性信息,这种信息是由路径属性组成的.)
- BGP允许管理员为数据如何在自治系统中流动定义策略或规约。
AS之间的防环:
AS之间AS-path,路由传出本AS时,携带上本地AS号,当再次收到带有自己AS号的路由,则丢弃
BGP特征
至少存在以下条件之一时,BGP是最合适的:
- 作为一个中转的AS(ISP)
- 一个AS用有多个出口连接到不同AS(多宿主)
- 需要对进入、离开AS的流量进行控制(AS有多个多口)
BGP并不总是适合的,如果满足以下条件,则不需要使用BGP:
- 对BGP的路径选择过程不够熟悉
- 只有单个连接接入internet或其它AS
- 路由器的性能不够(内存、CPU)
BGP被称为基于策略的路径矢量路由协议,它的任务是在自治系统之间交换路由信息同时确保没有路由环路,其特征如下:
- 用属性(attribute)描述路径
- 使用TCP(端口 179)作为传输协议,传承了TCP的可靠性和面向连接的特征
- 通过Keepalive信息来校验TCP的连接
- 具有丰富的属性特征,方便实现基于策略的路由控制。
- 拥有自己的BGP表
- 支持VLSM和CIDR
- 支持MD5邻居身份验证
- 采用增量更新和触发更新
- 适合在大型网络中使用
BGP数据库
邻居表
BGP表(转发数据库)
- 每个邻居学到的所有网络的列表
- 可以包含多条目的网络的路径
- 包含每个路径的BGP属性
IP路由表
BGP消息类型
BGP定义了以下消息类型
- Open----建立TCP连接后发送的打开消息(用于建立BGP邻居)
包括保持时间(180秒)和BGP router-id
- Keepalive---维护邻居关系
- Update---用于通告路由信息(包括可达信息和不可达信息)
仅用于一条路径的信息
(可能是对多个网络)
包括路径属性和网络
当检查到错误时
消息发送后,BGP连接关闭
BGP报文类型总结:
BGP报文类型的总结
报文名称 作用是什么 什么时候发包 OPEN 协商BGP邻居的各项参数,建立邻居关系 通过TCP建立BGP连接,发送open报文 UPDATE 进行路由信息的交换 连接建立后,有路由需要发送或变化时,发送UPDATE通告对端路由信息 NOTIFICATION 报告错误,中止邻居关系 当BGP在运行中发现错误时,要发送NOTIFICATION报文通过BGP对端 KEEPALIVE 维护邻居关系 定时发送KEEPALIVE保持BGP邻居关系的有效性 60s hold-time:180s
BGP报文类型总结
BGP工作流程——邻居状态机—览表
BGP的邻居状态机
peer状态名称 |
发什么包 |
在做什么 |
ldle(空闲) |
尝试建立TCP连接 |
开始准备TCP的连接并监视远程peer启动TCP连接,启用BGP时,要准备足够的资源 |
connect(连接) |
发TCP包 |
正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。如果TCP连接不上则进入Active状态,反复尝试连接。 |
active(激活) |
发TCP包 |
TCP连接没建设成功,反复尝试TCP连接。 |
OpenSent(打开发送) |
发Open包 |
TCP连接建立已经成功,开始发送Open包,Open包携带参数协商对等体的建立。 |
OpenConfirm(打开确认) |
发Keepalive包 |
参数、能力特性协商成功,自己开始发送Keepalive包,等待对方的Keepalive包。 |
Established(已建立) |
发Update包 |
已经收到对方的Keepalive包,双方能力特性致,开始使用Update通告路由信息。 |
BGP术语
- 对等体(peer):当两台BGP路由器之间建立了一条基于TCP的连接后,就称它们为邻居或对等体;
- 自治系统(AS):是一组处于统一管理控制和策略下的路由器或主机,它们使用内部网关路由协议决定如何在自治系统内部路由数据包,并使用自治系统间路由协议决定如何把数据包路由到其他自治系统。AS号由因特网注册机构分配,16比特长度(在RFC4893描述了使用32位长度的AS号的扩展),范围为1~65535,其中64512~65535是私有使用的。
- IBGP:当BGP在一个AS内运行时,被称为内部BGP(IBGP)
- EBGP:当BGP运行在AS之间时,被称为外部BGP(EBGP)
- NLRI(网络层可达性信息):是BGP更新报文的一部分,用于列出通过该路径可到达的目的地集合。
- 同步:在BGP能够通告路由之前,该路由必须存在于当前的IP路由表中。也就是说,BGP和IGP必须网络能够被通告前同步。Cisco允许通过命令no synchronization来关闭同步
- IBGP水平分割:通过IBGP学到的路由信息不能通告给其他的IBGP邻居
- 对等体组(Peer Group):是一组采用相同更新策略的BGP邻居 当一个对等体加入对等体组中时,此对等体将获得与所在对等体组相同的配置 当对等体组的配置改变时,组内成员的配置也相应改变
BGP属性
BGP具有丰富的属性,为路由控制带来很大的方便,BGP路径属性分为以下4类:
-
公认必遵(well-Known Mandatory)
公认必遵是BGP更新中必须包含的,且必须被所有BGP厂商设备所能识别,包括ORIGIN,AS_PATH和Next_Hop以下以下3个属性。
- ORIGIN(起源) :该属性说明了路由信息的来源,有3个可能的源一-IGP, EGP
和NNCOMPLETE。路由器在多个路由选择的处理中使用这个信息。路由器选择具有最低
ORIGIN类型的路径。ORIGIN类型从低到高的顺序为IGP
- AS_ PATH (AS路径) :包含在Update中的路由信息所经过的自治系统的序列。
- Next_HOP (下一跳) :路由器所获得的BGP路由的下一跳。对EBGP会话来说,下--跳就是通告该路由的邻居路由器的源地址。对于IBGP会话,有两种情况,一是起源AS内部路由的下一跳,就是通告该路由的邻居路由器的源地址;二是由EBGP注入AS的路由,它的下一-跳会不变地带入IBGP中。
-
公认自决(well-known discretionary)
公认自决指必须被所有BGP设备所识别,但是BGP更新中可以发送,也可以不发送的属性,包括LOCAL_AGGPREGATE两个属性
- LOCAL _PREF (本地优先级) :用于告诉自治系统内的路由器在有多条路径时,怎
样离开自治系统。本地优先级越高,路由优先级越高。该属性仅在IBGP邻居之间传递。
- ATOMIC_ AGGREGATE (原子聚合) :指出已被丢失了的信息。当路由聚合时将会
导致信息的丢失,因为聚合来自具有不同属性的不同源。如果一个路由器发送了导致信息丢
失的聚合,路由器将被要求把原子聚合属性附加到该路由上。
-
选过过渡(Optional Transitive)
可选过渡属性并不要求所有的BGP实现都支持。如果该属性不能被BGP进程识别,它
就会去看过渡标志。如果过渡标志被设置了, BGP进程会接受这个属性并将它不加改变地传
送,包括AGGREGATOR和COMMUNITY
- AGGREGATOR (聚合者) :标明了实施路由聚合的BGP路由器ID和聚合路由的
路由器的AS号。
- COMMUNITY (团体) :指共享- -一个公共属性的一组路由器。
-
可选非过渡(Optional Nontransitive)
可选非过渡属性并不要求所有的BGP都支持。如果这些属性被发送到不能对其识别的
路由器,这些属性将会被丟弃,不能传送给BGP邻居,包括MED、ORIGINATOR_ID和
CLUSTER_LIST
- MED (多出口区分) :通知AS外的路由器采用哪一条路径到达AS。它也被认为是
路由的外部度量,低的MED值表示高的优先级。MED属性在自治系统间交换,但MED属
性不能传递到第三方AS。默认情况下,仅当路径来自同一个自治系统的不同邻居时,路由
器才比较它们的MED属性。
- ORIGINATOR ID (起源ID) :路由反射器会附加到这个属性上,它携带本AS源路
由器的路由器ID,用以防止环路。
- CLUSTER_ LIST (簇列表) :此属性显示了采用的反射路径。
BGP消息类型及格式
BGP报头
BGP消息类型主要包括Open、Keepalive、Update和Notification~这些消息具由相同的报头,长度为19字节,其格式如下图所示,各字段含义如下所述
|0 7|8 15|16 23|24 31|
标记 |
长度 |
类型 |
|
-
标记:16字节,用来检测对等体之间同步的丢失。当支持验证功能用来验证消息,当不使用验证时所有比特均为”1“
- 长度:2字节,BGP消息总长度(包括报头在内),以字节为单位,范围为19~4096
- 类型:1字节,BGP消息的类型。其取值从1~5,分别表示Open、Update、Notification、Keepalive和Route-refresh消息
Open消息
Open消息是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系,
其格式如下图所示,各字段含义如下所述。
|0 7|8 15|16 23|24 31|
版本 |
|
自治系统号 |
|
|
保持时间 |
|
|
BGP标识 |
可选参数长度 |
|
可选参数 |
- 版本: 1 字节,BGP的版本号对于BGP4来说其值为4。
- 我的自治系统: 2字节,邻居建立发起者的AS号,用来决定双方是IBGP邻居,还
是EBGP邻居。
- 保持时间: 2字节,是设备收到一个Keepalive消息之前允许等待的最长时间。如果在这个时间内未收到对端发来的Keepalive消息,则认为BGP连接中断。如果这个时间为0s,则不发送Keepalive消息,如果不为0,则至少是3s。在建立对等体关系时两端要协商保持时间,在协商时,采用OPEN消息中较小端的保持时间作为双方的保持时间。Cisco 默认保持时间是180 s。
- BGP标识符:4字节,发送者的BGP路由器ID,以IP地址的形式表示。BGP路由器ID的确定方法和OSPF路由器ID确定方法相同。
- 可选参数长度: 1 字节,可选参数的长度。如果为0,则没有可选参数。
- 可选参数:可变长度,用于BGP验证或多协议扩展等功能。包括一个可选参数列表,每个参数由1字节类型字段、1 字节长度字段和一个包含参数值的可变长度字段来确定,即TLV方式。
Update消息
Update消息用于在对等体之间交换路由信息 它既可以发布可达路由信息,也可以撤销不可达的路由信息,其格式如下图所示,个字段含义如下所述:
Update消息
不可用路由长度 |
撤销路由 |
全部路径属性长度 |
路径属性 |
网络层可达 |
- 不可用路由长度: 2字节,撤销路由字段的整体长度,如果为0,说明没有路由被撤销,并且在该消息中没有撤销路由的字段。.
- 撤销路由:可变长度,包含不可达路由的列表。
- 全部路径属性长度: 2字节,路径属性字段的长度。如果为0,则说明没有路径属性字段。
- 路径属性:可变长度,列出与NLRI相关的所有路径属性列表,包括AS_ _PATH、本地优先级和起源等,每个路径属性由-一个TLV (Type-Length-Value) 三元组构成。路径属性是BGP用以进行路由控制和决策的重要信息。
- 网络层可达信息:可变长度,是可达路由的前缀和前缀长度二元组。
Notification消息
当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中
断。其格式如下图所示,各字段含义如下所述。
- 错误编码: 1字节,错误类型。
- 错误子码:1字节,错误类型更详细的信息。
- 数据:可变长度,用于诊断错误的原因,内容依赖于具体的错误编码和错误子码。
Keepalive消息
BGP会周期性(Cisco默认为60 s)地向对等体发出Keepalive消息,用来保持连接的有
效性。其消息格式中只包含BGP包头,没有附加其他任何字段。Keepalive消息的发送周期
是保持时间的1/3,但该时间不能低于1 s。如果协商后的保持时间为0,则不发送Keepalive
消息。
BGP路由决策
BGP使用了描述路由特性的很多属性。这些属性和每-一个路由一起在BGP更新报文中
被发送。路由器使用这些属性去选择到目的地的最佳路由。理解BGP路由判定的过程非常重
要,下面按优先顺序给出了路由器在BGP路径选择中的判定过程:
- 如果下一跳不可达,则不考虑该路由。
- 优先选取具有最大权重(Weight) 值的路径,权重是Cisco专有属性。
- 优先选取具有最高本地优先级的路由。
- 优先选取源自于本路由器(即下- -跳为“0.0.0.0" )上BGP的路由。
- 优先选取具有最短AS路径的路由。
- 优先选取有最低起源代码(IGP
- 优先选取具有最低MED值的路径。
- 在EBGP路由和联盟EBGP路由中,首选EBGP路由;在联盟EBGP路由和IBGP
路由中,首选联盟EBGP路由。
- 优先选取离IGP邻居最近的路径。
- 优先选取最老的EBGP路径。
- 优先选取具有最低BGP路由器ID的路径。
- 优先选取邻居IP地址最小的路径。
BGP路由抑制
BGP路由抑制(Route Dampening)用来解决路由不稳定的问题。路由不稳定的主要表
现形式是路由振荡(Route Flaps),即路由表中的某条路由反复消失和重现。当发生路由振荡
时,路由协议就会向邻居发布路由更新信息,收到更新信息路由器需要重新计算路由并修改
路由表。所以频繁的路由振荡会消耗大量的带宽资源和CPU资源,严重时会影响到网络的正,
常工作。BGP使用路由抑制来防止持续的路由振荡带来的不利影响。BGP路由抑制的工作
示意图如下图所示。
首先介绍几个术语:
- 半衰期:单位为min,每经过半衰期的时间,抑制值就会减半,Cisco 默认为15 min。
- 重新使用界限:当一条被抑制路由的惩罚值低于该值后,该路由重新使用。Cisco 默
认值为750。
- 抑制阈值:超过该值路由被抑制,不再向其他BGP对等体发布更新报文。Cisco 默
认值为2 000.
- 最大抑制时间:被抑制路由的抑制时间超过该值后,不管惩罚值为多少,都会重新
使用,Cisco 默认为60 min,即4倍的半衰期时间。
当一条路由出现振荡时,这条路由会被加上一个1 000的惩罚,这个惩罚会每5 s递减, .
等到15 min时,惩罚会减少到一半,也就是500。
如果这条路由连续出现Flap,每一次Flap这条路由的惩罚都会加1 000,例如,一条路
由连续出现了3次振荡,那么这时候惩罚值就接近3000.当惩罚值大于2 000时,这条路由
就会在BGP表中被标为Suppressed。经过了15 min后(没有发生Flap),这条路由的惩罚
值会被减少- -半到1 500,这条路由还是被标为Suppressed.再经过15 min后,惩罚值减成
750,这条路由才可以重新被使用。也就是说经过30 min,路由器认为这条路由是稳定的,
才会重新使用它。如果这条路由不停地振荡,好比说15次。这时候惩罚值会接近15 000.
每过15 min惩罚值会减少一半,可是到了60 min时,惩罚值还是大于750,这时候因为已经
超过了最大抑制时间,所以这条路由会被重新使用。
需要注意的是,BGP路由抑制只对通过EBGP学到的路由起作用,对IBGP学到的路由
不起作用。