無料ブログはココログ

« 【BFD】 3. BFDの実証実験 | トップページ | 【Cisco Tips】 Q. スタティックルートはredistributeする必要ありますか? »

【BFD】 4. BFDのパケット構造

4. BFDのパケット構造

せっかく実機で実験しましたので、BFDパケットをキャプチャしてみました。

Etherealのデータ

パケット1(R1→R2)

No.     Time        Source                Destination           Protocol Info
      1 0.000000    192.168.1.1           192.168.1.2           BFD Control Diag: Control Detection Time Expired, Flags: 1000 .... = I Hear You

Frame 1 (66 bytes on wire, 66 bytes captured)
Ethernet II, Src: 00:90:69:92:34:00, Dst: 00:90:69:61:30:00
Internet Protocol, Src Addr: 192.168.1.1 (192.168.1.1), Dst Addr: 192.168.1.2 (192.168.1.2)
User Datagram Protocol, Src Port: 3784 (3784), Dst Port: 3784 (3784)
    Source port: 3784 (3784)
    Destination port: 3784 (3784)
    Length: 32
    Checksum: 0x1034 (correct)
BFD Control message
    000. .... = Protocol Version: 0
    ...0 0001 = Diagnostic Code: Control Detection Time Expired (0x01)
    Message Flags: 1000 .... = I Hear You
    Detect Time Multiplier: 3 (= 150 ms Detection time)
    Message Length: 24 Bytes
    My Discriminator: 0x00000006
    Your Discriminator: 0x00000006
    Desired Min TX Interval:   50 ms
    Required Min RX Interval:  100 ms
    Required Min Echo Interval:    0 ms

パケット2(R2→R1)

No.     Time        Source                Destination           Protocol Info
      2 0.024687    192.168.1.2           192.168.1.1           BFD Control Diag: No Diagnostic, Flags: 1000 .... = I Hear You

Frame 2 (66 bytes on wire, 66 bytes captured)
Ethernet II, Src: 00:90:69:61:30:00, Dst: 00:90:69:92:34:00
Internet Protocol, Src Addr: 192.168.1.2 (192.168.1.2), Dst Addr: 192.168.1.1 (192.168.1.1)
User Datagram Protocol, Src Port: 3784 (3784), Dst Port: 3784 (3784)
    Source port: 3784 (3784)
    Destination port: 3784 (3784)
    Length: 32
    Checksum: 0xd484 (correct)
BFD Control message
    000. .... = Protocol Version: 0
    ...0 0000 = Diagnostic Code: No Diagnostic (0x00)
    Message Flags: 1000 .... = I Hear You
    Detect Time Multiplier: 3 (= 150 ms Detection time)
    Message Length: 24 Bytes
    My Discriminator: 0x00000006
    Your Discriminator: 0x00000006
    Desired Min TX Interval:   50 ms
    Required Min RX Interval:   50 ms
    Required Min Echo Interval:    0 ms

BFDパケットはUDPポート3784です。 BFDの場合、ルータ間では1セッションしか動きませんので、ソース、デスティネーション共にポート3784を使います。 もう少し正確に言うと、IPv4用で1セッション、IPv6用で1セッション使用し、 クライアントは同じBFDセッションを共有します。 マルチホップのセッションを複数張ると、ポート番号では識別できません。 そのために導入されたのがDiscriminatorです。 BFDセッションは基本的にDiscriminatorで識別し、この値は自動です。

R1→R2とR2→R1のパケットの値が微妙に違いますね。その辺りを紐解いてみましょう。 ドラフト0版 によるとパケットフォーマットは次のようになっています。

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |Vers |  Diag   |H|D|P|F|C|A|Rsv|  Detect Mult  |    Length     |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                       My Discriminator                        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                      Your Discriminator                       |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                    Desired Min TX Interval                    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                   Required Min RX Interval                    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                 Required Min Echo RX Interval                 |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Versは共に0で、プロトコルバージョン0です。

Diagは診断用で、過去に何があったのか判断するのに使います。 R1→R2(1)のパケットにはビットが立ってます。 この具体的な値は次のように定義されています。

        0 -- No Diagnostic
        1 -- Control Detection Time Expired
        2 -- Echo Function Failed
        3 -- Neighbor Signaled Session Down
        4 -- Forwarding Plane Reset
        5 -- Path Down
        6 -- Concatenated Path Down
        7 -- Administratively Down
        8-31 -- Reserved for future use

R1でBFDセッションを表示してみると次のようになっています。 確かにLocal diagnosticsにCtlExpireが立っています。 一度セッションダウンを検出すると、以降はこのビットが立つようです。

gsi@R1> show bfd session detail
                                                          Transmit
Address              State     Interface     Detect Time  Interval  Multiplier
192.168.1.2          Up        fe-0/0/0.0          0.300     0.050      3
  Client OSPF, TX interval 0.050, RX interval 0.050, multiplier 3
  Session up time 15:52:24, previous down time 00:00:00
  Local diagnostic CtlExpire, remote diagnostic None
  Remote heard, hears us
192.168.2.2          Up        fe-0/0/1.0          0.150     0.050      3
  Client OSPF, TX interval 0.050, RX interval 0.050, multiplier 3
  Session up time 15:53:57
  Local diagnostic None, remote diagnostic None
  Remote heard, hears us

2 sessions, 2 clients
Cumulative transmit rate 40.0 pps, cumulative receive rate 30.0 pps

gsi@R1>

メッセージフラグ(HDPFCのフラグ)は、Hのみが立ってます。HはI Hear youです。

Detect Time Multiplierは3になっています。これは設定した通りです。

メッセージ長は24バイトです。固定ですね。

R1→R2のMy Discriminator=6、Your Discriminator=6です。
R2→R1のMy Discriminator=6、Your Discriminator=6です。

Desired Min TX Intervalはローカルシステムが希望する送信間隔(msec)です。 R1, R2共に設定値の50msecになっています。

Required Min RX Intervalはローカルシステムがサポート可能な、最小受信間隔です。 この値は特に設定してないのですが、
R1→R2は100 msec
R2→R1は50 msec
になっています。 なぜこのような違いがでるのか分かりませんが、とりあえず設定はまずそうです。 R2の送信間隔が50msecで、R1が受信できるのが100msecでは、性能不足でうまく動かないはずです。

Required Min Echo RX IntervalはBFD Echoパケットを受信できる最小間隔(msec)です。 この値がゼロの場合、BFD Echoパケットをサポートしていないことを意味します。

つづく。

« 【BFD】 3. BFDの実証実験 | トップページ | 【Cisco Tips】 Q. スタティックルートはredistributeする必要ありますか? »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/54859/1548585

この記事へのトラックバック一覧です: 【BFD】 4. BFDのパケット構造:

« 【BFD】 3. BFDの実証実験 | トップページ | 【Cisco Tips】 Q. スタティックルートはredistributeする必要ありますか? »