·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模板