RFC5880 6.8节翻译

 

1 介绍       (p1)

2设计        (p4)

3 协议概述(p5)

4控制报文封装格式(p5)

5 Echo报文格式

6 原理

6.1概述

6.2 BFD状态机

6.3 解复用和Discriminator字段

6.4 Echo与不对称

6.5 The Poll Sequence调查序列

6.6 Demend Mode查询模式

6.7 认证

6.7.1 启用与禁用认证

6.7.2 simple

6.7.3 MD5

6.7.4 SHA1

 

6.8 功能细节   (p 27)

6.8.1状态参数  (p 27~30)

建立一些状态参数以帮助描述BFD机制。状态参数的初始化只发生在会话创建时,状态参数随后被状态机操作,在会话失败和重建后不会被重新初始化。

一旦会话状态被建立并收到至少一个控制报文后,它将在接收到最后一个控制报文后持续一个检测时间。超时后会话状态被保存还是销毁并不在协议规定范围内。

协议规定的状态参数用“bfd.Xx”表示。注意不要与报文格式中的域混淆。

bfd.SessionState——会话状态参数 (Init, Up, Down, or AdminDown)

(注:当会话状态变化时此参数发生的变化不在本协议规定之内)

它必须被初始化为Down。

bfd.RemoteSessionState——远端会话参数

最后一次接受的远端控制报文中的 Sta域值,它必须被初始化为Down

bfd.LocalDiscr—— 本地discriminator

在会话过程中必须唯一非零。应该被设置为随机值。

(注:bfd.LocalDiscr的值不在本协议规定之内)

bfd.RemoteDiscr——远端discriminator

总是对本地系统不透明的,必须被初始化为0.

bfd.LocalDiag—— 本地诊断码

说明本地会话状态发生变化的原因的诊断码,必须被初始化为0.

bfd.DesiredMinTxInterval——期望最小传输间隔 (微妙)

小于jitter applied  存于发送的控制报文之中

真实时间间隔由两系统协商,根据6.8.3它的初始化值至少1s

此参数的设置不在本协议规定之内

bfd.RequiredMinRxInterval  最小接受时间间隔 (微妙)

less any jitter applied by the sender

在接受的控制报文之中。

为0表示这个系统不想接受仍何周期性BFD控制报文。

此参数的设置不在本协议规定之内

bfd.RemoteMinRxInterval

接收的最后一个远端控制报文中 Required Min RX Interval的值。它必须被初始化为1。

bfd.DemanMode

本地系统需要demandmode则置为1,否则为0。

bfd.DetectMult——探测时间乘子,

Demend time等于协商的interval称以此乘子。

此值需非零整数。

(注:此参数的设置不在本协议规定之内)详见6.8.4

bfd.AuthType

本会话使用的认证类型,为0表示不使用认证。

bfd.RcvAuthSeq  (32 uint)

包含最后一次接收的Keyed MD5 or SHA1 认证的Sequence number 。

初始值并不重要 。

bfd.XmitAuthSeq (32 uint)

下一次要发送的Keyed MD5 or SHA1 认证的Sequence number。

必须初始化为随机的32位值。

bfd.AuthSeqKnown

设为1 表示已知希望下一次接收的Keyed MD5 or SHA1 认证的Sequence number否则设为0。

6.8.2 定时器协商 (p 30)

时间值用于决定BFD报文传输的间隔,会话的Detection Time将不断被协商,因此可以在任意时间改变。协商和时间值 在每个会话的每个方向上都是相互独立的。

每个系统在控制报文中报告它发送报文的频率和准备接收报文的频率。这允许任何一个系统单独决定它在两个方向的最大报文频率(最小间隔)。详见6.8.7

6.8.3 定时器操作 (p 31)

bfd.DesiredMinTxInterval 或者bfd.RequiredMinRxInterval被改变时,a Poll Sequence必须被启动(6.5)。如果本段在发送p报文之前恰巧收到一个对方希望改变此方向的调时,与本段需求的调时是一致的,那么本端将不再发送p报文而直接发送带有调时的F报文。

如果bfd.DesiredMinTxInterval增加而且bfd.SessionState为Up,必须在the Poll Sequence 结束后改变真实的发送间隔。以确保远端系统更新了它的Detection Time。

如果bfd.RequiredMinRxInterval减少而bfd.SessionState为Up时,必须用bfd.RequiredMinRxInterval原来的值计算Detection Time。直到the Poll Sequence结束。以确保远端发送包的频率高于变小后的Detection Time。

如果bfd.SessionState 不是Up, 须将bfd.DesiredMinTxInterval设为大于1s以保证带宽可包容会话,使非Up状态显得微不足道而可忽略。(特别是当一端没有运行BFD时)

如果远端在非Demand mode模式下,当协商interval减小后,本地发送的下一个包和在上一个包(即F置位的包)的时间间隔应该小于新的interval(这里不考虑jitter)。如果时间间隔已超过,则下一个周期的控制报文一经可用就要发送。(既不要等到下个周期再发,要尽早发送)。

当Echo功能开启时,bfd.RequiredMinRxInterval应该被设置为大于1s,这是为了使当Echo报文开始使用时,令接收的控制报文的流量在可忽略的水平。

除非明确指出,以上各情况下,调时参数必须被立即更改(transmission rate/ Detection Time)。

当多个参数需要更改时,The Poll sequence机制时模糊不清的。(多个改变承载于多个包,返回的Final语义不清)。有三种解决办法:1)将所有改变放在一个BFD控制报文中。2)两个 The Poll Sequence 之间的时间间隔够大(至少在上一个Poll Sequnce发送后一个往返时间)大于另一个Poll Sequence的启用时间。3)一个Poll Sequence完成后必须附加一个(F)clear的控制报文,它在另一个Poll Sequence开始之前。(这种方法在Demand mode下不能使用)。

6.8.4 计算Detection Time (p 32)

Detection Time = negotiated transmit interval * detection multiplier

不同方向上有不同的Detection Time。

Asynchronous mode 和Demand mode的计算方法有些许不同:

Asynchronous mode

Detection Time = Detect Mult (remote) * the agreed transmit interval (the greater of bfd.RequiredMinRxInterval and the last received Desired Min TX Interval)

Detect Mult等于会话宣布down时丢失的包数。

Demand mode

Detection Time = bfd.DetectMult * the agreed transmit interval(the greater of bfd.DesiredMinTxInterval and bfd.RemoteMinRxInterval)

   另注:由于Demand mode要给对端显示发送poll Sequence时是要给对方发P所以他的计算的商时间就是对方需求的协商时间。

由此,若一端是异步模式而另一端时需求模式,那么他们的各自协商的Inrerval应该是一致的,他们各自计的Detection Time也是一致的。      

Detection Time A   =  Detection Time B

Total Detection Time = time + Detection Time

Detection TRiome等于发起POLL Sequence前的时间(用于其它机制检测)加上计算的Detection Time(用于Poll Sequence)之和。

 

 

如果 a Poll Sequence 启用时间超过了 Detection Time,本地bfd.SessionState须被设为down ,bfd.LocalDiag to 1

6.8.5 带Echo功能的检测失败 (p 33)

(Echo功能如何被检测为失败不在本协议讨论范围)

6.8.6 控制报文的接收 (p 33)

当bfd控制报文被接收,以下步骤必须按顺序执行,如果报文包因这些规则被丢弃,对包的处理应在那一点终止。

Version不正确,包被丢弃。

Length小于最小正确值(A清零为24,A置1为26),包被丢弃。

Length大于报文封装的有效负荷。

Your Disscriminator非0,用来选择BFD包所属会话,没有会话被选,则丢弃。

Your Disscriminator为0,State必须是Down或AdminDown,否则包被丢弃。

如果Your Discriminator为0 ,会话须根据其他字段的组合来选择,包括源地址信息,My Discriminator和接收包的接口。选择方法由上层应用给出,不在本协议讨论范围内。如果没有匹配的会话,将建立一个新会话或者将包丢弃。如何选择也不再协议讨论范围内。

 

如果A置1而没有认证使用,包被丢弃。

如果A清0而是用认证,包被丢弃。

如果A置1,包须按照认证规则使用(详见6.7)

 

Set bfd.RemoteDiscr to the value of My Discriminator.

Set bfd.RemoteState to the value of the State (Sta) field.

Set bfd.RemoteDemandMode to the value of the Demand (D) bit.

Set bfd.RemoteMinRxInterval to the value of Required Min RX Interval.

如果Required Min Echo RX Interval 为 0 ,如果有Echo报文发送,它必须被终止。

 本地系统发送a Poll Sequence而接收的报文Final(F)bit 置1,the Poll Sequence 须被终止。

更新 transmit interval (详见6.8.2)

更新 Detection Time  (详见6.8.4)

如果 bfd.SessionState 为 AdminDown

丢弃包。

If 接收的State是AdminDown

{

                   如果 bfd.SessionState不是 Down

                  置bfd.LocalDiag为3(这种情况是对方说明会话为down)

                  置bfd.SessionState为down

}

Else

{

           If  bfd.SessionState 为 Down

           {

                    如果接收的State为Down

                       置bfd.SessionState为Init

                    如果接收的State为Init

                           置bfd.SessionState为Up

             }

           Else if  bfd.SessionState为 Init

           {

                    如果接收到的state 为Init 或Up

                    置bfd.SessionState为Up

           }

           Else  bfd.SessionState为Up

           {

                    如果接受的State 为Down

                           置 bfd.LocalDiag为3

                           置 bfd.SessionState为 Down

           }

}

 

 检查 demad是否被启用(详见6.6)

如果 bfd.RemoteDemandMode为1

bfd.SessionState为Up

bfd.RemoteSessionState为 UP,

Demand mode在远端被启用本地系统必须终止控制报文的周期性发送。详见(6.8.7)

如果 bfd.RemoteDemandMode为0或者bfd.SessionState不是Up或者bfd.RemoteSessionState不是Up,远端系统并没有开启Demand,本地系统必须发送周期控制报文。

如果 Poll(p)被置位,发送P清0而F置位的控制报文。(详见 6.8.7)

如果报没有被丢弃,将进行Detection Time协商(详见6.8.4)

 

6.8.7  BFD控制报文的发送 (p 36)

系统报告的最慢频率决定了发送频率 系统发送时间间隔不得小于bfd.DesiredMinTxInterval和 bfd.RemoteMinRxInterval   的最大值,不得小于jitter(时间抖动)。

每个发送的控制报文包必须有不大于25%的时间抖动,interval必须减少0~25%间的随机值,这是为了避免和同一子网的其他系统自动同步(自动同步即一起在同一时间发送报文)。因此平均intrerval将比协商的interval小12.5%左右。

如果bfd.DetectMult为1,intarval 必须不大于协商interval的90%不小于协商intarval的75%。保证远端系统计算的Detection Time不会在下一个控制报文的接收之前过期。

 

每当bfd.DesiredMinTxInterval或bfd.RemoteMinRxInterval变更,transmit interval必须被重新计算,取两者之间的最大值。(详见6.8.2和6.8.3)

bfd.RemoteDiscr为0时,系统不能发送控制报文,此时系统为被动状态。

bfd.RemoteMinRxInterval为0时,系统不可周期性发送控制报文。

 

如果远端Demane mode启动(bfd.RemoteDemandMode is 1, bfd.SessionState is Up, and bfd.RemoteSessionState is Up)周期性控制报文不能被发送,a Poll Sequence 也不能被发送。

 

如果被接收的控制报文Poll置1,接收系统必须尽快发一个P清0,F置位的报文(一可用就发送)。它不必遵守发送定时器和其他限制,它不必遵循会话状态,不必遵循另一个系统的Demand mode是否开启。系统自己会限制这种报文的发送频率。如果这种限制是可行的,Desired Min TX Interval 必须大于系统规定的这种报文(F置位的报文)的传送Interval。

 

当控制报文与上一个传送的控制报文)所含信息不同时(除了Poll和Final置位),它必须在一个interval内被传送送,以保证state更新被更快速的通知。

 

发送的控制报文内容必须做如下设置:

Version

                     设为当前版本

Diagnostic (Diag)

                     Set to bfd.LocalDiag

State (Sta)

                     Set to bfd.SessionState

Poll (P)

                     发送a Poll Sequence时置1 否则置0。

FinalF

                     响应Poll报文时置1,否则置0。

Control Plane Independent (C)

                     本地BFD独立于控制平面时置1否则为0。

Authentication Present (A)

                     认证启用时置1(bfd.AuthTypeis nonzero)否则为0。

Demand (D) 

       当 bfd.SessionState 为 Up并且 bfd.RemoteSessionState为 Up。根据bfd.DemandMod设置。其他情况置0。

Multipoint (M)

                     置0

Detect Mult

               Set to bfd.DetectMult

Length

                     固定报头长(24byte)加验证段长度

My Discriminator

                     Set to bfd.LocalDiscr.

Your Discriminator

                     Set to bfd.RemoteDiscr 

Desired Min TX Interval

                     Set to bfd.DesiredMinTxInterval

Required Min RX Interval

                     Set to bfd.RequiredMinRxInterval

Required Min Echo RX Interval

                     设为会话要求Echo报文接收间隔的最小值,如果被设为0,本地不期望或不能环回Echo报文。远端将不会发送Echo报文。

Authentication Section              

                     bfd.AuthType 非0时被启用(规则详见6.7)

6.8.8  Reception of BFD Echo Packets(p 39)

接收到的Echo必须被解复用

检测Echo报文丢失的方法很可能涉及到被接收Echo报文的处理。如何处理接收得到的报文不再本协议讨论范围内。

6.8.9. Transmission of BFD Echo Packets

bfd.SessionState为up,最后一次收到远端控制报文的Required Min Echo RX Interval非0才可以发送。(此时远端开启了回声功能。)

传送频率须应用25%的jitter,真实interval在宣告interal的75%到100%之间。在规定Echo传送intervals发送单一的Echo报文包。BFD Echo 传送机制不在协议讨论范围内。

6.8.10. Min Rx Interval Change(详见6.8.3)

6.8.11. Min Tx Interval Change(详见6.8.3)

6.8.12 Detect Multiplier Change 

改变乘子时a Poll Sequence不是必须的(详见6.6)

6.8.13. Enabling or Disabling The Echo Function(详见6.8.9)

当开启Echo功能环回收到得Echo报文时,须将周期性包的Min Echo RX Interval置位。

6.8.14. Enabling or Disabling Demand Mode

bfd.DemandMode为1 本地系统需要设置Demand  Mode为0不需要。(详见6.6)

远端不再使用Demand Mode 本地系统必须发送周期性控制报文。

6.8.15 Forwarding Plane Reset 

set bfd.LocalDiag to 4 (Forwarding Plane Reset), and set bfd.SessionState to Down.

6.8.16 Administrative  Control

当需要管理会话时

 

1如果让想会话正常开始建立那么将状态机置为 down。

 

2 其他管理情况下将状态置为 AdminDown并根据实际情况设置bfd.LocalDiag。

如果由其他信号告知BFD会话潜在路径出错,关闭会话,设diagnostic 为Path Down.其他情况使用diagnostic Administratively Down

3 转变为AdminDown状态后控制报文应重送至少一个Detection Time保证远端知晓了状态变化。

6.8.17. Concatenated Paths

如果 BFD检测的路径和其他路径时串联时有可能 要求将经过BFD路径的将失败情况传递出去。实现BFD和其他技术的交互功能。

两种diagnostic codes被应用于这种情况。当路径失败方向通向交互系统时,为Concatenated Path Down 当路径失败方向远离交互系统时Reverse Concatenated Path Down

当Demand Mode不启用时,diagnostic code承载于控制报文。当远端Demand Mode开启时,本地不再发送控制报文,通过Poll Sequence 传送diagnostic code。

如果BFD会话失败,diagnostic code将被重写覆盖。如果失败的级联路径恢复了,一旦会话状态变为UP,即重复上述过程,它依赖于interworking 代理

6.8.18. Holding Down Sessions

系统会阻止会话建立,一种可能的原因是为了管理会话被建立的频率,这种情况可以使会话处于Down或者 AminDown的情况。

有两种机制可以帮助处理这个情况。

第一种,系统被要求维持会话状态(包括调时的参数),直到一个Detection Time经过而没有收到控制报文。这意味着系统可以设Required Min RX Interval field为一个任意的大值来控制接收包的频率然后设会话为down。让系统长时间维持down状态。

另一种,系统可以令Required Min RX Interval为0使远端不再发送包;只要本地发送包,远端将一直不发包。当远端超过Detection Time没有接收到包,才可以按自己的频率发包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值