1、浅谈 BGP 协议的工作原理图文信息中心 李宪民【摘 要】BGP(Border Gateway Protocol:边界网关协议):是一种增强的距离矢量路由协议,属于外部路由协议。从功能上讲它是一种自治系统间的动态路由协议。它通过维护 IP 路由表或前缀表来实现自治系统(AS)之间的可达性,使用基于路径、网络策略或规则集来决定路由。它的基本功能是在自治系统间自动交换无环路的路由信息,通过交换带有自治系统号(AS)序列属性的网络可达信息,来构造自治系统的拓扑图,从而消除路由环路,并使得基于自治系统级别的策略控制得以实施。本文从应用的角度出发,通过 BGP 协议特点、BGP 路由通告原则、成为 BG
2、P 路由的方法、BGP 报文(消息) 、BGP 邻接关系的建立、BGP 的路由属性、BGP 路由选择等七个方面对 BGP 协议进行阐释。【关键词】 BGP 路由协议 自治系统 对等体 状态机 BGP 报文 路由属性 一、BGP 协议简介BGP(Border Gateway Protocol)是一种自治系统间的动态路由协议,它的基本功能是在自治系统间自动交换无环路的路由信息,通过交换带有自治系统号序列属性的路径可达信息,来构造自治区域的拓扑图,从而消除路由环路并实施用户配置的路由策略。与OSPF 和 RIP 等在自治区域内部运行的协议对应,BGP 是一种 EGP(Exterior Gateway
3、 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)
4、 ,可以有效的减少日益增大的路由表。BGP-4 正迅速成为事实上的 Internet 边界路由协议标准。二、BGP 协议相关概念(一)自治系统( Autonomous System )自治系统:是由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合。每个自治系统都有唯一的自治系统编号,这个编号是由因特网授权的管理机构分配的。引入自治系统的基本思想:通过不同的编号来区分不同的自治系统。通过采用路由协议和自治系统编号,路由器就可以确定彼此间的路径和路由信息的交换方法。自治系统的编号范围是 1 到 65535,其中 1 到 64511 是注册的因特网编号,64512 到65535 是私有网络
5、编号。(二)BGP 路由传递一般情况下一条路由是从自治系统内部产生的,它由某种内部路由协议发现和计算,传递到自治系统的边界,由自治系统边界路由器(ASBR)通过 EBGP 连接传播到其它自治系统中。路由在传播过程中可能会经过若干个自治系统,这些自治系统称为过渡自治系统。如右图中 AS5。若这个自治系统有多个边界路由器,这些路由器之间运行 IBGP 来交换路由信息。这时内部的路由器并不需要AS1 AS7AS6AS5AS4AS3AS2知道这些外部路由,它们只需要在边界路由器之间维护 IP 连通性。如:AS2、AS3、AS4 。还有一种自治系统称为 Stub AS,如:AS1、AS6、AS7。其内部
6、只有一个 ASBR 通过 EBGP 连接外部,同外部其他 AS 的通信要靠过渡自治系统来转发数据。 对一个具体的 ASBR 来说,其路由的来源有两种:从对等体接收的或者从 IGP 引入的。对于接收的路由,根据其属性(如 AS 路径、团体属性等)进行过滤,并设置某些属性(如本地优先级、MED 值等) ,之后若需要的话,将具体的路由聚合为超网路由。BGP 可能从多个对等体收到目的地相同的路由,根据规则选择最好的路由并加入 IP 路由表。对于IGP 路由,则要经过引入策略的过滤和设置。BGP 发送优选的 BGP 路由和引入的有效的IGP 路由给对等体。(三)BGP 对等体运行 BGP 协议来交换路由
7、信息的路由器被称为 BGP 发言人( BGP Speaker) ,和它通信的其它的 BGP 发言人,两个发言者之间构成交换路由信息的连接,这两个路由器成为相邻体或者对等体。换句话说,两个 BGP 发言者之间相互连接,完成路由信息的交互,这两个路由器就称为 BGP 对等体,是两个边缘路由器实体。BGP 对等体(peer )就是 BGP 邻居,对等体关系就是 BGP 邻居关系。BGP 有两种邻居:IBGP 和EBGP。如右图所示:如果两个交换BGP 报文的对等体属于同一个自治系统,那么这两个对等体就是 IBGP 对等体(Internal BGP) ,如 RTB-RTD。如果两个交换 BGP 报文的
8、对等体属于不同的自治系统,那么这两个对等体就是 EBGP 对等体(External BGP) ,如 RTA-RTB。虽然 BGP 是运行于自治系统之间的路由协议,但是一个 AS 的不同边界路由器之间也要建立 BGP 连接,只有这样才能实现路由信息在全网的传递,如 RTB 和 RTD,为了建立AS100 和 AS300 之间的通信,我们要在它们之间建立 IBGP 连接。IBGP 对等体之间不一定是物理上直连的,只要 TCP 连接能够建立即可。为了 IBGP对等体路由通告的可靠性,我们一般采用 loopback 接口建立 IBGP 邻居关系,同时必须指定路由更新报文的源接口。路由器一般默认要求 E
9、BGP 对等体之间是有物理上的直连链路,同时一般也提供改变这个缺省设置的配置命令。允许同非直连相连网络上的邻居建立 EBGP 连接,这时需要修改 EBGP 的最大跳数。(四)IBGP 全连接物理意义的全连接:在所有 ASBR 任意两点之间建立物理链路。实际组网中不能保证。逻辑意义的全连接:AS 内所有设备都运行 BGP,所有 ASBR 和所有其他路由器间建立 IBGP 邻居关系通告路由。这一点更不可能。大多数的实际情况是 ASBR 上同时运行BGP 和 IGP,其他路由器仅运行 IGP。所以通常在大规模网络中,如果局部无法实现ASBR 全连接的话,我们可以利用 BGP 路由反射器或者 BGP
10、联盟来解决这样的问题(五)有限状态机有限状态机(finite-state machine, FSM) ,又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。状态存储关于过去的信息,就是说:它反映从系统开始到现在时刻的输入变化。转移指示状态变更,并且用必须满足来确使转移发生的条件来描述它。动作是在给定时刻要进行的活动的描述。有多种类型的动作: 进入动作(entry action):在进入状态时进行 退出动作:在退出状态时进行 输入动作:依赖于当前状态和输入条件进行 转移动作:在进行特定转移时进行 在计算机科学中,有限状态机被广泛用于建模应用行为、硬件电
11、路系统设计、软件工程,编译器、网络协议和计算与语言的研究三、BGP 协议特点BGP 路由协议的重点在于控制路由的传播和选择最好的路由,而 OSPF、RIP 等 IGP协议的重点在于发现和计算路由。通过携带 AS 路径信息以及 BGP 的路由通告原则,可以解决自治系统之间与内部的路由环路问题。BGP 为路由信息附带丰富的路由属性,路由策略利用这些属性,可以灵活的控制选路。BGP-4 支持无类别域间选路 CIDR(Classless InterDomain Routing) ,也称为supernetting,这是对 BGP-3 的一个重要改进。CIDR 的引入简化了路由聚合。路由聚合实际上是合并多
12、个不同路由的过程,这样由通告几条路由变为通告一条路由,减小了路由表规模。BGP 比 OSPF、RIP 等 IGP 协议的拓扑图要更抽象一些。IGP 协议构造的是 AS 内部的路由器的拓扑结构图。IGP 把路由器抽象成若干端点,把路由器之间的链路抽象成边,根据链路的状态或其它参数,生成拓扑图。根据此拓扑图选择代价最小的路由。而在 BGP 中,拓扑图的端点是一个 AS 区域,边是 AS 之间的链路。这体现了 EGP 和 IGP 是分层的关系。即 IGP 负责在 AS 内部选择花费最小的路由,EGP 负责选择 AS 间花费最小的路由。四、BGP 路由通告原则(一)基本原则 多条路径时,BGP Spe
13、aker 只选最优的给自己使用; BGP Speaker 只把自己使用的路由通告给对等体; BGP Speaker 从 EBGP 获得的路由会向它所有 BGP 对等体通告(包括 EBGP 和IBGP) ; 连接一建立,BGP Speaker 将把自己所有 BGP 路由通告给新对等体;(二)基本原则的应用1、BGP Speaker 只把自己使用的路由通告给对等体,即那些属于 BGP 路由而且在路由表中使用的路由。上图中若仅在 RTD 上 import 直连路由,RTA 无法接收到 11.4.1.0/24 网段的 BGP 路由。因为尽管 RTC 上可以学到 RTD 通告的关于 11.4.1.0/2
14、4 的 BGP 路由,但是 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 直连路由
15、。2、BGP Speaker 从 IBGP 获得的路由不会通告给它的 IBGP 邻居。在 IBGP 对等体相互通告路由的过程中,BGP 属性不会做任何改变。那么, AS 内部的路由环路问题应如何避免?在上图中如果没有这条路由通告规则,RTC 从 IBGP 对等体 RTA 学到的路由就会通告给 RTD,RTD 继而会通告给 RTB,RTB 再把这条路由通告回 RTA。这样就在 AS 内形成了路由环路。所以,此原则是在 AS 内避免路由环路的重要手段。但是,这条原则的引入,带来了新的问题:RTD 无法收到来自 AS 12 的 BGP 路由。一般我们采用 IBGP 的逻辑全连接来解决这个问题,即在
16、RTA-RTD、RTB-RTC 之间再建立两条 IBGP 连接。3、BGP Speaker 从 IBGP 获得的路由是否通告给它的 EBGP 对等体要依 IGP 和 BGP 同步的情况来决定。如右图所示。综上所述,一般情况下,如果BGP Speaker 学到去往同一网段的路由多于一条时,只会选择一条最优的路由给自己使用,即上传给路由表。但是,由于路由器也会选择最优的路由给自己使用,所以 BGP Speaker 本身选择的最优的路由也不一定被路由器使用。例如,一条去往相同网段的 BGP 优选路由与一条静态路由,这时,由于BGP 路由优先级要低,所以路由器会把这条静态路由加到路由表中去,而不会选择
17、 BGP优选的路由。五、成为 BGP 路由的方法BGP 的主要工作是在自治系统之间传递路由信息,而不是去发现和计算路由信息。所以,BGP 的路由信息需要通过配置命令的方式注入到 BGP 中。按照注入的方式可分为三类:纯动态注入、半动态注入、静态注入。1、纯动态注入:是指路由器将通过 IGP 路由协议动态获得的路由信息直接注入到BGP 中去。它可以把路由器获得的所有 IGP 路由信息都引入到 BGP 系统中。这种方式配置简单,一次性引入所有的路由信息。相关命令:import-route protocol process-id med med | route-policy route-policy
18、-name protocol:指定可引入的外部路由协议,例如:isis、ospf、rip 等process-id:当引入路由协议为 isis、ospf 或 rip 时,根据需要指定进程号。med:指定引入路由的 MED 度量值。route-policy-name:从其他路由协议引入路由时,可以使用该参数指定的路由策略过滤路由。OSPF 发现路由 18.0.0.1/8把 IGP(OSPF)发现的路由纯动态地注入到 RTB 的 BGP 路由表中。2、半动态注入:是指路由器有选择性的将 IGP 发现的动态路由信息注入到 BGP 系统中去。它和纯动态注入的区别在于:半动态注入一开始就有选择的注入路由信
19、息;而纯动态是把所有的 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)发现的路由半动态地注入到
20、RTB 的 BGP 路由表中。3、静态注入:它与半动态注入很类似,不同的是半动态注入的路由是由IGP 动态路由协议发现的路由。而静态注入的路由是手工配置的静态路由。人为配置静态路由 18.0.0.1/8 把人为配置的静态路由注入到 RTB 的 BGP 路由表中。六、BGP 报文(消息)(一)BGP 报文(消息)分类:1、Open:是连接建立后发送的第一个消息,它用于建立 BGP 对等体间的连接关系。2、KeepAlive:是用于检测连接有效性的消息。 3、Update:是 BGP 系统中最重要的信息,用于在对等体之间交换路由信息,它最多由三部分构成:不可达路由(unreachable) 、路径
21、属性(pathattributes) 、网络可达性信息NLRI( network layer reach/reachable information) 4、Notification:是错误通告消息 (二)BGP 报文作用BGP 协议的运行是通过报文(消息)驱动的。BGP 对等体间通过发送 OPEN 报文来交换各自的版本、自治系统号、保持时间、BGP标识符等信息,进行协商。UPDATE 报文携带的是路由更新信息。其中包括撤销路由信息和可达路由信息及其各种路由属性。当 BGP 检测到差错(连接中断、协商出错、报文差错等)时,发送 NOTIFICATION 报文,关闭同对等体的连接。KEEPALIV
22、E 报文在 BGP 对等体间周期地发送,以确保连接保持有效。OPEN 报文主要用于建立邻居(BGP 对等体)关系,它是 BGP 路由器之间的初始握手消息,应该发生在任何通告消息之前。其他在收到 OPEN 消息之后,即以 KEEPALIVE 消息作为响应。一旦握手成功,则这些 BGP 邻居就可以进行 UPDATE、KEEPALIVE 以及NOTIFICATION 等消息的交换操作了。(三)BGP 报文格式BGP 报文的格式是一样的,都是”报文头+报文体“的格式,下面就是 BGP 报文头: Type(类型):1 字节,指示报文类型,如 OPEN、UPDATE 报文等 。 Marker(标记):本
23、16 字节的字段包含消息接收者可以预测的值。如果消息类型是 OPEN,或者 OPEN 消息没有承载认证信息(作为可选参数) ,标记必须是全1。否则,标记的值要使用认证机制来计算。标记可以用来探测 BGP 对端的同步丢失,认证进入的 BGP 报文。 Length(长度):两字节无符号整数。指定了消息的全长,包括头部字节。1、Open 报文Open 报文是由报文头加如下结构构成的。 Version :发端 BGP 版本号 My Autonomous System :本地 AS 号 Hold Time :发送方提供建议的保持定时器的设定秒数。 保持定时器规定了 BGP 邻居认为发送方信息有效的时间长
24、度。如果 BGP 对等体之前的 OPEN 报文中 Hold Time 时间不一致,选择较小的 Hold Time。 BGP Identifier :发送端的路由器标识符。 该值是在 BGP 对等体之间进行握手操作的过程中确定的,并且在每个本地接口及每个 BGP 对等体之间是保持不变的。 Optional parmeters Len :可选的参数的长度 Optional Parameters :可选的参数2、KeepAlive 报文KeepAlive 报文只有报文头。KeepAlive 报文主要用于对等体路由器间的运行状态以及链路的可用性确认。KeepAlive 报文的组成只包括一个 BGP 数
25、据报头。 KeepAlive 消息在对等路由器间的交换频度以保证对方保持定时器不超时为限。当一台路由器与其邻居建立 BGP 连接之后,将以 Keepalive-interval 设定的时间间隔周期性地向对等体发送 Keepalive 报文,表明该连接是否还可保持。缺省情况下,发送 Keepalive 的时间间隔为 60 秒,Hold Time 是 180 秒。每次从邻居处接收到 Keepalive 报文将重置 Hold Time 定时器,如果 Hold Time 定时器超时,peer 就认为对等体 Down 掉。3、Update 报文Update 报文由报文头加如下结构构成。 Unfeasib
26、le Routes Len :(2 字节无符号整数) 不可达路由长度 Withdrawn Routes :(变长) 撤消路由 Path Attribute Len :(2 字节无符号整数) 路由属性长度 Path Attributes :(变长) 路由属性 Network Layer Reachability Information :(变长) 网络可达信息UPDATE 报文是 BGP 系统中最重要的信息,用于在同伴之间交换路由信息,它最多由三部分构成:不可达路由(unreachable) 、路径属性(path attributes) 、网络可达性信息(NLRI,network layer r
27、eachability information) 。BGP 提供了机制告诉对端先前的路由通告不再能使用。有三种方式供 BGP 发言者指示撤销某条路由的服务:)对于先前通告的路由,在 UPDATE 消息的 WITHDRAWN ROUTES 字段内通告了到目的地 IP 前缀,这样相应的路由被标志为不再使用;)通告有相同网络层可达信息的替代路由;)关闭 BGP 邻居之间的连接,这意味着从服务里撤销这一对 BGP 对等体互相通告的所有的路由。一个 UPDATE 消息一次只能通告一条路由,但它可以携带多个路由属性。一个 UPDATE 消息一次也可通告多条路由,但它的路由属性必须相同。一个 UPDATE
28、消息可以同时携带多个被撤消的路由。4、Notification 报文Notification 报文由报文头加如下结构构成 Notification 报文主要在发生错误或对等体连接被关闭的情况下使用,该消息携带各种错误代码(如定时器超时等) ,以及辅助错误代码及错误信息。 Errorcode:错误代码: Errsubcode:辅助错误代码。 Data:依赖于不同的错误代码和辅助错误代码。用于标识错误原因。错误代码 1 2 3 4 5 6错误类型 消息头错 Open 消息错 Update 消息错 保持时间超时 状态机错 退出(四)BGP 报文(消息)应用:通过 TCP 建立 BGP 连接时,发送
29、open 消息;连接建立后,如果有路由需要发送或路由变化时,发送 UPDATE 消息通告对端路由信息;稳定后此时要定时发送 KEEPALIVE 消息以保持 BGP 连接的有效性;当本地 BGP 在运行中发现错误时,要发送 NOTIFICATION 消息通告 BGP 对端;BGP 使用 TCP 建立连接,本地监听端口为 179。和 TCP 建立相同,BGP 连接的建立也要经过一系列的对话和握手。TCP 通过握手协商通告其端口等参数, BGP 的握手协商的参数有:BGP 版本、BGP 连接保持时间、本地的路由器标识(Router ID) 、授权信息等。这些信息都在 Open 消息中携带。BGP 连
30、接建立后,如果有路由需要发送则发送 Update 消息通告对端。Update 消息发布路由时,还要携带此路由的路由属性,用以帮助对端 BGP 协议选择最优路由。在本地 BGP 路由变化时,要通过 Update 消息来通知对端 BGP 对等体。经过一段时间的路由信息交换后,本地 BGP 和对端 BGP 都无新路由通告,趋于稳定状态。此时要定时发送 KEEPALIVE 消息以保持 BGP 连接的有效性。对于本地 BGP,如果在保持时间内,未收到任何对端发来的 BGP 消息,就认为此 BGP 连接已经中断,将断开此 BGP 连接,并删除所有从该对等体学来的 BGP 路由。当本地 BGP 在运行中发现
31、错误时,要发送 NOTIFICATION 消息通告 BGP 对等体。如对端 BGP 版本本地不支持、本地 BGP 收到了结构非法的 Update 消息等。本地 BGP 退出BGP 连接时也要发送 NOTIFICATION 消息。七、BGP 邻接关系的建立过程BGP 协议有限状态机有六个状态,空闲(Idle) 、连接(Connect) 、活动(Active) 、打开发送(Open Sent) 、打开确认(Open Confirm)和已建立(Established)六种状态之间的转换过程说明了 BGP 邻居关系建立的过程。如下图所示:BGP 协议的状态机示意图上图中首先是 Idle 状态,BGP
32、协议一旦 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 一旦收到了一个正确的 O
33、pen 报文,就会进入 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 的邻居状
34、态是 Active 时,BGP 邻居之间还无法通告路由,主要是因为 TCP 连接还没有建立起来。可能的原因有路由不可达,或者 BGP 的配置有错误。当 BGP 的邻居状态是 Establish 时,表明 BGP 对等体之间可以通告 BGP 路由信息了。八、BGP 的路由属性BGP 是一种外部路由协议,其着眼点在于控制路由的传播和选择最好的路由。为控制路由的传播和路由选择,BGP 为路由附带属性信息。BGP 路由属性是一套参数,它对特定的路由进行更深地描述,使得 BGP 能够对路由进行过滤和选择。在配置路由策略时将广泛地使用路由属性,但并不是所有路由属性都要被用上。路由属性被分为以下几类。 必遵
35、属性:在路由更新数据报文中必须存在的路由属性,这种属性域在 BGP 路由信息中有着不可替代的作用,如果缺少必遵属性,路由信息就会出错。如 AS-Path就是必遵属性,BGP 用它来避免路由环路,没有它路由就可能出问题。 可选属性:它是可选的,不一定存在于路由更新数据报文中,设置它完全是根据需要。如 MED 属性,就用它来控制选路。 过渡属性:具有 AS 间可传递性的属性就是过渡属性,过渡属性的域值可以被传递到其他 AS 中去并继续起作用。如 Origin 属性,路由信息的起源一旦确定,域值会一直存在,无论此路由信息被传到哪个 AS 中去。 非过渡属性:只在本地起作用,离开自治系统,域值就恢复成
36、默认值,如 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、EG
37、P 和Incomplete 等。一般的,按如下方式决定一条路由的 Origin 属性: 某条路由是直接而具体的注入到 BGP 路由表中的,则 origin 属性为 IGP 路由是通过 EGP 得到的,则 origin 属性为 EGP 其他情形下,Origin 属性都为 IncompleteBGP 允许三种类型的起源:BGP 在其路由优选过程中会考虑起点属性。具体来说,BGP 针对 Origin 属性的优选顺序为:IGPEGPINCOMPLETE。一般情况下:用“network ip-address mask ”命令注入的路由或者是聚合路由,起点类型为 IGP,在 BGP 路由表显示为 i(源属
38、性:0) 。把从其它 IGP 路由协议引入的路由起点类型设置为 Incomplete。即用“import”命令注入的路由,在路由表中,显示为(源属性:2) 。把通过 EGP 得到的路由的起点类型设置为 EGP(此处 EGP 指一种路由协议,该协议现在已经废弃) ,显示为 E(源属性:1) 。2、AS-PathAS 路径属性:它是路由经过的 AS 的序列,即列出在到达所通告的网络之前所经过的 AS 的清单。BGP 发言者将自己的 AS 前置到接收到的 AS 路径的头部,以记录此路由经过 AS 的信息,它可以防止路由循环,并用于路由的过滤和选择。 同时,AS-Path 属性还可以影响路由选择。在其
39、它因素相同的条件下,选择 AS-Path较短的路由。如上图所示,AS200 内的关于网络 D18.0.0.0/8 的 BGP 路由经AS200、AS300、AS400 到达 AS100 的 AS-Path 为 d1(400 300 200) ,经AS200、AS500 到达 AS100 的 AS-Path 为 d2(500 200) ,这时 BGP 优先选择有较短AS-Path 的 BGP 路由:”D , d2 500 200”。但是在某些特殊应用中,如 Hub&Spoke 组网方式下,我们需要接受 AS 号重复的 BGP路由。此时,可以用下面的命令来强制接受此类路由:peer group-n
40、ame | ipv4-address allow-as-loop number 参数:group-name:对等体组的名称。ipv4-address:对等体的 IPv4 地址。number :本地 AS 号的的重复次数,范围为 110。缺省值为 1。可以通过加入伪 AS 号来增加路径长度,从而影响路径选择。例如,我们可以在 RTA 上配置,使之将路由 10.0.0.0/8 发往邻居时,将其 AS-Path 属性再加上两个自治系统号 123、123,这样当这条路由被传递到 RTB 时,其 AS-Path 为:d1(123 123 123) 。而从 AS462 传来的始发于 AS123 的路由的
41、AS-Path 为 d2(462 123) 。这样 d1 的 AS-Path 比 d2 长,所以最终路由器会认为 d2 为较优的路由。3、Next-hop 下一跳属性:它包含到达更新消息所列网络的下一跳边界路由器的 IP 地址。BGP 的下一跳与 IGP有所不同,它可以是通告此路由的对等体的地址,如 EBGP,这同 IGP 是相同的。而在其他情况下,BGP 使用第三方的下一跳,如 IBGP 对从 EBGP 对等体获得的下一跳不加改变地在自治系统内传递。在多路访问媒体上,BGP 以路由的实际来源为下一跳,即使它不是BGP 对等体。 在右图中:RTA:可经下一跳 10.0.0.2 到达18.0.0
42、.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 邻居通告路由时,或者将本地
43、发布的 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通告路由的
44、下一跳,而不是 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 路由将失效。解决方法:方法一:可以在 RTA 的 BGP 视图下引入直连路由;方法二:在 RTA 上,使用命令 peer group-name | ipv4-address next-hop-local。此命令用来设置 BGP 向对等体组/对等体通告
45、路由时,把下一跳属性设为自身的 IP 地址。在 BGP 多路广播网络中,其下一跳属性不变。如右图:路由器 B 通过 EBGP 通告网络172.30.0.0 给 A 而不改变其下一跳属性10.10.10.2,这种行为防止了一个不必要的 Hop,因为他们都同在一个多路广播网络里面。如果改变了其下一跳属性为 10.10.10.1,当 AS 65000 作为一个 Transit AS(中转自治系统)的时候, AS 64520 的 EBGP Router 就不是以最优的路径通过 AS 65000。 BGP 是一种 AS-by-AS 的路由协议,它的下一跳指的是下一个 AS,而不是下一个Router。(1
46、)从 EBGP 学习到的路由,其下一跳属性不变,可以手动做 next-hop-self (2)在 IBGP 关系中,下一跳地址,是通告该路由的 IBGP 的 更新源还是 Router-id 呢?下一跳 next_ hop 属性的三个规则:a、如果是由 EBGP peer 通告的 BGP update 报文,那么 next_hop 就是 AS 外这个 EBGP peer 的 IP 地址。 (实际上,是与本 AS 直连的接口 IP 地址) b、假如 BGP update 报文是由 IBGP peer 通告的,那么 next_hop 就是这个 IBGP peer 发出更新报文的接口 IP 地址 c、
47、如果 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 才是
48、真正的下一跳。 这里,我们会发现一个问题,就是假如这个边界路由器没有告诉本 AS 的其它路由器到这个 EBGP peer 怎么走,那么这样路由不可达就会导致数据包被丢弃。所以引入了next_hop_self 机制,配置在边界路由器上,使得 IBGP peer 要发路由更新给 EBGP peer 的时候,强制从自己这里走,因为对于边界路由器来讲,它知道怎么到达 EBGP peer 的。这个其实有点类似于代理的概念。比如 proxy ARP。就是把自己的 MAC 地址通告给 ARP 请求者,而不是把 ARP 请求的真正目的 MAC 回送回去。目的就是代理。4、MED(Multi-Exit-Disc
49、riminators)属性:它又叫 BGP 的 metrics 值(没有 MED 的路由-MED0;缺少 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