- 积分
- 521
- 鸿鹄币
- 个
- 好评度
- 点
- 精华
- 注册时间
- 2014-4-15
- 最后登录
- 1970-1-1
- 阅读权限
- 40
- 听众
- 收听
中级工程师
|
BGP Finite State Machine (FSM)
BGP Session attributes
①. Mandatory for each connection
1) State
2) Connect Retry Counter
3) Connect Retry Timer
4) Connect Retry Time
5) Hold Timer
6) HoldTime
7) Keepalive Timer
8) Keepalive Time
②. Optional for each connection
Group 1—— Automatic Administrative Events (Start/Stop)
○ 1)Allow Automatic Start
○ 2)Allow Automatic Stop
○ 3)Damp Peer Oscillations
○ 4)Idle Hold Time
○ 5)Idle Hold Timer
§ 如果BGP Peer反复“振动”(Connected/Disconnected,具体何谓“反复”有厂家自定)——
□ Damp Peer Oscillations转变为True。
□ 设置Idle Hold Timer,相应的FSM在Idle Hold Time内保持Idle状态。
Group 2 —— Unconfigured Peers
○ 6)Accept Connections Unconfigured Peers
§ BGP Speaker可以接受没有在本地手工指定BGP连接
Group 3 —— TCP processing
○ 7)Passive Tcp Establishment
§ BGP FSM只会被动地等待BGP Peer去建立TCP连接
○ 8)Track Tcp State
§ BGP FSM追踪TCP 连接的最终结果,而不是个别的TCP Message
Group 4 —— BGP Message Processing
○ 9)Collision Detect Established State
§ 当检测到冲突,允许和Established状态的连接对比Router-ID
§ 否则,正常情况下,会在丢弃一切新的【和Established连接冲突】的连接
○ 10) DelayOpen
§ 允许延时(DelayOpenTime)发送Open Message
§ 使Peer先发出Open Message
○ 11) Delay Open Time
○ 12) Delay Open Timer
○ 13) Send Notification without Open
§ 允许在在发送Open之前发送Notification
Administrative Events
——
1、Manual Start
2、Manual Stop
3、Automatic Start
4、Manual Start with Passive Tcp Establishment
5、Automatic Start with Passive Tcp Establishment
6、Automatic Start with Damp Peer Oscillations
7、Automatic Start with Damp Peer Oscillations and Passive Tcp Establishment
8、Automatic Stop
9、Connect Retry Timer Expires
10、Hold Timer Expires
11、Keepalive Timer Expires
12、Delay Open Timer Expires
13、Idle Hold Timer Expires
14、Tcp Connection Valid —— A Tcp Connection received for a valid port
15、Tcp Connec Request Invalid
16、Tcp Connec Request Acked
17、Tcp Connection Confirmed
18、Tcp Connection Fails
19、BGP Open
20、BGP Open with Delay Open Timer running
21、BGP Header Error
22、BGP Open Message Error
23、Open Collision Dump
24、Notification Message Version Error
25、Notification Message
26、Keepalive Message
27、Update Message
28、Update Message Error
Finite State Machine (FSM)
——
BGP为每个Peer分别维持独立的FSM
术语“Active”和“Passive”——
○ 对于TCP连接来说,一边是Actice Side,一边是Passive Side
§ 发起第一个TCP Syn的一方为Active Side,
□ 其BGP连接为Outgoing Connection
§ 发起第一个Syn/Ack的一方为Passive Side,
□ 其BGP连接为Incoming Connection
○ 当TCP连接建立起来以后,“Active”和“Passive”完全不影响BGP连接。
§ 唯一区别在于哪一边使用了Port 179。
所有BGP Speaker都必须监听TCP port 179
所有BGP Sperker都会尝试连接(未建立连接的)Peer的TCP port 179,除非——
○ FSM被设定在Idle状态
○ BGP(TCP)连接为Passive模式
①. Idle State
○ 在FSM初始化之后,处于Idle状态
○ 在Idle状态下,FSM拒绝一切Incoming Connection
○ 如果触发Event 1、3、4、5——
□ 初始化连接所需资源
□ 把【Connect Retry Counter】初始化为0
□ 开启【Connect Retry Timer】
□ 发起对Peer的Outgoing Connection
‥舀鱙触发的是Event 4、5,不执行此项。
□ 侦听Incoming Connection(TCP port 179)
□ 将状态跃迁至Connect
‥舀鱙触发的是Event 4、5,跃迁至Active状态
○ 在Idle状态下,无视Event 2、8~12、15~28
○ 如果BGP连接属性Damp Peer Oscillations为True
□ 在Idle状态可以触发Event 6、7、13,用以防止Peer翻动
②. Connect State
○ 在Connect状态下,FSM等待TCP连接完成
○ 在Connect状态下,FSM无视所有Start Event(Event 1,3~7)
○ 如果触发Event 2(Manual Stop)
□ Drop掉TCP连接
□ 释放占用的相关硬件资源
□ 把【Connect Retry Counter】初始化为0
□ 停止【Connect Retry Timer】,并设置为0
□ 将状态跃迁至Idle
○ 如果触发Event 9(Connect Retry Timer Expires)
□ Drop掉TCP连接
□ 重启【Connect Retry Timer】(置为初始值)
□ 停止【Delay Open Timer】,并设置为0
□ 发起对Peer的Outgoing Connection(发起TCP连接)
□ 侦听Incoming Connection(TCP port 179)
□ 状态继续维持在Connect
○ 如果触发Event 14(Tcp Connection Valid)
□ 等待处理TCP连接
□ 状态继续维持在Connect
○ 如果触发Event 15(Tcp Connec Request Invalid)
□ 拒绝掉该TCP连接
□ 状态继续维持在Connect
○ 如果TCP连接成功建立(触发了Event 16或17)
□ 检测连接属性Delay Open ——
如果Delay Open为True
‥尀扐【Connect Retry Timer】,并设置为0。
‥言【Delay Open Timer】设为初始值(并开始计时)
‥状态继续维持在Connect
} 如果触发Event 20(Received Open with Delay Open Timer running)
□ 停止【Connect Retry Timer】,并设置为0
□ 停止【Delay Open Timer】,并设置为0
□ 向Peer发送Open Message
□ 向Peer发送Keepalive Message
w 如果协商的Hold Time非0
w 开启Keepalive Timer
w 将Hold Time设为协商值
w 如果协商的Hold Time为0
w 将Keepalive Timer清零
w 将Hold Time设为0
□ 状态跃迁至OpenConfirm
} 如果触发Event 12(Delay Open Timer Expires)
□ 向Peer发送Open Message
□ 将【Hold Time】设为一个非常大的值(RFC建议为4 min)
□ 状态跃迁至Open Sent
如果Delay Open为False
‥尀扐【Connect Retry Timer】,并设置为0。
‥向Peer发送Open Message
‥将【Hold Time】设为一个非常大的值(RFC建议为4 min)
‥状态跃迁至Open Sent
○ 如果触发Event 18(Tcp Connection Fails)
□ 检测连接属性Delay Open ——
如果Delay Open为True
‥重启【Connect Retry Timer】(置为初始值)
‥尀扐【Delay Open Timer】,并设置为0
‥侦听Incoming Connection(TCP port 179)
‥状态跃迁至Active
如果Delay Open为False
‥尀扐【Connect Retry Timer】,并设置为0
‥Drop掉该TCP连接
‥释放占用的相关硬件资源
‥状态跃迁至Idle
○ 如果触发Event 21、22(Error Checked)
□ 如果连接属性Send Notification without Open为True
发送Notification
□ 停止【Connect Retry Timer】,并设置为0
□ Drop掉该TCP连接
□ 释放占用的相关硬件资源
□ 把【Connect Retry Counter】+ 1
□ 如果连接属性Damp Peer Oscillations为True
启用相关防止Peer翻动的策略
□ 状态跃迁至Idle
○ 如果触发Event 24(Received Notification Message Version Error)
□ 检测【Delay Open Timer】是否运行——
如果【Delay Open Timer】正在运行
‥尀扐【Connect Retry Timer】,并设置为0
‥尀扐【Delay Open Timer】,并设置为0
‥Drop掉该TCP连接
‥释放占用的相关硬件资源
‥状态跃迁至Idle
如果【Delay Open Timer】没有启动
‥尀扐【Connect Retry Timer】,并设置为0
‥Drop掉该TCP连接
‥释放占用的相关硬件资源
‥言【Connect Retry Counter】+ 1
‥舀鱙连接属性Damp Peer Oscillations为True
启用相关防止Peer翻动的策略
‥状态跃迁至Idle
○ 如果触发其他任何Event(8,10,11,13,19,23,25~28)
□ 停止【Connect Retry Timer】,并设置为0
□ 停止【Delay Open Timer】,并设置为0
□ Drop掉该TCP连接
□ 释放占用的相关硬件资源
□ 把【Connect Retry Counter】+ 1
□ 如果连接属性Damp Peer Oscillations为True
启用相关防止Peer翻动的策略
□ 状态跃迁至Idle
③. Active State
○ 在Active状态,FSM尝试通过侦听Incoming Connection(TCP port 179)来获取一个TCP连接,进而获取一个BGP Peer。
○ 在Actice状态下,FSM无视所有Start Event(Event 1,3~7)。
○ 如果触发Event 2(Manual Stop)
□ 如果连接属性Send Notification without Open为True
发送Notification(Err.Code = Cease)
□ Drop掉TCP连接
□ 释放占用的相关硬件资源
□ 把【Connect Retry Counter】初始化为0
□ 停止【Connect Retry Timer】,并设置为0
□ 将状态跃迁至Idle
○ 如果触发Event 9(Connect Retry Timer Expires)
□ Drop掉TCP连接
□ 重启【Connect Retry Timer】(置为初始值)
□ 发起对Peer的Outgoing Connection(发起TCP连接)
□ 侦听Incoming Connection(TCP port 179)
□ 状态跃迁至Connect
○ 如果触发Event 14(Tcp Connection Valid)
□ 等待处理TCP连接
□ 状态继续维持在Active
○ 如果触发Event 15(Tcp Connec Request Invalid)
□ 拒绝掉该TCP连接
□ 状态继续维持在Active
○ 如果TCP连接成功建立(触发了Event 16或17)
□ 检测连接属性Delay Open ——
如果Delay Open为True
‥尀扐【Connect Retry Timer】,并设置为0。
‥言【Delay Open Timer】设为初始值(并开始计时)
‥状态继续维持在Active
} 如果触发Event 20(Received Open with Delay Open Timer running)
□ 处理方法同Connect状态
□ 状态跃迁至OpenConfirm
} 如果触发Event 12(Delay Open Timer Expires)
□ 停止【Connect Retry Timer】,并设置为0
□ 停止【Delay Open Timer】,并设置为0
□ 向Peer发送Open Message
□ 将【Hold Time】设为一个非常大的值(RFC建议为4 min)
□ 状态跃迁至Open Sent
如果Delay Open为False
‥处理方法同Connect状态
‥状态跃迁至Open Sent
○ 如果触发Event 18(Tcp Connection Fails)
□ 重启【Connect Retry Timer】(置为初始值)
□ 停止【Delay Open Timer】,并设置为0
□ 释放占用的相关硬件资源
□ 如果连接属性Damp Peer Oscillations为True
启用相关防止Peer翻动的策略
□ 状态跃迁至Idle
○ 如果触发Event 21、22(Error Checked)
□ 处理方法同Connect状态
□ 状态跃迁至Idle
○ 如果触发Event 24(Received Notification Message Version Error)
□ 处理方法同Connect状态
□ 状态跃迁至Idle
○ 如果触发其他任何Event(8,10,11,13,19,23,25~28)
□ 停止【Connect Retry Timer】,并设置为0
□ Drop掉该TCP连接
□ 释放占用的相关硬件资源
□ 把【Connect Retry Counter】+ 1
□ 如果连接属性Damp Peer Oscillations为True
启用相关防止Peer翻动的策略
□ 状态跃迁至Idle
|
|