为什么会产生BGP这个路由协议:

1.路由器性能的问题:数以万计的路由器路由表十几万条,每台路由器能承受这么庞大的路由条目吗?7200以上。

2.路由收敛的问题:一般的路由协议如OSPF,EIGRP,RIP必须满足全网收敛(每台路由器必须有整个网络的路由),但是真实情况下数以万计的路由器如果要想达到收敛是非常困难的,比如当一个网络断开时,首先知道的路由器要将这个信息传递给其他的路由器,这是个庞大的工程,并且当这个信息并没有传递到整个网络时,这个网络恢复正常了,这是这个路由器又得将这个信息通告给整个网络,网络世界是不断变化的世界,最终能达到收敛?

综上所述:
1.我们必须把跟新限制在更小的区域里面,就是AS(Autonomous system)里面。这样只需要AS与AS之间能互相通信即可

2.将互联网划分成多个 AS,目的并不仅仅是将路由协议的更新限制在特定的范围内,还有一个重要的原因是,将互联网划分成若干个小范围的网络后,那么这每一个小网络就可以单独定义各自的路由策略与安全策略,并且这样不需要干扰其它 AS,也不受其它 AS 干扰。(BGP策略)

比如:比如网络中若干的ISP,这些ISP对自己网络需要制定自己的策略,又需要让这些策略保持私有性而不与其它ISP互相干扰,所以划分AS,帮他们实现了这个目的。

使用 BGP一般有如下情况:
1.  一个 AS允许包穿越它,到达其他的 AS
2.  一个 AS连接多个 AS
3.  必须对数据流进入和离开 AS 进行控制

不使用 BGP一般有如下情况:  
1.  AS只有一个出口
2.  AS的所有出口均为 1个ISP
3.  路由性能不高,内存较小,CPU较慢,带宽不大


BGP 的AS

BGP 的 AS 号码的分配,是由 Internet Assigned Number Authority (IANA)机构来统一规划和分配的

IOS 中运行的 BGP,目前最多支持 4 字节长度的 AS 号码,但并不表示所有 AS 号码都能任意配置,在2009年1月之前,只能使用最多2字节长度的AS号码,即 1-65535,在2009年1月之后,(IANA)决定使用4 字节长度 AS,范围是 65536 -4294967295


私有AS号:为了考虑到某些大型企业需要使用BGP与ISP对接,而又没有足够的 AS 号码用来分给企业用户,所以将 AS 号码划分为公有AS和私有AS,公有AS的范围是1-64511,私有AS范围是 64512-65534;公有AS只能用于互联网,并且全球唯一,不可重复,而私有AS可以在得不到合法AS的企业网络使用,可以重复。很显然,因为私有AS可以被多个企业网络重复使用,所以这些私有AS不允许传入互联网,ISP在企业用户边缘,需要过滤掉带有私有AS号码的路由条目。

BGP消息类型  IGP

BGP具有 4种消息类型

1.Open:建立邻居关系,协商BGP的运行参数

2.Keepalive:维持邻居关系,每隔60秒发送一次,是holdtime的三分之一,holdtime为180秒

3.Update:用来通告路由信息

4.Notification:当检测到差错的时候就会发送 Notification 消息,通常会导致 BGP 连接终止,例如使Notification消息进行 BGP 版本的协商


BGP邻居

BGP传输采用了TCP协议,并且目标端口为179,源端口随即(不像RIP,源端口和目的端口一样520)

邻居概念:一个配置了 BGP 进程的路由器只能称为BGP-Speaker,当和其它运行了 BGP的路由器形成邻居之后,就被称为 BGP-Peer。而一个路由器运行 BGP 后,并不会主动去发现和寻找其它 BGP 邻居,BGP 的邻居必须手工指定。


BGP建立邻居时候的状态机:

Idle—BGP 进程被启动或被重置,这个状态是等待开始,比如等于指定一个 BGP peer,当收到 TCP 连接请求后,便初始化另外一个事件,当路由器或 peer 重置,都会回到 idle 状态。

Connect—检测到有 peer 要尝试建立 TCP 连接。

Active—尝试和对方 peer 建立 TCP 连接,如有故障,则回到 idle 状态 (你到对方TCP连接没问题)

OpenSent— TCP 连接已经建立,BGP 发送了一个 OPEN 消息给对方 peer,然后切换到 OpenSent 状态,如果失败,则切换到 Active 状态。

OpenReceive— 收到对方 peer的 OPEN 消息,并等待 keepalive 消息,如果收到 keepalive,则转到 Established 状态,如果收到 notification,则回到idle状态,比如错误或配置改变,都会发送 notification 而回到 idle 状态。

Established— 从对端 peer 收到了 keepalive,并开始交换数据,收到keepalive 后,hold timer都会被重置,如果收到 notification,就回到 idle 状态。

EBGP:EBGP的邻居的报文TTL值默认等于1

IBGP:IBGP的邻居报文的TTL值默认等于255


Idle:IGP的路由不可达
Active:1.邻居没有回来的路由
        2.邻居neighbor错了ip
        3.邻居没有neighbor或者过滤掉邻居给我的open报文
        4.邻居neighbor-AS号错误
BGP的更新源
1建立邻居关系:
默认是拿物理接口发送跟新
其实只用一端跟新源匹配就可最好两端都配置

R2--------R4

R2:源2.2.2.2   目的4.4.4.4
R4:源34.1.1.4  目的2.2.2.2

运行BGP三张表:
1 邻居表
2 BGP路由表  show ip bgp
3 路由表

管理距离:IBGP:200 
                    EBGP:20
BGP的同步
当 BGP 要将从 iBGP 邻居学习到的路由信息传递给其它邻居之前(这个邻居通常是 eBGP 邻居),这些路由必须在 IGP 路由表中也能学到,否则认为此路由无效而不能发给其它邻居。

注意,只有从 iBGP 邻居学习到的路由,才受 iBGP与 IGP 路由同步规则的限制,如果路由是从 eBGP 邻居学习到的,则不受此规则限制,并且此规则可以手工开启或关闭。