导图社区 bgp
数通-BGP知识框架,考试必备
编辑于2020-03-31 17:01:40BGP
基本概念
特点
用于AS之间其着眼点不在于发现和计算路由,而在于在AS之间选择最佳路由和控制路由的传播。
依靠TCP保证可靠性,协议号179
支持bgp认证
MD5
只针对TCP报文认证,认证信息放在TCP报文option字段
Keychain认证
针对TCP和BGP报文认证,认证报文放在TCP的option字段中,也在bgp报文中
BGP支持无类别域间路由CIDR(Classless Inter-Domain Routing)
BGP从设计上避免了环路的发生
AS之间:BGP通过携带AS路径信息来标记途经的AS,带有本地AS号的路由将被丢弃,从而避免了域间产生环路
AS内部:BGP在AS内学到的路由不再通告给AS内的BGP邻居,避免了AS内产生环路。
BGP是一种距离矢量(Distance-Vector)路由协议
BGP提供了丰富的路由策略,能够对路由实现灵活的过滤和选择。
BGP提供了防止路由振荡的机制,有效提高了Internet网络的稳定性
BGP易于扩展,能够适应网络新的发展
BGP 协议报文
keepalive是周期性发送,其他都是触发更新
报文头部
Marker:占16字节,用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全“FF”)。
Length:占2个字节(无符号位),BGP消息总长度(包括报文头在内),以字节为单位。长度范围是19~4096。
Type:占1个字节(无符号位),BGP消息的类型。Type有5个可选值,表示BGP报文头后面所接的5类报文(其中,前四种消息是在RFC4271中定义的,而Type5的消息则是在RFC2918中定义的):
1.open
作用:用于建立BGP对等体连接
主要字段解释
version:4
My AS:本地AS编号
Hold Time:老化时间,比较两端较小值作为协商的结果,0s表示不老化
BGP Identifier:route-id
optional parameters:bgp验证和多协议扩展等功能可选参数,每一个参数为一个TVL三元组
2.update
用于在对等体之间交换路由信息。每份update具有相同路径属性的路由,或者拥有对等体之间撤销不可达的路由信息
主要字段:
withdrawn routers length:不可达路由长度,更新报文值为0
withfrawn routers:不可达路由列表:撤销路由时,不携带路径属性
Total path attribute length:路径属性字段长度
path attribute:所有路径属性列表(一般多个并存),每个路径属性由一个TLV构成
flags:标识此属性属于哪一类(例:)
Attr.Flags:占1个字节(8个bit),表示属性的标记,其每个bit位的意义如下显示:O: Optional bit, 属性的可选性。决定属性是否为必携带属性。带可选属性(optional)设为1,公认属性(well-known)设为零。T: Transitive bit 属性的可传递性。对于可选属性,是可传递的设为1,非可传递的设为0。对于公认属性必须设为1。P: Partial bit 属性的局部性。对于可传递的可选属性是局部的设为1,是完全的设为零。对于非可传递的的可选属性和公认属性,必须设为零。E: Extended Length bit 决定该属性的长度的字段(即Attr. Length)是否需要扩展。不需要扩展则设为零,Attr. Length占1个字节;需要扩展则设为1,Attr. Length占2个字节。U: Unused bits 低4位没有使用,发送时必须全部设为零,并且在接收时被忽略。
type:属性类型
见BGP属性:
length:长度
value:属性值
见BGP属性
Network Layer Reachability Information(NLRI)包含要更新的地址前缀列表每一个地址前缀单元由一个LV二元组:组成
包含要更新的地址前缀列表,每一个地址前缀单元由一个LV二元组(prefix length, the prefix of the reachable route)组成,其编码填写方法与Withdrawn Routes的填写方法相同。
prefix length(即掩码)例:32
the prefix of the reachable route(路由前缀)例:10.1.1.1
报文发送条件
初建立邻居关系,交换路由信息
新增或撤销路由,触发更新
收到route-refresh报文
使用命令refresh bgp all export
3.notification
用于中断BGP连接。
4.keepalive
用于保持BGP连接。
5.router-refresh
用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。
BGP属性
公认必遵
公认必须遵循(Well-known mandatory):所有BGP设备都可以识别此类属性,且必须存在于Update报文中。如果缺少这类属性,路由信息就会出错。
AS-Path
Next_hop
BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址
BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。
下一跳指的是下一个AS
origin
IGP
具有最高的优先级。IBGP设备通过network命令注入到BGP路由表的路由,本AS内路由
EGP
优先级次之。通过EGP得到的路由信息
Incomplete
优先级最低。比如BGP通过import-route命令引入的路由
公认任意
公认任意(Well-known discretionary):所有BGP设备都可以识别此类属性,但不要求必须存在于Update报文中,即就算缺少这类属性,路由信息也不会出错。
local_Pref
判断流离开AS的最佳路由;作用于一个AS内部;当BGP的设备通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由大值优先,缺省值100
automatic-aggregate
可选过渡
可选过渡(Optional transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,但它仍然会接收这类属性,并通告给其他对等体。
团体属性
是一组有相同特征的目的地址的集合。团体属性用一组以4字节为单位的列表来表示,NE40E中团体属性的格式是aa:nn或团体号。 aa:nn:aa和nn的取值范围都是0~65535,管理员可根据实际情况设置具体数值。通常aa表示自治系统AS编号,nn是管理员定义的团体属性标识。例如,来自AS100的一条路由,管理员定义的团体属性标识是1,则该路由的团体属性格式是100:1。 团体号:团体号是0~4294967295的整数。标准协议中定义,0(0x00000000)~65535(0x0000FFFF)和4294901760(0xFFFF0000)~4294967295(0xFFFFFFFF)是预留的。 团体属性用来简化路由策略的应用和降低维护管理的难度,利用团体可以使多个AS中的一组BGP设备共享相同的策略。团体是一个路由属性,在BGP对等体之间传播,且不受AS的限制。BGP设备在将带有团体属性的路由发布给其它对等体之前,可以先改变此路由原有的团体属性。对等体组可以使一组对等体共享相同的策略,而团体可以使一组路由共享相同的策略。除了使用公认的团体属性外,用户还可以使用团体属性过滤器过滤自定义扩展团体属性,以便更为灵活的控制路由策略。
公认团体属性
Internet
设备在收到具有此属性的路由后,可以将任何BGP对等体发送该路由。
No_Advertise
设备收到具有此属性的路由后,将不向任何BGP对等体发送该路由。
No_Export
设备收到具有此属性的路由后,将不向AS外发送该路由。
No_Export_Subconfed
设备收到具有此属性的路由后,将不向AS外发送该路由,也不向AS内其他子AS发布此路由。
自定义团体属性
可选非过渡
可选非过渡(Optional non-transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,则会被忽略该属性,且不会通告给其他对等体
MED
判定流量进入AS的最佳路由BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方ASMED小值优先,缺省值0
Originator_ID
Originator ID由RR产生
使用的Router ID的值标识路由的始发者
用于防止集群内产生路由环路
当设备接收到这条路由的时候,将比较收到的Originator ID和本地的Router ID,如果两个ID相同,则不接收此路由。
当一条路由第一次被RR反射的时候,RR将Originator_ID属性加入这条路由,标识这条路由的发起设备。如果一条路由中已经存在了Originator_ID属性,则RR将不会创建新的Originator_ID属性。
Cluster_List
路由反射器和它的客户机组成一个集群(Cluster)
使用AS内唯一的Cluster ID作为标识
为了防止集群间产生路由环路
当一条路由第一次被RR反射的时候,RR会把本地Cluster ID添加到Cluster List的前面。如果没有Cluster_List属性,RR就创建一个。
当RR接收到一条更新路由时,RR会检查Cluster List。如果Cluster List中已经有本地Cluster ID,丢弃该路由;如果没有本地Cluster ID,将其加入Cluster List,然后反射该更新路由。
路由反射器使用Cluster_List属性,记录路由经过的所有集群的Cluster ID。
累加IGP度量值AIGP
是一种新的BGP路由属性,用于传递并累加IGP Metric值
属性类型码是26
路由传递的过程
bgp邻居关系建立
邻居关系类型
IBGP
同一AS内部
一般用环回地址,跨跳建立邻居
环回路由器IGP可达
指定更新源
EBGP
不同AS之间
一般使用直连物理口地址建立邻居
冗余链路使用loopback地址建立邻居
环回地址路由可达
指定更新源
设置egbp邻居多跳
状态机
idle
初始状态
任何状态中收到Notification报文 或TCP拆链通知等Error事件后,BGP都会转至Idle状态
停留idle状态可能原因:
指peer的地址路由表中没有路由,无法发起TCP连接
没有开启该地址族
双方都没明细路由,用的默认路由,tcp建立不了连接
ebgp邻居使用loopback口建立,没有配置EBGP多跳
启动条件:
start事件(peer动作)
查到邻居路由
发送TCP请求连接(主动)
有路由,发出TCP SYN(被动),进行TCP连接(同时连接,只保留端口ip大的tcp连接)
connect
BGP启动连接重传定时器(Connect Retry),等待TCP完成连接
TCP连接成功,向对等体发送Open报文,并转至OpenSent状态
TCP连接失败,转至Active状态
连接重传定时器超时,停留在Connect状态
停留connect状态原因:
tcp被过滤,收不到tcp确认
单通故障
单方面配置认证
active
Active状态下,BGP总是在试图建立TCP连接
TCP连接成功,对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态
TCP连接失败,停留在Active状态
连接重传定时器超时,转至Connect状态
停留active状态原因:
邻居没有配置更新源
邻居peer指的地址错误
邻居没有指peer
(每32s来回切换connect和active状态)
opensent
BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查
收到的Open报文正确,发送Keepalive报文,并转至OpenConfirm状态
收到的Open报文有错误,发送Notification报文给对等体,并转至Idle状态。
openconfim
在OpenConfirm状态下,BGP等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。
established
BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文
收到正确的Update或Keepalive报文,保持BGP连接
收到错误的Update或Keepalive报文,转至Idle状态
Route-refresh报文不会改变BGP状态
收到Notification报文,TCP拆链通知,转至Idle状态。
影响邻居关系建立的参数
版本 默认V4
route-id唯一
标识一台BGP路由器
控制选路
RR场景防环
AS号
建立邻居时,检查open报文中AS是否与配置邻居的AS号一致
能力属性:单播、组播、IPV4\IPV6\VPNV4、路由器是否支持路由刷新和4字节AS号
认证:指定peer时配置认证,认证密钥一致
BGP对路由的处理过程
1.收到路由的方式
bgp注入路由方式
import
network
从邻居收到bgp路由
2.过滤(可选):import经过引入策略/学到的bgp路由经过入口策略
3.路由聚合
自动聚合
summary automatic
手动聚合
aggregate 【net 】【mask】
为了避免路由聚合可能引起的路由环路,BGP设计了AS_Sst属性
AS_Sst属性是一种无序的AS_Path属性,标明聚合路由所经过的AS号。当聚合路由重新进入AS_Sst属性中列出的任何一个AS时,BGP将会检测到自己的AS号在聚合路由的AS_Sst属性中,于是会丢弃该聚合路由,从而避免了路由环路的形成。
4.bgp选路
最优路由选择
P1.协议首选值prefval最大的路由
协议首选值是华为设备的特有属性,该属性仅在本地有效。peer 3.3.3.3 preferred-value 200
P2.优选本地优先级Local-Pref最高的路由
如果路由没有本地优先级,BGP选路时将该路由按缺省的本地优先级100来处理。通过执行default local-preference命令可以修改BGP路由的缺省本地优先级。
N3.优选手动聚合、自动聚合、network引入、import-route引入的路由、从邻居学来的路由
P4.优选AS-Path最短的路由
AS_Path的长度不包括AS_CONFED_SEQUENCE和AS_CONFED_SET。AS_SET的长度为1,无论AS_SET中包括多少AS号。执行bestroute as-path-ignore命令后,BGP选路时,忽略AS_Path的比较。配置load-balancing as-path-ignore命令后,As_Path不同的路由也可以进行负载分担。
O5.依次优选Origin类型为IGP、EGP、Incomplete的路由。
incomplete引入的其它路由协议的路由信息
M6.来自同一AS的路由,优选MED(Multi Exit Discriminator)值最低的路由
如果配置了bestroute med-plus-igp命令,将优选MED值与IGP Metric分别乘对应系数相加的结果较小的路由。 BGP只比较来自同一个AS(不包括联盟的子AS)的路由的MED值。即,只有两条路由的AS_SEQUENCE(不包括AS_CONFED_SEQUENCE)属性的第一个AS号相同时,BGP才会比较二者的MED值。如果路由没有MED属性,BGP选路时将该路由的MED值按缺省值0来处理;执行bestroute med-none-as-maximum命令后,BGP选路时将该路由的MED值按最大值4294967295来处理。执行compare-different-as-med命令后,BGP将强制比较来自不同自治系统中的邻居的路由的MED值。除非能够确认不同的自治系统采用了同样的IGP和路由选择方式,否则不要使用compare-different-as-med命令(可能产生环路)。执行deterministic-med命令后,将消除路由接收顺序对选路结果的影响。
E7. 依次优选本地vpn路由、LocalCross路由、RemoteCross路由、EBGP路由、IBGP路由
LocalCross路由指本地VPN交叉路由或公私网互引路由。PE上某个VPN实例的VPNv4路由的ERT匹配其他VPN实例的IRT后复制到该VPN实例,称为LocalCross;从远端PE学习到的VPNv4路由的ERT匹配某个VPN实例的IRT后复制到该VPN实例,称为RemoteCross。
I8. 优选到BGP下一跳IGP度量值(metric)最小的路由。
执行bestroute igp-metric-ignore命令后,BGP选路时,忽略IGP Metric的比较
C9. 优选Cluster_List最短的路由。
缺省情况下,BGP在选择最优路由时Cluster-List优先于Router ID。配置bestroute routerid-prior-clusterlist命令后,BGP在选择最优路由时Router ID优先于Cluster-List。
R10. 优选Router ID最小的设备发布的
执行bestroute router-id-ignore命令后,BGP选路时,忽略Router ID的比较。如果路由携带Originator_ID属性,选路过程中将比较Originator_ID的大小(不再比较Router ID),并优选Originator_ID最小的路由。
A11. 优选从具有最小IP Address的对等体学来的路由。
优选路由下发ip路由表
5.通过出口策略对路由进行过滤
6.将通过策略的路由发给邻居
通告原则
1.bgp只通告在本地BGP路由器最优且有效的的路由
本地始发的路由都是最优且有效的路由,通告所有IBGP和EBGP邻居
2.从EBGP对等体学到的路由,发给所有除发送者之外的IBGP和EBGP邻居,通告给IBGP对等体默认不修改下一跳属性
3.从IBGP邻居学到的路由,BGP设备只发布给它的EBGP对等体
BGP Speaker从IBGP获得的路由是否通告给它的EBGP对等体要依IGP和BGP同步的情况来决定: 从IBGP获得的路由仅发布给它的EBGP对等体: 关闭BGP同步的情况下,IBGP路由被直接发布 开启BGP同步的情况下,该IBGP路由只有在IGP也发布了这条路由时才会被发布给EBGP对等体 默认情况下同步未开启
4.路由更新时,BGP设备只发送更新的BGP路由
5.所有对等体发送的路由,BGP设备都会接收。
负载分担
当到达同一目的地址存在多条等价路由时,可以通过BGP等价负载分担实现均衡流量的目的。形成BGP等价负载分担的条件是“BGP选择路由的策略”的1至8条规则中需要比较的属性完全相同。
应用
路由反射器
作用
在IBGP对等体间使用路由反射器解决IBGP全互联问题
Cluster_List属性和Originator_ID属性防止路由环路
路由器角色
路由反射器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属性用于防止集群间产生路由环路。
备份路由反射器
路由反射器RR1和RR2在同一个集群内,配置了相同的Cluster ID。 当客户机Client1从EBGP对等体接收到一条更新路由,它将通过IBGP向RR1和RR2通告这条路由。 RR1和RR2在接收到该更新路由后,将本地Cluster ID添加到Cluster List前面,然后向其他的客户机(Client2、Client3)反射,同时相互反射。 RR1和RR2在接收到该反射路由后,检查Cluster List,发现自己的Cluster ID已经包含在Cluster List中。于是RR1和RR2丢弃该更新路由,从而避免了路由环路。
所有RR必须使用相同的Cluster ID,
多集群路由反射器
一个AS中可以存在多个集群,各个集群的RR之间建立IBGP对等体。当RR所处的网络层不同时,可以将较低网络层次的RR配成客户机,形成分级RR。当RR所处的网络层相同时,可以将不同集群的RR全连接,形成同级RR。
分级路由反射器
同级路由反射器
RR向IBGP邻居发布路由规则
从非客户机学到的路由,发布给所有客户机。
从客户机学到的路由,发布给所有非客户机和客户机(发起此路由的客户机除外)
从EBGP对等体学到的路由,发布给所有的非客户机和客户机
BGP联盟
原理
联盟将一个AS划分为若干个子AS。每个子AS内部建立IBGP全连接关系,子AS之间建立联盟EBGP连接关系,但联盟外部AS仍认为联盟是一个AS。配置联盟后,原AS号将作为每个路由器的联盟ID。这样有两个好处: 一是可以保留原有的IBGP属性,包括Local Preference属性、MED属性和NEXT_HOP属性等; 二是联盟相关的属性在传出联盟时会自动被删除,即管理员无需在联盟的出口处配置过滤子AS号等信息的操作。
与反射器对比
反射器
不需要更改现有的网络拓扑,兼容性好。配置方便,只需要对作为反射器的设备进行配置,客户机并不需要知道自己是客户机。集群与集群之间仍然需要全连接。适用于中、大规模网络。
联盟
需要改变逻辑拓扑。所有设备需要重新进行配置。联盟的子AS之间是特殊的EBGP连接,不需要全连接。适用于大规模网络。
路由衰减
路由不稳定的主要表现形式是路由振荡(Route Flapping),即路由表中的某条路由反复消失和重现 BGP衰减使用惩罚值(Penalty Value)来衡量一条路由的稳定性,惩罚值越高则说明路由越不稳定。路由每发生一次振荡,BGP便会给此路由增加一定的惩罚值(路由从激活状态变为未激活状态,惩罚值增加1000,路由在激活状态,收到新的路由更新,惩罚值加500)。当惩罚值超过抑制阈值(Suppress Value)时,此路由被抑制,不加入到路由表中,也不再向其他BGP对等体发布更新报文。被抑制的路由每经过一段时间,惩罚值便会减少一半,这个时间称为半衰期(Half-life)。当惩罚值降到再使用阈值(Reuse Value)时,此路由变为可用并被加入到路由表中,同时向其他BGP对等体发布更新报文。上文提到的惩罚值、抑制阈值和半衰期都可以手动配置。
默认不开启。需要手工配置,只能针对EBGP路由进行设置
BGP与BFD联动
扩展
BGP防环
AS内防环
IBGP邻居之间通过IBGP水平分割防环
路由反射器通过cluster_list防环,客户端通过orginator_ID防环
在联盟confederation内,成员AS号防环
AS间防环
EBGP邻居通过AS-PATH防环
接收路由时,发现AS-PATH列表有本AS号,则不接受此路由
路由策略
路由策略的实现
定义规则
定义将要实施路由策略的路由信息的特征,即定义一组匹配规则。可以用路由信息中的不同属性作为匹配依据进行设置,如目的地址、发布路由信息的路由器地址等。
过滤器
访问控制列表(ACL)
地址前缀列表(IP-Prefix List)
AS路径过滤器(AS-Path-Filter)
团体属性过滤器(Community-Filter)
RD属性过滤器(Route Distinguisher-Filter)
Route-Policy
Route-Policy由节点号、匹配模式、if-match子句、apply子句和goto next-node子句组成。
节点号
匹配模式:permit和deny。
if-match子句
apply子句
goto next-node子句
应用规则
将匹配规则应用于路由的发布、接收和引入等过程的路由策略中
BGP EVPN
BGP4+
BGP4+是一种用于自治系统AS(Autonomous System)之间的动态路由协议,它是对BGP的扩展。传统的BGP4只能管理IPv4的路由信息,对于使用其它网络层协议(如IPv6等)的应用,在跨自治系统传播路由信息时就受到一定限制。为了实现对IPv6协议的支持,BGP4需要将IPv6协议的信息反映到NLRI(Network Layer Reachable Information)属性及Next_Hop属性中。BGP4+中引入的两个NLRI属性分别是: MP_REACH_NLRI:Multiprotocol Reachable NLRI,多协议可达NLRI。用于发布可达路由及下一跳信息。 MP_UNREACH_NLRI:Multiprotocol Unreachable NLRI,多协议不可达NLRI。用于撤销不可达路由。BGP4+中的Next_Hop属性用IPv6地址来表示,可以是IPv6全球单播地址或者下一跳的链路本地地址。BGP4+是利用BGP的多协议扩展属性,来达到在IPv6网络中应用的目的,BGP协议原有的消息机制和路由机制并没有改变。