AS边界运行BGP,用于AS之间交换路由信息。借助BGP,每个AS都可以选择合适自己的IGP协议,并通过BGP来获得其他AS的路由信息。
BGP需要做到:
支持从各类IGP引入路由信息
能够从这些数据中决策出最优路由
不论从哪类IGP引入,将最优路由对外发布时,都采用统一的格式
BGP存储路由信息的数据库叫RIB (routing informationbse),分为3个部分:
Adj-RIBs-In,保存BGP Speaker从邻居学到的路由信息,即初始路由
Loc-RIBs,保存经过决策从Adj-RIBs-In选取的路由信息,即最优路由
Adj-RIBs-Out,保存BGP Speaker发给邻居的路由信息,即发布路由
BGP承担的是大型网络之间接口的角色,选择TCP作为承载协议,使用端口号为179
什么叫邻居:只要双方指定地址路由可达,就可以建立邻居。
同一AS内,设备之间的邻居叫IBGP邻居
不同AS内,设备之间的邻居叫EBGP邻居
运行BGP的设备交BGP Speaker,相互之间称作BGP对等体
建立邻居时,BGP首先尝试建立TCP连接,如果连接成功,BGP发送open消息给对端,并等待对端的open消息,如果没有发现错误,就向对端发送keepalive消息并启动keepalive定时器,收到keepalive消息,则邻居建立。
当邻居检测到错误需要中断连接时,BGP发送notification消息通知对端。
Open用于建立邻居
Keepalive用于维持邻居
Update用于发布路由信息
Notification用于通知对端检测错误。
BGP建立邻居采用有限状态机,6种状态:
Idle:初始状态,系统不分配资源,只有收到startevent时,才分配BGP资源,启动connectRetry计时器,启动对其对等体的传输层连接,同时也侦听是否有来自其他对等体的连接
Connect:BGP等待TCP连接,若连接成功,清空connectRetry计时器,并发送open报文,状态变为opensent状态;
否则重置connectRetry,侦听是否有对等体启动连接,进入active状态
Active:BGP初始化TCP连接来获得一个对等体。如果连接成功,本地清空connectRetry计时器,并向对等体发open报文,进入opensent状态
Opensent:BGP等待对等体的open报文。收到后如果发现错误则发送Notification报文,进入idle状态;
如果报文正确,发送keepalive报文,转为confirm状态
Openconfirm:BGP等待keepalive或notification报文
Established:BGP可和其他对等体交换update,notification,keepalive报文
BGP决策过程:
1. 当本地BGP发言人收到EBGP邻居发来耳朵更新、替代或撤销路由时,为每条路由计算优先级,并将最高优先级的路由通告到所有的IBGP邻居
2. 在步骤1完成后,负责从到达目的地的所有路由选择最好的路由,同时安装每条选中的路由到相应的loc-rib,如果路由信息携带的下一跳路由不可达,则将该路由排除在这个决策过程之外
3. 在步骤2完成后激活,负责根据在PIB中的规则,发布Loc-rib中的路由到EBGP每个对端。