EIGRPの処理の流れ

EIGRPの全体的な処理の流れは、以下のようになります。

EIGRPネイバーの発見
同じネットワーク上のEIGRPルータを探す
ネイバー間でEIGRPルート情報を交換
トポロジテーブル上のEIGRPルートを交換
最適ルートをルーティングテーブルに登録
トポロジテーブル上の最適なEIGRPルート(サクセサ)を選択
定期的にHelloパケットを送信
Helloパケットによってネイバーの状態を確認

EIGRPネイバーの発見

EIGRPは、OSPFと同じように、まずはネイバーを発見します。EIGRPのネイバーとは、同じネットワーク上の同じAS番号のEIGRPルータです。ネイバーを発見すると、そのネイバーとの間でEIGRPのルート情報を交換します。

ネイバー間でEIGRPルート情報を交換

EIGRPのルート情報はすべてトポロジテーブルで管理しています。ルータがEIGRPのルート情報を送信するときには、トポロジテーブルに登録します。そして、ネイバーから受信したEIGRPルート情報は、トポロジテーブルに格納します。EIGRPのルート情報は、RIPと同じようにネットワークアドレス/サブネットマスク+メトリックです。これは、EIGPRのルーティングアルゴリズムはディスタンスベクタがベースになっていることを表しています。また、ルート情報の送信について、RIPと同じようにルートのループを防止するためにスプリットホライズンがあります。ルート情報の出力インタフェースからは、そのルート情報を送信しません。


EIGRPルートの生成とスプリットホライズンについて、以下の記事をご覧ください。


最適ルートをルーティングテーブルに登録

トポロジテーブルのEIGRPルートから最適ルートを選出します。EIGRPでは、最適ルートのことを「サクセサ」と呼びます。サクセサをルーティングテーブルに登録して、IPパケットをルーティングできるようにします。そして、サクセサのバックアップルートとなる「フィージブルサクセサ」も選出します。

あるネットワークに対して、複数のルートが存在していたとしてもフィージブルサクセサが必ず選ばれるとは限りません。フィージブルサクセサになるための条件であるフィージビリティ条件を満足している必要があります。

サクセサやフィージブルサクセサ選出のアルゴリズムがDUALです。


DUALによってサクセサ、フィージブルサクセサを選出する仕組みは以下の記事をご覧ください。


定期的にHelloパケットを送信

いったん、ネイバー間でルート情報の交換が終わったら、あとは、定期的なHelloパケットの交換でネイバーが動作しているかどうかを確認します。この点もOSPFと似ている点です。Helloパケットを送る間隔をHelloタイマと呼び、Helloパケットが届かなくなってネイバーがダウンしたとみなす時間をホールドタイムと呼びます。Helloタイマとホールドタイムのデフォルト値は、インタフェースによって以下のように決まります。

インタフェースタイプHelloタイマホールドタイム
ブロードキャストメディア(イーサネットなど)5秒15秒
ポイントツーポイント(フレームリレー/ATMポイントツーポイントサブインタフェースを含む)5秒15秒
1.5Mbps以上の高速なマルチポイントインタフェース(ISDN PRI、SMDS、フレームリレー、ATMなど)5秒15秒
1.5Mbps以下の低速なマルチポイントインタフェース(ISDN BRI、フレームリレーなど)60秒180秒
表 インタフェースごとのHelloタイマとホールドタイムのデフォルト値

また、ネットワークの追加やダウンなどの変更があった場合は、トリガードアップデートとして、EIGRPのルート情報を送信します。

図 EIGRPの処理の流れ
図 EIGRPの処理の流れ

図では、R1からR2にEIGRPルートを送信する様子だけを表しています。R2からもR1へEIGRPルートを送信します。
R1が送信するEIGRPルートは、通常は、スプリットホライズンによって、192.168.1.0/24のルート情報だけになります。

EIGRPのパケットタイプ

EIGRPパケットは、IPヘッダで直接カプセル化します。IPヘッダのプロトコル番号は88です。また、EIGRP用のマルチキャストアドレスとして224.0.0.10が予約されています。宛先IPアドレスとして224.0.0.10を指定します。

図 EIGRPのカプセル化
図 EIGRPのカプセル化

宛先IPアドレスがユニキャストになることもあります。
ネットワーク上にEIGRPパケットを送り出すためには、イーサネットヘッダなどレイヤ2ヘッダも付加されます。

EIGRPでは、次の5つのパケットタイプがあり、EIGRPヘッダのOpcodeでパケットタイプがわかります。

  • Hello
  • Update
  • Query
  • Reply
  • ACK

Hello

Helloパケットは、ネイバールータを発見するために利用されます。ルータのインタフェースでEIGRPを有効にすると、そのインタフェースはEIGRPのマルチキャストグループ224.0.0.10に参加します。そして、224.0.0.010あてにHelloパケットを送信して、ネイバールータを探します。このHelloパケットの送信は定期的に継続して行います。定期的にHelloパケットを送受信することによって、ネイバールータが正しく動作しているかどうかの確認も行っています。Helloパケットによるネイバーの発見と維持は、OSPFなどのリンクステート型ルーティングプロトコルの特徴を取り入れた例です。

Update

Updateパケットは、EIGRPのルート情報をネイバーに通知するために利用します。ただし、このUpdateパケットは定期的に送信されるわけではありません。ネットワークに変更があった場合、その変更分のみをUpdateパケットでネイバールータに通知します。この点が、RIPやIGRPといったディスタンスベクタ型ルーティングプロトコルと異なっています。

Query

Queryパケットは、ネットワークに変更が発生し、フィージブルサクセサがない場合に、ネイバールータに対して代替ルートがあるかどうかを問い合わせるために利用します。Queryパケットはマルチキャストアドレス(224.0.0.10)、もしくはユニキャストで送信されます。

Reply

Replyパケットは、Queryパケットに対する応答として送信されます。Replyパケットのあて先はQueryパケットを送信したネイバールータのユニキャストアドレスです。

Ack

Ackパケットは、データがまったく含まれていないHelloパケットです。Ackパケットは必ずユニキャストで送信されます。

これら5つのパケットの配送は、Reliable Transport Protocol(RTP)によって管理されています。RTPによって、EIGRPパケットの配送を保証し、パケットは順序どおりに配送されることになります。パケットの配送の保証は、Ackパケットによる確認応答で行い、パケット到達の順序は、パケットに含まれているシーケンス番号によって管理しています。

上記のEIGRPパケットは、明示的にAckパケットによる確認応答を必要とする「高信頼性パケット」と明示的な確認応答を必要としない「無信頼性パケット」に分かれています。その分類は、次の表の通りです。

高信頼性パケット無信頼性パケット
Update Query ReplyHello Ack
表 EIGRPの高信頼パケットと無信頼パケット

高信頼性パケットである、Update、Query、Replyパケットは定期的に送信されるわけではありません。そのため、これらのパケットが正しく相手に送信できたかどうかを確認するためにAckパケットによる確認応答が必要になるわけです。Helloパケットは、定期的に送信されるので、特に明示的に確認応答の必要はありません。

高信頼パケットをマルチキャストして、あるネイバーからAckパケットが返ってこないときには、ユニキャストでそのパケットを再送信します。このユニキャストによる再送信を16回行っても、Ackパケットが返ってこない場合には、そのネイバーはダウンしたとみなします。マルチキャストからユニキャストに切り替えての再送信の時間は、マルチキャストフロータイマー(multicast flow timer)によって決まります。ユニキャストによる再送信の間隔は、再送信タイムアウトタイマー(retransmission timeout)によって決まります。

図 高信頼性パケットの再送信
図 高信頼性パケットの再送信