目录
1.BGP概述
2.BGP的数据包
3.BGP的状态机
4.BGP的工作原理
4.1 BGP的路由信息处理
4.2 工作过程
4.3 对等体间的交互原则
IBGP与IGP的同步
基于TCP的179端口工作;故BGP协议中所有的数据包均在TCP会话建立后基于TCP会话来传递及保障可靠性。BGP协议首先是通过TCP的三次握手来寻找邻居。
BGP的运行是通过消息驱动的,共有Open、Update、Notification、Keepalive和Route-Refresh等5种消息类型。
Open消息:是TCP连接建立后发送的第一个消息,用于建立BGP邻居间的连接关系。正常仅收发一次,携带Route-id,hold time(默认3min)。Update消息:用于在对等体之间交换路由器信息,携带路由条目(目标网络号+各种属性)。一条Update消息可以发布多条属性相同的可达路由信息,也可撤销多条不可达路由信息。Keepalive消息:周期1min查询邻居关系是否存在;实际保活TCP会话。Notification消息:当BGP检测到错误状态时,就向邻居发出Notification消息之后,之后BGP连接会立即终端。Route-Refresh消息∶通过OPEN消息告知BGP Peer本地支持路由刷新能力。在所有BGP路由器使能Route-Refresh的情况下,如果BGP的入口路由策略发生了变化,本地BGP路由器会向对等体发布Route-Refresh消息,收到此消息的对等体会将其路由信息重新发给本地BGP路由器。这样,可以在不中断BGP连接的情况下,对BGP路由表进行动态刷新,并应用新的路由策略。BGP使用TCP建立连接,本地监听端口为179。和TCP连接建立相同,BGP连接的建立也要经过一系列的对话和握手。TCP通过握手协商通告其端口等参数,BGP的握手协商的参数有:BGP版本、BGP连接保持时间、本地的路由器标识(Router ID)、授权信息等。这些信息都在Open消息中携带。
BGP连接建立后,如果有路由需要发送则发送Update消息通告对端。Update消息发布路由时,还要携带此路由的路由属性,用以帮助对端BGP协议选择最优路由。在本地BGP路由变化时,要通过Update消息来通知BGP对等体。
经过一段时间的路由信息交换后,本地BGP和对端BGP都无新路由通告,趋于稳定状态。此时要定时发送KEEPALIVE消息以保持BGP连接的有效性。对于本地BGP,如果在保持时间内,未收到任何对端发来的BGP消息,就认为此BGP连接已经中断,将断开此BGP连接,并删除所有从该对等体学来的BGP路由。
当本地BGP在运行中发现错误时(如对端BGP版本本地不支持、本地BGP收到了结构非法的Update消息等),要发送Notification消息通告BGP对等体。本地BGP退出BGP连接时,也需发送Notification报文。
状态机:BGP共有6个状态机:Idle、connect、active、opensent、openconfirm、Establish
Idle状态是BGP的初始状态,在Idle状态下,BGP 拒绝邻居发送的连接请求,只有在收到本设备的start事件后,BGP才开始尝试和其他BGP邻居建立TCP连接,并转至Connect状态(start事件是管理员配置BGP的过程,或者重置一个已经存在的进程,或者由软件重置BGP引起的)。
Connect状态下BGP启动连接重传计时器(默认32秒),等待TCP完成连接。此阶段主动发起TCP连接,如果TCP连接成功,那么BGP向对等体发送Open报文,并转至opensent状态;如果TCP连接失败,那么BGP转至Active状态。如果连接重传计时器超时,BGP仍没有收到对等体的响应,那么BGP继续尝试和其他对等体进行TCP连接,并停留在connect状态如果发生其他事件(由系统或者管理员操作),则退回到idle状态。Active状态下,BGP总是在试图建立TCP连接。
此阶段等待对方发起TCP连接。如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至opensent状态;如果TCP连接失败,那么BGP停留在Active状态。如果连接重传定时器超时,BGP仍没有收到对等体的响应,那么BGP转至Connect状态。在Opensent状态下,BGP等待对等体的Open报文,并对收到的open报文中的AS号、版本号、认证码等进行检查。
如果收到Open报文正确,那么BGP发送keepalive报文,并转至Opencomfirm状态;如果发现Open报文有错误,那么BGP发送Notification报文给对等体,并转至idle状态在Establish状态下,BGP可以和对等体交换Update、Keepalive、route-refresh、Notification报文
如果收到正确的Update和Keepalive报文,那么BGP就认为对等体处于正常运行状态,并保持BGP连接;如果收到错误的Update和Keepalive报文,BGP就会发送Notification报文通知对端,并转至idle状态。Route-refresh报文不会改变BGP的状态。如果收到TCP断开请求,那么BGP断开连接,并转至idle状态。当从对等体接收到更新数据包时,路由器会把这些更新数据包存储到路由选择信息库(Routing Information Base,RIB)中,并指明是来自哪个对等体的(Adj-RIB-In)。这些更新数据包被输入策略引擎过滤后,路由器将会执行路径选择算法,来为每一条前缀确定最佳路径。
得出的最佳路径被存储到本地BGP RIB(LOc-RIB)中,然后被提交给本地IP路由选择表(IP-RIB),以用作安装考虑。
除了从对等体接收来的最佳路径外,Loc-RIB也会包含当前路由器注入的(被称为本地发起的路由),并被选择为最佳路径的BGP前缀。Loc-RIB中的内容在被通告给其他对等体之前,必须通过输出策略引擎。只有那些成功通过输出策略引擎的路由,才会被安装到输出RIB(Adj-RIB-Out)中。
管理员定义邻居的IP地址,前提要求对邻居IP可达(IGP可达);启动BGP协议后,先目标端口为179进行TCP的三次握手来建立TCP的会话;
会话建立后,收发open报文来建立邻居关系,生成邻居表;邻居关系建立后,邻居间使用update 共享路由条目,在收发了路由信息后,本地生成BGP表;Bgp表中装载本地发出及接收到的所有路由条目;之后路由器将BGP表中的最优路径(不一定是最佳选路,仅为BGP参数最佳)加载于路由表中;收敛完成,仅keeplive周期保活即可;
结构突变:
新增网段 – BGP更新源设备将使用Update来告知本地所有的邻居断开网段 – BGP更新源设备将使用Update来告知本地所有的邻居无法沟通 – 3min hold time到时时断开邻居关系和TCP会话,之后删除从该邻居处学习到的所有信息;BGP更新源设备并不一定直连断开或新增网段的设备,而是第一台将该路由发布到BGP协议中的路由器;
将IBGP路由加入到路由表并发布给EBGP对等体之前,会先检查IGP路由表,只有IGP也知道这条路路由时,它才会被加入到路由表,并发布给EBGP对等体。
同步是指IBGP与IGP之间的同步,其目的是避免误导外部AS的路由器。
R4通过BGP学习到R1宣告的10.0.0.0/24网络。R4在将该网络通告给R5之前,会首先检查自己的IGP路由表是否已经存在10. 0.0.0/24网络。如果R4本地IGP路由表项存在10.0.0.0/24网络,则将该网络通告给R5;如果R4本地IGP路由表项不存10.0.0.0/ 24网络,则不能将该网络通告给R5。
BGP属性问题:https://blog.csdn.net/weixin_43997530/article/details/106741945