1、BGP使用TCP作为其传输层协议(监听端口号为179),提高了协议的可靠性,且不需要专门机制来确保连接的可控性。BGP进行域间的路由选择,对协议的稳定性要求非常高。因此用TCP协议的高可靠性来保证BGP协议的稳定性。BGP的对等体之间必须在逻辑上连通,并进行TCP连接。目的端口号为179,本地端口号任意。
2、路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。
3、BGP从设计上避免了环路的发生。AS之间:BGP通过携带AS路径信息来标记途经的AS,带有本地AS号的路由将被丢弃,从而避免了域间产生环路。AS内部:BGP在AS内学到的路由不再通告给AS内的BGP邻居,避免了AS内产生环路。
4、支持CIDR 无类域间路由
5、BGP提供了丰富的路由策略;提供了防止路由振荡的机制;BGP也易于扩展
1、EBGP:运行在不同的AS之间的BGP路由器建立的邻居关系为EBGP(External BGP外部BGP邻居)。
2、IBGP:运行在相同AS内的BGP路由器建立的邻居关系为IBGP(Interna BGP)。
Open消息:是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。对等体在接收到Open消息并协商成功后,将发送Keepalive消息确认并保持连接的有效性。确认后,对等体间可以进行Update、Notification、Keepalive和Route-Refresh消息的交换。应用:通过TCP建立BGP连接时,发送OPEN消息。
Update消息:用于在对等体之间交换路由信息。Update消息可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。应用:连接建立后,如果有路由需要发送或路由变化时,发送UPDATE消息通告对端。
Keepalive消息:BGP会周期性的向对等体发出Keepalive消息,用来保持连接的有效性。应用:稳定后要定时发送KEEPALIVE消息以保持BGP连接的有效性。
Notification消息:当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。应用:当本地BGP在运行中发现错误时,要发送NOTIFICATION消息通告BGP对等体。
Route-Refresh消息:通过OPEN消息告知BGP peer本地支持路由刷新能力(Route-Refresh capability)。应用:ROUTE-REFRESH消息用来通知对等体自己支持路由刷新。
① Idle 状态是 BGP 初始状态。在 Idle 状态下, BGP 拒绝邻居发送的连接请求。只有在收到本设备的 Start 事件后, BGP 才开始尝试和其它 BGP 对等体进行 TCP 连接,并转至 Connect状态。
②在 Connect状态下, BGP 启动连接重传定时器(Connect Retry),等待 TCP 完成连接。
如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,并转至 OpenSent 状态;
如果 TCP 连接失败,那么 BGP 转至 Active 状态;
如果连接重传定时器超时, BGP 仍没有收到 BGP 对等体的响应,那么 BGP 继续尝试和其它 BGP 对等体进行 TCP 连接,停留在Connect 状态。
如果其他事件(如BGP系统或者操作者重置时),退回到Idle状态。
③ 在 Active 状态下, BGP 总是在试图建立 TCP 连接。
如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,关闭连接重传定时器,并转至 OpenSent 状态;
如果 TCP 连接失败,那么 BGP 停留在 Active 状态;
如果连接重传定时器超时, BGP 仍没有收到 BGP 对等体的响应,那么 BGP 转至 Connect状态。
如果其他事件(如BGP系统或者操作者重置时),退回到Idle状态。
④ 在 OpenSent 状态下, BGP 等待对等体的 Open 报文,并对收到的 Open 报文中的 AS 号、版本号、 认证码等进行检查。
如果收到的 Open 报文正确,那么 BGP 发送 Keepalive 报文,并转至 OpenConfirm 状态;
如果发现收到的 Open 报文有错误,那么 BGP 发送 Notification 报文给对等体,并转至Idle 状态。
⑤ 在 OpenConfirm 状态下, BGP 等待 Keepalive 或 Notification 报文。
如果收到 Keepalive 报文,则转至 Established 状态。
如果收到 Notification 报文,则转至 Idle 状态。
⑥ 在 Established 状态下, BGP 可以和对等体交换 Update、 Keepalive、 Route-refresh 报文和Notification 报文。
如果收到正确的 Update 或 Keepalive 报文,那么 BGP 就认为对端处于正常运行状态,将保持 BGP 连接。
如果收到错误的 Update 或 Keepalive 报文,那么 BGP 发送 Notification 报文通知对端,并转至 Idle
状态。
Route-refresh 报文不会改变 BGP 状态。
如果收到 Notification 报文,那么 BGP 转至 Idle 状态。
如果收到 TCP 拆链通知,那么 BGP 断开连接,转至 Idle 状态。
BGP 设备将最优路由加入 BGP 路由表,形成 BGP 路由。BGP 设备与对等体建立邻居关系后,采取以下交互原则:
① 从 IBGP 对等体获得的 BGP 路由, BGP 设备只发布给它的 EBGP 对等体。
② 从 EBGP 对等体获得的 BGP 路由, BGP 设备发布给它所有 EBGP 和 IBGP 对等体。
③ 当存在多条到达同一目的地址的有效路由时, BGP 设备只将最优路由发布给对等体。
④ 路由更新时, BGP 设备只发送更新的 BGP 路由。
⑤ 所有对等体发送的路由, BGP 设备都会接收。
(1)、把EBGP的路由引入到IBGP协议OSPF中(5类LSA),比较消耗设备资源,BGP路由数量特别庞大(该方法基本被淘汰)。
(2)、引入到IGP协议中,增加计算路由的负担,BGP路由振荡,IGP路由也会产生振荡。
(3)、AS内所有路由器均运行BGP协议,IBGP全互联(主流方案)。
总结:只要能解决BGP路由黑洞问题,BGP同步检查功能,开启和关闭就不再重要了。
引入路由反射器之后存在三种角色:
RR (Route Reflector) :路由反射器
Client:客户端
Non-Client:非客户端
1、RR会将学习的路由反射出去,从而使得IBGP路由在AS内传播无需建立IBGP全互联。
2、将一台BGP路由器指定为RR的同时,还需要指定其Client,至于Client本身,无需做任何配置,它并不知晓网络中存在RR。
RR的设定使得IBGP水平分割原则失效,这就可能导致环路的产生,为此RR会为BGP路由添加两个特殊的路径属性来避免出现环路:
RR将一条BGP路由进行反射时会在反射出去的路由中增加Originator_ID,其值为本地AS中通告该路由的BGP路由器RouterID。
若AS内存在多个RR,则Originator_ID属性由第一个RR创建,并且不被后续的RR (若有)所更改。
当BGP路由器收到一条携带Originator_ID属性的IBGP路由,并且Originator_ID属性值与自身的RouterID相同,则它会忽略关于该条路由的更新。
路由反射族包括反射器RR及其Client。一个AS内允许存在多个路由反射族。
每一个簇都有唯一的簇ID (Cluster_ID,缺省时为RR的BGP RouterID )。
当一条路由被反射器反射后,该RR (该族)的CIuster ID就会被添加至路由的Cluster list属性
当RR收到一条携带Cluster list属性的BGP路由,且该属性值中包含该族的Cluster_ID时,RR认为该条路由存在环路,因此将忽略关于该条路由的更新。
联邦已被淘汰,IE考试中不会涉及,若需要学习可在其他资源进行补充。
- BGP设备对AS-PATH的计算方法如下:
1、本AS内注入的路由,其AS-PATH为空,仅当该路由器离开本AS,会打上自己的AS号。且AS号出现在AS-PATH属性列表的最左边。
2、在AS内通告,AS-PATH属性不变。(其余可查找相关资料进行详细了解)
定义路径信息的来源
Origion只是用来描述BGP路由的获悉来源方式,并不描述BGP路由的优劣
依次优选Origin类型为IGP、EGP、Incomplete的路由,
“i”:通过路由始发AS的IGP(RIP、OSPF、ISIS等 )学习到的路由信息
“?”:通过其他方式学习到的路由信息
注:i>e>?
MED值相当于IGP的代价值,用于判断流量在进入AS时的最佳路由,即用MED来影响邻居AS流量进入本AS的最佳路径
越小越优,default=0
PS:有RR环境先比较Cluster_List
Cluster List一样长时,比较起源ID。
如果二条路径,一个带cluster-list,一个不带,也是需要比较的。不带按0算。
当有RR的环境时,不比较RR的Router-ID,比较Originator-ID