边界网关协议是一种实现自治系统AS之间的路由可达,并选择最佳路由的量性协议。早期发布的三个版本分别是BGP-1(Rfc1105)、gp-2(rfc1163)bgp3(RfC1267),1994年开始使用BGP-4(RFC177)也是目前使用的版本,2006年之后单播v4网络使用的版本是BGP4(R4271),其他网络使用的版本是MP-bGP(RFC4760)。
1、BGP的路径矢量特征
1)·BGP通常被称为路径矢量路由协议(Path -Vector- Routing Protocol)每条BGP路由都携带着多种路径属性( Path attribute),在各种路径属性中,AS_Path属性是非常关键的一个,AS_Path属性记录了BGP路由传递过程中所经过的AS号,实际上它是一个AS号的列表
2)BGP路由器不接受AS_Path中包含其自身AS号的路由更新ASPath属性值的长短(A号的个数)会作为一个比较的依据,影响BGP路由选择的决策。
2、BGP的防环机制
BGP路由器不接受AS-Path中包含其自身AS号的路由更新。
AS-Path属性值的长短(AS号的个数)会作为一个比较的依据,影响BGP路由选择的决策。
看上图,整个网络中形成环路,但BGP有放缓机制,R5到10.0.0./24,在收到路由信息,里面包含自己的AS号500,会忽略此条信息从而做到防环。
3、BGP的特点
1)BGP能等承载大批量的路由信息能够支撑大规模网络;
2)BGP提供了丰富的路由策略,能够灵活的进行路由选路,并能指导邻居按策略发布路由;
3)BGP路由器值发送增量的BGP路由更新,或进触发更新(不会周期性更新);
4)BGP提供了路由聚合和路由衰减功能用于防止路由振荡,有效提高了网络的稳定性;
5)两个建立BGP会话的路由器互为对等体(Peer)。BGP对等体之间交换BGP路由表;
6)运行BGP的路由器被称为BGP发言者,或BGP路由器;
7)BGP使用TCP作为其传输层协议,端口号为179,路由器之间的BGP会话基于TCP连接而建立.
4、BGP Peer(对等体)
1)BGP对等体也叫BGP邻居,基于直连接口建立。与OSPF、RIP等协议不同,BGP的会话基于TCP建立的,建立BGP对等体的两台路由器并不要求必须直连,只要路由可达即可。
2)BGP存在两种对等体关系类型:
EBGP:外部边界网关协议,用于在不同的自治系统间交换路由信息,即AS号不同
IBEP:用于在相同的AS间交换路由信息,即AS号相同。
1、BGP的五种报文
其中:
Update:用于更新路由变化,记录到路由表当中,是增量更新;
keepalive:响应Open消息,用于保持邻居关系,没有携带什么消息及数据,默认情况下,发送报文周期60s发送一次,最长时间(老化时间)是180s,结束之后需要重新建立对等体关系。
2、BGP的六种状态机
3、BGP的两张表
BGP的缺点:
自己不能发现邻居;自己不能发现路由;需要手动配置,指定peer,指定对等关系,所以他有两张表。并不像OSPF配置完成之后可以自己学习并更新路由表。
1)邻居表:display bgp peer
2)bgp路由表:display bgp routing-table
4、BGP传输AS中的路由黑洞问题
在传输AS65102中,BCDE四台路由器运行了OSPF,确保AS内部路由实现互通,B与E运行BGP,并且建立IBGP对等体关系,C与D并未运行BGP。
A将本地路由1.1.1.0/24通告到BGP,最终F能够通告BGP学习到该条路由。C、D由于并未运行BGP,因此无法通告BGP 学习到1.1.1.0/24路由。
这样一来,F发往1.1.1.0/24网络的数据包在到达C/D后将被丢弃,在这两个路由器就出现了黑洞。
5、BGP条目的详细信息
6、IBGP水平分割规则
简而言之一句话:一个路由器不能将另外一个IBGP对等体中学习到路由。由于水平分割的存在,BGP要求AS内需保证对等体关系的全互联,因为只有这样,才能确保每个路由器都能学习到路由。
7、BGP路由通告规则
1)当存在多条路径,路由器只选取最优的BGP路由来使用;
2)BGP只把自己使用的路由,也就是自己任务最优的路由传递对等体;
3)路由器从EBGP对等体获得的路由汇传递给它所有的BGP对等体;
4)路由器从IBGP对等体获得的路由不会传给给它的IBGP对等体;
5)路由器从IBGP对等体获得的路由是否通告给它的EBGP对等体要是IGP和BGP同步的情况而定。
1、配置BGP对等体
bgp 100 //配置bgp的AS号为100
router-id 1.1.1.1 //设备loopback接口的地址
peer 2.2.2.2 as-number 100 //配置对等体ip地址2.2.2.2进入到bgp 100
2、BGP引入IGP路由
有两种方式:
1)network:是逐条将IP路由表中已经存在的路由引入到BGP路由表中
bgp 100
network 23.0.0.0 24 //全局路由表中的某个网段引入bgp路由表中,配置方式:在本身路由上面引入本身网段
2)import:是按照协议类型,将RIP/OSPF/IS-IS等协议引入到路由表中,还可以引入静态/直连路由
bgp 100
import-route ospf 1 将ospf1 引入到BGP中
3、修改BGP路由下一跳为自身
peer x.x.x.x next-hop-local //x.x.x.x IP地址段是对等体的ip网段地址,也就是不可达的那个网段,需要打通的网段
4、指定更新源ip
bgp 100 //进入bgo系统,需要先指定AS号
peer 3.3.3.3 as-number 100 //配置对等体
peer 3.3.3.3 connect-interface loopback 0//再指定用loopback 0
此种配置适用于AS内的配置,若AS外的配置则只需要指定AS号和配置对等体即可。
5、BGP的EBGP多跳
通常EBGP的对等体关系基于直连接口建立。但是如果EBGP的对等体关系并非基于直连接口建立,而是基于loopback接口或者对等体不是直连的,中间隔着其他设备,那么就存在多跳问题,就需要配置多跳,一般系统默认的TTL为1(time to live 只能经过一跳):
peer 4.4.4.4 ebgp-max-hop //ebgp-max-hop 可以选择默认即255
1、R1、R2及R3属于AS100,R4属于AS200
2、AS100内的R1、R2及R3运行ospf,通告各自直连接口
3、R3与R4建立Ebgp第一等体关系,R2暂时不运行BGP,R1与R3建立对等体关系,所有的BGP对等体关系基于直连接口建立;R4将直连路由4.4.4.4/32通告到BGP,要求R1可以学习到BGP路由4.4.4.4/32
4、修改BGP配置,使得R1与R3基于loopback0接口建立IBGP对等体关系
配置ip地址和loopback地址
[R1]int LoopBack 0
[R1-LoopBack0]ip add 1.1.1.1 32
[R1]ospf 1 router-id 1.1.1.1
[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]network 12.0.0.0 0.0.0.255
[R1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.255
[R2]int LoopBack 0
[R2-LoopBack0]ip add 2.2.2.2 32
[R2]ospf 1 router-id 2.2.2.2
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 12.0.0.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]network 23.0.0.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.255
[R3]ospf 1 router-id 3.3.3.3
[R3-ospf-1]area 0
[R3-ospf-1-area-0.0.0.0]network 23.0.0.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]network 3.3.3.3 0.0.0.255
[R4]int LoopBack 0
[R4-LoopBack0]ip add 4.4.4.4 32
[R4]ospf 1 router-id 4.4.4.4
[R1]bgp 100
[R1-bgp]router-id 1.1.1.1
[R1-bgp]peer 23.0.0.2 as-number 100
[R3]bgp 100
[R3-bgp]router-id 3.3.3.3
[R3-bgp]peer 12.0.0.1 as-number 100
[R3-bgp]peer 34.0.0.2 as-number 200
[R4]bgp 200
[R4-bgp]router-id 4.4.4.4
[R4-bgp]peer 34.0.0.1 as-number 100
这时可以抓包看下
要求R1学习到BGP路由器4.4.4.4/32
[R4]bgp 200
[R4-bgp]network 4.4.4.4 32 先把4.4.4.4的网段引入BGP
[R3]bgp 100
[R3-bgp]peer 12.0.0.1 next-hop-local 配置下一跳对等体的
这时查询display bgp routing-table
就能查询到4.4.4.4,并且下一跳显示的是R3的下一跳
运用指定更新源ip,先清除对等体关系
[R1]bgp 100
[R1-bgp]undo peer 23.0.0.2
[R3]bgp 100
[R3-bgp]undo peer 12.0.0.1
再建立对等体关系
[R1-bgp]peer 3.3.3.3 as-number 100
[R1-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[R3-bgp]peer 1.1.1.1 as-number 100
[R3-bgp]peer 1.1.1.1 connect-interface LoopBack 0
[R3]bgp 100
[R3-bgp]import-route ospf 1
这时R4的bgp路由表已经有了4.4.4.4
实现互通需要R1-R2 R2-R1 R2-R3 建立对等体关系
[R1]bgp 100
[R1-bgp]peer 2.2.2.2 as-number 100
[R1-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[R2]bgp 100
[R2-bgp]router-id 2.2.2.2
[R2-bgp]peer 1.1.1.1 as-number 100
[R2-bgp]peer 1.1.1.1 connect-interface LoopBack 0
[R2-bgp]peer 3.3.3.3 as-number 100
[R2-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[R3]bgp 100
[R3-bgp]router-id 3.3.3.3
[R3-bgp]peer 2.2.2.2 as-number 100
[R3-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[R3-bgp]peer 1.1.1.1 next-hop-local
仍无法互通是因为R1内部无34.0.0.0/24
需要在R3上面引入R4
[R3]bgp 100
[R3-bgp]network 34.0.0.0 24