资源描述
浅谈BGP协议工作原理
图文信息中心 李宪民
【摘 要】BGP(Border Gateway Protocol: 边界网关协议): 是一个增强距离矢量路由协议, 属于外部路由协议。从功效上讲它是一个自治系统间动态路由协议。它经过维护IP路由表或‘前缀’表来实现自治系统(AS)之间可达性, 使用基于路径、 网络策略或规则集来决定路由。它基础功效是在自治系统间自动交换无环路路由信息, 经过交换带有自治系统号(AS)序列属性网络可达信息, 来结构自治系统拓扑图, 从而消除路由环路, 并使得基于自治系统等级策略控制得以实施。
本文从应用角度出发, 经过BGP协议特点、 BGP路由通告标准、 成为BGP路由方法、 BGP报文(消息)、 BGP邻接关系建立、 BGP路由属性、 BGP路由选择等七个方面对BGP协议进行阐释。
【关键词】 BGP 路由协议 自治系统 对等体 状态机 BGP报文 路由属性
一、 BGP 协议介绍
BGP(Border Gateway Protocol)是一个自治系统间动态路由协议, 它基础功效是在自治系统间自动交换无环路路由信息, 经过交换带有自治系统号序列属性路径可达信息, 来结构自治区域拓扑图, 从而消除路由环路并实施用户配置路由策略。与OSPF和RIP等在自治区域内部运行协议对应, BGP是一个EGP(Exterior Gateway Protocol)协议, 而OSPF、 RIP、 ISIS等为IGP(Interior Gateway Protocol)协议。BGP协议常常见于ISP之间。
BGP协议从1989年以来就已经开始使用。它最早公布三个版本分别是RFC1105(BGP-1)、 RFC1163(BGP-2)和RFC1267(BGP-3), 目前使用是RFC1771(BGP- 4)。
伴随INTERNET飞速发展, 路由表体积也快速增加, 自治区域间路由信息交换量越来越大, 影响了网络性能。BGP支持无类别域间选路CIDR(Classless Interdomain Routing), 能够有效降低日益增大路由表。BGP-4正快速成为实际上Internet边界路由协议标准。
二、 BGP 协议相关概念
(一)自治系统( Autonomous System )
自治系统: 是由同一个技术管理机构管理、 使用统一选路策略部分路由器集合。每个自治系统都有唯一自治系统编号, 这个编号是由因特网授权管理机构分配。
引入自治系统基础思想: 经过不一样编号来区分不一样自治系统。经过采取路由协议和自治系统编号, 路由器就能够确定相互间路径和路由信息交换方法。
自治系统编号范围是1到65535, 其中1到64511是注册因特网编号, 64512到65535是私有网络编号。
(二)BGP路由传输
通常情况下一条路由是从自治系统内部产生, 它由某种内部路由协议发觉和计算, 传输到自治系统边界, 由自治系统边界路由器(ASBR)经过EBGP连接传输到其它自治系统中。路由在传输过程中可能会经过若干个自治系统, 这些自治系统称为过渡自治系统。如右图中AS5。若这个自治系统有多个边界路由器, 这些路由器之间运行IBGP来交换路由信息。这时内部路由器并不需要知道这些外部路由, 它们只需要在边界路由器之间维护IP连通性。如: AS2、 AS3、 AS4。还有一个自治系统称为Stub AS, 如: AS1、 AS6、 AS7。其内部只有一个ASBR经过EBGP连接外部, 同外部其她AS通信要靠过渡自治系统来转发数据。
对一个具体ASBR来说, 其路由起源有两种: 从对等体接收或者从IGP引入。对于接收路由, 依据其属性(如AS路径、 团体属性等)进行过滤, 并设置一些属性(如当地优先级、 MED值等), 以后若需要话, 将具体路由聚合为超网路由。BGP可能从多个对等体收到目地相同路由, 依据规则选择最好路由并加入IP路由表。对于IGP路由, 则要经过引入策略过滤和设置。BGP发送优选BGP路由和引入有效IGP路由给对等体。
(三)BGP对等体
运行BGP协议来交换路由信息路由器被称为BGP 讲话人(BGP Speaker), 和它通信其它BGP讲话人, 两个讲话者之间组成交换路由信息连接,这两个路由器成为相邻体或者对等体。换句话说, 两个BGP讲话者之间相互连接, 完成路由信息交互, 这两个路由器就称为BGP对等体, 是两个边缘路由器实体。BGP对等体(peer)就是BGP邻居, 对等体关系就是BGP邻居关系。
BGP有两种邻居: IBGP和EBGP。如右图所表示: 假如两个交换BGP报文对等体属于同一个自治系统, 那么这两个对等体就是IBGP对等体(Internal BGP), 如RTB-RTD。
假如两个交换BGP报文对等体属于不一样自治系统, 那么这两个对等体就是EBGP对等体(External BGP), 如RTA-RTB。
即使BGP是运行于自治系统之间路由协议, 不过一个AS不一样边界路由器之间也要建立BGP连接, 只有这么才能实现路由信息在全网传输, 如RTB和RTD, 为了建立AS100和AS300之间通信, 我们要在它们之间建立IBGP连接。
IBGP对等体之间不一定是物理上直连, 只要TCP连接能够建立刻可。为了IBGP对等体路由通告可靠性, 我们通常采取loopback接口建立IBGP邻居关系, 同时必需指定路由更新报文源接口。
路由器通常默认要求EBGP对等体之间是有物理上直连链路, 同时通常也提供改变这个缺省设置配置命令。许可同非直连相连网络上邻居建立EBGP连接, 这时需要修改EBGP最大跳数。
(四)IBGP全连接
物理意义全连接: 在全部ASBR任意两点之间建立物理链路。实际组网中不能确保。
逻辑意义全连接: AS内全部设备都运行BGP, 全部ASBR和全部其她路由器间建立IBGP邻居关系通告路由。这一点更不可能。大多数实际情况是ASBR上同时运行BGP和IGP, 其她路由器仅运行IGP。所以通常在大规模网络中, 假如局部无法实现ASBR全连接话, 我们能够利用BGP路由反射器或者BGP联盟来处理这么问题
(五)有限状态机
有限状态机(finite-state machine, FSM), 又称有限状态自动机, 简称状态机, 是表示有限个状态以及在这些状态之间转移和动作等行为数学模型。
状态存放相关过去信息, 就是说: 它反应从系统开始到现在时刻输入改变。转移指示状态变更, 而且用必需满足来确使转移发生条件来描述它。动作是在给定时刻要进行活动描述。有多个类型动作:
进入动作(entry action): 在进入状态时进行
退出动作: 在退出状态时进行
输入动作: 依靠于目前状态和输入条件进行
转移动作: 在进行特定转移时进行
在计算机科学中, 有限状态机被广泛用于建模应用行为、 硬件电路系统设计、 软件工程, 编译器、 网络协议和计算与语言研究
三、 BGP 协议特点
BGP路由协议关键在于控制路由传输和选择最好路由, 而OSPF、 RIP等IGP协议关键在于发觉和计算路由。
经过携带AS路径信息以及BGP路由通告标准, 能够处理自治系统之间与内部路由环路问题。
BGP为路由信息附带丰富路由属性, 路由策略利用这些属性, 能够灵活控制选路。
BGP-4支持无类别域间选路CIDR(Classless InterDomain Routing), 也称为supernetting, 这是对BGP-3一个关键改善。CIDR引入简化了路由聚合。路由聚合实际上是合并多个不一样路由过程, 这么由通告几条路由变为通告一条路由, 减小了路由表规模。
BGP比OSPF、 RIP等IGP协议拓扑图要更抽象部分。IGP协议结构是AS内部路由器拓扑结构图。IGP把路由器抽象成若干端点, 把路由器之间链路抽象成边, 依据链路状态或其它参数, 生成拓扑图。依据此拓扑图选择代价最小路由。而在BGP中, 拓扑图端点是一个AS区域, 边是AS之间链路。这表现了EGP和IGP是分层关系。即IGP负责在AS内部选择花费最小路由, EGP负责选择AS间花费最小路由。
四、 BGP路由通告标准
(一)基础标准
l 多条路径时, BGP Speaker只选最优给自己使用;
l BGP Speaker只把自己使用路由通告给对等体;
l BGP Speaker从EBGP取得路由会向它全部BGP对等体通告(包含EBGP和IBGP);
l 连接一建立, BGP Speaker将把自己全部BGP路由通告给新对等体;
(二)基础标准应用
1、 BGP Speaker只把自己使用路由通告给对等体, 即那些属于BGP路由而且在路由表中使用路由。
上图中若仅在RTD上import直连路由, RTA无法接收到11.4.1.0/24网段BGP路由。因为尽管RTC上能够学到RTD通告相关11.4.1.0/24BGP路由, 不过RTC上同时有一条相关11.4.1.0/24直连路由, 直连路由显然比有IBGP邻居处学习来路由更优。所以, 即使输入命令“display/show bgp routing-table” 时能够在BGP路由表中看到11.4.1.0/24路由。不过在全局路由表中, 输入命令“display/show ip routing-table”时, 显示却是起源于直连11.4.1.0/24路由, 依据“BGP Speaker只把自己使用路由通告给对等体”标准, RTC不会通告这条BGP路由给RTA。处理方法就是在RTC上import直连路由。
2、 BGP Speaker 从IBGP取得路由不会通告给它IBGP邻居。
在IBGP对等体相互通告路由过程中, BGP属性不会做任何改变。那么, AS内部路由环路问题应怎样避免?
在上图中假如没有这条路由通告规则, RTC从IBGP对等体RTA学到路由就会通告给RTD, RTD继而会通告给RTB, RTB再把这条路由通告回RTA。这么就在AS内形成了路由环路。所以, 此标准是在AS内避免路由环路关键手段。不过, 这条标准引入, 带来了新问题: RTD无法收到来自AS 12BGP路由。
通常我们采取IBGP逻辑全连接来处理这个问题, 即在RTA-RTD、 RTB-RTC之间再建立两条IBGP连接。
3、 BGP Speaker 从IBGP取得路由是否通告给它EBGP对等体要依IGP和BGP同时情况来决定。如右图所表示。
总而言之, 通常情况下, 假如BGP Speaker学到去往同一网段路由多于一条时, 只会选择一条最优路由给自己使用, 即上传给路由表。不过, 因为路由器也会选择最优路由给自己使用, 所以BGP Speaker本身选择最优路由也不一定被路由器使用。比如, 一条去往相同网段BGP优选路由与一条静态路由, 这时, 因为BGP路由优先级要低, 所以路由器会把这条静态路由加到路由表中去, 而不会选择BGP优选路由。
五、 成为BGP路由方法
BGP 关键工作是在自治系统之间传输路由信息, 而不是去发觉和计算路由信息。所以, BGP 路由信息需要经过配置命令方法注入到BGP中。
根据注入方法可分为三类: 纯动态注入、 半动态注入、 静态注入。
1、 纯动态注入: 是指路由器将经过IGP路由协议动态取得路由信息直接注入到BGP中去。它能够把路由器取得全部IGP 路由信息都引入到BGP系统中。这种方法配置简单, 一次性引入全部路由信息。
相关命令: import-route protocol [ process-id ] [ med med | route-policy route-policy-name ]
protocol: 指定可引入外部路由协议, 比如: isis、 ospf、 rip等
process-id: 当引入路由协议为isis、 ospf或rip时, 依据需要指定进程号。
med: 指定引入路由MED度量值。
route-policy-name: 从其她路由协议引入路由时, 能够使用该参数指定路由策略过滤路由。
OSPF发觉路由18.0.0.1/8把IGP(OSPF)发觉路由纯动态地注入到RTBBGP路由表中。
2、 半动态注入: 是指路由器有选择性将IGP发觉动态路由信息注入到BGP系统中去。它和纯动态注入区分在于: 半动态注入一开始就有选择注入路由信息; 而纯动态是把全部IGP路由信息都注入, 然后再过滤(可选)。
相关命令: network ipv4-address [ mask | mask-length ] [ route-policy route-policy-name ]
ipv4-address: BGP公布IPv4网络地址, 点分十进制形式。此网络或主机地址应该是由IGP动态路由协议发觉。
mask/mask-length: IP地址掩码或掩码长度。假如没有指定掩码, 则按有类地址处理。
route-policy-name: 公布路由应用路由策略。
OSPF发觉路由18.0.0.1/8把IGP(OSPF)发觉路由半动态地注入到RTBBGP路由表中。
3、 静态注入: 它与半动态注入很类似, 不一样是半动态注入路由是由IGP动态路由协议发觉路由。而静态注入路由是手工配置静态路由。
人为配置静态路由18.0.0.1/8把人为配置静态路由注入到RTBBGP路由表中。
六、 BGP报文(消息)
(一)BGP报文(消息)分类:
1、 Open: 是连接建立后发送第一个消息, 它用于建立BGP 对等体间连接关系。
2、 KeepAlive: 是用于检测连接有效性消息。
3、 Update: 是BGP 系统中最关键信息, 用于在对等体之间交换路由信息, 它最多由三部分组成: 不可达路由(unreachable)、 路径属性(pathattributes)、 网络可达性信息NLRI(network layer reach/reachable information)
4、 Notification: 是错误通告消息
(二)BGP报文作用
BGP 协议运行是经过报文(消息)驱动。
BGP对等体间经过发送OPEN报文来交换各自版本、 自治系统号、 保持时间、 BGP标识符等信息, 进行协商。
UPDATE报文携带是路由更新信息。其中包含撤销路由信息和可达路由信息及其多种路由属性。
当BGP检测到差错(连接中止、 协商犯错、 报文差错等)时, 发送NOTIFICATION 报文, 关闭同对等体连接。
KEEPALIVE报文在BGP对等体间周期地发送, 以确保连接保持有效。
OPEN报文关键用于建立邻居(BGP对等体)关系, 它是BGP路由器之间初始握手消息, 应该发生在任何通告消息之前。其她在收到OPEN消息以后, 即以KEEPALIVE消息作为响应。一旦握手成功, 则这些BGP邻居就能够进行UPDATE、 KEEPALIVE以及NOTIFICATION等消息交换操作了。
(三)BGP报文格式
BGP报文格式是一样, 都是”报文头+报文体“格式, 下面就是BGP报文头:
• Type(类型): 1 字节, 指示报文类型, 如OPEN、 UPDATE报文等 。
• Marker(标识): 本16字节字段包含消息接收者能够估计值。假如消息类型是OPEN, 或者OPEN消息没有承载认证信息(作为可选参数), 标识必需是全1。不然, 标识值要使用认证机制来计算。标识能够用来探测BGP对端同时丢失, 认证进入BGP报文。
• Length(长度): 两字节无符号整数。指定了消息全长, 包含头部字节。
1、 Open报文
Open报文是由报文头加以下结构组成。
• Version : 发端BGP版本号
• My Autonomous System : 当地AS号
• Hold Time : 发送方提供提议保持定时器设定秒数。
• 保持定时器要求了BGP邻居认为发送方信息有效时间长度。假如BGP对等体之前OPEN报文中Hold Time时间不一致, 选择较小Hold Time。
• BGP Identifier : 发送端路由器标识符。
• 该值是在BGP对等体之间进行握手操作过程中确定, 而且在每个当地接口及每个BGP对等体之间是保持不变。
• Optional parmeters Len : 可选参数长度
• Optional Parameters : 可选参数
2、 KeepAlive报文
KeepAlive报文只有报文头。
KeepAlive 报文关键用于对等体路由器间运行状态以及链路可用性确定。KeepAlive 报文组成只包含一个BGP数据报头。 KeepAlive 消息在对等路由器间交换频度以确保对方保持定时器不超时为限。
当一台路由器与其邻居建立BGP连接以后, 将以Keepalive-interval设定时间间隔周期性地向对等体发送Keepalive 报文, 表明该连接是否还可保持。
缺省情况下, 发送Keepalive 时间间隔为 60 秒, Hold Time是180秒。每次从邻居处接收到Keepalive 报文将重置Hold Time定时器, 假如Hold Time定时器超时, peer就认为对等体Down掉。
3、 Update报文
Update报文由报文头加以下结构组成。
• Unfeasible Routes Len : (2字节无符号整数) 不可达路由长度
• Withdrawn Routes : (变长) 撤消路由
• Path Attribute Len : (2字节无符号整数) 路由属性长度
• Path Attributes : (变长) 路由属性
• Network Layer Reachability Information : (变长) 网络可达信息
UPDATE报文是BGP系统中最关键信息, 用于在同伴之间交换路由信息, 它最多由三部分组成: 不可达路由(unreachable)、 路径属性(path attributes)、 网络可达性信息(NLRI, network layer reachability information)。
BGP提供了机制告诉对端先前路由通告不再能使用。有三种方法供BGP讲话者指示撤销某条路由服务:
1)对于先前通告路由, 在UPDATE消息WITHDRAWN ROUTES字段内通告了到目地IP前缀, 这么对应路由被标志为不再使用;
2)通告有相同网络层可达信息替换路由;
3)关闭BGP邻居之间连接, 这意味着从服务里撤销这一对BGP对等体相互通告全部路由。
一个UPDATE消息一次只能通告一条路由, 但它能够携带多个路由属性。
一个UPDATE消息一次也可通告多条路由, 但它路由属性必需相同。
一个UPDATE消息能够同时携带多个被撤消路由。
4、 Notification报文
Notification报文由报文头加以下结构组成
• Notification报文关键在发生错误或对等体连接被关闭情况下使用, 该消息携带多种错误代码(如定时器超时等), 以及辅助错误代码及错误信息。
• Errorcode: 错误代码:
• Errsubcode: 辅助错误代码。
• Data: 依靠于不一样错误代码和辅助错误代码。用于标识错误原因。
错误代码
1
2
3
4
5
6
错误类型
消息头错
Open消息错
Update消息错
保持时间超时
状态机错
退出
(四)BGP报文(消息)应用:
经过TCP建立BGP连接时, 发送open消息;
连接建立后, 假如有路由需要发送或路由改变时, 发送UPDATE消息通告对端路由信息;
稳定后此时要定时发送KEEPALIVE消息以保持BGP连接有效性;
当当地BGP在运行中发觉错误时, 要发送NOTIFICATION消息通告BGP对端;
BGP使用TCP建立连接, 当地监听端口为179。和TCP建立相同, BGP连接建立也要经过一系列对话和握手。TCP经过握手协商通告其端口等参数, BGP握手协商参数有: BGP版本、 BGP连接保持时间、 当地路由器标识(Router ID)、 授权信息等。这些信息都在Open消息中携带。
BGP连接建立后, 假如有路由需要发送则发送Update消息通告对端。Update消息公布路由时, 还要携带此路由路由属性, 用以帮助对端BGP协议选择最优路由。
在当地BGP路由改变时, 要经过Update消息来通知对端BGP对等体。经过一段时间路由信息交换后, 当地BGP和对端BGP都无新路由通告, 趋于稳定状态。此时要定时发送KEEPALIVE消息以保持BGP连接有效性。对于当地BGP, 假如在保持时间内, 未收到任何对端发来BGP消息, 就认为此BGP连接已经中止, 将断开此BGP连接, 并删除全部从该对等体学来BGP路由。
当当地BGP在运行中发觉错误时, 要发送NOTIFICATION消息通告BGP对等体。如对端BGP版本当地不支持、 当地BGP收到了结构非法Update消息等。当地BGP退出BGP连接时也要发送NOTIFICATION消息。
七、 BGP邻接关系建立过程
BGP协议有限状态机有六个状态, 空闲(Idle)、 连接(Connect)、 活动(Active)、 打开发送(Open Sent)、 打开确定(Open Confirm)和已建立(Established)六种状态之间转换过程说明了BGP邻居关系建立过程。以下图所表示:
BGP协议状态机示意图
上图中首先是Idle状态, BGP协议一旦Start, 状态机就进入Connect状态, 在Connect状态, 假如Connect-Retry定时器超时, BGP状态机会停留在Connect状态。同时, BGP试图建立TCP连接, 假如TCP连接建立失败, BGP状态机进入Active状态。假如TCP连接建立成功, BGP状态机就直接进入Open Sent状态。在Active状态, 假如TCP连接仍然不能建立起来, 那么BGP状态机就会一直停留在Active状态, 直到TCP连接建立成功, 才会进入Open Sent状态。在Open Sent状态, BGP一旦收到了一个正确Open报文, 就会进入Open Confirm状态。在Open Confirm状态, 假如Keep Alive定时器超时, BGP状态机就会停留在Open Confirm状态。直到BGP收到Keep Alive报文, BGP状态机才会进入Established状态。这时BGP连接才算建立起来。
另外, 在除Idle状态以外其它五个状态出现任何Error时候, BGP状态机就会退回到Idle状态。
我们能够经过display bgp peer 或show bgp peer命令看到Active和Establish这两种状态。
当BGP邻居状态是Active时, BGP邻居之间还无法通告路由, 关键是因为TCP连接还没有建立起来。可能原因有路由不可达, 或者BGP配置有错误。
当BGP邻居状态是Establish时, 表明BGP对等体之间能够通告BGP路由信息了。
八、 BGP路由属性
BGP是一个外部路由协议, 其着眼点在于控制路由传输和选择最好路由。为控制路由传输和路由选择, BGP为路由附带属性信息。BGP路由属性是一套参数, 它对特定路由进行更深地描述, 使得BGP能够对路由进行过滤和选择。在配置路由策略时将广泛地使用路由属性, 但并不是全部路由属性都要被用上。路由属性被分为以下几类。
· 必遵属性: 在路由更新数据报文中必需存在路由属性, 这种属性域在BGP路由信息中有着不可替换作用, 假如缺乏必遵属性, 路由信息就会犯错。如AS-Path就是必遵属性, BGP用它来避免路由环路, 没有它路由就可能出问题。
· 可选属性: 它是可选, 不一定存在于路由更新数据报文中, 设置它完全是依据需要。如MED属性, 就用它来控制选路。
· 过渡属性: 含有AS间可传输性属性就是过渡属性, 过渡属性域值能够被传输到其她AS中去并继续起作用。如Origin属性, 路由信息起源一旦确定, 域值会一直存在, 不管此路由信息被传到哪个AS中去。
· 非过渡属性: 只在当地起作用, 离开自治系统, 域值就恢复成默认值, 如Local preference。
以下列出多个常见属性情况, 以下表所表示。
类型代码
属性名
必遵/可选
过渡/非过渡
1
Origin
必遵
过渡
2
AS-Path
必遵
过渡
3
Next-hop
必遵
过渡
4
MED
可选
非过渡
5
Local-preference
可选
非过渡
6
Community
可选
过渡
每个属性都有特定含义并能够灵活地利用, 使得BGP功效非常强大。BGP属性能够扩展到256种。此处仅列出BGP部分常见路由属性进行说明。
1、 Origin起源/ 起源/ 起点属性:
它定义路径信息起源, 标识一条路由是怎样成为BGP路由。如IGP、 EGP和Incomplete等。
通常, 按以下方法决定一条路由Origin属性:
· 某条路由是直接而具体注入到BGP路由表中, 则origin属性为IGP
· 路由是经过EGP得到, 则origin属性为EGP
· 其她情形下, Origin属性都为 Incomplete
BGP许可三种类型起源:
BGP在其路由优选过程中会考虑起点属性。具体来说, BGP针对Origin属性优选次序为: IGP>EGP>INCOMPLETE。通常情况下:
用“network ip-address mask ”命令注入路由或者是聚合路由, 起点类型为IGP, 在BGP路由表显示为i(源属性: 0)。
把从其它IGP路由协议引入路由起点类型设置为Incomplete。即用“import”命令注入路由, 在路由表中, 显示为(源属性: 2)。
把经过EGP得到路由起点类型设置为 EGP(此处EGP指一个路由协议, 该协议现在已经废弃), 显示为E(源属性: 1)。
2、 AS-PathAS路径属性:
它是路由经过AS序列, 即列出在抵达所通告网络之前所经过AS清单。BGP讲话者将自己AS前置到接收到AS路径头部, 以统计此路由经过AS信息, 它能够预防路由循环, 并用于路由过滤和选择。
同时, AS-Path属性还能够影响路由选择。在其它原因相同条件下, 选择AS-Path较短路由。如上图所表示, AS200内相关网络D18.0.0.0/8BGP路由经AS200、 AS300、 AS400抵达AS100AS-Path为d1(400 300 200), 经AS200、 AS500抵达AS100AS-Path为d2(500 200), 这时BGP优先选择有较短AS-PathBGP路由: ”D, d2 500 200”。
不过在一些特殊应用中, 如Hub&Spoke组网方法下, 我们需要接收AS号反复BGP路由。此时, 能够用下面命令来强制接收这类路由:
peer { group-name | ipv4-address } allow-as-loop [ number ]
参数:
group-name: 对等体组名称。
ipv4-address: 对等体IPv4地址。
number: 当地AS号反复次数, 范围为1~10。缺省值为1。
能够经过加入伪AS号来增加路径长度, 从而影响路径选择。
比如, 我们能够在RTA上配置, 使之将路由10.0.0.0/8发往邻居时, 将其AS-Path属性再加上两个自治系统号123、 123, 这么当这条路由被传输到RTB时, 其AS-Path为: d1(123 123 123)。而从AS462传来始发于AS123路由AS-Path为d2(462 123)。这么d1AS-Path比d2长, 所以最终路由器会认为d2为较优路由。
3、 Next-hop下一跳属性:
它包含抵达更新消息所列网络下一跳边界路由器IP地址。BGP下一跳与IGP有所不一样, 它能够是通告此路由对等体地址, 如EBGP, 这同IGP是相同。而在其她情况下, BGP使用第三方下一跳, 如IBGP对从EBGP对等体取得下一跳不加改变地在自治系统内传输。在多路访问媒体上, BGP以路由实际起源为下一跳, 即使它不是BGP对等体。
在右图中:
RTA: 可经下一跳10.0.0.2抵达18.0.0.0/8;
可经下一跳10.0.0.3抵达20.0.0.0/8;
可经下一跳21.0.0.1抵达19.0.0.0/8。
RTC: 可经下一跳10.0.0.1抵达19.0.0.0/8;
可经下一跳10.0.0.3抵达20.0.0.0/8。
RTB: 可经下一跳10.0.0.2抵达18.0.0.0/8;
可经下一跳10.0.0.3抵达20.0.0.0/8。
BGP中下一跳概念稍微复杂, 它能够是以下三种形式之一: (注: 上图中RTA-RTC建立EBGP邻居关系, RTA-RTB、 RTC-RTD建立IBGP邻居关系)
(1)BGP在向EBGP邻居通告路由时, 或者将当地公布BGP路由通告给IBGP邻居时, 下一跳属性是当地BGP与对端连接端口地址。如胶片所表示, RTC在向RTA通告路由18.0.0.0/8时, 下一跳属性为10.0.0.2 ; RTB在向RTA通告路由19.0.0.0/8时, 下一跳属性为21.0.0.1。
(2)对于多路访问网络(广播网或NBMA网络), 下一跳情况有所不一样: 如图所表示, RTC在向RTA通告路由20.0.0.0/8时, 发觉当地端口10.0.0.2同此路由下一跳10.0.0.3(指在RTC路由表中此路由下一跳)为同一子网, 将使用10.0.0.3 作为向EBGP通告路由下一跳, 而不是10.0.0.2。
(3)BGP在向IBGP通告从其它EBGP得到路由时, 不改变路由下一跳属性, 而直接传输给IBGP邻居。如胶片所表示, RTA经过IBGP向RTB通告路由18.0.0.0时, 下一跳属性为10.0.0.2。这么做, 有时会产生问题: 假如RTB不知怎样去往10.0.0.2, 那么此BGP路由将失效。
处理方法:
方法一: 能够在RTABGP视图下引入直连路由;
方法二: 在RTA上, 使用命令peer { group-name | ipv4-address } next-hop-local。此命令用来设置BGP向对等体组/对等体通告路由时, 把下一跳属性设为本身IP地址。
在BGP多路广播网络中, 其下一跳属性不变。如右图: 路由器B经过EBGP通告网络172.30.0.0 给A而不改变其下一跳属性10.10.10.2,这种行为预防了一个无须要Hop, 因为她们都同在一个多路广播网络里面。假如改变了其下一跳属性为10.10.10.1, 当AS 65000作为一个Transit AS(中转自治系统)时候, AS 64520EBGP Router就不是以最优路径经过AS 65000。
BGP是一个AS-by-AS路由协议, 它下一跳指是下一个AS, 而不是下一个Router。
(1)从EBGP学习到路由, 其下一跳属性不变, 能够手动做next-hop-self
(2)在IBGP关系中, 下一跳地址, 是通告该路由IBGP 更新源还是Router-id呢?
下一跳next_ hop属性三个规则:
a、 假如是由EBGP peer通告BGP update报文, 那么next_hop就是AS外这个EBGP peerIP地址。(实际上, 是与本AS直连接口IP地址)
b、 假如BGP update报文是由IBGP peer通告, 那么next_hop就是这个IBGP peer发出更新报文接口IP地址
c、 假如update 报文最开始是由EBGP peer通告, 不过是从本AS内边界路由器(也就是IBGP peer), 那么next_hop是EBGP peer通告出更新接口IP地址, 而不是本AS这个IBGP peer。
对于前两点: 谁通告, 那么下一跳就是它。对于第三点: 我们知道BGP是对于大型互联网一个路由协议。其实我们应该把它了解成路径向量协议。也就是说它出发点是AS, 而不是单个router。BGP是宏观, IGP则是微观。所以, 从AS来看。既然是IBGP peer转发通告EBGP peer发来路由, 那么EBGP peer才是真正下一跳。
这里, 我们会发觉一个问题, 就是假如这个边界路由器没有告诉本AS其它路由器到这个EBGP peer怎么走, 那么这么路由不可达就会造成数据包被丢弃。所以引入了next_hop_self机制, 配置在边界路由器上, 使得IBGP peer要发路由更新给EBGP peer时候, 强制从自己这里走, 因为对于边界路由器来讲, 它知道怎么抵达EBGP peer。这个其实有点类似于代理概念。比如proxy ARP。就是把自己MAC地址通告给ARP请求者, 而不是把ARP请求真正目MAC回送回去。目就是代理。
4、 MED(Multi-Exit-Discriminators)属性:
它又叫BGPmetrics值(没有MED路由->MED=0; 缺乏MED路由, 将成为最先优选路由),作用是影响邻居AS路由选择。当某个AS有多个出口时, 能够用MED属性来帮助其外部邻居路由器选择一个很好入口路径。也就是说决定邻居AS更优先从哪个出口进入本AS,默认值是0, 一条路由MED值越小, 其优先级越高。MED仅向EBGP邻居发送。
bgp bestpath missing-as-worst命令修改cisco ios对med行为, 使得和最新ietf标准(丢失MED->将MED设置成无穷大; 缺乏MED路由, 将成为最终优选路由)一致。
假如没有启用bgp deterministic-med, 接收到路由次序可能影响基于med最有路径选择, 当从多个as收到同一条路由, 而且含有完全一样路径长度和不一样med, 就会发生下面情况:
A) ASPATH 1, MED 100, internal, igp metric to NEXT_HOP 10
B) ASPATH 2, MED 150, internal, igp metric to NEXT_HOP 5
C) ASPATH 1, MED 200, external
在没有配置bgp deterministic-med路由会优选B(较低IGP metric), 接着是C(EBGP>IBGP),而CMED值高于A 。
在启用bgp deterministic-medRouter, 将清除对基于MED最优路径选择临时依靠, 它能够确保满足MED原始要求, 来控制进入本AS流量选择, 会对进入被AS全部路由进行med比较, 最终选择有最小
展开阅读全文