·BGP用Open报文建邻居,用KeepaLive报文做日常联系

·OPEN消息中包含以下内容:
  1、版本
  2、自主系统号
  3、hold time 注意:这个时间是可以协商的,取两个BGP邻居中较小的保持时间。
  4、BGP 路由器的 router-id,选择方法与OSPF中相同
  5、可选参数

·一个UPDATE 消息一次可以只通告一条路由,并携带多个属性。
一个UPDATE 消息一次也可通告多条路由,但它们的所有属性必须相同。
一个UPDATE 消息可以同时撤消多条路由。

实际上也就是说一个UPDATE中只能有一组相同的路径属性,也就是说只能有一条路径,但可以有多个目标网络号。

BGP的邻居关系:
BGP邻居也叫BGP对等体,分两种:
  EBGP--位于当前AS之外的,属于其它AS的邻居,通常要求直连。
  IBGP--位于同一个AS之内的邻居,无需彼此相连,只要它们能够彼此到达对方,完成TCP握手即可。

·建议EBPG之间用直连接口来建邻居
·建议IBGP中用环回口建邻居

·从EBGP邻居学到的路由管理距离是20
·从IBGP邻居学到的路由管理距离是200

BGP的防环机制:
·BGP's Split Horizon Rule:
IBGP:从IBGP邻居收到的路由不再传给其他的IBGP邻居。
EBGP:不接收携带本AS号的路由更新。

BGP路由黑洞问题:
·BGP路由黑洞的解决方法:
  1)物理线路的Full Mesh
  2)BGP重分布进IGP
  3)IGP内所有路由器都运行BGP
  4)MPLS/×××
  5)BGP邻居的Full Mesh

·IBGP水平分割的解决方法:
1)Full Mesh
2)BGP's Partial Mesh (路由反射器/联邦)
  3)不接收含有本AS号的BGP路由

·如果是宣告一个主类网络,则它的掩码不会在BGP路由表中显示出来,表示默认使用主类网络的标准掩码。

BGP的配置
 

<BGP试验>

例一:用物理接口建立BGP邻居关系

 

R4和R2建EBGP邻居关系:
R4:
router bgp 4
  bgp router-id 4.4.4.4
  neighbor 24.1.1.2 remote-as 123   //指定EBGP邻居

R2:
router bgp 123
  bgp router-id 2.2.2.2
  neighbor 24.1.1.4 remote-as 4     //指定EBGP邻居


R2和R3建立IBGP邻居关系:(需要先在AS123内部运行IGP)
R1:
router ospf 110
router-id 1.1.1.1
network 12.1.1.0 0.0.0.255 area 0
network 13.1.1.0 0.0.0.255 area 0
network 1.1.1.0 0.0.0.255 area 0

R2:
router ospf 110
router-id 2.2.2.2
network 12.1.1.0 0.0.0.255 area 0
network 2.2.2.0 0.0.0.255 area 0

router bgp 123
  neighbor 3.3.3.3 remote-as 123 利用环回口来建立邻居关系   
  neighbor 13.1.1.3 next-hop-self   //IBGP中,边界路由器需要对邻居打上这一命令

R3:
router ospf 110
router-id 3.3.3.3
network 13.1.1.0 0.0.0.255 area 0
network 3.3.3.0 0.0.0.255 area 0

router bgp 123
  neighbor 12.1.1.2 remote-as 123    
  neighbor 12.1.1.2 next-hop-self

 

例二:用环回接口建立BGP邻居关系:

 
R4和R2建EBGP邻居关系:
R4:
ip route 2.2.2.0 255.255.255.0 24.1.1.2  //先确保有去邻居的路由
router bgp 4
  bgp router-id 4.4.4.4
  neighbor 2.2.2.2 remote-as 123         //指定EBGP邻居
  neighbor 2.2.2.2 update-source lo0     //指定自已的更新源
  neighbor 2.2.2.2 ebgp-multihop 2       //设置EBGP的多跳

R2:
ip route 4.4.4.0 255.255.255.0 24.1.1.4  //先确保有去邻居的路由
  router bgp 123
  bgp router-id 2.2.2.2
  neighbor 4.4.4.4 remote-as 4          //指定EBGP邻居
  neighbor 4.4.4.4 update-source lo0    //指定自已的更新源
  neighbor 4.4.4.4 ebgp-multihop 2      //设置EBGP的多跳

R2和R3建立IBGP邻居关系:(需要先在AS123内部运行IGP)
R2:
router bgp 123
  neighbor 3.3.3.3 remote-as 123
  neighbor 3.3.3.3 update-source lo0
  neighbor 3.3.3.3 next-hop-self    

R3:
router bgp 123
  neighbor 2.2.2.2 remote-as 123
  neighbor 2.2.2.2 update-source lo0
  neighbor 2.2.2.2 next-hop-self

其它命令:

·宣告路由进BGP,注意BGP的network能够通告路由表中的所有非BGP路由量。
router bgp 123
  network 172.16.1.0 mask 255.255.255.0   //宣告网络时要说明掩码

·下面这条命令修改对所有邻居的keepalive-interval和hold-time
router bgp 123
  timers bgp keepalive-interval hold-time

·下面这条命令修改对特定邻居的keepalive-interval和hold-time。
router bgp 123
  neighbor 1.1.1.1 times keepalive-interval hold-time

·各类显示命令:
show ip bgp summary      //摘要的邻居邻居信息
show ip bgp 2.2.2.0/24   //显示明细路由的详细信息
show tcp brief           //可以看到是谁发起的TCP链接
show ip bgp neighbors    //详细的邻居信息
show ip bgp rib-failure  //可以看到提示有更高AD的路由

show ip bgp neighbors 2.2.2.2 advertised-routes  //看向这个邻居发了哪些路由信息
show ip bgp neighbors 3.3.3.3 received-routes    //看这个邻居给我发了哪些路由信息,必须在本路由器上用下面这条命令开启后才能用
R2(config-router)#neighbor 3.3.3.3 soft-reconfiguration inbound  //开启查看接收到的路由信息的功能

debgu ip routing        //查看路由表调试信息
debug ip bgp updata     //查看BGP更新信息

------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------

<关于更新源>Update-Source
路由器用来和邻居建立邻居关系的地址,我们称之为更新源地址。

注意:在BGP建邻居过程中,neighbor命令所指定的邻居的IP地址,也必须是邻居用来和本路由器建立TCP连接的地址。如果不匹配,两端建立不起邻居关系。

“show ip bgp summary中的Neighbor” / “show ip bgp中的Next Hop ”
都是指Update-Source。

可以在路由器上用以下命令指定使用哪个接口来和邻居建立联系,这个接口就是自已的更新源:
router bgp 123
  neighbor 3.3.3.3 update-source loopback 0

BGP的邻接状态机:

1、idle  空闲--查找是否有去往邻居的路由
2、connect  连接--建立TCP三次握手
3、Active  活动--协商还未成功
4、open sent  打开发送--互发参数进行协商,也就是发送open报文
5、open confirm  打开确认--协商取得一致
6、established   建立

IDLE:       State when BGP peer refuses any incoming connections.
n CONNECT:  State in which BGP peer is waiting for its TCPconnection to be 
completed.
n ACTIVE:    State in which BGP peer is trying to acquire a peer by listening and 
accepting TCP connection.
n OPENSENT:  BGP peer is waiting for OPEN message from its peer.
n OPENCONFIRM:  BGP peer is waiting for KEEPALIVE or NOTIFICATION
message from its peer.
n ESTABLISHED:  BGP peer connection is established and exchanges UPDATE,
NOTIFICATION, and KEEPALIVE messages with itspeer.

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

如果一直停在idle状态,则可能:
   1、没有去往邻居的路由
   2、neighbor命令指错了邻居的地址

如果一直停在active状态,则可能:
   1、邻居没有过来的路由
   2、邻居没有指neighbor命令
   3、邻居neighbor中指的地址错误
   4、两端的AS号不匹配 

<BGP的下一跳机制>
BGP是一个AS-by-AS的路由协议,而不是一个router-by-router的路由协议。

BGP路由的下一跳并不是指下一个路由器的IP地址,而是指到达下一个AS的IP地址。

所以,默认情况下,从EBGP邻居学到的路由再向其它的IBGP邻居传递的时候,下一跳不改变。

<MA网络的下一跳问题>

 

当在R4上宣告172.16.1.0的路由进入BGP后,你会在R3上发现如下情况:

R3:
sh ip bgp
   Network          Next Hop            Metric LocPrf Weight Path
*> 172.16.1.0/24   10.1.1.2                1             0 64513 i

router#debug ip bgp updates

MA网络的下一跳:当把一条路由发送给EBGP邻居时,如果接收这条路由的接口与EBGP邻居的更新源地址在同一网段的时候,路由的下一跳不改变。

<Peer-Group>对等体组,类似于建立一个批处理文件
BGP中,建立邻居关系的时候,有可能要对邻居指上多条命令,peer-group可以将多条命令组合在一起,用来在建邻居关系的时候一次性调用。减少了配置量。

BGP为每个邻居都占用一部分Buffer,使用Peer-Group可以使多个邻居共用同一部分Buffer。减少资源占用。
而且针对比较多的邻居关系,可以减少配置量。

router bgp 123
  neighbor CCNP peer-group              //定义一个peer-group组
  neighbor CCNP remote-as 64513         //向组中加入命令
  neighbor CCNP update-source loopback 0

  neighbor 2.2.2.2 peer-group CCNP      //调用

network---关于BGP中的宣告:
注意:本命令只会宣告路由,不会激活一个接口进入BGP域

·在BGP中,network的特点是:
  1、能够通告路由表中的所有非BGP路由量、只要是路由表中有的路由,它都可以宣告,直连的,静态的,即使从IGP学到的也可以
  2、默认情况下必须精确宣告网络和掩码
  3、只起到宣告作用,不建邻居
  4、可宣告IGP学到的路由,并携带Metric和Next-hop

auto-summary 不携带原有的下一跳和metric值,而且会自动汇总
            
NO auto-summary   携带原有的下一跳和metric值,而且会自动汇总

·Auto-summary对于network的影响:
   1、可以是主类方式宣告(如:network 3.0.0.0),条件是:在路由表中必须有子网路由;
   2、也可以是明细方式宣告,必须带mask(如:network 3.3.3.0 mask 255.255.255.0),条件是:必须和IGP表的路由精确匹配。
   3、如果是用no auto-summary,那么network只能用明细方式宣告(除非是主类网络)。通常都会用这一方式。

R4(config-router)#network 4.4.4.0 mask 255.255.255.0 (在no auto-summary时,严格按照IP地址掩码通告,不加mask按主类掩码匹配)
R4(config-router)#network 100.0.0.0 (在auto-summary时,也可以主类方式通告,前提是有一条明细)

如果路由器从IGP和IBGP都学到一条路由,由于IBGP路由的AD值为200,通常会大于IGP学到的路由,所以它会选择从IGP学到的放进路由表,并在IBGP路由的前面打上r,表示自已有一条同样的IGP路由。在与其竞争时IBGP路由失败了。

<Synchronization>同步。只针对IBGP邻居

·Do not use or advertise to an external neighbor a route learned by IBGP
until a matching route has been learned from an IGP.
解释:开启同步的情况下,AS内的一个路由器从IBGP邻居处学到一条路由,不用也不传,除非是从IGP(RIP,igrp,eigrp,OSPF,is-is)学到同样一条路由。(网络号和掩码都必须完全一样)
BGP路由优化的条件
1、同步(从IGP学习到路由或者关掉同步)
2、下一跳不可达(静态路由/next-hop-self)

同步规则是为了在一个不是full-mesh的网络中解决路由黑洞而产生的。如果路由器认为一条BGP路由存在黑洞的可能性,它就不会去传这条路由。由于同步规则会对路由的传递产生影响,所以建议关闭它。

router bgp 123
  no synchronization    


BGP路由不优的2个原因:
1)同步问题
2)下一跳是否可达 

解决方案:

router bgp 123
   no synchronization     //关闭同步,高版本IOS默认开启
   neighbor 3.3.3.3 next-hop-self

Peer Group
作用:减少Buffer,减少命令行
router bgp 123
bgp router-id 1.1.1.1
neighbor shxke peer-group 建立一个peer-group的模板
neighbor shxke next-hop-self 定义模板的内容
neighbor shxke update-source loopback0 定义模板的内容
neighbor 2.2.2.2 peer-group shxke 调用peer-group模板
neighbor 3.3.3.3 peer-group shxke 调用peer-group模板