R1〜R2間の内部BGPで送信されているBGPメッセージをキャプチャしてみます。
まずは、ルータ間でTCPセッションが確立されます。その後、BGPの通信が行われます。BGP通信(メッセージ)の種類は、OPEN、UPDATE、KEEPALIVE NOTIFICATION の4種類があります。

TCPセッションの確立
ルータ間でTCPの3ハンドシェイクを結びます。

R1からR2に対して、TCP 179番ポートを使って、SYNパケットを発行し、R2とセッションを確立しています。また、TTL(Time to live)の値が255 です。これは、複数ホップ先のルータともBGPセッションを確立できることを意味します。これは内部BGPの特徴で、外部BGPでは、デフォルトでTTLの値は1です。あと、DSCP値はCS6にマーキングされています。これはルーティング関連の通信をその他通信より優先するためです。
OPENメッセージ
TCPセッションが確立されると、OPENメッセージが送信されます。これにより、各種パラメータを交換します。

現在のバージョンは4です。
自身のAS番号を通知します。対向のルータで設定されているAS番号と一致しないと、ネイバーは確立できません。neighborコマンドの設定ミスなどが不一致の原因と考えられます
対向のルータからBGPメッセージを受信しない場合、対向のルータがダウンしたと判断し、BGPセッションを破棄するまでの時間です。Ciscoルータのホールドタイマのデフォルト値は180秒です。対向ルータと比べて、小さい方の値を採用します。ホールドタイムをクリアするため、定期的にKEEPALIVEメッセージが送信されます。KEEPALAIVEの間隔はホールドタイマの3分の1(今回は60秒)です。
自身のルータIDを通知します。これは、自身を一意に特定するIDで、bgp router-idコマンドで設定するか、インタフェースに設定されたIPアドレスの最高の値(物理アドレスよりループバックアドレスが優先)が選定されます。
対向のルータIDと重複すると、ネイバーは確立できません。
UPDATEメッセージ
BGPルートの更新メッセージです。BGPルートを広告する際に、このUPDATEメッセージが使用されます。例えば、R2のループバックアドレスをR1へアドバタイズした際に次のようなメッセージが送信されます。
R2(config)#router bgp 12 R2(config-router)#network 2.2.2.2 mask 255.255.255.255

キャプチャデータを見ると、Network Layer Reachability Information(NLRI)という言葉があります。これは、BGPで利用可能な経路情報という意味です。R2からの2.2.2.2/32の経路情報をUPDATEメッセージとして、R1に広告しています。
では、次に、R2からR1へのループバックアドレスの広告を停止した場合は、どのようなメッセージが流れるのか確認してみます。
R2(config)#router bgp 12 R2(config-router)#no network 2.2.2.2 mask 255.255.255.255

Withdraw(撤退する)メッセージで、R2のループバックアドレスが到達不可であることを通知しています。R1は、学習していた2.2.2.2/32の経路情報をBGPテーブルから削除します。
KEEPALIVEメッセージ
ネイバー関係維持のため、定期的なKEEPALIVEメッセージを送信します。このメッセージに対して、対向ルータが応答することで、ネイバー関係が継続して維持されます。送信間隔はCiscoのデフォルト値で60秒です。

NOTIFICATIONメッセージ
エラー通知で使用されます。R1とR2間でBGPネイバー間でエラーが出るように設定し、エラー通知を発生させてみます。
AS番号の不一致
R1とR2で設定したリモートAS番号を不一致にしてみます。この場合は、ネイバーが張れません。
R1(config)#router bgp 12 R1(config-router)#neighbor 192.168.12.2 remote-as 12
R2(config)#router bgp 12
R2(config-router)#neighbor 192.168.12.1 remote-as 1212
デフォルトでは、コンソール上に以下のログが出力されます
R2: *May 5 03:03:37.430: %BGP-3-NOTIFICATION: sent to neighbor 192.168.12.1 passive 2/2 (peer in wrong AS) 2 bytes 000C
R1 *May 5 03:03:37.430: %BGP-3-NOTIFICATION: received from neighbor 192.168.12.2 active 2/2 (peer in wrong AS) 2 bytes 000C
以下のパケットキャプチャは、上記のR2からR1に送信されたNOTIFICATIONメッセージで、誤ったAS番号であることが通知されています。

受け入れられないホールドタイム
R1とR2間のネイバーが張れた状態で、R2のホールドタイムを変更します。
BGPプロセス全体のタイマーを変更するには、
R2(config-router)#timers bgp Keepalive Holdtime
ネイバーごとにタイマーを変更するには、
R2(config-router)#neighbor 192.168.12.1 timers Keepalive Holdtime
R2のキープアライブを5秒に、ホールドタイム15秒に設定します。
R2(config-router)#timers bgp 5 15 % Warning: A hold time of less than 20 seconds increases the chances of peer flapping
20 秒を下回るホールドタイムによりピアのフラッピング機会が増加する旨の警告メッセージが出力される場合があります。ただし、設定自体は反映されます。
では、BGPセッションをクリアして、新しいホールドタイムが反映されるか確認します。
R2#clear ip bgp * *May 5 03:26:54.973: %BGP-5-ADJCHANGE: neighbor 192.168.12.1 Down User reset *May 5 03:26:54.973: %BGP_SESSION-5-ADJCHANGE: neighbor 192.168.12.1 IPv4 Unicast topology base removed from session User reset *May 5 03:26:55.126: %BGP-5-ADJCHANGE: neighbor 192.168.12.1 Up
R2#show ip bgp neighbors
BGP neighbor is 192.168.12.1, remote AS 12, internal link
BGP version 4, remote router ID 1.1.1.1
BGP state = Established, up for 00:00:09
Last read 00:00:00, last write 00:00:03, hold time is 15, keepalive interval is 5 seconds
R1#show ip bgp neighbors
BGP neighbor is 192.168.12.2, remote AS 12, internal link
BGP version 4, remote router ID 2.2.2.2
BGP state = Established, up for 00:06:36
Last read 00:00:01, last write 00:00:03, hold time is 15, keepalive interval is 5 seconds
R1のホールドタイムはデフォルトの180秒ですが、値が小さいR2の15秒が採用されています。
対向のルータが予期せず小さいホールドタイムを設定した場合に備えて、ホールドタイムの最小値をtimers bgpコマンドのオプションで設定できます。
R1で、ホールドタイムの最小値を30秒に設定します。
R1(config-router)#timers bgp 60 180 ? <0-65535> Minimum hold time from neighborR1(config-router)#timers bgp 60 180 30
R1のBGPセッションをクリアし、BGPセッションを張り直します。 R2のホールドタイムはR1で設定した最小値を下回る15秒のため、エラーとなり、BGPセッションが張れません。
R1#clear ip bgp *
R1#
*May 5 06:14:48.479: %BGP-5-ADJCHANGE: neighbor 192.168.12.2 Down User reset
*May 5 06:14:48.480: %BGP_SESSION-5-ADJCHANGE: neighbor 192.168.12.2 IPv4 Unicast topology base removed from session User reset
*May 5 06:14:49.025: %BGP-3-NOTIFICATION: sent to neighbor 192.168.12.2 active 2/6 (unacceptable hold time) 0 bytes
WireSharkキャプチャを見ると、R1からR2にNOTIFICATIONメッセージにて、Unacceptable Hoid Time として、エラーを通知しています。

その他 BGP関連記事は >> ルーティングプロトコル(BGP)まとめ << より参照できます。
コメント