BGPv4 |
您所在的位置:网站首页 › 常用蓝牙协议介绍 › BGPv4 |
个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。 因此本文将在BGP Version4协议上进行介绍,以详细介绍BGP的相关内容。 Border Gateway Protocol自1989年定义以来已经历过4个版本:1989RFC1105的Version1,1990RFC1163的Version2,1991RFC1267的Version3,1994RFC1654的Version4。而V4又历经了几次迭代,到目前比较全面完整的是2006RFC4271。 本文将以RFC4271为参考对BGP进行基础内容的相关介绍。对BGP的扩展协议,EVPN(RFC7432),MP-BGP(RFC4760)等,以及BGP的众多更新RFC暂不做相关介绍。 本文档旨在介绍相关原理,对于不同设备及厂家的实现上不做深究。有意者建议阅读相关设备资料。个人能力有限,如有疑问欢迎留言指导~ 目录 BGPv4 目录1.基础内容1.1.相关术语和概念 2.BGP报文介绍2.1.Open报文介绍2.2.Update报文介绍2.3.Notification、Keepalive和Route-Reflesh报文介绍2.4.常用的BGP Path Attributes 3.BGP的程序动作3.1.FSM Event-有限状态机事件3.2.BGP FSM-BGP状态机3.3.Update消息的处理 4.BGP相关特性4.1.BGP路由选路原则4.2.BGP Route-Reflect--路由反射4.3.BGP Confederations--联盟4.4.正则表达式4.5.BGP的路由聚合 更新 1.基础内容Border Gateway Protocol(BGP)是一个自治(Autonomous System)系统间的路由协议。BGP的主要功能是与其他BGP系统交换网络可达性信息。 虽然BGP也可用于生成/宣告路由,但其最主要的功能还是在系统之间传递路由。并且可在传入传出路由时进行相应的修改,也即路由策略。 1.1.相关术语和概念为便于介绍,在此先介绍一些关于BGP的相关术语: Autonomous System自治系统 单个路由协议管理下的一组路由器,使用内部网关协议(IGP)和通用度量来确定如何在AS内路由数据包。如果一个AS内运行了多个IGP协议,对于其他AS来说也认为其执行了内部一致的路由规则。 三张处理表/库 1@–Adj-RIB-In:邻居入方向的路由信息表/库。用于描述对等体向自己传输的完整路由信息。该路由表未进行入方向的路由策略。 2@–Adj-RIB-Out:邻居出方向的路由信息表/库。用于描述自己向对等体描述的路由信息,或者放置于Update消息报文中的路由信息。该路由表已进行出方向的路由策略。 3@–Loc-RIB:放置已被本地BGP以便进行选择的路由。该路由表已进行入方向的路由策略。 因此有如下的路由处理过程: NLRI Network Layer Reachability Information,网络层可达信息。放置于Update报文中,主要描述了路由相关信息或路由的相关属性。 IBGP/EBGP Internal和External BGP,简单来说为相同AS的为IGP,相反为EBGP 相关概念: 1@:BGP使用TCP的179端口进行相关协议报文的发送和监听。 2@:在建立了完整的BGP对等体关系后,BGP只发送增量更新。而非周期性泛洪或刷新路由表。 因此BGP为了使路由有正确的结果需要周期保活或使用Rout-Refrsh路由刷新。 BGP提供了如下三种机制进行路由更改: 1@:发送withdraw类型的Update报文,将该路由进行撤销 2@:发送具有相同NLRI的Update报文,进行更新。通过此种方式可以更改路由的属性。 3@:中断BGP连接 2.BGP报文介绍BGP基于TCP协议,因此在进行BGP对等体关系建立时,需要进行BGP的三次握手。 并且BGP的加密主要也通过TCP的加密来实现: BGP协议主要有4种报文: 1@–Open:用于邻居关系的建立 2@–Update:用于传递路由及其属性 3@–Notification:用于传递BGP的差错信息 4@–Keepalive:用于对等体邻居关系的保活 除此之外,RFC2981还定义了Type5 Refresh BGP报文的底层格式: 与TTL相关的命令: BGP的公共头:
BGP Identifier:BGP标识,4字节无符号整数。用于全网唯一标识一台BGP邻居。也即Router-ID。
Optional Parameters Length:选项参数长,1字节。用于携带可选选项。 Optional Parameters:选项参数。 Parm. Type:Optional Parameters的类型,1字节。在Open报文中必须为2。 Parm. Length:Parameter Value的长度,1字节。 Parameter Value (variable):主要有1个或多个组成。 自动换行 Capability Code1字节。可分为3类:1-63被定义为IETF Review,64-238用于First Come First Served,239-254用于Experimental Use。0和255为Reserved。 Capability Length1字节。描述的是Capability Value长度。 自动换行 Optional Parameters描述了路由器所支持的BGP功能,如果一方收到自己不支持的功能,则应回送错误子码Unsupported Optional Parameter的NOTIFICATION消息。此时需重新建立邻居关系。不可使用两方都未在Open报文中通告的Capabilities。 详细内容可查阅可参考2009年发布的RFC5492和可参考2020年发布的RFC8810。 4字节AS Number: 2012年发布的RFC6793,将AS Number扩充为4字节。并定义了4字节AS Number的表达方式。 并且定义了一个独特的AS Number23456用于衔接网络中既有2字节AS Number又有4字节AS Number时的情况。 此时定义新PATH Attribute:AS4_PATH(Type code=17, Optional Transitive)和AS4_AGGREGATOR(Type code=18, Optional Transitive) AS4_PATH(Type code=17)具体原理:在途径多个AS时同时携带AS_PATH和AS4_PATH,每经过一个4字节AS Number就填充至AS4_PATH,而在AS_PATH填充23456。从而实现多个AS的记录。 AS4_AGGREGATOR(Type code=18)具体原理:将高位2字节置为0从而兼容AGGREGATOR属性。 情况示例:有AS10.1—AS10—AS20.1—AS20—AS30.1—AS30,则AS30收到来自AS10.1的路由为 携带AS_PATH=[23456,20,23456,10,23456]同时携带AS_PATH=[30.1,20.1,10.1]。 自动换行 注意事项: @AS4_PATH对Confederation联盟无效 @当配置4字节AS Number后,Open报文的My AS字段填充为23456,而在Capability中携带真正的AS Number。 @当AGGREGATOR属性不包含23456的AS_Number,则忽略AS4_PATH和AS4_AGGREGATOR属性;反之则忽略AGGREGATOR属性。 @修改AS Number显示格式 其他可选的Capabilities: ORF:Outbound Route Filter出方向的路由过滤能力。 配置特点: @:需要两端都支持该功能/需要两端都进行配置 @:需要指定进行匹配的前缀列表 自动换行 配置示例 ip ip-prefix test index 10 permit 1.1.1.0 28 greater-equal 28 less-equal 32 peer 10.1.2.1 ip-prefix test import peer 10.1.2.1 capability-advertise orf cisco-compatible ip-prefix send //send表示只允许本设备发送ORF报文。 报文逻辑 点击此处回到目录 2.2.Update报文介绍
值0表示此UPDATE消息中既不存在“网络层可达性信息”字段,也不存在“路径属性”字段。 Path Attributes:路径属性,可选字段可变长。 NLRI:网络层可达信息,可选字段可变长。 用于更新路由的Update报文示例 Notification报文:Notification报文描述了BGP进程中出现的告警信息 Error SubCode:1字节。 Notification报文示例: 自动换行 Keepalive报文:Keepalive报文仅携带BGP公共头部 Route Refresh报文示例: 点击此处回到目录 2.4.常用的BGP Path Attributes在《2.2.Update报文介绍》章节中对Update报文进行了简介。此处对其中的Path Attributes字段进行介绍。 Path Attributes分类: 总的来说Path Attributes可分为4种:Well-known mandatory公认必遵,Well-known discretionary公认任意,Optional transitive可选过渡和Optional non-transitive可选非过渡。 自动换行 Path Attributes字段:
second high-order bit:Transitive-bit。置0表示non-transitive,置1表示为transitive; high-order bit为well-known时,second high-order bit必须置1。 third high-order bit:Partial-bit。置0表示complete,置1表示为partial; well-known和non-transitive attributes的attributes,其Partial-bit必须置0。 fourth high-order bit:Extended Length-bit。置0表示Attribute Length为1字节,置1表示Attribute Length为2字节。 Type Code:Path类型,1字节。用于描述所携带Path的类型。 Length:Path Attributes的value字段的长度,1字节或2字节。取决于Extended Length-bit。 Value:Path Attributes的value字段,可选项。 常用的Path Attributes:Length都取1字节。 Origin: Type Code 1 属性: Well-known mandatory也即公认必遵 Value: Value=0表示IGP,通过network命令注入的路由; Value=1表示EGP,通过EGP学习得到的路由; Value=2表示INCOMPLETE,通过其他方式学习到的路由 Origin描述了路由的引入来源。 @:一般来说Origin值不可被其他BGP Speaker改变。 AS_PATH: Type Code 2 属性: Well-known mandatory也即公认必遵 Value: Value又有SubTLV=Segment Segment Type:1字节。=1为AS_SET表示无序的AS集合,=2为AS_SEQUENCE表示有序的AS集合 Segment Length:可变长。 Segment Value:2字节*N。 AS_PATH描述了路由所历经的AS。 @:BGP Speaker默认传递有序的AS集合,每经历一个最新的AS放置于Segment Value的列表最前。IBGP传递的路由Segment Value为空。 @:BGP Speaker在向IBGP对等体发布某条路由时,不得修改与路由相关的AS_PATH属性。 @:BGP Speaker在向EBGP对等体发布某条路由时,不管其初始Segment Type总是建立有序的AS集合。 @:BGP Speaker在默认情况下接受有序的AS集合的AS_PATH属性时,只允许自己的AS出现1次。用于防止环路 自动换行 其他AS或AS_PATH相关命令: NEXT_HOP: Type Code 3,表示单播IP 属性: Well-known mandatory也即公认必遵 Value: 4字节。 NEXT_HOP描述了路由的下一跳。 通常情况下,Next_Hop属性遵循下面的规则: 1@:BGP Speaker在向IBGP对等体发布本地始发路由,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。 2@:BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。 MULTI_EXIT_DISC:MED(Multi Exit Discriminator) Type Code 4 属性: optional non-transitive也即可选非过渡 Value: 4字节。 MULTI_EXIT_DISC用于区分到相邻自治系统的多个入口点,一般用于影响EBGP邻居对自己的选路。 1@:MED属性如果通过EBGP接收,则可以传播给IBGP 2@:MED属性如果通过IBGP接收,则不可传播给IBGP 3@:如果本地指定删除MED属性,则该程序动作应在进行路由选择之前。 4@:始发路由器可以将MED传给任何邻居,可以是IBGP/EBGP,但邻居收到后,不能传出邻居所在的AS(除非修改了MED)。也即只能在相邻AS内传递。 5@:非始发路由器传给EBGP邻居,不携带MED。 自动换行 其他MED相关命令: LOCAL_PREF: Type Code 5 属性: well-known也即公认任意 Value: 4字节。默认值100。 LOCAL_PREF用于通知其他IBGP对等体路由的优先级。EBGP无效。 1@:告知如何离开本地的AS,是一个出站策略用于路由策略OUT方向。 2@:只在IBGP peer间进行通告。既不传出AS,又忽略EBGP传入的该属性。 自动换行 其他LOCAL_PREF相关命令: ATOMIC_AGGREGATE: Type Code 6 属性: well-known discretionary也即公认自决 Value: 由于Length字段中指定为0,因此实际上没有值。 ATOMIC_AGGREGATE用于路由聚合场景。 BGP发布聚合路由时,需要以知会对等体更精细的路由信息在发布过程中丢失了会附加上ATOMIC-AGGREGATE属性。 自动换行 其他NEXT_HOP相关命令: AGGREGATOR: Type Code 7 属性: optional transitive也即可选过渡 Value: 4字节。 AGGREGATOR用于区分聚合路由的最后一个AS编号。 AGGREGATOR是ATOMIC_AGGREGATE属性的扩展,用于携带路由的精细信息。例如携带AS_SET类型的AS路径。 相关命令将在后续介绍 点击此处回到目录 3.BGP的程序动作在这一章节将介绍BGP的Finite State Machine(FSM,有限状态机)等程序动作。RFC4271指出BGP的数据结构和FSM是概念性的,不必精确地实现,只要实现支持所描述的功能并表现出相同的外部可见行为即可。 3.1.FSM Event-有限状态机事件BGP FSM由Event事件驱动,Event可以是mandatory必遵也可以是optional可选的。 RFC4271定义了28种Event,此处不做过多介绍。有意者可查阅相关资料。 Automatic Administrative Events: Option 1–AllowAutomaticStart:特定于BGP实现的逻辑控制下进行BGP的自动启动。 Option 1–AllowAutomaticStart-Value:TRUE or FALSE Option 2–AllowAutomaticStop:允许BGP自动关闭BGP连接 Option 2–AllowAutomaticStop-Value:TRUE or FALSE 对于该Event Option 1参数为True情况下有三个参数用于控制BGP的自动启动: Option 3–DampPeerOscillations,Option 4–IdleHoldTime和Option 5–IdleHoldTimer。 DampPeerOscillations选项实现用额外的逻辑来阻尼BGP对等体在自动启动和自动停止序列时的振荡。IdleHoldTime指定在允许下一次自动重新启动之前,BGP对等方保持在空闲状态的时间长度。IdleHoldTimer是将对等设备保持在空闲状态的计时器。 自动换行 参考命令: Unconfigured Peers: Option 1–AllowAutomaticStart:允许接受来自未预先配置的邻居的BGP对等连接。 Option 1–AllowAutomaticStart-Value:TRUE or FALSE 参考命令: TCP processing: Option 1–PassiveTcpEstablishment:允许被动等待远程BGP对等方建立BGP TCP连接。 Option 1–PassiveTcpEstablishment-Value:TRUE or FALSE Option 2–TrackTcpState:允许跟踪TCP连接尝试的最终结果或额外交互。 Option 2–TrackTcpState-Value:TRUE or FALSE 参考命令: BGP Message Processing: Option 1–DelayOpen:允许发送/接收OPEN消息延迟DelayOpenTime(Option 2,value:Time in seconds。由Option 3–DelayOpenTimer触发,value:Time in seconds。)。 Option 1–PassiveTcpEstablishment-Value:TRUE or FALSE Option 4–SendNOTIFICATIONwithoutOPEN:允许对等体发送NOTIFICATION,而无需首先发送OPEN消息。 Option 4–SendNOTIFICATIONwithoutOPEN-Value:TRUE or FALSE Option 5–CollisionDetectEstablishedState:表示此BGP连接在已建立状态下处理冲突 Option 5–CollisionDetectEstablishedState-Value:TRUE or FALSE ManualStart: Status:Mandatory,管理员手动启动BGP Status/Action:PassiveTcpEstablishment强制为False AutomaticStart: Status:Optional,系统启动BGP Status/Action:Event发生时,AllowAutomaticStart则强制为True;如果支持PassiveTcpEstablishment则强制为False;Event发生时,如果支持DampPeerOscillations则强制为False。 ConnectRetryTimer_Expires: Definition:ConnectRetryTimer触发 Status:Mandatory。 参考命令: BGPOpen: Definition:收到可用的OPEN message。 Status:Mandatory。 Status/Action:DelayOpen置为False,DelayOpenTimer不运行 KeepAliveMsg: Definition:收到可用的KeepAlive message。 Status:Mandatory。 UpdateMsg: Definition:收到可用的UPDATE message。 Status:Mandatory。 BGP Collision Detection: 2006年RFC4271的section-6.8规定:当一对BGP邻居建立对等体时,通常建立两条TCP连接。此时保留BGP Identifier或者Router-ID大的一端的主动连接。 3.2.BGP FSM-BGP状态机2006年RFC4271的section-8.2.2规定了6种状态机:Idle、Connect、Active、OpenSent、OpenConfirm、Established。在此进行介绍。 此处对RFC4271定义的28种Event及其对应的程序动作不做过多介绍。有意者可查阅相关资料 Idle state:BGP状态机的初始状态。 处于此状态的对等体,BGP拒绝所有入向的连接。并且不分配资源。 @Situation-ManualStart或AutomaticStart Event触发时: 对该对等体初始化所有资源;重置ConnectRetryCounter;启动ConnectRetryTimer;启动TCP连接;监听相应TCP连接;过渡到Connect状态。 ConnectRetryTimer是一个本地值,但应足够大以初始化TCP。 其他相关Event,请查阅相关资料。 Connect state:等待TCP连接完成的状态。 @ManualStop Event触发时: 丢弃TCP连接;释放所有BGP资源;ConnectRetryCounter为0;停止ConnectRetryTimer并将ConnectRetryTimer设置为0;过渡到Idle状态。 @ConnectRetryTimer_Expires Event触发时: 丢弃TCP连接;重启ConnectRetryTimer并将ConnectRetryTimer设置为0;停止DelayOpenTimer并设置为0;初始化TCP连接;继续监听相应TCP连接;维持Connect状态。 @DelayOpenTimer_Expires Event触发时: 发送Open消息;设置HoldTimer;过渡到OpenSent状态 @DelayOpen为False: 停止ConnectRetryTimer并置为0;完成BGP初始化;发送Open消息;设置HoldTimer;过渡到OpenSent状态 @TCP connection fails Event触发时: 如果DelayOpenTimer在运行:重启ConnectRetryTimer并将ConnectRetryTimer设置为0;停止DelayOpenTimer并设置为0;继续监听相应TCP连接;过渡到Active状态。 如果DelayOpenTimer未运行:重启ConnectRetryTimer并将ConnectRetryTimer设置为0;丢弃TCP连接;释放所有BGP资源;过渡到Idle状态。 过渡到OpenSent状态时,设置的HoldTimer建议取4min。 其他相关Event,请查阅相关资料。 Active state:BGP试图通过侦听并接受TCP连接来建立对等体关系的状态。 @ConnectRetryTimer_Expires Event触发时: 重启ConnectRetryTimer并将ConnectRetryTimer设置为初始值;初始化TCP连接;继续监听相应TCP连接;过渡到Connect状态。 @DelayOpenTimer_Expires Event触发时: 将ConnectRetryTimer设置为0;停止DelayOpenTimer并设置为0;完成BGP初始化;发送Open消息;设置HoldTimer;过渡到OpenSent状态。 过渡到OpenSent状态时,设置的HoldTimer建议取4min。 其他相关Event,请查阅相关资料。 OpenSent state:等待来自对等体open报文的状态。 @HoldTimer_Expires Event触发时: 发送相应的NOTIFICATION;将ConnectRetryTimer设置为0;释放所有BGP资源;丢弃相应TCP连接;过渡到Idle状态。 @TcpConnectionFails Event触发时: 关闭BGP连接;重启ConnectRetryTimer;继续监听相应TCP连接;过渡到Active状态。 收到来自对等体且正确的Open报文时: 重置DelayOpenTimer为0;设置ConnectRetryTimer为0;发送KEEPALIVE报文;设置KeepaliveTimer;设置HoldTimer;过渡到OpenConfirm状态。 在这一阶段协商HoldTimer,取两者较小的值。 其他相关Event,请查阅相关资料。 OpenConfirm state:等待来自对等体Keepalive报文的状态。 @在收到Keepalive报文前HoldTimer_Expires Event触发时: 发送相应的NOTIFICATION;将ConnectRetryTimer设置为0;释放所有BGP资源;丢弃相应TCP连接;ConnectRetryCounter增加1;过渡到Idle状态。 @KeepaliveTimer_Expires Event触发时: 发送Keepalive报文;设置KeepaliveTimer;维持OpenConfirm状态。 @BGPOpen Event触发。TCP连接由于冲突检测而关闭时: 发送相应的NOTIFICATION;将ConnectRetryTimer设置为0;释放所有BGP资源;丢弃相应TCP连接;ConnectRetryCounter增加1;过渡到Idle状态。 @收到Keepalive报文时: 重启HoldTimer;过渡到Established状态。 Established state:与对等体交互UPDATE,NOTIFICATION和KEEPALIVE messages的状态。 @HoldTimer_Expires Event触发: 发送相应的NOTIFICATION;将ConnectRetryTimer设置为0;释放所有BGP资源;丢弃相应TCP连接;ConnectRetryCounter增加1;过渡到Idle状态。 @收到Keepalive报文: 重启HoldTimer;维持Established状态。 @收到UPDATE报文: 处理UPDATE报文;重启HoldTimer;维持Established状态。 本地BGP进程每次发送Keepalive或Update报文时,都会重启KeepaliveTimer;+ 其他相关Event,请查阅相关资料。 KeepaliveTimer取1/3 Holdtimer,60s。 点击此处回到目录 3.3.Update消息的处理UPDATE消息仅在Established状态下被接收。 并回忆下三张处理表/库 1@–Adj-RIB-In:邻居入方向的路由信息表/库。用于描述对等体向自己传输的完整路由信息。该路由表未进行入方向的路由策略。 2@–Adj-RIB-Out:邻居出方向的路由信息表/库。用于描述自己向对等体描述的路由信息,或者放置于Update消息报文中的路由信息。该路由表已进行出方向的路由策略。 3@–Loc-RIB:放置已被本地BGP以便进行选择的路由。该路由表已进行入方向的路由策略。 因此有如下的路由处理过程: 2006年RFC4271的section-9将这一过程分成了3个阶段: Calculation of Degree of Preference、Route Selection和Route Dissemination。 Phase 1–Calculation of Degree of Preference:主要基于LOCAL_PREF属性或路由策略对IBGP路由进行确定。 Phase 2–Route Selection:主要考虑Adj-RIBs-in中符合条件的所有可用路由进行路由选择。这里的不可用包括NEXT_HOP不可用,AS_PATH包含循环AS路径等。 RFC4271对路由竞选做出了如下建议,同时说明BGP可以使用任何产生与此结果相同的实现算法。 a@:选择AS_PATH属性中AS最短的。但对于无序排列的AS集合,也即AS_SER型,取长度为1; b@:选择Origin属性中最低Origin Value的。 c@:在相邻的AS(通过AS_PATH确定),比较MED选择MED值小的。没有MED属性则认为其具有最低的MED值。该比较原则较为复杂,有意者可查阅相关资料。 d@:EBGP路由优于IBGP e@:优选到NEXT_HOP的metric小的路由 f@:优选BGP Identifier/Router-ID小的路由 g@:优选peer address小的路由 由于RFC更新调整及各厂家实现上的区别,其他比较原则不在此处做更新。 Phase 3–Route Dissemination:主要基于配置的策略,将Loc RIB中的所有路由处理为Adj-RIB-Out。
Update消息的发送:RFC4271规定了如下原则: @:从IBGP接收的路由不得转发给IBGP邻居,除非你该BGP Speaker为Route-Reflect(RR,路由反射器) @:为了避免过多的路由消息影响链路带宽应当对协议报文发送进行限制。 MinRouteAdvertisementIntervalTimer:发送或撤销特定路由的最短间隔。并且处于快速收敛的需要,IBGP邻居的该参数应短于EBGP。建议分别取5s和30s。 MinASOriginationIntervalTimer:在AS内部通告Update报文的最短时间。 @:为了提高路由信息的传递效率,BGP也支持路由聚合等方式。 聚合有如下原则 @MULTI_EXIT_DISC属性不同的路由,不可聚合。 @NEXT_HOP属性不同的路由,聚合时取自身接口地址。 @如果聚合路由中至少有一条ORIGIN值为INCOMPLETE路由,则聚合路由ORIGIN属性值必须为INCOMPLETE。如果聚合路由中至少有一条ORIGIN值为EGP,则聚合路由ORIGIN属性值必须为EGP值。在所有其他情况下,聚合路由的ORIGIN属性的值为IGP。 @AS_PATH属性相同的路由,聚合时取该AS_PATH。 @被聚合路由中的任何AGGREGATOR属性都不得包含在聚合路由中。 点击此处回到目录 4.BGP相关特性目前来说BGP有如下特性: 1@:BGP路由限制及震荡。
2@:BGP保留BGP Identification/Router-id大的一方发起的TCP会话 3@:IBGP邻居报文的TTL默认255,EBGP邻居报文的TTL默认1。 与TTL相关的命令: 4@:BGP的Keepalive报文发送间隔自动汇总路由>network路由>引入路由。 CISCO始发路由中:network>redistribute>aggregate 4@:比较AS_PATH属性,优选经过AS Number少的。 前边提到AS_PATH可分为AS_SET无序集合和AS_SEQUENCE。对于无序的AS集合部分,认为其长度为1;联盟也认为其为1。 5@:比较Origin属性,优选Value值小的。 Value=0表示IGP,通过network命令注入的路由;Value=1表示EGP,通过EGP学习得到的路由;Value=2表示INCOMPLETE,通过其他方式学习到的路由。 也可表示为i>e>?。 6@:比较MED属性,优选Value值小的。 7@:比较对等体类型,EBGP优于IBGP。 8@:比较到NEXT_HOP的开销,优选开销小的。 如果以上规则无法优选,且此时配置了ECMP则允许ECMP。
Huawei在此之上定义了 9@:比较cluster list,优选短的。 10@:比较BGP Identification/Router-ID,优选小的。如果包含RR属性用originator-id进行比较,优选小的。 11@:比较对等体地址,优选建立邻居地址小的。 CISCO在此之上定义了 9@:从EBGP收到的路由,BGP优先使用最先收到的路由条目(最老的路径)。这能最小化路由抖动。 10@:比较BGP Identification/Router-ID,优选小的。如果包含RR属性用originator-id进行比较,优选小的。 11@:比较cluster list,优选短的。 12@:比较对等体地址,优选建立邻居地址小的。 13@:比较cost communityID属性,先比cost number后比较cost communityID,都是越低越优先。cost communityID属性原则应用于选路原则的第8条之后,这个属性传递给邻居时要有send-community命令。 4.2.BGP Route-Reflect–路由反射为了在同一个AS内部进行路由传递,可以通过Route-Reflect(RR,路由反射)方式进行传递。 通过这种方式,允许将从IBGP邻居学习到的路由发送给特定IBGP邻居,打破了IBGP邻居关系全互联的需求,减少IBGP会话数量。 在同一个AS Number中,IBGP邻居不会将路由发布给其他IBGP邻居,本地始发路由除外,这称为BGP的水平分割。 路由反射只存在IBGP对等体关系中。 通过Confederations联盟或Full Mesh全互联也可以实现相似的效果。 RR场景中对等体角色: RR:路由反射,用于向Client反射路由。反射规则后续介绍。 Client:RR的客户机,接收RR反射而来的路由。 Non-Client:RR的非客户机。 @RR是一个本地概念/相对概念,每台设备只能知晓自己的角色以及对等体角色 RR路由反射规则: 1@:RR之间需要建立IBGP的全互联。用于接收其他IBGP传递的始发路由。 2@:RR只与Client和Non-Client建立IBGP邻居。建立星形拓扑。 3@:从EBGP接受到的路由,被RR传递给Client和Non-Client 4@:从Non-Client接受到的路由,被RR传递给Client和RR 5@:从Client接受到的路由,被RR传递给Client RR防环机制: 利用2006年RFC4456定义Originator_ID属性和Cluster_List属性进行防环。 传给EBGP时,Originator_ID和Cluster_List取消 Originator_ID:用于簇内防环 1@:由RR产生,携带本地AS内始发路由器的Router-id。 2@:在RR反射路由出去时或在发送Update报文时,添加Origintor_ID属性 3@:接收到携带Originator_ID属性的路由并将其反射时,Originator_ID属性不变。 4@:RR/Client/Non-Client会将收到Originator_ID属性中包含自己BGP Identification/Router-ID的路由丢弃。 Cluster_List:用于簇间防环 1@:每经过一个RR,就将RR的Cluster-id添加到Cluster_List第一位(与AS_PATH类似) 2@:同一个Cluster的RR和备份RR一般配置相同Cluster-id 3@:RR/Client/Non-Client会将收到Cluster_List属性中包含自己BGP Identification/Router-ID的路由丢弃。
RR的路由策略只能应用在IN方向,OUT方向无效。也即对于反射的路由,只能在入方向进行配置 RR在IBGP邻居路由器之间,只是用来简单的打破水平分割,当做一个转接点,将IBGP的路由没有任何变化的传递给自己的其他IBGP邻居;只是用来简单的转发,仅此而已。 同级反射和分级反射也只是RR上的逻辑区分,此处不做详细区分。 点击此处回到目录 4.3.BGP Confederations–联盟为了在同一个AS内部进行路由传递,可以通过部署Confederations联盟 联盟:将一个AS又划分为多个成员AS。总体对外呈现一个AS Number。联盟内部用于成员AS进行区分。 一般建议成员AS Number使用私有AS Number。 2013年发布的RFC6996有分类:64512-65534以及4200000000 - 4294967294为私有AS,其他为公有AS。 此外RFC6793定义了AS 23456作为AS_Trans以及RFCRFC7607定义了AS 0的特殊处理。可阅读《2.1.Open报文介绍》章节查看有关RFC6793相关内容。 联盟配置步骤:由于联盟实现方式与RR有显著差别,需对配置进行说明 1@:全局下配置BGP实例/进程,作为成员AS Number。 2@:指定联盟AS Number,作为对外整体AS Number。 3@:指定联盟中的其他成员AS Number,用于建立联盟内部的EBGP邻居。 1@: 联盟防环原则:主要还是AS_PATH来防环 1@:从联盟EBGP得到路由,还是当从IBGP邻居传来路由等同对待。 因此,@从联盟EBGP邻居得到的路由传递给联盟EBGP邻居/联盟IBGP邻居)时,无法使用next-hop-locol修改路由的下一跳属性。 @从IBGP邻居得到路由传递给成员EBGP邻居,无法使用next-hop-local修改路由的下一跳属性。 @从联盟EBGP邻居得到的路由传递给IBGP邻居时,无法使用next-hop-local修改路由的下一跳属性。 2@:从联盟EBGP邻居传来的路由在整个联盟内部,next-hop属性不变。 3@:从联盟外EBGP邻居得到的路由传递给成员EBGP邻居时,可以使用next-hop-local修改路由的下一跳属性。其他情况不允许修改下一跳。 联盟的AS_PATH: 1@:从联盟向联盟外的EBGP邻居传递路由,(如果可传递的话),会以Confederation ID(联盟AS Number)替换在联盟内部历经的AS Number。 2@:在联盟内AS传出会用()包含,(也即从联盟的内EBGP邻居传出),并且()中无论有多少个AS都将该AS_PATH长视为0。 3@:在联盟内修改AS-PATH只对联盟内AS-PATH属性生效,即小括号内的AS-PATH修改。 4@:来自联盟外的EBGP邻居传递路由,不接受出现Confederation ID(联盟AS Number)的路由但接收成员AS Number的路由。 5@:来自联盟内的EBGP邻居传递路由,不接受出现成员AS Number的路由但接收包含Confederation ID(联盟AS Number)的路由。 联盟某种程度上是一个本地概念或本AS内的概念,因为联盟场景不在报文上做明显的区分。 4.4.正则表达式正则表示式,主要是借用了程序语言的字符串概念。主要用于匹配具有某些特征的字符串。 BGP可以用于匹配AS_PATH等属性做相应的路由策略。主要原理是将AS_PATH作为字符串进行正则表达式匹配。 正则表示式由直接量和元字符组成:直接量为文本信息,元字符为运算信息。可以理解为直接量是数字等符号,元字符是加减乘除等运行符。 字符匹配结果实例.匹配任意单个字符,包括空格*匹配*前单个字符,包括0次或多次+匹配+前单个字符,至少1次?匹配?前单个字符,包括0次或多次^匹配字符串开始^345=匹配345打头的字符串$匹配字符串结束345$=匹配345结束的字符串_匹配单个符号^345_=匹配345打头,且之后为空格的字符串()匹配一整个变化或独立的匹配|逻辑或(1|2)=匹配1或2[]一组字符的集合1[23]4=匹配124和134当[]中第一个字符为^表示补集-连接符1-4=匹配 1至4\转义字符
Huaiwei的BGP支持自动聚合和手动聚合。
点击此处回到目录 更新 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |