BGP 边界网关协议
用于自治系统间的动态路由协议
协议特性
路径矢量路由协议,避免环路
由TCP协议承载,端口号179
支持CIDR和路由聚合
附带丰富的属性
只发送增量路由更新
路由过滤和路由策略
路由策略主要影响路由器如何学习和通告路由信息,而策略路由则影响路由器如何转发实际的数据包
路由策略:
路由策略主要应用于路由协议层面,影响路由信息的传播和路由选择。
它通过修改路由属性(如路由标记、路由映射等)来影响其他路由器接收到的路由信息。
路由策略通常用于控制外部路由信息的接收和发送,例如在BGP网络中控制不同AS间的路由信息交换。
路由策略是在路由协议更新过程中起作用,决定了哪些路由被宣告、修改或过滤。
策略路由:
策略路由则是在数据包转发层面起作用,它决定了单个数据包的转发路径。
策略路由通常基于数据包的特定属性(如源地址、目的地址、端口号等)来制定转发策略。
它允许网络管理员为特定的数据流指定一条不同于正常路由表的路径。
策略路由适用于需要对特定流量进行精细控制的场景,比如流量工程或安全策略实施。
角色
BGP发言者:运行着bgp协议的路由器称为bgp发言者
IBGP对等体:处于同一个as,运行bgp,建立了tcp连接
EBGP对等体:处于不同的as,运行bgp,建立了tcp连接
AS:一堆路由器的集合,且运行同一种路由协议
BGP发言策略
BGP只会发送有效的路由
BGP只会发送最优的路由发送给对方
从IBGP学来的路由不会向他的IBGP对等体发布---IBGP防环 水平分割
BGP从EBGP学来的路由会发送给所有的BGP对等体
IBGP邻居使用全互联方式建立
IBGP一般使用逻辑接口建立邻居
EBGP一般使用默认的物理接口来建立(ttl 1),网络可达
BGP不会计算路由只能手动控制路由刷新
update:路由增加(会携带路由属性+前缀长度)和删减(携带前缀长度不加路由属性)
BGP报文
Open:用于建立BGP对等体之间的连接关系,交换参数:版本号,路由器id
Keepalive:周期性地向BGP对等体发出Keepalive消息,用来保持连接的有效性
周期性60s 180s老化
Update:携带的是路由更新(删减、增加)信息
Withdrawn Routes:之前发布过的,现在不再有效的路由信息
Path Attributes:路由信息的属性(附加描述),是BGP用以进行路由控制和决策的信息,如LP属性、MED属性等等;
NLRI:路由信息,由一个或者多个IPv4地址前缀组成,这个就是需要发布给邻居的新生效的路由信息。
Notification:当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即被关闭
Roter-refresh:要求对等体重新发送指定地址族的路由信息
修改物理接口为更新源后只会影响BGP协议报文从这个接口进行转发,不会影响其他的路由转发
BGP协议状态机
Idle状态:
BGP刚开始时的状态,或者当BGP连接被重置时进入该状态。
在此状态下,BGP不会尝试建立任何连接。
Connect状态:
BGP尝试建立TCP连接到对等体(peer)。
如果TCP连接成功,状态将变为OpenSent;如果失败,则变为Active状态。
Active状态:
BGP尝试重新建立TCP连接到对等体。
如果TCP连接成功,状态将变为OpenSent。
OpenSent状态:
BGP发送Open消息给对等体,并等待对等体的Open消息。
如果接收到的Open消息被接受,BGP发送Keepalive消息,并进入OpenConfirm状态。60s一次,180s老化
如果Open消息被拒绝,BGP发送Notification消息,并进入Idle状态。
OpenConfirm状态:
BGP等待Keepalive或Notification消息。
如果收到Keepalive消息,BGP进入Established状态。
如果收到Notification消息,BGP进入Idle状态。
Established状态:
BGP已经建立连接,并开始交换Update、Keepalive和Notification消息。
这是BGP正常操作的状态。
如果TCP连接断开,BGP将进入Active状态。
如果收到一个错误,BGP发送Notification消息,并进入Idle状态。
BGP路由属性分类
公认必遵属性
AS-PATH(EBGP防环)
当通告一条bgp路由,如果这条bgp路由离开该as号添加在as-path列表最前面
如果收到设备收到了该路由,检查as-path列表,如果在列表内发现了自身的as号认为产生了环路
NEXT-HOP
IBGP内部下一跳不变
BGP发言者从EBGP学来的路由发送给IBGP对等体下一跳不变
BGP发言者从IBGP学来的路由下一跳为BGP发言者的出口IP
ORIGIN
定义路由信息的来源,标记一条路由是怎么成为BGP路由的
IGP:表明路由信息产生于AS内部,一般是聚合路由或者通过Network命令引入的路由
EGP:路由信息是通过EGP协议引入的
incomplete:路由信息是通过其他方式来的,一般是通过import引入的IGP路由或者静态
IGP优先于EGP,EGP优先于incomplete
公认可选属性
LOCAL-PREF:本地优先级,用于AS内IBGP邻居选择离开本AS时的最佳路由,它表明BGP路由器的优先级
仅在IBGP对等体之间交换,不传递或通告给其他EBGP对等体
可选传递属性
可选非传递属性
MED:相当于IGP路由协议使用的度量值metric,当一个AS有多个入口点时,用于判断流量进入AS时的最优路径,默认为0
仅在相邻两个AS之间传递,收到此属性的AS一方不再将其通告给任何其他第三方AS
在选路时默认忽略不同 AS 的 MED 值比较,再某些特殊选路场景下可手工通过命令实现强制比较
compare-different-as-med
BGP的路由优选
首先丢弃下一跳(NEXT-HOP)不可达的路由;
优选首选值(Preferred-value)值最大的路由;
优选本地优先级(LOCAL-PREF)最高的路由;
依次选择network命令生成的路由、import-route命令引入的路由、聚合路由;
优选AS路径(AS-PATH)最短的路由;
依次选择ORIGIN属性为IGP、EGP、Incomolete的路由;
优选MED值最低的路由;(只能在区域间做)
依次选择EBGP、联盟EBGP、联盟IBGP、IBGP学来的路由;
优选下一跳度量值最低的路由;
优选CLUSTER-LIST长度最短的路由;
优选ORIGINATOR-ID最小的路由;
优选Router id最小的路由器发布的路由
优选IP地址最小的对等体发布的路由
控制路由
控制路由可以通过两种方式实现。一种是通过BGP的基本属性实现对BGP选路的控制。二是通过配置过滤器来实现对BGP选路的控制和过滤
给从对等体接收的路由分配首选值来影响选路
修改Local-Preference本地优先值来实现选择离开本地AS时的最佳路由
修改MED值实现选择进入AS时的最佳路由
配置next-hop-local实现将自身地址作为下一跳
过滤器
Filter-policy:实现对接收或者发布的路由过滤
Route-policy:不仅可以实现路由过滤还可以对符合规则的路由增加或修改属性
ACL、地址前缀列表
AS路径访问列表:可以实现针对自治系统路径来控制路由
正则表达式:一个AS过滤表可以包含多个表项,表项之间时“或”的关系
正则表达式


解决大规模BGP网络所遇到的问题
BGP对等体众多
对等体组:IBGP对等体组、EBGP对等体组
BGP团体:
INTERNET:可以被通告给所有的BGP对等体,缺省都属于此属性
NO-EXPORT:不能被发布到本地AS之外,如果有联盟,不能发布到联盟之外,可以发布到联盟内其他AS
NO-ADVERTISE:不能被通告给任何其他的BGP对等体
NO-EXPORT-SUBCONFED:不能被发布到本地AS之外,也不能发布到联盟中其他子AS
BGP路由表庞大
BGP路由聚合
自动聚合:
只能对引入的IGP子网路由进行聚合,不能对邻居学来的路由、network发布的路由进行聚合
手动聚合:
不仅可以对IGP引入的路由和用network发布的路由进行聚合,还可以定义聚合路由的子网掩码长度
IBGP全连接
BGP路由反射
反射器(RR)从客户机收到的路由会反射给所有的客户机与非客户机,除了这条路由的始发者;
反射器(RR)从非客户机收到的路由,仅发射给客户机,非客户机之间需要建立IBGP
为了防止AS内部的路由环路,路由反射器使用了两个属性:ORIGINATOR_ID和CLUSTER_LIST
ORIGINATOR_ID属性用以写到本地AS内部路由发起者的路由器ID,CLUSTER_LIST记录一条路由经过群的群ID来跟踪它的反射路径。
BGP发言者将丢弃ORIGINATOR_ID与自己路由器ID相同的路由信息;而路由反射器会检查接收到的路由信息中的CLUSTER_LIST,如果在其中发现了自己集群的集群ID,那么就将丢弃此路由信息。
BGP联盟
联盟将一个自治系统划分为若干个子自治系统,每个子自治系统内部的IBGP对等体建立全连接,子自治系统之间建立联盟内部EBGP连接关系
路由变化频繁
BGP路由衰减
用来解决路由不稳定的问题,每震荡一次就会增加惩罚值,到达一定的数值,不参与路由选举