一、BGP概述

(一)自主系统

1、内部网关协议(IGP):用于自治系统内部交换信息。如:rip,igrp,eigrp,ospf,is-is都是IGP
2、外部网关协义(EGP):用于连接自主系统。如:BGP。是一种域间路由选择协议(idrp)
3、AS自治系统的含义:自治系统可能使用多种IGP,并采用多种度量值。在BGP看来,对另一个AS来说,它有统一的内部路由选择规划。
4、AS的编号:自治系统是一个16位的数字,范围为1--65535。1--65411是注册因特网编号,属于公有。  65412-65535是保留编号,属于私用。
 

(二)BGP的特性

1、BGP使用TCP作为传输协议,端口号179。ospf、igrp、eigrp运行于ip层。Is-is在网络层,rip用udp协议。
2、bgp是一种距离矢量协议。实际上是一种路径矢量协议。路径矢量信息包括一个BGP AS号列表,其中列表中列出了前往目标网络必须经过的AS。还包括前往下一个AS的路由器IP地址(下一跳属性),以及源头编码属性。
   AS路径:即前往目标网络通过的AS列表。 需每个AS都会有一个编号。BGP不接受在AS路径属性中包含本自治系统的编号的路由选择更新,以防止环路。
3、支持CIDR(无类别域间选路),简化了路由聚合,减少了路由表
4、BGP更新只发送增量消息,不是所有的路由表。
5、提供了丰富的路由策略。


(三)BGP的用途

    1、基本策略的路由选择

      (1)BGP支持AS级策略。制定路由选择策略,被称为基于策略的路由选择。BGP根据路由选择信息中的属性可以制定AS策略
       (2)BGP路由器只把自已获悉或使用的最佳路由通告给邻接自主系统对体,其他路由不通告。邻接自主系统,即与本自主系统相邻的自主系统。
            即BGP路由器只把自已获悉的最佳路由通告给相邻自主系统的BGP路由器。
     2、使用BGP的时机

       AS有多条到其他自主系统的连接
       必须对数据流进入和离开AS的方式进行控制
       AS允许分组穿过它前往其他自主系统

 3、不使用BGP的时机
 
    只有一条到INTERNET或另一个AS的连接
    自主系统之间带宽较低
    当一个AS与另一个AS的路由策略相同时
    路由器没有足够的能力来处理BGP更新

以上情况应用静态路由来解决。

浮动静态路由:即把静态路由的管理距离调整 到比动态路由协议的管理距离还要大。只有动态路由协议不可用时,此静态路由才被使用。


(四)BGP的邻接关系及工作机制

 1、工作机制

  BGP系统启动时,发送整个BGP路由表交换路由信息,之后为了更新路由表,只交换更新信息,即只有增量信息
  在系统运行过程中,通过接收和发送KEEPALIVE 消息来检测互相之间连接是否正常
  BGP发送优选的BGP路由和引入的IGP路由给对等体。


2、BGP邻接关系:

    BGP发起者:运行BGP的路由器被称为BGP发起者
    BGP对等体:即BGP邻居。任何两个运行BGP协议的路由器,通过TCP连接,交换BGP路由信息的,就是BGP对等体。可以是直接连接的,也可以是不直连的。
    EBGP:外部BGP。即两个不同的AS之间的BGP连接,叫EBGP。BGP在不同自主系统路由器之间运行的时,被称为EBGP。运行EBGP的路由器之间必须有特理上的直接链路。
    IBGP:BGP在同一个AS的路由器之间运行时。即在同一个自主系统内的BGP叫IBGP。运行IBGP的路由器之间不一定要物理直连,但必须保证逻辑上的全连接


3、BGP的路由通告原则:

  (1)多条路径时,BGP speaker只选择最优的给自已使用。即有多条到目的网络的路径时,选最优的。
  (2)BGP speaker只把自已使用的路由通告给相邻体。结合第一条,即只通告最佳路由给相邻体。
  (3)BGP speaker从EBGP获悉的路由会向它所有的BGP相邻体通告,包括EBGP和IBGP
  (4)BGP speaker从IBGP获得的路由,不向它的GBGP相邻体通告,避免发生环路。
  (5)BGP speaker 从IBGP获得的路由信息是否通告给EBGP相邻体,要依据IGP和BGP的同步情况决定。只有IGP已完全知晓了BGP的路由信息,即IGP和BGP已完全同步了,才通告给EBGP
  (6)连接一建 立,BGP speaker将把自已所有BGP路由通告给新相邻体,之后只发送更新的部分。

     注意:一般不会把BGP路同注入到内部的IGP路由器中,因为BGP路由表太大,会导致IGP网络崩溃。


(五)BGP的几种报文(几种消息类型)


  1、打开消息(open):用来交换各自版本号,自治系统号,保持时间,BGP标识等信息。(你好,跟我交个朋友吧)
  2、存活消息(keepalive):即和BGP对等体的keepalive消息。向对等体通告彼此还连接着,没中断。(我还活着呢,别不理我)
  3、更新消息(update):有新的路由选择信息则发送update消息。更新消息中只含一条路径的信息。如果是多条路径,则需要多条更新消息。也可以撤消多条不可达路由信息。
                         一个更新消息只能通告一个路由,但可以携带多个路径属性;一个更新消息可以通告多条路由,但路径属性必须相同。

      撤消路由:要撤销的路由的ip地址前缀。
      路径属性:包括AS路径,源头,本地优先级等。
      网络层可达性信息:包含 通过该路径可以达到的ip地址前缀。

4、通知消息:检测到错误条件时发送通知消息。然后立即关闭BGP连接。包含一个错误代码,一个错误子代码,和有关错误信息。(我不跟你玩了)


(五)BGP协议邻接关系的状态

      首先是空闲状态(IDLE)
      BGP一旦开始就进入connect(连接)状态,如果定时器超时,则仍处于connect状态
      如果连接失败则进入ACTIVE(活动)状态,在active状态下,如果TCP连接建立不成功,则一直处于active状态。成功后进入opensent(打开发送)状态
      如connect状态下,连接成功也进入opensend状态
      opensend状态下,BGP一旦收到open报文(打开消息),就会进入openconfirm(打开确认)状态
      在openconfirm状态下,如果keepalive定时器超时,则停在openconfirm状态下。
      直到收到keepalive报文,进入established(已建立)状态。邻居建立成功。

仅当连接处于已建 立状态时,才能交换更新,存活和通知消息。

 (六)BGP的三种路由来源

     纯动态注入:路由器将通过IGP路由协议动态获得的路由信息直接注入到BGP中。一般用redistribute命令把IGP路由信息重分发到BGP路由中。

     半动态注入:路由器有选择的将IGP路由协议获得的动态路由信息注入到BGP中。如用:network命令声明哪些网络的路由注入到BGP路由中。
    
     静态注入:  路由器将静态配置的某条路由注入到BGP系统中。

(七)BGP表

     运行BGP的路由器都有一个独立的BGP拓扑表,也叫BGP路由选择表,用于存储从其他路由器那里获悉的路由选择信息。这个表独立于IP路由选择表。

   BGP邻居建立邻接关系后,邻居之间交换BGP路由
   BGP路由器从每个BGP邻居那里获得路由选择信息
   并把信息加入到BGP拓扑数据库中,即BGP路由选择表中
   然后从BGP路由选择表中选出前往各个目的网络的最佳 路由
   将最佳路由提供给IP路由选择表。

二、BGP的属性

 (一)属性的分类

    (1)公认强制属性(必遵属性)

    在路由更新的数据报中必须存在的路由属性。如缺少必遵属性,路由信息将会出错。必遵属性有:AS路径属性(as path);下一跳属性(next-hop);源头属性(origin)

   (2)公认自由决定的属性(可选属性)

   可选的,不一定存在于更新的数据报文中。根据需要配置。包括以下属性:本地优先级属性(local precerence);原子聚合属性(atomic aggregate)

   (3)可选传递属性(过渡属性)

     具有AS间可传递的属性就是过渡属性。过渡属性的值可以被传递到其他的AS中,并继续起作用。包括:聚合站属性(aggregntor);共同体(团体)属性(community)
 
     可选属性不要求所有BGP实现都支持。它可能是私有属性。BGP路由器对于支持的可选传递属性,BGP将接纳此属性值。对于不支持的可选传递属性,路由器将原封不动地将属性值传递给其他BGP路由器。
     即BGP路由器对于支持的可选传递属性,则接收属性值,并也把属性值转给到BGP邻居。而对于不支持的可选传递属性,则原封不动的传递给其他BGP路由器。自已不接纳。

    (4)可选非传递属性(非过渡属性)

   只在本地起作用,出了自主系统或域,那属性值就恢复到缺省值 ,不向外传递。包括:多出口鉴别器属性(MED)


注:CISCO还定义了BGP属性权重。

   (5)CISCO使用的属性类型编码:

       源头 (origin)    1
       AS路径           2
       下一跳           3
       MED              4
       本地优先级       5
       原子聚合         6
       聚合站           7
       共同体           8
       始发站 ID        9
       集群列表         10

(二)属性分讲


     1、AS路径属性 (必遵属性)


       是路由经过的AS序列。即列出到达目的网络时经过的AS清单。
    
       BGP使用AP-PATH(AS路径)作为路由更新的一部分。为了避免路由环,当从外部收到一条路由,发现此路由的AS路径属性中发现包含本自治系统号时,将丢弃此路由。
       BGP在向EBGP对等体通告 一条路由时,要将自已的AS号加入到AS路径属性中
       在将路由通告 给IBGP邻居时,不修改AS路径属性。
       在其他条件相同的情况下,选择AS路径最短的路由


   2、下一跳属性  (next-hop )(必遵属性)
(1)概述:

用于指出前往目的地的下一跳IP地址。
与IGP不同,BGP中的跳指的是AS,而不是路由器。因此下一跳是下一个AS。
对一个AS中的网络而言,这个AS的下一跳就是下一个AS的入接口的IP地址。
对EBGP而言,下一跳是另一个AS中发送更新的邻居路由器的IP地址。并且,BGP规定,EBGP通告的下一跳,应被传到IBGP中,并且不会改变。(即所有IBGP知道的另一个AS的下一跳是相同的)
     
A:  BGP(包括EBGP和IBGP)在向IBGP通告从其他EBGP获得的路由信息时,不改变下一跳地址。即本AS的BGP路由器从其他AS中的EBGP得到的下一跳信息传给IBGP时,下一跳信息不变。(即所有IBGP知道的另一个AS的下一跳是相同的)

B: 本AS的BGP在向EBGP通告路由信息时,即本AS的BGP路由器在把本AS的路由信息传到其他AS中时,下一跳地址就是本AS中BGP路由器的端口地址。(即通告本AS路由信息到其他AS的那个运行EBGP的路由器接口就是其他AS到达本AS的下一跳)
 
C:  当多路连接时,多路访问网络(如以太网)上运行BGP时,BGP路由器将使用合适的地址作为下一跳地址。即第三方下一跳。

D:  如果连接路由器的介质是非广播多路访问(NBMA) (X.25,帧中继网等)时,有时需要修改下一跳属性业阻止问题的产生。

E:  递归查找:

F:  修改下一跳属性

      #neighbor {ip-address|perr-group-name} next-hop-self

3、源头属性(origin) (必遵属性) 

   定义路由信息的源头。即路由信息是从哪来的。

   (1)IGP: 路由信息是从AS内部获得。路由信息是使用NETWORK命令注入到BGP路由表中的,则ORIGIN属于IGP类。IGP源头用 i 表示。

    (2)incomplete(不完全): 路由的源头未知或通过其他方法获得的。用重分发命令 redistribute 注入到BGP路由表中的,属于不完全类源头。

   (3)EGP: 路由是通过EGP获悉的,在BGP中用 e 表示。EGP已过时,internet不支持了。


    静态注入的路由信息优先级最高, 半动态注入的(network命令)的次之, 纯动态注入的(ridistribute命令)最差。

4、本地优先级(可选属性)

(1)概述:

   用于自治系统内部优选到达某一目的地的路由。即告诉AS中的路由器,哪条路径是离开AS的首选路径。用来选择到区域外,即自治统外部某一网络目的地时,选接一个好的出口。本地优先级越高,路径被选中的可能性越大。

   在同一个AS中的多个IBGP,有到AS外的某一目的网络的多个出路时,则首选优先级高的那个。本地优先级只在AS内部传递,不传到AS外。(本AS中的所有路由器都叫IBGP,包括运行EBGP的也运行IBGP)
 

(2)例子:


5、MED值(可选非传递属性)

(1)概述
    本地优先级定义的是选择最佳出口,而MED是定义选择入口。
    MED称为度量值
    与本地优先级不同,MED是自主系统之间交换的。MED被传输到邻接AS,该AS使用它,但不将它传给下一个AS。将收到的路由更新传给下一个AS时,将删除其度量值 。
    当某个AAS有多个入口时,用MED属性值可以帮助外部的邻居路由器选一条较好的入口路径。MED值越低,优先级越高
    默认情况下,路由器只比较来自同一AS中的各EBGP邻居的MED值。不比较来自不同AS的EBGP邻居的MED值。如果要对不同自主系统中的邻居提供的MED值进行比较,除非能够确认不同的AS采用了相同的IGP路由选择方式。或配置:bgp always-compare-med命令

(2)例子:


6、共同体(团体属性)(可传递属性)
 
(1)概述:
   BGP共同体是一种用于过滤入站出站路由的方法。
   团体属性标识了一组有相同特征的路由信息。与它所在的自治系统和网段无关。其他路由器将根据该团体属性来做决策。增加路由策略的灵活性。
  
  (2) 团体属性的四种值:

   A:   团体号: aa:nn 。(号码型团体属性)  aa:nn团体号是一个32位的数。前16位表示AS号,后16位表示共同体号。即:aa是AS号, nn是共同体号。默认用十进制形式表示。取值范围: 1--4294967200
   B:   no-export :  (包括这个 在内的以下在三种值都不是数字型的共同体属性,都是预设的)。no-export,不通告到EBGP, 不把共同体属性通告到AS外。一个路由器收到一个团体属性名预设为  no-export的团体属性的路由,将不把此路由传递给EBGP邻居。
   C:   no-advertise:  不通告到任何BGP,包括同一AS内的IBGP也不能通告。收到一条带有no-advertise的团体属性的路由,将不把此路由传给BGP,包括IBGP。
  D:    local-as:  不发送到本AS以外。不把带有此团体属性的路由传到AS以外。

    (3)共同体属性配置

  
      A:  #set community {community-number [additive]} [none]

  community-number:设置团体属性的团体号。有上面介绍的四种团体值。
  additive: 可选项。追加共同体属性。将共同体属性值,即新的团体号,增加到已经存在的共同体属性值之后,即追加共同体属性。一条路由可拥有多个共同体属性。
  none: 删除共同体属性

   
  B:     #neighbor {ip-address | perr-group-name} send-community       


    把共同体属性发送给一个BGP邻居。 默认情况下,共同体属性不被发给任何邻居。共同体属性在出站BGP更新中被删除,只有配置此命令才能传递出去。

ipaddress: 团体属性将要被发送到BGP邻居的IP地址
peer-group-name:BGP对等体组的名称



C:    #neighbor {ip-address | peer-group-name } router-map {map-name}  [in | out ]

set community命令与此命令一起用,以将映射表应用于路由选择更新。用以将此命令中名为   map-name 的映射表应用于  ip address中指定的邻居路由器的路由更新。如果为in 则应用于进入的更新报文。
如果为out ,则应用于邻居路由器更新报文发出时。



D:  #ip community-list {community-list-nmber}  {permit |deny }  {community-number}

 community-list-number: 是列表号。即创建一个团体列表。然后可用映射表对列表号作出控制
  community-number: 允许加入或拒绝加入的团体号   1-99范围

  #match community {community-list-number} [exact]

 用于在映射表中匹配列表号的命令。
 exact:意思是,必须与match命令中指定的列表号中指定的团体属性完全匹配。要匹配的团体属性中有且只有团体列表中的所有团体属性值 。



总结:

   set community 是设置路由的团体属性
   neighbor ip-address send-community  命令把团体属性传给邻居
   neighbor ip-address router-map 命令是控制邻居路由器的路由更新

   ip community -list 和 match community 用于控制团体的访问。


 例:

C路由器:

     (config)#router bgp 65001               //进入BGP自治系统65001
     (config-router)#network 192.168.1.0     //把 192.168.1.0 路由注入BGP 路由器C
     (config-router)#neighbor 172.30.1.2 remote-as 65002  //建立对等体邻居。此处的IP地址为EBGP对等体路由器的直接接口的ip地址
     (config-router)#neighbor 172.30.1.2 send-community   //把路由器c的共同体属性传给路由器A
     (config-router)#neighbor 172.30.1.2 router-map test out //邻居路由器A收到了C路由器传来的路由选择信息时,根据映射表test中定义的规则向外转发路由。即路由器A向外转发从C路由器收到的路由时,需要执行映射表规则。

     (config)# router-map test permit 10     //定义路由映射表 test
     (config-map)# match ip address 1        //任何匹配访问列表1的路由都将团体100 添加到现存的团体属性中的团体里。如果没有additive关键字,则用共同体 100 的属性替换路由现存的共同体属性。即把共同体100 添加到符合条件的路由的共同体属性中。一个路由的共同体属性可以有多个共同体。此处的意思是,匹配访问列1的路由,传给邻居路由器时都加上共同体属性100
     (config-map)#  set community 100 additive
     (config-map)# router-map test permit 20
     (config-map)#  match ip address 2
     (config-map)#  set community no-export   //任何匹配 访问列表2的路由都将共同体属性设为  no-export,即不传播到AS外。即把所有传播到邻居172.30.1.2 的路由共同体属性都设为 no-export。所以,所有从此路由器传给邻据路由器172.30.1.2的路由,都不会从172.30.1.2这台邻居路由器所属AS中传递到其他AS中。

     (config)# access-list 1 permit 192.168.1.0 0.0.0.255
     (config)#access-list 2 permit 0.0.0.0 255.255.255.255   //所有路由都匹配。

A路由器:

   (config)#router bgp 65002
   (config-router)#neighbor 172.30.1.1  router-map checkmon in
   (config-router)#router-map checkmon permit 10  
   (config-router)#match community 1     // 如果共同体属性值中包含有共同体列表1中的共同体号的路由,把权重设为 20。即所有共同体属性值中包含共同体99的路由都把权重值设为20
   (config-router)#set weight 20
   (config-router)#router-map checkmon permit 20 
   (config-router)#match community 2   //没有任何设定,不做任何动作。

   (config)#ip community-list 1 permit 99  //共同体列表1允许99共同体加入。即共同体列1中包含 99共同体。
   (config)#ip community-list 2 permit internet //共同体列表2包含internet值,意味着所有路由。 即所有路由都被列表2允许。


       
7、权重



     
三、BGP的工作原理

    
 
  (一)IBGP全互联
        (1)IBGP不将通过IBGP获悉的路由传给其他IBGP对等体。可避免路由环路。
      (2)IBGP之间一定要全互联。全互联不是指物理上要互联,而 是逻辑上要互联。如TCP相连也可。(在联盟和反射的情况下不要求全互联)
       (3)BGP路由选择表太大,不能将所有BGP路由重分到IGP路由器中。因为IGP路由器无法承受。

    注意:IBGP一定要全互联,TCP全互联也可。因为TCP要保证每个分组都让接收方确认接收,不能是多播和广播方式。如果IBGP不全互联的话,就可能造成路由选黑洞。


  (二)联盟

       在一个AS中,如果IBGP路由器过多,因为要求IBGP全互联,所以将会有过多的IBGP会话(n(b-1)/2)。 N为IBGP路由器数。这样会需要维护大量的会话及数据流。此时可用联盟和路由反射来减少会话数。此处专讲联盟。

       联盟即把一个AS中的多个IBGP划分为一个联盟。一个AS可划分多个个联盟。联盟之间再进行全连接。这样就会减少会话数。注意一点,联盟内部的所有IBGP仍需要全连接。有点像在一个大的AS中划分多个小的AS。

   (三)路由器反射

      1、几个术语:

       路由反射器:可以把通过IBGP所获悉的路由通告给其他IBGP对等体的路由器。因为AS内部的IBGP不把从IBGP获悉的路由通告 给其他IBGP对等体。实现全连会造成会话多,浪费资源。
                   此处我们可以把一台IBGP路由器设定为路由反射器,路由反射器可以转发从其他IBGP获悉的路由到IBGP。路由反射器在中心,其他IBGP再与路由反射器相连,这样就可以不用全互联了,用星型结构。反射路由器有点类似于OSPF中的DR路由器。
      客户:与路由反射器有IBGP对等体关系的路由器叫客户。即与路由反射器直连的IBGP路由器叫客户。
      集群:一个路由反射器与其客户组成一个集群。一个集群通常只有一个路由反射器。此时路由反射器的ROUTER ID为集群的ID。当一个集群有多个路由反射器时,需配置集群ID,用来标识集群。也便于路由反射器知道更新来自集群内还是集群外。
      非客户:非路由反射器的客户的其他对等体被称为非客户。
     
   2、路由反射器的设计:

       AS内部可将AS分为几个集群。每个集群由至少一个路由反射器和几个客户组成。也可以有多个路由反射器。集群内的路由器不必全互联,但一个集群内如有多个路由反射器,每个路由反射器都必须与每个客户互连。
       路由反射器之间也必须用IBBGP进行全互联。包括同集群内的路由反射器和不同集群的路由反射器都必须全互联。

  3、路由反射器的工作原理

     路由反射器收到一个户的更新时,路由反射器把更新发给集成内的所有客户对等体和所有客户对等体(其他集群的路由反射器)。
     如果更新来自非客户对等体,则将更新发到本集群内的所有客户
     如果来自EBGP对等体,则将更新传给所有客户对等体和非客户对等体
     建议一个集群只配一个路由反射器,如果多个反射器,容 易造成环路


4、配置路由反射器

   #neighbor {ip-addreess}  router-reflector-client    //把路由器配置路由反射器,并指定的IP-address邻居设为客户

   # bgp cluster-id {clusterid}   //当集群内有多个路由反射器时,用此命令配置集群ID



show ip bgp neighbors   //验证路由反射器


(四)BGP同步


  BGP从IBGP获悉的路由信息是否通告给EBGP相邻体,依据IGP和BGP的同步情况决定。如果IBP和BGP完全同步,才通告给EBGP。
  因为当IBGP之间进行间接连接时,而非直连时,他们之间只是建立了一条TCP连接。而这条TCP连接经过的路由器,到达两个IBGP之间的路径,叫中转路径。而这条中转路径中的路由器有可能只运行着IGP协议。这些IGP路由器在两个IBGP之间只传递数据,而不知BGP的路由信息。但要转发路由数据时必须知道路由信息才能转发。所以需要同步。
  当位于AS内部的中转路径上的所有路由器都是运行的BGP时,就不需要同步。

  (五)路由选择过程

      (1)首先丢弃下一跳(next-hop)不可达的路由
      (2)优先选择最大权重的路由
       (3)优选最高本地优先级的路由
      (4)优选本路由器始发的路由。即当前路由器通告的路由。
      (5) 优选经过AS(AS-Path)最少的路由
      (6)优选起点关型(origin)最低的路由
      (7)优选MED值最低的路由
       (8)优选从EBGP学来的路由。外部(EBGP)优于内部IBGP
       (9) 优选AS内部最短的路径可达的路由。
        (10)优选邻居BGP路由器ID最小的路由
       (11)如邻居BGP ID相同,则选邻居IP地址最小的路由

四、BGP的配置

    (一)基本配置


       1、(config)# router bgp {自治系统号}    //开启BGP路由

       2、(config-router)#neighbor {ip-address | peer-group-name} router-as {as_id}   //指定BGP邻居

           ip-address: 指定邻居BGP的IP地址。此处的邻居IP,是指邻居BGP路由器的IP地址,特别是在未直连的IBGP路由器之间,不是指直接相连的路由器的IP地址。
           peer-group-name:指定BGP对等体组的名称。是一组采用相同更新策略的BGP邻居。可以把策略应用于对等体组。把多个邻居加到对等体组中,这样这个策略就可以应用于所有属于对等体组中的BGP路由器。
           as_id: 邻据BGP路由器所属的AS号。如AS号与本AS相同,则是IBGP邻居.如果AS号与本AS不同,则是EBGP邻居。

       (config-router)#neighbor {ip -address | peer-group-name} shutdown   //禁用已有的BGP邻居或对等组。
       (config-router)# no neighbor {ip -address | peer-group-name} shutdown  //重新启用BGP邻居。

        (config)# neighbor {peer-group-name}  peer-group   //可以用以上命令创建一个对等体组

       (config)# neighbor {ip-address}  peer-group  {peer-group-name}    //把ip-address中的路由器加入到对等体组中。每个邻接路由器只能属于一个对等体组的成员
       
       (config)# clear ip bgp peer-group  {peer-group-name}    //用此命令删除对等体组

    对等体组只在当前路由器上有作用,不传递给其他路由器
  

     3、指定源IP地址

      
        BGP路由器在指定邻居对等体BGP路由器的IP地址时,在邻据对等体BGP路由器上,也要指定目标地址为刚才指定自已为邻居的路由器的源IP地址。
        即BGP路由器A有多个接口,有多个IP地址,如IP地址A1和IP地址A2 。 路由器A的邻居对等体路由器B也有多个IP地址,为B1和B2。当在路由器A上用IP地址A1为源地址,目标地址为B1来建立BGP邻居的话,那边在路由器B上必须用B1为源地址,A1为目标地址建 立BGP邻居。用B2为源,A1为目标地址,B1为源,A2为目标地址都不行。
        为避免出现以上问题,增加稳定性,在路由器上配置环回接口,用环回接口来互配邻居BGP对等体,会增强稳定性。一般一个BGP路由器到邻据BGP路由器有多个出口时,配置环回接口来建立邻居。


            (config-router)# neighbor {ip-address|peer-group-name} update-source  loopback {interface-number}  

              update-source:   指定默认的源地址为后面指定的环回接口。而 不是默认发出的IP地址。
              interface-number:有时会配置多个环回接口,这里指定是哪个环回接口

4、EBGP多跳(当EBGP之间配置为非直连时使用)

    在EBGP邻居中命使用环回接口进行对等体邻居配置时需用上。

   EBGP对等体之间一般是用直连接口地址来配置邻居。因为EBGP之间不通告IGP路由信息。如不直连将无法找到对方的路由,无法建 立邻居。
   如用环回接口配置EBGP对等体,必须在EBGP两边各配置一条静态路由指向直连网络的物理地址,还需要启用EBGP多跳。
   EBGP一般是直连的,所以TTL值为1,即存活间为1。 而直连时,需要配置TTL值。TLL值即跳值。用环回接口来建立EBGP邻居时也一样要配置,环回接口时TTL值为2.当有更多跳时配置为更多的跳数。

     (config-router)#  neibhbor ebgp-mulitihop [ttl]  

    例:(config)# router bgp 651000
         (config-router)# neighbor 172.16.1.1 remote-as 651001   //此处的地址EBGP邻据路由器环回接口的地址
         (config-router)# neighbor 172.16.1.1 update-source lookback 0   //源地址为环回接口0的地址
        (config-router)# neighbor ebgp-mulitihop 2                      //EBGP之间的TTL值为2 ,因为是环回接口。

      (config)# ip router 172.16.1.1 255.255.255.0 192.168.1.3    //配置一条静态路由,以能找到对端环回端口。这里的192.168.1.3,是EBGP邻居与自已直连接口的IP 地址。


ebgp对等体邻居也做相应的配置

5、重置会话


     # clear ip bgp {* |ip-address} {soft [in |out] }

        

(二)把IGP路由变成BGP路由

1、network命令注入(半自动注入方式)
        指定哪些网络被加入BGP路由进程,并通告给其他BGP路由器

    (config)# network {network-number} [mask {mask}]  //把哪些网络通告到BGP路由中。

       与IGP的network命令不一样,BGP的network命令是告诉BGP通告什么,哪些网络路由通告到BGP中。而IGP的network命令是哪些网络启用IGP协议进程。
       必须用一系列的nework命令在AS中的BGP路由器上指定所有要通告的AS中的网络,而不仅仅是那些与当前BGP路由器直接相连的网络。


2、redistribute 命令  (纯动态注入方式)


     在BGP路由进程下使用


3、静态注入

    (1)先在BGP进程下定义一条静态路由
    (2)再用命令: redistribute static命令把静态路由注入到BGP路由中。

例:


 
 (三)BGP路由操纵

1、权重

是cisco专有属性,用以配置每个邻居的权重
权重属性提供本地路由选择策略,不会传给任何BGP邻居,包括IBGP。而本地优先级会在AS内部传播,传给IBGP,不传给EBGP.
一台路由器有多个离开AS的出口时,即有多条前往一个目的地路由时,将选择权重最高的路由作为下一跳路由。
与本地优先级的区别:当一台路由器有多个离开AS的出口时,根据权重来决定选择哪个出口。
                    当一个AS中有多台路由器提供了多个出口时,将根据本地优先级来决定选择哪个出口。
                    

#neighbor {ip-address | peer-group-name} weight {weight}

ip-address:对端路由的IP地址。 
weight:权重值。

例:
(config)#router bgp 100
(config-router)#neighbor 10.10.1.1 remote-as 200
(config-router)#neighbor 10.10.2.1 remote-as 400
(config-router)#neighbor 10.10.1.1 weight 200
(config-router)#neighbor 10.10.2.1 weight 150




2、本地优先级

(1)设置修改到达所有路由器的本地优先级

(config-router)#bgp default local-preference {value}    //更改本路由器到达所有其他路由器的本地优先级

value:取值范围   1--4294967295   。 默认值为100

此命令是设定前往所有路由器的本地优先级。


(2)设置到达具体网络的本地优先级

通过路由映射表控制


(config-router)#neighbor 10.10.1.1  route-map test in   //从邻居路由器10.10.1.1接收路由更新时,执行入口路由映射表test检查。即EIBGP路由器10.10.1.1把路由更新传给本路由器时,本路由器执行入口检查。

(config)#route-map test permit 10            //设置映射表 test
(config)#match ip address 60                 // 匹配访问列表60的路由更新
(config)#set local-preference  400          //匹配访问列表60的更新,即访问172.20.0.0网段时,其本地优先级设为400
(config)#route-map test permit 20           //允许其他所有的网络通过。类似于访问列表中的 permit any 语句。

(config)#access-list 60 permit 172.20.0.0  0.0.255.255  // 访问172.20.0.0网络的匹配。


3、MED值

当有多条路径进入AS时,可使用MED值,以选择哪条路径进入。只对同一个AS中的多条入口路径作MED值比较。
MED在自主系统之间交换,AS收到另一个AS中的MED属性值后,但不将它传递给下一个AS。

cisco默认:不含MED值的更新,其MED值为0,这使得该路由将成为首选路由。
IEFF标准:不含 MED值的更新,其MED值视为无穷大,这将使得这种路由最不可能被选中。

(config)#bgp bestpath med missing-as-worst    //执行此命令后,将执行IEFF标准。即不包含MED值的更新,其值将无穷大。

(1)修改所有路由的MED值

(config-router)#default-metric {number}   //修改与本路由器相邻的所有与其相邻的EBGP路由器的MED值。

(2)用映射表控制MED值,以对不同网络设定不同的MED值

  (config-router)#neighbor 172.17.1.1  route-map test out   //即在向邻居路由器172.17.1.1发送路由更新时,启用映射表检查。

(config)#route-map test permit 10            //设置映射表 test
(config)#match ip address 60                 // 匹配访问列表60的路由更新
(config)#set metric 100                       //匹配访问列表60的路由更新,其MED值设为100
(config)#route-map test permit 20           //允许其他所有的网络通过。类似于访问列表中的 permit any 语句。
(config)#set metric 200                     //所有其他的不是访问 10.10.1.0网络的MED值都设为200

(config)#access-list 60 permit 10.10.1.0  0.0.05.255  //外部AS访问 10.10.1.0网络时将匹配,将MED值设为100.




注:本地优先级是:外部AS把优先级传到本AS中,并在本AS中传播。而MED是本AS把MED值传到外部AS中,并在外部AS中传播,但不传到下一个AS中。

4、AS-PATCH

操作路径信息顺序

  有多条到达目的地的路径,并且其他属性值相同时,AS-PATH属性最小的将获得选择。即经过的AS最少的将获得选择。

  (1)映射表控制

   在映射表中加入:

    #set as-path {tag |prepend {as-path-string}}    //增加AS路数,来更改路径选择。人工增加AS路径信息的长度

   tag:只能用于重分发路由到BGP中。将与路由相关的标记转移成一个AS路径。

   prepend:将AS-PATH-STRING值添加到router-map匹配的路由的AS路径信息后面,可应用于出界,入界映射。

例:

(config)#router bgp 100
(config-router)#neighbor 192.168.9.1 remote-as 200
(config-router)#network 172.17.0.0           //把网络172.17.0.0注入到BGP路由中。
(config-router)#neighbor 192.168.9.1 route-map test out //本路由器把路由更新传到192.168.9.1邻居路由器时,将应用test映射表出站过滤。

(config)#route-map test
(config)#set as=path prepend 100 100       //把本地AS号100,复制两次加入到路径信息中,传给AS200

通过上面语句,AS300从AS200接收到到达172.17.0.0的更新报文,该报文带有的AS路径信息会变为(200 100  100 100 ),这样AS300到达网络172.17.0.0的AS-path属性为4跳。


(四)BGP路由汇总

1、常用术语

   (1)聚合站:指出执行路由聚合的路由器的ID和AS号,是一个可选传递属性。
  
    (2)原子聚合:它告诉邻接AS,始发路由器对路由进行了聚合。是一个公认自由决定的属性。默认情况下,通告路由聚合时,指出它来自执行聚合的AS,聚合前的AS没有列出。

2、网络边界汇总

   1、默认BGP不通告子网,只通告分类网或超网到BGP邻居。如:172.16.22.0,只通告 172.16.0.0/16分类网。
   2、(config)#network {network-number}  [mask  {network-mask}]      用此命令可以通告子网到BGP邻居中。一定在后面要接相应的掩码。如:  network  172.16.22.0  mask 255.255.255.0即可。
       注意:不管是分类网络,还是子网,还是汇总网,想通告出去,必须在路由选择表中有此路由选项。路由器的路由选择表是从IGP路由协议和静态路由器中获得。一个BGP路由器,都同时运行IGP路由协议。如果IGP中没有此路由选项,可通过静态路由生成。
             例(1):  network  172.16.0.0  ,想通告此分类网到BGP邻居中, 路由选择表中必须有 172.16.0.0或有此网络的子网(如:172.16.22.0/24)的路由选项。而要生成172.16.0.0这个路由选项,一是此路由器也运行IGP路由协议,直接生成路由选项,或从其他IGP路由器上传播过来的路由选项;二是用静态路由生成。
             例(2): network  172.16.22.0/24,想通告此子网到BGP邻居中,路由选择表中也必须有 172.16.22.0/24的路由项。
             例(3): network 172.16.24.0 255.255.252.0 ,汇总了172.16.24/22这个网段,而此时路由选择表中没有此路由选项,则无法通告此汇总路由到邻居BGP。则用静态命令:
                     #ip router 172.16.24.0 255.255.252.0  null       //应用这个命令后,路由表中将有这条路由,则可以把这条汇总路由通告到BGP邻居中。  null是指向空接口。

    
   
  (config)#router bgp  65001
   (config-router)# neighbor 172.16.2.1 remote-as 65000
   (config-router)# network 192.168.25.0 mask 255.255.255.0     //路由表中有此选择,可以传播到BGP邻居中。
   (config-router)# network  192.168.24.0 mask 255.255.1252.0   //路由表中没此选择,则不可以传播到BGP邻居中。
   (config)# ip route 192.168.24.0 255.255.252.0 null          //加入此项,则上面那个网络可以传播 到BGP邻居中了。

  3、BGP自动汇总

     (config-router) #auto-summary  //此命令启动自动汇总后,在BGP表中,所有重发而来的子网都被汇总为相应的分类子网。
     (config-router)# no auto-summary //关闭自动汇总。即不进行自动汇总。所有重分发来的子网保持原样。

例:  开启自动汇总的情况下:  将网络 64.100.50.0/24重分发到BGP中后,则BGP将默认拥有64.0.0.0 /8这个网络, 这是默认的分类网络。64.100.50.0/24自动被汇总成分类网了。
      关闭自动汇总可以解决。为正确的把子网通告给BGP,应用命令:  network 64.100.50.0 mask 255.255.255.0   ,而不要使用redistributed connected进行重分发。

4、汇总命令


   #aggregate-address {ip-addrees}  {mask} [summary-only]  [as-set]  

   ip address:要创建的聚合后的地址    mask:聚合后的掩码
   summary-only:只通告聚合路由。 默认是通告聚合路由和具体路由。即只通告汇总后的路由。不加此项,则汇总后的路由和具体路由都通告。
   as-set: 在聚合路由的AS路径属性中包含具体路由列出的所有AS号,即原子聚合属性。默认只包含生成聚合路由的路由器所在的AS号。


(五)多宿主设计方案


(六)把BGP重分发到IGP中