一,BGP简介
1bbgp是什么?
 bgp(border gateway protocol):边界网关协议是一种动态路由协议,用来生成用户所需的路由表。
2属于EGP(外部网关协议),多应用于自治系统(AS)之间。
3在算法上属于距离矢量协议(path vector)。
4版本:v1,v2,v4,v4+现在用的是v4版本。
5IGP(内部网关协议)主要用与自治系统(AS)内部,如:rip,igrp,eigrp,ospf,is-is等,EGP用于自治系统之间,如BGP。BGP也可以用于自治系统内部,如:IBGP。而EBGP用于自治系统之间。
6自治系统(AS):AUTONOMOUS SYSTEM ,在一个组织管理下使用相同策略的设备集合。组织一般指服务提供商,策略强调的是对数据的控制,流向达成一致。不同AS使用AS号来标识,AS号:1-65535,私有64512-65535。
7为什么使用BGP?
1)能承载大量的路由,IGP只能承载有限的数量的路由,否则压力过大。
2)策略能力强,能灵活的控制路由表的生成。
3)对新的特性的支持很好,BGP是TLV结构,容易支持新的特性。
8IGP没有AS的概念只在AS内部使用,主要要求是收敛要快,为上层应用提供服务,BGP也需要IGP的服务才能运行。
9分类:IBGP,EBGP
10应用场景
AS与AS之间,ISP与ISP之间。
11单宿(single-home),多宿(multi-home)

二,工作原理
1协议包种类
 open包:只发送一次,携带参数,建立peer关系。
 keepalive包:定期发送,维持peer关系。
 update包:向peer通告路由(nlri)
 notification包:发送出错消息,结束peer关系。
 route-refresh包:向peer请求特定的路由(并不是所有的产商都支持)
2封装
BGP被TCP封装,目标端口:179,源端口是随机的
 peer之间在发送open包之间需要事先建立TCP连接(3次握手),TCP的连接和协议包都是单播,需要目标的路由,因此必须要IGP的服务,其可靠×××给TCP解决。
3工作流程与peer的状态
1)idle状态:正在启动BGP进程,准备相关的资源
2)connect状态:正在进行TCP3次握手或TCP连接。
3)active状态:TCP连接失败,反复尝试重新建立TCP连接。
4)opensent状态:TCP连接成功,正在发送open包(携带能力参数)。
   若能力参数布匹配则撤消TCP连接,并降低能力参数最终能力参数一样,重新建立TCP连接。
5)open confire状态:peer协商成功,并向peer发送keepalive包,等待对方的keepalive包。
6)established状态:收到了对方的keepalive包,并开始发送update包。
三BGP的基本配制
1启动进程,并制定设备所属的AS号。
r1(config)#router bgp 65420
2指定特定的对等体和对等体所属的AS号。源IP默认为出口IP,目标IP由NEI指定。
r1(config-router)#neighbor 目标ip remote-as 65421(不同是表示EBGP,相同则是IBGP)
3通告相关的路由
r1(config-router)#redistribute connect/static/ospf......
r1(config-router)#network 192.168.1.0 mask 255.255.255.0 (注意:该路由必须在路由表中存在,子网掩     码必须与路由表中的匹配,最多只能配制200条语句。)
四 同步
1概念:同步是指从IBGP PEER获悉的路由在成为最佳路径(既进入路由表)并向PEER通告之前,必须被IGP先知道。
2作用:防止路由黑洞。
3如果确信不会产生路由黑洞则可以关闭同步(NO SY)
4同步过后从IBGP获悉的路由只进入BGP表,在IGP不知道则不放入路由表。
5不同步:从IBGP获悉的路由进入BGP表和路由表。
五,总结(应该注意的问题)
1 EBGP的TTL值默认为1,IBGP的TTL值默认为255。
2 EBGP一般用物理连接(直连),即相邻设备的直连接口,在下面的两种情况下用逻辑连接(非直连):
  1)要运行EBGP的两台设备之间有一台设备不支持(或不想配制)BGP,如:两AS之间的一台防火墙。
  2)两台设备用双链路互连时,BGP PEER设在出口上有问题,必须用LOOPBACK接口,导致了PEER之间是非直连(逻辑连接)。
 IBGP一般都使用逻辑连接,因为IBGP一般都用LOOPBACK口作为PEER。
3 在EBGP的逻辑连接环境(即非物理连接)中必须要改变TTL值,因为EBGP的TTL默认为1,只有一跳远,TCP的连接根本不可能成功,PEER更形成不了。
   R(config-router)#neighbor 目标ip ebgp-multihop 跳数
4 不管是在IBGP还是EBGP中用LOOPBACK接口作PEER是必须要指定源IP,因为默认是出口IP,在TCP连接时,请求和应答不对应,是两个进程。TCP的请求无应答,TCP连接不可能成功,PEER根本形成不了。
   R(config-router)#neighbor 目标ip update-source 源IP LOOPBACK 0
                      neighbor 目标ip update-source 源IP LOOPBACK的接口IP
5  BGP默认不支持负载均衡,命令使其支持负载均衡:maxmun-paths。
6  EBGP的管理距离是20,IBGP的管理距离是200。
7  只要TCP连接通过,BGP的PEER形成基本没问题,路由没问题
8  EBGP循环解决:
    1)水平分割:不从接受到该路由的接口发送该路由。
    2)AS-PATH属性:看到UPDATE包中有自己的AS号则丢弃该信息。
    IBGP循环解决:
       IBGP不能中继:从一个IBGP PEER 收到的路由不会转发给其他的IBGP PEEER,只能直接通告不准转发(中继)。
    要通信必须全互连或物理连接。全互连,这导致设备的压力过大,因此提出了反射器(RR),相当于ospf中的DR的功能。 
9   在实际的工程中一般不将AS外部的路由通告到AS内部。
10  ebgp通告路由时的下一跳是直接通告者的peer地址接口,而ibgp的下一跳是该路由的原始产生者的peer地址接口,也就是说ibgp默认
    不改变下一跳,者将会导致路由不可达问题,因此必须手工修改下一跳。
11 TCP不能建立连接的原因:
     1)没有修改TTL
     2)没有指定源
     3)没有igp的路由
12bgp表有,而路由表没有的原因:
     1)同步问题没有解决
     2)下一跳不可达(没有修改下一跳)