BGPのAS_PATH属性
BGPのAS_PATH属性について説明しています。
AS_PATH属性の定義
AS_PATH属性の定義は、以下のとおりです。
項目 | 説明 |
---|---|
タイプコード | 2 |
カテゴリ | 必須(Well-known mandatory) |
概略 | 経由したAS番号の羅列 |
パス属性値 | 以下フォーマットを参照 |
カテゴリがWell-known mandatoryの場合、すべてのBGPスピーカーでサポートが必須です。また、必ずBGPパケットのパス属性として含む必要があります。
AS_PATHのパス属性値は、以下フォーマットになっています。

これは、ASパスセグメントと呼ばれます。
それぞれの説明は、以下のとおりです。
項目 | 説明 |
---|---|
パスセグメントタイプ | 1:AS_SET(経由した順番は意味なし) 2:AS_SEQUENCE(経由した順番にAS番号が羅列) |
パスセグメント長 | パスセグメント値で羅列するASの数 |
パスセグメント値 | 経由したAS番号の羅列 |
EBGPでの動作
EBGP(External Border Gateway Protocol)で接続した際、自ASから取り込んだ経路であればセグメントタイプをAS_SEQUENCEにし、パスセグメント長は1、パスセグメント値に自身のAS番号を入れてAS_PATH属性を生成します。
これを受信したBGPスピーカーが他BGPに広報する時は、パスセグメント長を2にし、パスセグメント値の一番左に自身のAS番号を追加します。
つまり、経由したAS番号が羅列されます。
これは、宛先へ複数の経路がある場合の優先度にも使われます。例えば、2つのAS番号を持つルートと、3つのAS番号を持つルートでは、2つのAS番号を持つルートが選択されます。

AS_PATH属性は、経由したAS番号の羅列のため、もし自身のAS番号があるルートを受信した場合、ループしていると判断して無視します。
複数の経路があって、片方の経路を優先したい場合、優先しない経路で自身のAS番号を複数追加(Prepend)することもあります。

パスセグメントタイプのAS_SETは、経路を集約した時に使われます。例えば、異なるASを経由してきた個別の経路が1つの経路に集約された時、個別の経路が経由したAS番号をすべてAS_PATHに記述してパスセグメントタイプをAS_SETとします。その際、AS番号の順番が意味を持たなくなります。また、新たなASパスセグメントをセグメントタイプのAS_SEQUENCEで自身のAS番号を付与し、追加します。

AS_SETを使いたい時は、ルーターの集約するためのコマンドで、オプションとして提供されたりします。このオプションを使わずに集約した場合、経路のループを防ぐためにATOMIC_AGGREGATE属性を使う必要があります。
なお、RFC 6472 - Recommendation for Not Using AS_SET and AS_CONFED_SET in BGPでは、AS_SETは非推奨になっています。
IBGPでの動作
IBGP(Internal Border Gateway Protocol)で接続した際、自ASから取り込んだ経路であれば、パス属性値の長さを0にしてAS_PATHのパス属性値自体は空とします。
EBGPで他ASから受け取った経路の場合、IBGP接続先に広報する時にAS_PATH属性値は変更しません。

AS番号の補足
AS_PATHは、4バイトのAS番号にも対応しています。このため、4バイトのAS番号に対応したBGPスピーカー(これをNEW BGP speakerと言います)間では、4バイトで付与します。
4バイトのAS番号に対応していないBGPスピーカー(これをOLD BGP speakerと言います)に広報する時は、AS_PATHに23456(AS_TRANSと呼ばれます)の番号を付与します。これで、OLD BGP speakerでもAS_PATHが解釈できます。

BGPピアが4バイトに対応しているかは、OPENメッセージのオプションで判断できます。
なお、2バイトのAS番号が割り当てられている場合、NEW BGP speakerからOLD BGP speakerへはAS_TRANSを使わずに、実際のAS番号をAS_PATH属性に追加します。
「BGPのパス属性一覧」に戻る