(Others)BGP协议

来源:互联网 发布:剑灵克劳德捏脸数据图 编辑:程序博客网 时间:2024/05/23 01:12

BGP协议 - BGP协议

RFC1771对BGP的最新版本BGP-4进行了详尽的介绍。BGP用来在AS之间实现网络可达信息的交换,整个交换过程要求建立在可靠的传输连接基础上来实现。这样做有许多优点,BGP可以将所有的差错控制功能交给传输协议来处理,而其本身就变得简单多了。BGP使用TCP作为其传输协议,缺省端口号为179。与EGP相比,BGP有许多不同之处,其最重要的革新就是其采用路径向量的概念和对CIDR技术的支持。路径向量中记录了路由所经路径上所有AS的列表,这样可以有效地检测并避免复杂拓扑结构中可能出现的环路问题;对CIDR的支持,减少了路由表项,从而加快了选路速度,也减少了路由器间所要交换的路由信息。另外,BGP一旦与其他BGP路由器建立对等关系,其仅在最初的初始化过程中交换整个路由表,此后只有当自身路由表发生改变时,BGP才会产生更新报文发送给其它路由器,且该报文中仅包含那些发生改变的路由,这样不但减少了路由器的计算量,而且节省了BGP所占带宽。
BGP有4种分组类型:打开分组用来建立连接;更新分组用来通告可达路由和撤销无效路由;周期性地发送存活分组,以确保连接的有效性;当检测到一个差错时,发送通告分组。

BGP协议 - BGP有限状态机

BGP有限状态机有6种状态,分别是:IDLE,CONNECT,ACTIVE,OPENSET,OPEMFIRM和ESTABLISHED。状态之间的相互转换及转换条件如下图所示:

BGP协议BGP协议图册

Idle状态:
在这个状态,BGP拒绝任何进入的BGP连接,不为对端分配任何资源。响应Start事件,本地系统初始化所有的BGP资源,开始ConnectRetry计时器,初始化传输连接到别的BGP对端,当检听到远端BGP对端初始化BGP连接,改变状态到连接。ConnectRetry计时器的确切值是本地设置,但是要有效大于允许TCP初始化。
如果BGP发言者探测到错误,关闭连接转换状态到Idle。脱离Idle状态需要Start事件的产生。如果这个事件自动产生,连续的BGP错误会导致发言者的抖动。为了避免这个情况,建议先前由于错误而转换到Idle状态的对端的Start事件不应该立即产生。在连续产生的Start事件之间的时间,如果事件时自动产生的,应该指数增长。初始计时器的值应该是60秒。计时应该每连续产生一次就加倍。
在Idle状态下任何别的事件被忽略。
Connect状态:
在这个状态BGP等待传输协议连接的完成。
如果传输协议连接成功,本地系统清除ConnectRetry计时器,完成初始化,发送OPEN消息到对端,改变状态到OpenSent.
如果传输协议连接失败(比如,重传超时),本地系统重启ConnnectRetry计时器,继续侦听远端BGP对端初始化的连接,改变它的状态到Active状态。
响应ConnectRetry计时器溢出事件,本地系统重启ConnectRetry计时器,初始化传输连接到BGP对端,继续侦听远端BGP对端初始化的连接,停留在Connect状态。
Start事件在Active状态被忽略。
响应其他的事件(被别的系统或者操作者初始化),本地系统释放连接占有的所有的BGP资源,转换状态到Idle。
Active状态:
在这个状态,BGP尝试通过初始化传输协议连接来得到对端。
如果传输协议连接成功,本地系统清除ConnectRetry计时器,完成初始化,发送OPEN消息到对端,设置Hold计时器为一个很大值,改变状态到OpenSent。计时器值建议是4分钟。
响应ConnectRetry计时器溢出事件,本地系统重启ConnectRetry计时器,初始化传输连接到别的BGP对端,继续侦听远端BGP对端初始化的连接,改变状态到Connect.
如果本地系统探测到远端尝试建立BGP连接到自己,远端的IP地址不是期望的,本地系统重启ConnectRetry计时器,拒绝尝试连接,继续侦听远端BGP对端初始化的连接,停留在Active状态。
Start事件在Active状态被忽略。
响应任何别的事件(别的系统或者操作者初始化),本的系统释放连接占有的所有的资源,改变状态到Idle.
OpenSent状态:
在这个状态BGP等待来自对端的OPEN消息。当OPEN消息收到,所有的域要检查正确性,如果BGP消息头检查或者OPEN消息检查探测到错误,或者由连接冲突,本的系统发送NOTIFACATION消息,改变状态到Idle。
如果在OPEN消息内没有错误,BGP发送KEEPALIVE消息设置KeepAlive计时器。Hold计时器,先前被设置为一个大值,被商议的HoldTime值替代。如果商议的HoldTime值是0,HoldTime计时器和KeepAlive计时器要重启。如果AutonomousSystem域的值是和本地AS号码一样的,连接是“内部”连接,否则是“外部”连接。最后,转态转换到OpenConfirm。
如果从承载传输协议收到断开通告,本地系统关闭BGP连接,重启ConnectRetry计时器,同时继续侦听远端BGP初始化的连接,进入Active状态。
如果Hold计时器溢出,本地系统发送NOTIFICATION消息,错误码是HoldTimerExpired,同时改变状态到Idle。
响应Stop事件(系统或者操作者初始化),本地系统发送NOTIFICATION消息,错误码是Cease同时改变状态到Idle。
Start事件在OpenSent状态被忽略。
对别的事件的响应,本地系统发送NOTIFICATION消息,错误码是FiniteStateMachineError同时改变状态到Idle。
无论何时BGP改变状态从OpenSet到Idle,关闭BGP(以及传输层)连接释放连接占用的所有的资源。
OpenConfire状态:
在这个状态,BGP等待KEEPALIVE或者NOTIFICATION消息。
如果本地系统收到KEEPALIVE消息,改变状态到Established。
如果在收到KEEPALIVE消息之前,Hold计时器溢出,本的系统发送NOTIFICATION消息,错误码是HoldTimerExpired,改变状态到Idle.
如果本地系统受到NOTIFICATION消息,改变状态到Idle。
如果KeepAlive计时器溢出,本地系统发送KEEPALIVE消息,重启他的KeepAlive计时器。
如果从底层的传输协议收到断开通告,本的系统状态转换到Idle。
响应Stop事件(系统或者操作者初始化)本地系统发送NOTIFICATION消息,错误码是Cease,改变状态到Idle。
Start事件在OpenConfirm状态被忽略。
响应别的事件,本的系统发送NOTIFICATION消息,错误码是FiniteStateMachineError,改变状态到Idle。
无论何时BGP改变状态从OpenConfirm到Idle,关闭BGP(传输层)连接同时释放所有连接占用的资源。
Established状态:
在建立状态,BGP交换UPDATE,NOTIFICATION,和KEEPALIVE消息到对端。
如果本地系统收到UPDATE或者KEEPALIVE消息,开启Hold计时器,如果商议的HoldTime值不是零。
如果本地系统收到NOTIFICATION消息,状态转换到Idle.
如果本地系统收到UPDATE消息,UPDATE消息的错误处理过程探测到错误,本地系统发送NOTIFICATION消息,改变状态到Idle。
如果断开通告通过承载传输协议收到,本地系统改变状态到Idle。
如果Hold计时器溢出,本地系统发送NOTIFICATION消息,错误码是HoldTimerExpired,改变状态到Idle。
如果KeepAlive计时器溢出,本地系统发送KEEPALIVE消息,重启KeepAlive计时器。
每次本地系统发送KEEPALIVE或者UPDATE消息,重启KeepAlive计时器,除非商议的计时器值是零。
响应Stop事件(通过系统或者操作者初始化),本地系统发送NOTIFICATIOIN消息,错误码是Cease,改变状态到Idle。
Start事件在Established状态被忽略。
响应别的事件,本的系统发送NOTIFACATION消息,错误码是FiniteStateMachineError,改变状态到Idle。
无论何时改变状态从Established到Idle,关闭BGP(以及传输层)连接,释放连接占用的所有资源,删除所有的连接产生的路由。

BGP协议 - 参考资料

[1]、RFC1771 A Border Gateway Protocol4 (BGP-4)






BGP协议状态机




BGP协议状态机


0 0