BGP概述
BGP是运行在AS之间的路由协议,IGP是hop-by-hop,BGP是AS-by-AS。BGP是一种路径矢量路由协议:记录AS-PATH。
公有AS:1-64511 私有AS:64512-65534
中国电信AS号:4134 中国网通:9929
为什么要使用BGP?
AS是一个自治域,管理自己内部的网络。
支持的路由条目(route-views3.routeviews.org)
策略选路
BGP建立邻居
BGP到每一个运行BGP的对端都形成一个独特的、基于单播的连接,为了提高可靠性,BGP使用了TCP(179)作为传输机制。
BGP消息类型
在建立一个BGP对等体连接之前,两个邻居必须执行标准的TCP三次握手,并且打开一个端口为179的TCP连接。TCP提供可靠连接所需要的分段、重传、确认及排序功能。所有BGP消息都是通过TCP连接单播给一个邻居。
open
keepalive
update
notification
Open消息
TCP会话建立起来以后,两个邻居都要发送一个Open消息。每个邻居都用该消息来标识自己,并规定自己的BGP参数。Open消息包含以下信息:
BGP版本号-----目前所有的版本为版本4。可以协商直到两边版本达到一致。
Hold time-----路由器收到一个keepalive或是更新消息之前所允许经过的最大秒数。Cisco缺省的保持时间为180秒。如果两邻居的保持时间不匹配,那么会协商为较短的那个保持时间。
BGP 标识符-----bgp router-id。和ospf选择router-id的方式类似,1.人工指定2.使用最大的loopback地址3.如果没有loopback地址选择最大的物理接口地址。
Keepalive消息
如果路由器接受了邻居在open消息中的参数,它就会应答一个keepalive消息。Cisco的缺省情况下是60s发送一个keepalive消息。
Update消息
Update消息用来公布可用的路由、撤销的路由。
网络层可达信息(NLRI)----这是一个或多个用来公布IP地址前缀和前缀长度的字节组。例如:206.193.160.0/19
路径属性----该属性为BGP提供最短路径、检查路由环路及决定路由策略的信息。
撤销路由----用来描述已经变成不可达并正在撤销的目的地。
Notification消息
当检查到差错的时候就会发送notification消息,通常这会导致BGP连接的终止。
BGP有限状态机
空闲状态(Idle)
BGP通常以空闲状态开始。在该状态下,它拒绝接收所有入连接。当bgp开始初始化资源,打开重试连接计时器、初始化TCP连接、接听来自己邻居的TCP初始化消息并将它的状态转到连接状态。
一个差错的出现会将bgp的状态转为空闲状态。路由器自动重新发起另一个初始连接。在持续差错条件下,需要对此进行限制,因此在第一次回到空闲状态后,路由器会启动重试连接计时器,当计时器终止后,路由器就会放弃重新开始BGP。Cisco的重试连接计时器的时间是60S,下一次重试连接计时器是前一次的两倍,以此类推。
连接状态
在这种状态下,BGP会等到TCP连接完成以后再决定后续的动作。如果TCP连接建立成功,BGP将重试连接计时器清零,完成初始化过程,给邻居发送一个open消息,并转到opensent状态。如果TCP连接建立失败。BGP过程会继续监听由邻居发起的连接、重置重试连接计时器并转入active状态。
如果在连接状态下,重试连接计时器超时了,计时器重新开始计时,并再一次试图与邻居建立一个tcp连接,bgp状态继续持续在连接状态。
active状态
在这个状态下,bgp试图与邻居建立一个tcp连接,如果tcp连接建立成功,bgp将重试连接计时器清零,完成初始化工作,给邻居发送一个open消息并转到opensent状态。
opensent状态
在这种状态下,已经发送了open消息,bgp正在等待从邻居发来的open消息。当收到一个open消息以后,检查该消息所有的字段。如果发现了差错,会给它的邻居发送一个notification消息并且将状态转到空闲;如果接收到open消息中没有发现差错,协商keepalive计时器,bgp给邻居发送一个keepalive消息。
openconfirm状态:
这种状态下,BGP过程会等待一个keepalive或者notification消息,如果收到keepalive消息,转到已建立状态。如果收到notification消息或tcp断开消息,转台空闲状态。
established状态
在这种状态下,bgp对等体的连接已经建立起来,对等体之间可以交换update、keepalive和notification消息,如果收到update或者keepalive消息,重置hold计时器,如果收到notification消息,则转到空闲状态。
BGP建立对等体关系
EBGP对等体关系:AS与AS之间的边界路由器建立的BGP对等体关系,建立EBGP对等体关系一般使用直连网段进行tcp连接;
IBGP对等体关系:AS内部路由器建立的BGP对等体关系,建立IBGP对等体关系一般使用环回口进行tcp连接。
正常BGP对等体的建立,双方都向对等体发起目标端口为179的tcp连接,然后随机断掉一条连接,使用另一条连接。
注:BGP不能使用默认路由建立对等体关系
bgp建立对等体关系实验:
R1(config)#router bgp 1
R1(config-router)#neighbor 23.1.1.3 transport connection-mode active (默认就是主动发起bgp连接)
图 41 BGP建立对等体关系实验拓扑
R1和R2建立EBGP对等体关系
R1(config)#router bgp 1
R1(config-router)#neighbor 12.1.1.2 remote-as 234
R2(config)#router bgp 234
R2(config-router)#neighbor 12.1.1.1 remote-as 1
R2和R4建立IBGP对等体关系
R2(config)#router bgp 234
R2(config-router)#neighbor 4.4.4.4 remote-as 234
R2(config-router)#neighbor 4.4.4.4 update-source lo0-----指定lo0为更新源
R4(config)#router bgp 234
R4(config-router)#neighbor 2.2.2.2 remote-as 234
R4(config-router)#neighbor 2.2.2.2 update-source lo0
查看bgp对等体关系:
R2#show ip bgp summary
BGP router identifier 2.2.2.2, local AS number 234
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
4.4.4.4 4 234 25 26 23 0 0 00:00:23 1
12.1.1.1 4 1 29 29 3 0 0 00:25:30 1
EBGP使用环回口建立对等体关系
R4(config)#ip route 5.5.5.5 255.255.255.255 45.1.1.5----保证路由可达,tcp才可达
R4(config)#router bgp 234
R4(config-router)#neighbor 5.5.5.5 remote-as 5
R4(config-router)#neighbor 5.5.5.5 update-source lo0---指定更新源
R4(config-router)#neighbor 5.5.5.5 ebgp-multihop----EBGP默认跳数只传1跳,更改ebgp传递跳数,不设置跳数默认为255
R5(config)#ip route 4.4.4.4 255.255.255.255 45.1.1.4
R5(config)#router bgp 5
R5(config-router)#neighbor 4.4.4.4 remote-as 234
R5(config-router)#neighbor 4.4.4.4 update-source lo0
R5(config-router)#neighbor 4.4.4.4 ebgp-multihop
BGP宣告路由
BGP路由宣告
BGP通过network宣告路由,而不是直连网络(必须是路由表中包含的路由才能被宣告,掩码要匹配)
R1#show ip route
1.0.0.0/32 is subnetted, 1 subnets
C 1.1.1.1 is directly connected, Loopback0
R1(config)#router bgp 1
R1(config-router)#network 1.1.1.1 mask 255.255.255.255(如果不加子网掩码,则使用主类掩码)
BGP路由表
查看bgp路由表:
R1#show ip bgp
BGP table version is 2, local router ID is 1.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.1/32 0.0.0.0 0 32768 i
*代表路由可用,可以放入路由表
>代表最优,多条相同bgp路由时,该条为最优的路由
后面的i代表起源为IGP,即通过network宣告进bgp的。
R2#show ip bgp
BGP table version is 725, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.1/32 12.1.1.1 0 0 1 i
Next hop是下一跳为AS1的边界路由器的ip地址
Path=1,表示路由经过了AS 1
BGP路由不优的原因及解决办法
R4#show ip bgp
BGP table version is 725, local router ID is 4.4.4.4
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
* i1.1.1.1/32 12.1.1.1 0 100 0 1 i
前面的i表示该路由为IGP对等体传递的路由
没有>表示路由不优,原因:
下一跳不可达,这里next hop为12.1.1.1,R4的路由表里没有12.1.1.0/24的路由。
解决方法:
在R2上指定下一跳自我,让R2发出的bgp路由的下一跳都为R2自己
将R2的外部直连网络宣告进IGP
将R2的外部直连网络重分布进IGP
在R4上使用route-map指定路由的下一跳为R2
在R4上使用静态路由使下一跳可达
同步问题:
同步的条件:bgp路由器收到ibgp对等体传递的路由必须在ibgp路由表里也存在该路由,否则不会再传给ebgp对等体。
同步的目的:防止路由黑洞。由于bgp可以非直连建立对等体关系,通过tcp传递路由更新,以上图为例,R2与R4为ibgp对等体关系,但R3不运行bgp,R4会接收到1.1.1.1/32的ibgp路由,而R3不会收到1.1.1.1/32的路由。而R4去往目标1.1.1.1的物理下一跳为R3,R3没有路由将选择丢包,因此R4不会再将路由传递给R5。如果R4的igp路由表包含1.1.1.1/32的路由,即ibgp和igp同步,则R3的igp路由表也应该包含1.1.1.1/32的路由,那么就不会形成路由黑洞,那么R4就会将路由传递给R5。
本文作者:Lee Xu
CCIE-R&S、CCIE-Security、HCIP
个人介绍:
具有丰富的企业实战项目经验及教学经验。
专业知识的学习以及系统实践,
使李老师在IE级别高级工程师项目经验和IE级别
教学经验方面积累了丰富扎实的工作经验。
讲授课程:
CCNA、CCNP、HCNA、HCNP、MCSE、RHCE
项目经验:
孝感市土地局项目实施
长江航道局宜昌分局项目实施
武汉市公路归费征稽处项目实施
湖北省劳动教养工作管理局项目实施
湖北省国土资源厅项目实施
教学理念:
致力于培养学员的个人技术、独立思考能力、
反应能力、工作及适应能力。
“知行合一,止于至善”是李老师的信条。