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
	项目经验:
	孝感市土地局项目实施
	长江航道局宜昌分局项目实施
	武汉市公路归费征稽处项目实施
	湖北省劳动教养工作管理局项目实施
	湖北省国土资源厅项目实施
	教学理念:
	致力于培养学员的个人技术、独立思考能力、
	反应能力、工作及适应能力。
	“知行合一,止于至善”是李老师的信条。