BGPの基本を学ぶ ~BGPの動作~

ネットワーク

BGP

前回BGPを学ぶ前にASについて確認した。
ASを頭に入れた上でBGPとはなんなのかを確認していく。

BGPの基本を学ぶ ~インターネットの自律システム(AS)~
BGP BGPについて全然知らなかったのでBGPについて学んでみる。が、そのBGPを学ぶ前にインターネットそのものの仕組みを知る必要がありました。基本ダイジ。キホンダイジ。 BGPとは BGPとはBorder Gateway Protoco...

プロトコルとしてのBGP

前回のページでも確認したが、BGPはEGPに属する経路交換プロトコル。
ASという組織が管理する範囲と範囲を繋ぐ役割を持つ。
BGPはパスベクタ型プロトコルに分類され、宛先までの経路情報に経由したAS番号をリストとして持つ。(Path attribute)
このパス情報でルーティングループを検知して防止することも可能になっている。
BGPはTCPを使用しており、ポート番号は179で動作する。
TCPで動作することから信頼性はトランスポート層で確保される。

iBGPとeBGP

BGPにはAS内でBGP経路伝搬に使われるiBGPとAS間で経路伝搬するeBGPが存在する。
eBGPはTTLが1であるため基本的に直接接続だが、どうしても難しい場合、
特別なコマンドを使えばマルチホップでneighborを張ることも可能。
また、iBGPはTTLは255であり、IP到達性があればneighborを確立できる。

Interfaceの安定性

IP到達性があればneighborを確立出来るが、宛先をInterfaceのIPアドレスにした場合、
リンクのアップダウンにより影響を受ける。iBGPではLoopbackを宛先にすることで
障害を回避することができるらしい。

BGPの確立

Wiresharkの新しいバージョンにはパケットダイアグラムがあるのでそれを使って確認してみる。

このような構成でAS1のvIOS1にてキャプチャする。

上から見ていくと

  1. SYN, SYN+ACK, ACK (TCP 3way handshake)
  2. OPEN Messageを相互で送る。
  3. KEEPALIVE Messageを相互で送る。
  4. UPDATE Messageを相互で送る。
  5. KEEPALIVE Messageを定期的に送る。

BGPでやり取りされるメッセージのタイプは4つある。

  • OPEN
  • UPDATE
  • NOTIFICATION
  • KEEPALIVE

まずはじめに、TCPによるネゴシエーションが行われる。
3way handshakeにより信頼性が保たれる。

TCPによる接続が確立されると、OPENメッセージを送信した後、対向ルータからのOPENを待つ。
OPENメッセージでは、AS番号、バージョン、RouterIDなどを確認する。

OPENメッセージの次はKEEPALIVEを送信する。
ここではホールドタイムのネゴが行われ、小さい値に決定する。

UPDATEでは経路情報が交換される。ここにはpath attributeも含まれる。

その後、定期的にKEEPALIVEが送られ、BGP接続を維持する。
経路に更新がある場合はUPDATEを用いて差分のみをやり取り、
エラーが発生した場合はNOTIFICATIONが送信され、TCPで切断される。

KEEPALIVEとHoldtime

KEEPALIVEとHoldtimeは通常60秒, 180秒に設定される。
KEEPALIVEはHoldtimeの3分の1程度で、IOSでもデフォルトは60, 180に設定されている。

R1#show ip bgp neighbors
BGP neighbor is 10.1.1.2,  remote AS 2, external link
  BGP version 4, remote router ID 192.168.2.1
  BGP state = Established, up for 00:17:50
  Last read 00:00:23, last write 00:00:21, hold time is 180, keepalive interval is 60 seconds

showコマンドで確認した中のRouter IDはLoopbackで最大のIPアドレスが利用される。
これはOSPFなどと同じ。

UPDATE

UPDATEでは配布する経路の取り消しや追加を行う。
下の例は取り消しが行われた例(Withdraw)

続いて追加された例

Path Attribute – ORIGIN

疑問に思ったポイントがあったので確認。
上のパケットではAS4で広告された192.168.5.0の情報をAS1でキャプチャしたもの。
Path AttributeのORIGINがIGPと表示されている。
このIGPとはOSPFやRIPのこと?と意味がわからなかったが、どうやら「network」コマンドで広告されたものはIGPがセットされるらしい。レガシーなEGPや再配布で生成されたルートは違う値になり、優先度が異なるらしい。 高) IGP < EGP < Incomplete (低

パス属性 (path attribute)

UPDATEに含まれているパス属性は様々。
今回はその中で周知強制である3つ。

ORIGIN

経路の生成方法。

優先度生成元説明
0IGPnetworkコマンドやaggregateによって広告された
1EGPレガシーなプロトコルであるEGPで生成されたもの
2IncompleteIGPからBGPに再配送(Redistribute)されたもの
AS_PATH

通ってきたAS番号のリスト。
基本的にこのリストが一番短いものがベストパスとなる。
上でキャプチャしたUPDATEパケットには「2, 4」と番号がリストされている。
下の図のように、AS-5がAS-1に送信するにはパスの短いAS-3に送信することになる。
また、AS-1の情報がAS-1に届いた場合、自分のAS番号が含まれているためループを検知できる。

NEXT_HOP

ASに到達するためのネクストホップアドレス。
しかし、AS外で学習したルートについて、iBGPで広告する場合eBGPでのネクストホップがそのまま利用される。AS内で学習したルートについては広告するルータが自分をネクストホップとして広告するのでiBGPのルータがネクストホップとなる。

BGPのパス選択アルゴリズム
優先度内容
1ネクストホップへの到達性がない場合は無視(IGPルートを持っているか)
2CiscoのWeightパラメータが大きいルート
3Local Preference属性の高いルート
4AS_PATH属性のリストが短いルート
5ORIGIN属性のタイプが最も低いルート
6MULTI_EXIT_DIC属性の低いルート
7iBGPよりもeBGPで学習したルート
8ネクストホップへ最小のIGPメトリックを持つルート
9Router IDが小さいルート

長くなってしまったのでここまで。

シンプルでありながらなかなか難しい。
実際に設定しながら試してみたい。

タイトルとURLをコピーしました