【CCNA】ルーティングについて

# はじめに
ルーティングについてまとめてみた

# ルーティング種類
* ダイナミック、スタティック

## ダイナミックルーティング種類
* IGP
  - AS内部
* EGP
  - AS間で使われるプロトコル

## IGP
* OSPF
  - リンクステートアルゴリズム
* RIP
  - ディスタンススベクターアルゴリズム
* IS-IS
* CISCO独自のEIGRP

## EGP
* BGP
  - バスべくターアルゴリズム

# 異なるNWへの通信
例えばルーティング設定していないL3スイッチの場合.
IPは設定済み

同じNWのホストからは普通にpingが通る
異なるNWからのpingは到達しても、L3でルーティング設定がないのでどこに返してよいかわからず、戻りの通信がなくなる

**異なるNWへの通信はその対象のNW機器にもルーティング設定(GWやスタティックルート)が必要になる**
同一の宛先ネットワークに対する経路情報を複数のルーティングプロトコルで学習している場合は、AD値の低いルーティグプロトコルで学習した経路情報を使用します。

## L3ルーティング設定
ip routing // ルーティング有効化
ip route 192.168.70.8 255.255.255.248 192.168.70.10


# クラスフル
8,16,24ビットで固定的にネットワーク部を決めること

**クラスフルルーティングプロトコルの場合、このクラスフルで自動集約してルートを通知する**

## メジャーネットワーク
クラスA、B、Cのアドレスクラスに従ったネットワークアドレスを指しています

# クラスレス
固定ではなく、ネットワーク部を決めることができる

# 不連続サブネット
https://www.infraexpert.com/study/routing6.html

* 異なるクラスフルネットワークにより分断されているサブネット
* Ripなど、クラスフルで集約してしまうルーティングプロトコルだと問題が発生してしまう。


# ルーティングとは
送信元から宛先までの最適な経路を選択する仕事。**どのインターフェースに出力するかを決定すること**。
ルータはルーティングにより最適な出力インターフェースを決定して、それに基づいてパケットを**フォワーディング**する

## ルーティングテーブル
* ネットワークの地図
* 常に正しい状態でないといけない

## コンバージェンス = 収束
* **NW内のすべてのルータが最新の情報を持っている状態**
* コンバージェンスの時間は当然短いほうがよい。ルーティングプロトコルによって異なる

## 経路集約
* ルーティングテーブルの行を少なくする方法
* IFの先にNWが複数ある場合、経路をまとめて一つにする。共通ビットで集約。

## アドミニストレーティブディスタンス(AD)
一つの宛先NWに対して複数のルートがある場合、優先度でどれを選択するか決定する

**同一の宛先ネットワークに対する経路情報を複数のルーティングプロトコルで学習している場合は、AD値の低いルーティグプロトコルで学習した経路情報を使用します**

直接接続
スタティックルート
EIGRP集約
EBGP
EIGRP
OSPF
IS-IS
RIP1,2



## なぜルーティングが必要か
**知っているネットワーク(自ホストのIFのNW)宛**だと、単純に自ホストのIFからフォワーディングすればよいが、**知らないネットワーク宛**の場合、どのIFから出力すればよいかわからない。したがってルーティングが必要


# ASとは
* ISPなどのインターネットの構成単位。インターネットはAS同士が結ばれてできている。
* 世界で一意なAS番号を持つ
* 1-65535はグローバルAS番号。64512-65535はプライベートAS番号でASの中だけで使われる番号

# IGPとEGP
## IGP
* AS内部で使われるプロトコル
* OSPF
  - リンクステートアルゴリズム
* RIP
  - ディスタンススベクターアルゴリズム
* IS-IS
* CISCO独自のEIGRP


## EGP
* AS間で使われるプロトコル
* BGP
  - バスべくターアルゴリズム

# IGP
# RIP ver1
* クラスフルルーティングプロトコル
* 古くから使われてきた。ホスト数が数十のちょっとしたNWならよい選択となりえる
* 経路のやりとりを30秒に一回行うので、収束が遅い
* 削除さらた情報は180秒アップデートされなかったら、削除されたとする

## ディスタンスベクター型アルゴリズム
* 経由するルータをホップ数を距離として考える、最もホップ数のすくない経路で送る
* RIPのめとりっくは最大15まで(ルーティングループ防止)
* **RIPが有名**

## ルーティングループ
A-B-(削除されたNW)

Bの先のNWが削除されBのルーティングテーブルからなくなり、Aに通知される前に、AからBに削除されたNW情報を通知され、Aの先にNWがあるんだとBが思い込み、メトリックに1足してルーティングテーブルに追加。
そしてその情報をAに通知して、Aがメトリックを１追加してルーティング手＾ブルを更新。それを15になるまで繰り返す

### スプリットホライズン
ルーティングループを防止する

* 経路情報を受け取ったIFからはその情報を送らない

### ホールドダウン
削除された経路をホールドダウン状態にする。Aからアップデート情報を受け取っても、ホールドダウン中はこれを無視

# ダイナミックルーティング
https://www.infraexpert.com/study/ospfz1.html

大きく2つのタイプのルーティングプロトコルがあります。1つはディスタンスベクタ型ルーティングプロトコルです。もう１つはリンクステート型ルーティングプロトコ
リンクステート型ルーティングプロトコルではルーティングテーブル作成のために次のステップを踏みます。

* Helloパケットを送信し合い、隣接ルータとネイバー関係を確立し、ネイバーテーブルを作成。
* 全体のネットワーク構成を知るために、そのネットワーク上の全てのルータから情報（LSA）を収集。
* その収集したLSAをトポロジテーブルに格納する。そして、その情報からトポロジマップを作成。
* そのトポロジマップから、SPFアルゴリズムによりSPFツリーと呼ばれるネットワーク構成図を作成。
* そのSPFツリーから最短経路を計算し、最短パスをルーティングテーブルに登録。


# OSPF
* **リンクステート型の代表的なプロトコル**
* IETFの標準IGP
* Ripの後継
* version2
* リンクステートをやり取りして、ネットワークの構成をしることにより、ルーティングテーブルを作成する
* NW構成が変更したときに、早い収束性がり、ISP内部でもよく使われている
* ・30分に1度 LSDB（Link-State Database:OSPFで使用するデータベース）を同期させる

## リンクステート
* Ripのディスタンスベクタ型の欠点をみて作らている
* ルータが接続しているどのリンクにどのように接続しているか、という情報がのっている
* **各ルータは自分が接続しているネットワークだけを他に通知する**
* 全ルータに通知。よってルータはネットワークの構成図を構築することができる
* 変更されたIFの情報だけを伝える

**リンクステート交換 - DB作成 - SPFアルゴリズム(SPFツリーの作成) - 最短のルーティングテーブル作成**

## ルータID
* 各ルーターを識別する一意なID

## ルータID
* 1 router-idコマンドで設定。2 ループバックIFの中で最大のIP。3 アクティブなIFの中で最大のIPがDR/BDRに選出される
* OSPF を起動しているルータ (OSPF ルータ) を一意に識別するための ID で、OSPF ルータの名前に相当し、ネットワーク内の OSPF ルータはルータ ID によって各ルータを識別します

## DRとBDR(代表ルータ)
ネットワークに変更があるとDRとBDRだけに通知。DRがもしくはBDRがネットワーク全体に通知する

プライオリティ値、またはルータIDの最も高いルータ
* プライオリティ値
  - ip ospf priority プライオリティ値
  - **デフォルト1**
* DR 
  - LSAの交換を取りまとめる
* BDR
  - DRのバックアップ
* IFにプライオリティ値を設定することで選出される。最大がDR。二番目がBDR
* OSPFプロセスが起動のタイミングで選出。あとでプライオリティ値が小さいDRが参加しても、今のDRがダウンしないとDRにはなれない
* DRとBDRはネットワークごとに選出される



## メトリック = コスト
* 100/帯域幅(単位:Mbps)
  - 10Mbpsの帯域だと10,100Mbpsだと1 、1Gだと0.1だけど1
  - **なのでGになると、全部１になるので、手動で設定する必要あり**
  - 100Mと1Gがおなじになり、そのため、どちらも同コストになり PCとサーバで通信を行う際はロードバランスされ、帯域幅の狭い（100Mbps）方にもトラフィックが流れることになります。
  - auto-cost reference-bandwidth 1000で１Gは1、100Mは10にするなどして基準値を変更することもできる
  - 管理者がIFに設定する
* 宛先NWとの距離を表すパラメータ
* ルーティングテーブルにはコストを加味した最短コストの経路が追加される

## イコールマルチパス
* 同じコストの場合、複数の経路を選択して、ロードバランスさせる
* ルーティングテーブルには２つ経路がある

## ロンゲストマッチ(最長一致の規則)
ルーティングテーブルとマッチするNWアドレスが複数ある場合は**プレフィックス長が長い方を選択する**

## ネイバー関係
Helloパケットを交換して、ネイバー関係を確立する。DRとネイバー関係を確立

## DR
* ネットワークに変更があった場合、DRとBDRだけに通知
* DRはネットワーク全体に通知。DRから通知されない場合、BDRが通知

## OSPFエリア
ネットワークが大きくなると、SPPツリーの計算が大変になる、そこでエリアに分割する

* NWを流れるリンクステートやDBが大きくならないように、ネットワークをエリアに分割。各エリアのルータは自分のエリア内だけを把握する地図をもつ
* マルチエリアOSPFにする（複数のエリアを使用する）と、他エリアのルーティング情報の集約が可能になります。
* また障害が発生した場合でも、障害発生時のSPF計算はエリアごとに行われるため影響を1つのエリア内だけに留めることができるので、コンバージェンスも早くなります。
そのため、大規模なOSPFネットワークではマルチエリアOSPFが利用されます。

### ABR(エリアをつなぐルータ)
* ABRはエリアの情報を収集して、他のエリアに伝えたりする。しない場合もある。
* 他ABRから入手した他エリアの情報をエリア内部へ配布する

エリア内のルーターを内部ルータと呼ぶ

### バックボーンエリア
全てのエリアが接続されるOSPFの中枢のエリアです。各エリアは、必ずエリア0（バックボーンエリア）に接続しなければならないというルールがあります。バーチャルリンク（Virtual link）という仮想のリンクを介してバックボーンエリアに接続させることもできますが、基本的にバックボーンエリアに接続させることになっています。
http://atnetwork.info/ccnp/multi_area_ospf18.html


# コマンド
## OSPF確認コマンド
OSPFを確認するコマンドには
「show ip ospf」
「show ip ospf neighbor」
「show ip ospf interface」
「show ip ospf interface brief」

## passive-interfaceコマンド
特定のルーティングプロトコルのルータコンフィグレーションモードで設定します。
設定を行うと、そのルーティングプロトコルのアップデートやHelloパケットの送信を停止します。（受信は行う）

## default-information originateコマンド
https://xtech.nikkei.com/it/article/COLUMN/20070426/269726/

デフォルトルートを広告できます。

## ネットワークタイプの変更
ip ospf network point-to-point

##【OSPFの経路学習プロセス】
・OSPFルータはHelloパケットを送信してネイバーを検出し、ネイバーテーブルを作成する。
・検出したネイバーに、マルチキャストでLSU（LSAを含むパケット）を送信する。
・LSUを受信したルータは、自分のネットワークに関する詳細な情報を保存したLSDBを作成する。（同じエリア内のルータは、同一のLSDBを保持）
・続いて、ルータはLSDBを元に、ダイクストラアルゴリズム（SPFアルゴリズム）により宛先ネットワークへの経路の計算を行い、最短経路を選択する。
・最短経路を選択する際のメトリックにはコスト（10の8乗/帯域幅で表される値）を使用。コストの値が最小の経路がルーティングテーブルに登録される。
・コンバージェンス後は、ネイバーにHelloパケットを定期的に送信し、リンクがアクティブであることを確認し続ける。（キープアライブ）
・ネットワークに変更があった場合はトリガーアップデートを使用して、変更情報だけをフラッディングする。（差分アップデート）
・各ルータは30分ごとにLSAを送信して情報の維持を行う。

## OSPFのステート
OSPFを起動したルータが隣接関係を確立して、コンバージェンスするまでのステートの流れは以下になります。
「DOWN→INIT→2WAY→EXSTART→EXCHANGE→LOADING→FULL」

DOWN・・・Helloを受け取っていない最初の状態
INIT・・・Helloパケットを受信し、相手を認識
2WAY・・・お互いに認識した状態
EXSTART・・・DR、BDR決定（選出）済み
EXCHANGE・・・データベースの交換
LOADING・・・詳細情報確認
FULL・・・コンバージェンス（最適経路の計算が完了した状態）
# EIGRP
* Cisco独自
* ディスタンスベクタとリンクステートのハイブリット
* 複合メトリック


# ルーティング
###【最適経路の選択基準】
最適経路は以下の順で選択されます。
1.ロンゲストマッチ（最長一致）
2.AD値（アドミニストレーティブディスタンス値）
3.メトリック

### ロードバランシング
ロードバランシング（負荷分散）とは、ルーティングプロトコルが、同一の宛先へのメトリックが同じ経路を複数学習した場合、この複数の経路を使用してパケットを配分してルーティングを行うことを言います。
メトリックが同じ複数の経路でロードバランシングを行うことを**「等コストマルチパスロードバランシング」**と言い、一方、メトリックが異なる複数の経路でロードバランシングを行うことを**「不等コストマルチパスロードバランシング」**と言います。

EIGRP/OSPF/RIPといったルーティングプロトコルではデフォルトでロードバランシングが有効になっており、同じ宛先への同じメトリックを持つ経路は自動的にロードバランシングの対象となります。
スタティックルーティングでも、異なるネクストホップを持つ同じ宛先への経路を手動で複数登録することでロードバランシングを実現することは可能です。

###【ロンゲストマッチ】
**ロンゲストマッチは、ルーティングテーブルにある宛先ネットワークのうち、プレフィックス長がより長い（詳細な）経路を優先する規則です**

ロンゲストマッチは、ルーティングテーブルにある宛先ネットワークのうち、プレフィックス長がより長い（詳細な）経路を優先する規則です。
例）
ルーティングテーブルに以下3つの経路があった場合
・経路1：0.0.0.0/0（デフォルトルート）
・経路2：172.16.0.0/16
・経路3：172.16.2.0/24
宛先「192.168.1.1」宛のパケットを受け取った場合、経路1にのみ該当するので経路1を使用します。
宛先「172.16.1.1」宛のパケットを受け取った場合、経路1と経路2に該当しますが、ロンゲストマッチによって経路2を使用します。
宛先「172.16.2.1」宛のパケットを受け取った場合、全ての経路に該当しますが、ロンゲストマッチによって経路3を使用します。

【201.10.0.7】と【202.10.0.254】は、デフォルトルートの他に該当する経路情報がないので、デフォルトルートにパケットが転送されます。

【200.10.1.2】【200.10.3.8】【200.10.4.2】はルーティングテーブルの「200.10.0.0/16 [1/0] via 172.168.10.1」にのみ該当します。プレフィックス長が/16ですので、先頭から16ビットまで一致していれば、その経路情報が使用されます。
今回の場合ですと、200.10まで一致しているパケットです。
よって、これらのパケットはNextHopである172.168.10.1にパケットが転送されます。

問題は【200.10.0.22】と【200.10.0.53】です。これはルーティングテーブルの「200.10.0.0/16 [1/0] via 172.168.10.1」と「200.10.0.0/24 [1/0] via 172.168.20.2」の両方の経路情報に該当します。
これらのパケットは、先頭16ビットは200.10ですし、先頭24ビットは200.10.0です。このような場合は、プレフィックス長がより長い経路を優先するという「ロンゲストマッチの規則」に従ってパケットを転送します。
つまり、これらパケットは/24の「200.10.0.0/24 [1/0] via 172.168.20.2」の経路情報を使用しますので、パケットはNextHopである172.168.20.2に転送されます。

###【AD値】（値が低い方が信頼性が高い）
AD値（アドミニストレーティブディスタンス値）は、ルーティングプロトコルに対する信頼性を表す値です。
同一の宛先ネットワークに対する経路情報を複数のルーティングプロトコルで学習している場合は、AD値の低いルーティグプロトコルで学習した経路情報を使用します。

なにかの障害でスタティックルートが消えたら、例えば動的ルーティングの値が登録されるようになる。

**ルータは信頼度の高いルーティングプロトコルからの情報だけをルーティングテーブルに登録します。この信頼度を決めるための値がアドミニストレーティブディスタンス。**
https://www.infraexpert.com/study/routing7.html

## フローティングスタティック
フローティングスタティックとは、ダイナミックルーティングで経路情報が得られなくなったときだけスタティックルートを有効にする手法です。
具体的には、ダイナミックルーティングのアドミニストレーティブディスタンス（AD）値よりも高いAD値をスタティックルートに設定します。
例：(config)#ip route 192.168.1.0 255.255.255.0 10.1.1.1 130
※上記の例では、AD値を「130」にしています

## 複数のルータを使ってロードバランシングを行う
ロードバランシングを行う場合は以下のように1つの宛先に対して複数のネクストホップが表示されます。

## show ip route
でみえるステータス

L＝自身に設定しているアドレス
C＝直接接続
S＝スタティックルーティング
R＝RIP
O＝OSPF

## スタティックルーティングの設定
ip route 宛先 転送先 AD値 permanent

### [宛先の指定方法]
宛先の指定方法には「ホストルート」「ネットワークルート」「デフォルトルート」の3種類があります。

「宛先ネットワークとサブネットマスク（プレフィックス長で表記）」 [アドミニストレーティブディスタンス/メトリック]

デフォルトルート
ip 0.0.0.0 0.0.0.0 IP

【最適経路の選択基準】
最適経路は以下の順で選択されます。
1.ロンゲストマッチ（最長一致）
2.AD値（アドミニストレーティブディスタンス値）
3.メトリック

IPアドレスを指定する場合はネクストホップとなる「相手のIPアドレス」を指定する必要があります。

[転送先の指定方法]
転送先の指定方法には「直接接続」「再帰」「完全指定」の3種類があります。

* 直接
  - 出力IFのみ
* 再帰
  - ネクストホップのIP
* 完全指定
  - 出力IFとネクストホップのIP
 
# EIGRP
* ディスタンスベクタ型とリンクステート型の両方の利点を備えている
* Cisco製品だけで構築するネットワークでは、EIGRPが最適なダイナミックルーティングプロトコル
* デフォルトのメトリック
なお、K値と呼ばれる値を参照することでメトリック値が算出されます。デフォルトでK値は
　以下であることから、**EIGRPのメトリックは「帯域幅＋遅延」**となります。

　K1（帯域幅）= 1　　K2（負荷）= 0　　K3（遅延）= 1　　K4（信頼性）= 0　　K5（MTU）= 0

https://www.infraexpert.com/study/eigrpz1.html


EIGRPの主な特徴は以下の通りです。
・Cisco独自のプロトコル
・クラスレスルーティングプロトコルで自動集約もサポート
・自身が属しているAS番号内の経路をInternal（内部）、他のAS番号に属している経路やEIGRP以外のルーティングプロトコルで学習した経路をexternal（外部）として識別
・拡張ディスタンスベクタ型ルーティング（別名：ハイブリッドルーティング）
・「ネイバーテーブル」「トポロジテーブル」「ルーティングテーブル」の3つのテーブルを保持
・ルーティングアルゴリズムは「DUAL」
・メトリックには、帯域幅・遅延・信頼性・負荷を基に計算する複合メトリックを使用
・メトリックが等しくない経路での負荷分散が可能な「不等コストロードバランシング」をサポート
・IPだけでなく Novell IPXやAppleTalkのルーテッドプロトコルもサポート

【複合メトリック】
EIGRPは最適な経路を選択するために、帯域幅・遅延・信頼性・負荷を基に計算する複合メトリックを使用します。それぞれの意味は以下の通りです。
・帯域幅：宛先ネットワークに到達するまでに経由するリンクの最小帯域幅（kbps単位）
・遅延：宛先ネットワークに到達するまでに経由する各インターフェースの遅延（delay）の合計（10マイクロ秒単位）
・信頼性：宛先ネットワークまでのリンクの信頼性。ビットエラーなどが発生すると信頼性は下がる（最も信頼できるものが255）
・負荷：宛先ネットワークまでのリンクでのトラフィック量。トラフィックが高いと負荷が上がる（最も負荷が低いものが1）

【EIGRPが保持する3つのテーブル】
ネイバーテーブル：EIGRPのネイバー関係を確立しているルータの一覧表
トポロジテーブル：EIGRPで学習した全経路情報を保持するテーブル
ルーティングテーブル：トポロジテーブルからサクセサルートを抽出したテーブル

【EIGRPでネイバー（隣接）関係を構築する条件】
・ルーターが同じ自律システム（AS）に所属している
・メトリックの計算値（K値）が一致している
・認証情報（キーIDとパスワード）が一致している
・Helloパケットを送受信するインターフェースが同一のサブネットに属している（前提条件）
・Helloパケットを送受信するインターフェースでEIGRPが有効になっている（前提条件）

【FDとRD】
FD(Feasible Distance)：自ルータから宛先ネットワークまでの合計メトリック
RD（Reported Distance）：ネイバールータから宛先ネットワークまでの合計メトリック（ネイバーが教えてくれたメトリック）
なお、RDをAD(Advertised Distance)と呼ぶこともあります。

【サクセサとフィージブルサクセサ】
EIGRPの最適経路のネクストホップを「サクセサ」といいます。サクセサは宛先ネットワークまでのFDが最も少なくなるネクストホップです。
サクセサのFDよりも小さいRDを通知するネイバを「フィージブルサクセサ」といいます。フィージブルサクセサの条件である「FD > RD」を満たす経路はルーティングループが発生しないことが保証されるので、フィージブルサクセサはバックアップルートや不等コストマルチパスのネクストホップとして使われます。

【サクセサルート】
サクセサ経由の経路情報はルーティングテーブルに載ります。この経路情報を「サクセサルート」といいます。
なお、サクセサルートを「サクセサ」と呼ぶこともあります。

アドバタイズドディスタンス	　
AD : Advertised Distance	　ネイバールータから宛先ネットワークまでのメトリック値。
フィージブルディスタンス	　
FD : Feasible Distance	　ローカルルータから宛先ネットワークまでのメトリック値。

ルーティングテーブルに格納される最適ルート (サクセサ) は、トポロジテーブルで最小のFDを持つルート

サクセサのバックアップルート (フィージブルサクセサ) になれるのはサクセサのFD (2000) よりも小さいADを持つルートです