admin 管理员组文章数量: 887021
路由协议
BGP协议原理与配置
- BGP基本概述
- BGP邻居关系建立与配置
- BGP路由生成方式
- BGP通告原则与路由处理
- BGP常用属性介绍
- BGP选路原则
- BGP路由聚合
BGP基本概述
- BGP的前身EGP设计得非常简单,只能在AS之间简单地传递路由信息,不会对路由进行任何优选,也没有考虑如何在AS之间避免路由环路等问题,因而EBP最终被BGP取代。
- 相比于EGP,BGP更具有路由协议的特征,如下:
- 邻居的发现与邻居关系的建立;
- 路由的获取,优选和通告;
- 提供路由环路避免机制,并能够高效传递路由,维护大量的路由信息;
- 在不完全信任的AS之间提供丰富的路由控制能力。
- 使用BGP作为传递路由的协议,则用户的路由域被作为一个整体和其他路由域进行路由交换,这个路由域即AS。AS的概念是若干台路由器以及这些路由器组成的网络集合,这些路由器均属于同一个管理机构,并执行统一的路由策略。
- 运行BGP协议需要一个统一的自治系统号来标识路由域,即AS编号。每个自治系统都有唯一的一个编号,这个编号由IANA分配。2009年1月之前,只能使用最多2字节长度的AS号码,即1-65535。其中1-64511为公有AS,64512-65534为私有AS。在2009年1月之后,IANA决定使用4字节长度AS,范围是65536-4294967295。
- 因为是在AS之间传递路由,为保证数据的可靠性, BGP使用TCP作为其承载协议建立连接。因此与IGP逐跳路由器建立邻居不同,BGP可以跨越多跳路由器建立邻居关系。
- AS之间的路由器是不完全相互信任的,为实现路由按需求进行控制和优选,BGP设计了诸多属性。
BGP邻居关系建立与配置
- BGP协议被设计运行在AS之间传递路由,AS之间是广域网链路,数据包在广域网上传递是可能出现不可预测的链路拥塞或丢失等情况,因此BGP使用TCP作为其承载协议来保证可靠性。
- BGP使用TCP封装建立邻居关系,端口号为179,TCP采用单播建立连接,因此BGP协议并不像RIP和OSPF一样使用组播发现邻居。单播建立连接也使BGP只能手动指定邻居。
- EBGP只用于不同AS之间传递路由。如图,AS 100内的RTB与BTC分别从AS 200与AS 300学习到不同的路由,怎么实现AS 200与AS 300之间路由在AS 100内的交换?
- 在AS 100内实现将学到的AS 200和AS 300路由进行交换,可以在拓扑中的RTB与RTC路由器上将BGP的路由引入IGP协议(图中为OSPF协议),再将IGP协议的路由在RTB与RTC路由器上引入回BGP协议,实现AS 200与AS 300路由的交换。
- 上述方法存在以下几个缺点:
- 公网上BGP承载的路由数目非常大,引入IGP协议后,IGP协议无法承载大量的BGP路由;
- BGP路由引入IGP协议时,需要做严格的控制,配置复杂,不易维护;
- BGP携带的属性在引入IGP协议时,由于IGP协议不能识别,可能会丢失。
- 因此我们需要设计BGP在AS内部完成路由的传递。
- 如上图,因为BGP使用TCP作为其承载协议,所以可以跨设备建立邻居关系。如图所示,RTB与RTC之间建立IBGP邻居关系,并各自将从其他AS学到的路由传递给对端,实现BGP路由在AS内的传递。
配置步骤:
- 配置Router ID(标识路由器);
- 配置EBGP邻居关系(AS之间传递路由);
- 配置IBGP邻居关系(AS内部传递路由)。
配置解释:
- 如果没有配置Router ID,BGP路由器会按一定规则自动选举Router ID,选举规则如下:
- 路由器在它的所有LoopBack接口上选择数值最高的IP地址;
- 如果没有LoopBack接口,路由器会在它的所有物理接口上选择数值最高的IP地址。
- 配置命令:router id X.X.X.X
- BGP邻居关系的类型主要靠配置的AS号区别,peer关键字后面是对端邻居的接口IP地址,as-number后面是邻居路由器所在的AS号,AS号相同则为IBGP邻居关系;AS号不同,则为EBGP邻居关系。
- peer关键字后面是对端邻居的更新源IP地址,标识自己向对端邻居发起TCP连接的目的地址。该地址可以是对端邻居直连接口的IP地址,也可以是非直连LoopBack接口的IP地址(但必须保证该IP地址路由可达)。建立IBGP邻居关系时,一般使用LoopBack接口的IP地址,因为LoopBack接口开启后一直处于UP状态,只要保证路由可达,邻居关系一直处于稳定状态;而建立EBGP邻居关系时,一般使用直连接口的IP地址,因为EBGP是跨AS建立邻居关系,邻居关系建立之前非直连接口之间的路由不可达。
- 建立EBGP邻居关系时,一般使用直连接口的IP地址;建立IBGP邻居关系时,一般使用Loopback接口的IP地址。
- BGP通过报文的交互完成邻居建立、路由更新等操作,共有Open、Update、Notification、Keepalive和Route-refresh等5种报文类型。
- Open报文:是TCP连接建立后发送的第一个报文,用于建立BGP邻居之间的连接关系。BGP邻居在接收到Open报文并协商成功后,将发送Keepalive报文确认并保持连接的有效性。确认后,BGP邻居间可以进行Update、Notification、Keepalive和Route-refresh报文的交换。
- Update报文:用于在BGP邻居之间交换路由信息。Update报文可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。
- 一条Update报文可以发布多条具有相同路由属性的可达路由,这些路由可共享一组路由属性。所有包含在一个给定的Update报文里的路由属性适用于该Update报文中的NLRI(Network Layer Reachability Information)字段里的所有目的地(用IP前缀表示)。
- 一条Update报文可以撤销多条不可达路由。每一个路由通过目的地(用IP前缀表示),清楚地定义了BGP路由器之间先前通告过的路由。
- 一条Update报文可以只用于撤销路由,这样就不需要包括路径属性或者NLRI。相反,也可以只用于通告可达路由,就不需要携带撤销路由信息了。
- Notification报文:当BGP路由器检测到错误状态时,就向邻居发出Notification报文,之后BGP连接会立即中断。
- Keepalive报文:BGP路由器会周期性的向邻居发出Keepalive报文,用来保持连接的有效性。
- Route-refresh报文:Route-refresh用于在改变路由策略后请求对等体重新发送路由信息。
- BGP路由器报文交互过程:Idle状态是BGP初始状态。在Idle状态下,BGP路由器拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP路由器才开始尝试与其邻居进行TCP连接,并转至Connect状态。
- 在Connect状态下,BGP路由器启动连接重传定时器(Connect Retry),等待TCP完成连接。
- 如果TCP连接成功,那么BGP路由器向邻居发送Open报文,并转至OpenSent状态。
- 如果TCP连接失败,那么BGP路由器转至Active状态。
- 如果连接重传定时器超时,BGP路由器仍没有收到邻居的响应,那么BGP路由器继续尝试与其邻居进行TCP连接,停留在Connect状态。
- 在Active状态下,BGP路由器总是在试图建立TCP连接。
- 如果TCP连接成功,那么BGP路由器向邻居发送Open报文,关闭连接重传定时器,并转至OpenSent状态。
- 如果TCP连接失败,那么BGP路由器停留在Active状态。
- 如果连接重传定时器超时,BGP路由器仍没有收到邻居的响应,那么BGP路由器转至Connect状态。
- 在OpenSent状态下,BGP路由器等待邻居的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
- 如果收到的Open报文正确,那么BGP路由器发送Keepalive报文,并转至OpenConfirm状态。
- 如果发现收到的Open报文有错误,那么BGP路由器发送Notification报文给邻居,并转至Idle状态。
- 在OpenConfirm状态下,BGP路由器等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。
- 在Established状态下,BGP路由器可以和邻居交换Update、Keepalive、Route-refresh报文和Notification报文。
BGP路由生成方式
- 生成BGP路由的方式有两种:第一种是使用配置命令network,第二种是使用配置命令import。
- 如图所示,RTA上存在100.0.0.0/24与100.0.1.0/24的两个用户网段,RTB上通过静态路由指定去往100.0.0.0/24网段的路由,通过OSPF学到去往100.0.1.0/24的路由。RTB与RTC建立EBGP的邻居关系,RTB通过network命令宣告100.0.0.0/24,100.0.1.0/24与10.1.12.0/24的路由,使对端EBGP邻居RTC学习到RTB路由表里的路由。
- RTA上存在100.0.0.0/24与100.0.1.0/24的两个用户网段,RTB上通过静态路由指定去往100.0.0.0/24网段的路由,通过OSPF学到去往100.0.1.0/24的路由。RTB与RTC建立EBGP的邻居关系,RTB通过import命令宣告100.0.0.0/24,100.0.1.0/24与10.1.12.0/24的路由,使对端EBGP邻居学习到本AS内的路由。
- 为了防止其他路由被引入到BGP中,需要配置ip-prefix进行精确匹配,调用route-policy在BGP引入路由时进行控制。
BGP通告原则与路由处理
- 存在多条有效路由时,BGP路由器只将自己最优的路由发布给邻居。
- RTD可以从BGP邻居RTB与RTC学习到100.0.0.0/24的路由,同时RTD将自己的直连路由200.0.0.0/24发布到BGP中。在RTD上使用命令display bgp routing-table查看如图所示;
- 在RTE上使用命令display bgp routing-table查看如图所示。可以发现,RTD将自己标为有效且最优的路由发布给了BGP邻居RTE。
- BGP路由表中的状态含义:
- Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale
- Origin : i - IGP, e - EGP, ? – incomplete
- Network:显示BGP路由表中的网络地址
- NextHop:报文发送的下一跳地址
- MED:路由度量值
- LocPrf:本地优先级
- PrefVal:协议首选值
- Path/Ogn:显示AS路径号及Origin属性
- Community:团体属性信息
- BGP路由器通过EBGP获得的最优路由会发布给所有的BGP邻居(包括EBGP邻居和IBGP邻居)。
- 如图所示,RTA上有一个100.0.0.0/24的用户网段,并通过EBGP将该网段发布给BGP邻居RTB。RTB收到EBGP邻居发送来的100.0.0.0/24的路由后,将会通告给自己的IBGP邻居RTC与EBGP邻居RTD。
- BGP路由器通过IBGP获得的最优路由不会发布给其他的IBGP邻居。
- 如图所示,RTA上存在一个100.0.0.0/24的用户网段,RTA、RTB与RTC之间互为IBGP邻居,RTA通过IBGP将100.0.0.0/24的路由发布给RTB与RTC,但是RTB并不会将收到的IBGP路由发布给自己的IBGP邻居RTC。
- 这样设计的目的是防止在AS内部形成路由环路。根据规定,BGP路由在同一个AS内进行传递时,AS_Path属性不会发生变化。如图所示,RTA将100.0.0.0/24的路由发布给RTB时,AS_Path属性不变,为空。如果RTB能将IBGP路由100.0.0.0/24发布给RTC,AS_Path依旧为空。则RTC也有可能将100.0.0.0/24的路由发布给RTA,因为AS_Path为空,RTA并不会拒收该IBGP路由,路由环路产生。因此,上述通告原则是为了防止在AS内部形成路由环路。
- RTA上存在一个100.0.0.0/24的用户网段,通过EBGP发布给RTB。RTB与RTD建立了IBGP邻居关系,RTD通过IBGP学习到该BGP路由,并将该路由发布给EBGP邻居RTE。
- 当RTE访问100.0.0.0/24的路由时,查找路由表,发现到达100.0.0.0/24路由的下一跳是RTD,RTE查找出接口后,将数据包发送给RTD;RTD收到数据包后,查找路由表,发现到达100.0.0.0/24路由的下一跳是RTB,出接口是RTD上与RTC相连的接口,于是将数据包发给RTC,RTC查找路由表,发现没有到达100.0.0.0/24的路由,于是将数据丢弃,形成“路由黑洞”。
- BGP的通告原则:一条从IBGP邻居学来的路由在发布给一个BGP邻居之前,通过IGP必须知道该路由,即BGP与IGP同步。
- 如图所示,RTD在收到RTB发来的IBGP路由之后,如果要发布给BGP邻居RTE,则在发布之前先检查IGP协议(即OSPF协议)能否学到该条路由。如果能,则将IBGP路由发布给RTE。
- 在华为路由器上,默认是将BGP与IGP的同步检查关闭的,原因是为了实现IBGP路由的正常通告。但关闭了BGP与IGP的同步检查后会出现“路由黑洞”的问题。因此,有两种解决方案解决上述问题:
- 将BGP路由引入到IGP,从而保证IGP与BGP的同步。但是,因为Internet上的BGP路由数量十分庞大,一旦引入到IGP,会给IGP路由器带来巨大的处理和存储负担,如果路由器负担过重,则可能瘫痪。
- IBGP路由器必须是全互联,确保所有的路由器都能学习到通告的路由。这样可以解决关闭同步后导致的“路由黑洞”问题。
- IP路由表(IP_RIB):全局路由信息库,包括所有的IP路由信息。
- BGP路由表(Local_RIB):BGP路由信息库,包括本地BGP路由器选择的路由信息,邻居表,邻居清单列表。
- 收到BGP邻居发来的Update报文,路由器会执行算法进行路径选择,确定每一条前缀的最佳路径,并将计算出的最佳路径存储到本地BGP路由表(Local_RIB)中。
- 如果启用了多路径特性,最佳路径和所有等值路径都被提交给IP_RIB,考虑是否安装。除了从BGP邻居接收的最佳路径外,Local_RIB也包含当前路由器注入的路由(被称为本地发起的路由)。
- 在Local_RIB中,只有被选为最优的前缀才会被封装到Update报文中通告给自己的BGP邻居。
BGP常用属性介绍
以上两个问题的解决方案:
- 在AS之间交换路由可达信息时,设计BGP能够提供丰富的属性,实现对路由的灵活控制和优选。
- 修改路由表,调整AS之间的链路Metric;2.不修改路由表, 使用策略修改路由下一跳。但是这些方法在某些情况下具有局限性,不能满足网络的丰富需求。
- 路由在AS之间传递时记录传播路径,防止环路的产生。
- 公认属性:所有BGP路由器都必须识别并支持的属性。
- 公认必遵:BGP的Update消息中必须包含的属性。
- 公认任意:不必存在于BGP的Update消息中,可以根据需求自由选择的属性。
- 可选属性:不要求所有的BGP路由器都能够识别的属性。
- 可选过渡:BGP不能识别该属性,但可以接收该属性并将其发布给它的邻居的属性。
- 可选非过渡:BGP可以忽略包含该属性的消息并且不向它的邻居发布。
- 如图所示,AS 200内运行OSPF协议,200.0.0.0/24网段宣告到OSPF中。RTB通过network方式将200.0.0.0/24的路由变为BGP路由通告给RTA,RTC通过import方式将200.0.0.0/24的路由变为BGP路由通告给RTA。
- BGP在AS之间传递信息,承载大量的路由。如果到达同一目的IP有多条路径,且BGP学到这些路由通过不同的方式,则Origin属性是决定最优路径的一个因素,用于标明路由的起源。
- Origin的3种属性:
- i 表明BGP路由通过network命令注入;
- e 表明BGP路由是从EGP学来的,EGP协议在现网中很难见到,但可以通过路由策略将路由的Origin属性修改为e;
- ? 即Incomplete表明BGP路由通过其它方式学到路由信息,如使用import命令引入的路由。
- 3种Origin属性的优先级为:i>e>Incomplete(?)。
- BGP针对以上2个问题,设计了AS_Path属性,该属性记录了路由经过的所有AS的编号:
- 图中RTA从RTB收到100.0.0.0/24的路由时,AS_Path为(2,4),RTA从RTC收到100.0.0.0/24的路由时,AS_Path为(3,5,4)。规定AS_Path越短(记录的AS编号越少),路径越优,因此RTA会优选从RTB收到的100.0.0.0/24的路由。
- 以RTE为例,通过BGP发布100.0.0.0/24的路由,路由可能通过RTE->RTB->RTC->RTD->RTE形成环路。为了防止环路的产生,RTE在收到RTD发来的路由时会检查AS_Path(该路由携带的)属性,如果发现该路由的AS_Path中包含自己的AS号,则丢弃该路由。
- AS_Path的4种类型:
- AS_Sequence(后续讲解BGP路由聚合时会详细说明);
- AS_Set(后续讲解BGP路由聚合时会详细说明);
- AS_Confed_Sequence(应用于联盟,本课程不涉及);
- AS_Confed_Set(应用于联盟,本课程不涉及)。
- BGP路由器将本端始发路由发布给IBGP邻居时,会把该路由信息的Next_hop设为本端建立邻居关系所使用的接口IP。
- 如图所示,RTA将100.0.0.0/24的网段发布给RTB时,如果RTA与RTB使用直连接口建立IBGP邻居,则Next_hop为RTA上与RTB直连的接口IP;如果RTA与RTB使用Loopback接口建立IBGP邻居,则Next_hop为RTA的Loopback接口IP。
- BGP路由器在向EBGP邻居发布路由时,会把路由信息的Next_hop设置为本端与对端建立BGP邻居关系的接口IP。
- 如图所示,RTB将100.0.0.0/24的网段发布给RTC时,Next_hop为RTB上与RTC直连的接口IP。
- BGP路由器在向IBGP邻居通告从EBGP学来的路由时,不改变该路由下一跳属性。
- 特例:如图所示,RTA从RTB学到RTC发布的200.0.0.0/24的网段时,Next_hop为RTD的出接口IP,因为RTB与RTD在同一网段,RTC通告给RTB的Next_hop为RTD的出接口IP。
- 对于上述三种情况的解释:
- EBGP邻居之间一般采用直连接口建立邻居关系,EBGP邻居在相互通告路由时会修改Next_hop为自己的出接口IP;
- IBGP邻居通常采用Loopback接口建立邻居,当路由是本路由器起源的,在发送给邻居之后Next_hop改为自己的更新源地址,这样即使网络中出现链路故障,只要Next_hop可达,同样可以访问目的网段,提高网络稳定性;
- 相对于IGP,如RIP在发布路由时,每经过一个路由器都会修改下一跳,发布路由的路由器都宣称自己能够到达目标地址,并采用逐跳传递的方式将数据包发送给目标网络,但网络中的路由器并不知道谁是真正的始发路由器,因此会造成环路。BGP在EBGP之间传递时才修改Next_hop,IBGP发送从EBGP学来的路由给IBGP邻居时并不修改下一跳,在一定程度上起到了防环作用。
- 如图所示,AS 200内有一个200.0.0.0/24的用户网段,通过BGP发布给AS 100。AS 100内的管理员如何设置才可以实现通过高带宽链路访问200.0.0.0/24的网络?
- 解决办法:
- 在RTC上设置ip-prefix匹配200.0.0.0/24的路由,使用route-policy调用该ip-prefix,并设置Local_Preference为200,将策略应用在对RTA发布路由的export方向。
- Local_Pref属性仅在IBGP邻居之间有效,不通告给其他AS。它表明路由器的BGP优先级,值越大越优。
- Local_Pref属性用于判断流量离开AS时的最佳路由。当BGP路由器通过不同的IBGP邻居获得目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由,其默认值为100。
- 如图所示,AS 300内的管理员希望在AS 300内操作影响AS 200通过高带宽链路访问100.0.0.0/24,如何实现?
- 解决方法:
- 在RTE上设置ip-prefix匹配100.0.0.0/24的路由,再设置route-policy调用该ipprefix,并设置MED为100,将策略应用在对RTC发布路由的export方向。
- MED(Multi-Exit-Discriminator)属性仅在相邻两个AS之间传递,收到此属性的AS不会再将其通告给任何其他第三方AS。如图所示,AS100内并不会收到AS 300内设置的MED值,但是AS 200内会收到AS 300内设置的MED值,因此AS 200内可以选择高带宽的路由。
- MED属性相当于IGP使用的度量值(Metric),它用于判断流量进入AS时的最佳路由。当一个运行BGP的路由器通过不同的EBGP邻居获得目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由,其默认值为0。
- 如图所示,AS 10内有10.1.10.0/24的用户网段,AS 11内有10.1.11.0/24的用户网段。为了区分用户网段,AS 10内的10.1.10.0/24设置了10:12的Community,AS 11的10.1.11.0/24设置了11:12的Community,通过BGP发送给AS 12后,AS 12希望汇总后屏蔽掉明细路由再发送给AS 13,并且希望AS 13收到路由后不再传递给其他AS,如何实现?
- 解决方法:
- 在RTC上设置Community-filter,匹配Community为10:12和11:12的路由,再设置route-policy匹配Community-filter,将两条路由聚合成10.1.10.0/23的路由并调用route-policy。
- 在RTC上设置route-policy,设置团体属性为no-export,在RTC通告给RTD的export方向调用该route-policy。
- Community属性分为两类:一类是公认团体属性,另一类是扩展的团体属性。
- 公认团体属性分为4类:
- Internet:缺省属性,所有路由都属于Internet,此属性的路由可以通告给所有BGP邻居;
- No_Export:收到此属性的路由后,不将该路由发布到其他AS。如图,RTB上希望10.1.11.0/24的路由发布给AS 12之后,不再发布给其他AS,则可将10.1.11.0/24的Community属性设置为No_Export;
- No_Advertise:收到此属性的路由后,不将该路由通告给任何其他的BGP邻居。如图,RTB上希望只将10.1.11.0/24的路由发布给RTC,并且不再通告给任何其他的BGP邻居,则可将10.1.11.0/24的Community属性设置为No_Advertise;
- No_Export_Subconfed:在联盟中使用,这里不做介绍。
- 扩展的团体属性用一组4字节为单位的列表来表示,路由器中扩展的团体属性格式为aa:nn或团体号:
- aa:nn中,aa通常为AS编号,nn是管理员定义的团体属性标识;
- 团体号范围为0-4294967295,在RFC1997中,0-65535与4294901760-4294967295为预留值。
BGP选路原则
- 如图所示,AS 200内有一个200.0.0.0/24的用户网段,AS 100内的管理员希望通过高带宽链路访问AS 200内的200.0.0.0/24网段,并希望在RTA上的策略只能影响自己的选路,不能影响其他设备,如何实现?
- 解决办法:
- 在RTA上设置ip-prefix匹配200.0.0.0/24的路由,再设置route-policy调用该ipprefix,并设置Preference_Value为100,将策略应用在对RTC发布路由的import方向。
- 验证:RTC上使用Tracert命令,查看访问200.0.0.0/24网段经过的路由器。
- 如图所示,在AS 200内,RTB与RTC上存在200.0.0.0/24网段的用户,RTB与RTC将200.0.0.0/24的网段通过import方式变为BGP路由,在RTB上将路由聚合后发给RTA,同时开启自动聚合与手动聚合,RTB如何优选聚合路由?
- 如图所示,在RTB上同时使能自动聚合与手动聚合,使用命令查看,可以发现,手动聚合的路由条目被发送给RTA,自动聚合的路由条目则没有通告,说明手动聚合的优先级高于自动聚合。
- 在使用路由聚合时需要注意,自动聚合只能对引入的BGP路由进行聚合,手动聚合可以对存在于BGP路由表中的路由进行聚合,后续在BGP路由聚合中详细介绍。上述场景中,因为需要聚合的路由都是引入的路由,所以使用自动聚合与手动聚合都可以实现聚合的目的。如果BGP路由表中既有引入的路由又有network宣告的路由时,只能采用手动聚合实现。
- 如图所示,在AS 200内有一个200.0.0.0/24的网段,通过EBGP邻居关系通告给RTA与RTB,RTB会通过IBGP邻居关系将200.0.0.0/24的网段通告给RTA,于是RTA会收到两条到达200.0.0.0/24的路由,RTA会如何优选?
- 根据选路原则,RTA会优选从EBGP邻居学来的路由。
- 如图所示,AS 200内有一个200.0.0.0/24的用户网段,通过EBGP发布给RTB与RTC,RTB与RTC通过IBGP将路由发布给RTA。AS 100内的管理员希望通过高带宽链路访问AS 200内的200.0.0.0/24网段, RTA上该如何实现?
- 将RTA与RTB所连接口的OSPF Cost值调为100,RTA则将选择RTA->RTC->RTD的路径访问200.0.0.0/24网段:
- 原因是RTA访问200.0.0.0/24时,到Next_hop 10.1.34.4的Cost(2)小于到Next_hop 10.1.24.4 (101)的Cost。
- 如图所示,AS 200内有一个200.0.0.0/24的用户网段,通过EBGP发布给RTB和RTC,RTB和RTC通过IBGP将路由发布给RTA。RTA和RTB之间通过2条链路相连,RTA会如何优选?
- RTA会选择下一跳为10.1.12.2作为下一跳访问200.0.0.0/24的网段:
- RTA选择RTA->RTB->RTD的路径访问200.0.0.0/24网段,原因是RTB的Router-ID比RTC小,BGP优选Router-ID较小的路由器发布的路由;
- RTA选择下一跳为10.1.12.2地址所在的接口为出接口,原因是BGP优选IP地址较小的邻居学来的路由。
- 在RTA上使用命令display bgp routing-table 200.0.0.0查看如下:
display bgp routing-table 200.0.0.0
BGP local router ID : 1.1.1.1
Local AS number : 100
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 200.0.0.0/24:
From: 2.2.2.2 (2.2.2.2)
Route Duration: 00h02m10s
Relay IP Nexthop: 10.1.12.2
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 10.1.24.4
Qos information : 0x0
AS-path 200, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, pre255, IGP
cost 2, not preferred for router ID
……
- 如图所示,AS 300内有两个用户网段,一个是200.0.0.0/24,一个是100.0.0.0/24。为了区分不同网段的用户,在AS 300内为100.0.0.0/24的网段分配Community属性为300:100,为200.0.0.0/24的网段分配Community属性为300:200。AS 100内用户访问这两个网段时,希望在RTB和RTC上实现流量分担。AS 200访问这两个网段时,希望在RTE和RTF上实现流量分担。请用尽可能多的方法来实现上述需求。
- 根据需求,在AS 100访问这两个网段时,希望在RTB和RTC上实现流量分担;在AS 200访问这两个网段时,希望在RTE和RTF上实现流量分担。假设RTA访问100.0.0.0/24时的路径为RTA->RTB->RTD->RTE->RTG,访问200.0.0.0/24时的路径为RTA->RTC->RTD->RTF->RTG,根据所学路径属性的知识,可供参考解决方案如下:
- RTE和RTF向RTD通告携带团体属性的路由;
- RTD收到携带团体属性的路由后,使用两个Community-filter分别匹配不同的团体属性,再使用两个route-policy分别调用Community-filter,将匹配团体属性300:100的路由的下一跳设为RTE上的出接口地址;将匹配团体属性300:200的路由的下一跳设为RTF上的出接口地址;
- RTD上再设置两个route-policy,一个是将匹配团体属性为300:100的路由设置其MED值为100,在对RTC的export方向调用;另一个是匹配团体属性为300:200的路由并设置其MED值为100,在对RTB的export方向调用。
- RTD上的配置:
bgp 200
peer 10.1.24.2 as-number 100
peer 10.1.34.3 as-number 100
peer 10.1.45.5 as-number 300
peer 10.1.46.6 as-number 300
#
ipv4-family unicast
undo synchronization
peer 10.1.24.2 enable
peer 10.1.24.2 route-policy MED-20 export
peer 10.1.24.2 advertise-community
peer 10.1.34.3 enable
peer 10.1.34.3 route-policy MED-10 export
peer 10.1.34.3 advertise-community
peer 10.1.45.5 enable
peer 10.1.45.5 route-policy 10 import
peer 10.1.46.6 enable
peer 10.1.46.6 route-policy 10 import
#
route-policy 10 permit node 10
if-match community-filter 10
apply ip-address next-hop 10.1.45.5
#
route-policy 10 permit node 20
if-match community-filter 20
apply ip-address next-hop 10.1.46.6
#
route-policy MED-10 permit node 10
if-match community-filter 300:100
apply cost 100
#
route-policy MED-20 permit node 10
if-match community-filter 20
apply cost 100
#
ip community-filter 10 permit 300:100
ip community-filter 20 permit 300:200
验证:在RTA上执行如下命令:
tracert 100.0.0.1,观察所经过的IP地址。
tracert 200.0.0.1,观察所经过的IP地址。
BGP路由聚合
- 解决方案:
- 在RTC上将AS 100和AS 200内的明细路由聚合成10.1.8.0/21的一条路由,并将此聚合路由发布给Client AS。
- 现在Internet上的路由条目数量众多,处理这些路由时存在以下问题:
- 存储路由条目的路由表将占用大量的内存资源,传输路由信息需要占用大量的带宽资源;
- 明细路由频繁震荡造成网络不稳定。
- 因此,通过路由聚合来节省内存和带宽资源,减少路由震荡带来的影响成为必然。
- 使用静态路由配置路由聚合的思路:
- 使用静态路由将明细路由聚合成10.1.8.0/22,下一跳指向NULL 0,因为聚合路由并不是具体的地址,发送给AS 200时只是明细路由的替代,为了防止路由环路,所以将下一跳指向Null 0;
- 由于使用静态路由,路由表中产生了一条10.1.8.0/22的路由,下一跳为Null 0。使用network命令将IP路由表中的10.1.8.0/22路由变为BGP路由,并通告给对端BGP邻居,达到聚合的目的。
- 如图所示,AS 100内有4个用户网段,通过import的方式变为BGP路由,AS 200连接了一个Client AS,该AS内的路由器处理能力较低,因此既希望能访问AS 100与AS 200内的网段,又不希望接收过多路由,如何解决该问题?
- 配置如图所示,在RTB与RTC路由器上使用命令display bgp routing-table查看,输出如下:
< RTB > display bgp routing-table
Network NextHop PrefVal Path/Ogn
> 10.0.0.0 10.1.12.1 0 100?
< RTC > display bgp routing-table
Network NextHop PrefVal Path/Ogn
*> 10.0.0.0 10.1.23.2 0 200 100?
- 自动聚合只对引入BGP的路由进行聚合,聚合到自然网段后发送给邻居。
- 如图所示,AS 100内有4个用户网段,既有通过import的方式引入BGP的路由,又有通过network方式引入BGP的路由。AS 200连接了一个Client AS,该AS内的路由器处理能力较低,因此既希望能访问AS 100与AS 200内的网段,又不希望接收过多路由,如何解决该问题?
- 配置如图所示,在RTB与RTC路由器上使用命令display bgp routing-table查看,输出如下:
< RTB > display bgp routing-table
Network NextHop PrefVal Path/Ogn
*> 10.1.8.0/22 10.1.12.1 0 100?
< RTC > display bgp routing-table
Network NextHop PrefVal Path/Ogn
*> 10.1.8.0/22 10.1.23.2 0 200 100?
- 手动聚合对BGP本地路由表里存在的路由进行聚合,并且能指定聚合路由的掩码。
- 为了解决BGP路由聚合带来的问题,设置了两个AS_Path属性:
- Atomic-Aggregate:公认任意属性,用于警告下游路由器出现了信息丢失,如图所示,AS 200内设置了路由聚合的路由器在聚合后发生了路径丢失的现象,此时该路由器通过Update报文携带该属性通知自己的邻居发生了路径丢失。
- Aggregator:可选过度属性,该属性包含发起聚合的路由器的AS号和Router-ID,表明发生聚合的位置。
- AS_Path属性有两种类型:
- AS_Sequence:表示AS_Path内的AS号是一个有序的列表。
- AS_Set:表示AS_Path内的AS号是一个无序的列表。
- AS_Path本身是一个有序的列表,因为AS_Path每经过一个AS都会将AS号添加到AS_Path中,并且按经过的顺序从左到右排列。
- 如图所示,AS 400向AS 300通告聚合路由时,AS_Path属性(大括号的除外)表示该聚合路由依次经过了AS 200和AS 400。
- 当发生聚合后,如果需要聚合路由携带所有明细路由经过的AS号来防止环路,则在配置聚合的命令后添加as-set参数。
- 如图所示,AS 200内发生了聚合并配置了as-set参数,则聚合路由会将明细路由的AS_Path信息用一个AS-Set集表示(放在中括号里的AS号信息,该集合的AS号没有先后顺序),携带在聚合路由后用以防止环路。
- 路由聚合解决了两类问题,一是减轻了设备传输和计算路由所需资源的负担,二是隐藏了具体的路由信息,减少了路由震荡的影响。但是路由聚合后,AS_Path属性丢失,存在产生环路的风险。
- 如果路由聚合后携带所有明细路由经过的AS信息,当明细路由发生频繁震荡时,聚合路由也可能受其影响频繁刷新。
- 因此,聚合路由是否携带丢失的AS_Path信息,需要设计者综合考虑网络环境。
- 答案:ABC。
- 答案:B。
本文标签: 路由协议
版权声明:本文标题:路由协议 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1699411958h347830.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论