![ルーティングテーブルの「メトリック」列の解釈](https://rvso.com/image/1518704/%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E3%80%8C%E3%83%A1%E3%83%88%E3%83%AA%E3%83%83%E3%82%AF%E3%80%8D%E5%88%97%E3%81%AE%E8%A7%A3%E9%87%88.png)
ルーティング テーブルに表示される出力、特に「メトリック」列について少し混乱しています。
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 wlan0
172.16.35.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
192.168.0.0 0.0.0.0 255.255.255.0 U 9 0 0 wlan0
192.168.82.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
マニュアル ページによると、メトリックはターゲットまでの「距離」を示します。私は「ターゲット」が正確には何なのか少し混乱しました。私はそれが私のルーターだと想定しました (ゲートウェイ 0.0.0.0 に行き、そこから 192.168.0.1 にある私のルーターに行きます)。したがって、メトリックはルーターまでの 1 ホップであると予想しました。しかし、9 です。なぜこんなに高い数値なのでしょうか。
答え1
マニュアルページによると、メトリックはターゲットまでの「距離」を示します。
メトリックはルーターまでの 1 ホップであると予想していました。しかし、9 です。なぜこんなに高い数値なのでしょうか?
このmetric
フィールドにはさまざまな意味があります。
メトリック フィールドは、ルートのコストを示します。特定の宛先ネットワーク ID へのルートが複数存在する場合、メトリックを使用してどのルートを取るかを決定します。メトリックが最も低いルートが優先ルートです。一部のルーティング アルゴリズムでは、複数のルートが存在する場合でも、ルーティング テーブルに任意のネットワーク ID へのルートを 1 つだけ保存します。この場合、ルーターはメトリックを使用して、ルーティング テーブルに保存するルートを決定します。
メトリックは、ルートの優先順位を表現するさまざまな方法を示します。
ホップ数。
一般的なメトリック。ネットワーク ID へのパス内のルーター (ホップ) の数を示します。
遅れ。
パケットがネットワーク ID に到達するまでに必要な時間の測定値。遅延は、パスの速度 (ローカル エリア ネットワーク (LAN) リンクは遅延が低く、ワイド エリア ネットワーク (WAN) リンクは遅延が高い) またはパスの輻輳状態を示すために使用されます。
スループット。
パスに沿って 1 秒あたりに送信できる有効なデータ量。スループットは必ずしもリンクのビット レートを反映するものではありません。非常に混雑したイーサネット リンクは、使用されていない 64 Kbps WAN リンクよりもスループットが低くなる場合があります。
信頼性。
パスの安定性の尺度。リンクの種類によっては、他のリンクよりもリンク障害が発生しやすいものがあります。たとえば、WAN リンクでは、専用回線の方がダイヤルアップ回線よりも信頼性が高くなります。
ソースルーティングテーブル
答え2
これについてコメントするのは、既存の回答は説明的には技術的には正しいものの、デバッグやエンジニアリングの目的に役立つ重要な具体的な詳細と値が欠けているためです。その一部は Windows 10 21H2 で自分でテストする必要がありましたが、これは、新しいバージョンの Windows で変更された一部の Windows 固有の組み込みデフォルトを除いて、ほぼすべての Windows バージョンに当てはまるはずです (これについては後で詳しく説明します)。
ちょっとしたメモ: デバイス (ルーター/スイッチ/IoT など) に組み込まれている多くの OS を含む他の OS では、多くの場合、単一のメトリックを使用します (Windows のように、ゲートウェイとインターフェイスのメトリックを合計したものとは異なります)。ただし、最も低いルート メトリックが常に優先されるという基本ルールは、私がこれまで見た限りではどこでも一貫しています。
初心者向け:自動メトリック値のポイントは、理論的には、宛先へのルートが 2 つ以上ある場合に、追加の構成なしで「最適な」ルートが可能な限り頻繁に選択されるようにすることです。他の回答に示されているマニュアル ページの定義が非常に漠然としていて幅広いのは、選択した値を好きなように構成できるため、どの OS/エンジニア/開発者/システムでも、自分の定義した「最適な」ルート/リンクが通常は優先される (つまり、最も低い値になる) ように、好きなように値を選択できるためです。とはいえ、通常のほとんどのアプリケーションでは、「最適」は、リンク速度が定期的に変化する接続 (主にワイヤレス リンク) に対応するために、生のリンク速度に基づいて範囲で値を割り当てることによってほぼ常に決定されます。
ワイヤレス リンクのリンク速度が異なる範囲にまたがるときに、インターフェイス メトリックが一貫して/定期的に更新されるかどうかはわかりませんし、テストもしていませんが、何らかのヒステリシス/スティッキー性があるか、リンク アップ時にハードセットされて、別のリンク (通常はラップトップなどの同じマシンの有線接続) との優先順位が急速に入れ替わるのを防いでいるだけだと思います。
Windows の基本的なルーティング メトリック
ルートはルーティングテーブルから選択され(コマンドラインから「route print」で確認)、インターフェースメトリックそしてゲートウェイメトリック「アクティブ ルート」には、合計された機能メトリックが表示されます。
コントロールパネルを確認せずにこれらの値を分離して表示するには、「実行」->「netsh int ipv4 show add」を使用します。
これら2つのメトリックは、ネットワークカードのプロパティ->詳細->「IPv4」または「IPv6」で編集できます。これは、処理するルート/トラフィックのセットによって異なります(実行->「ncpa.cpl」で直接アクセスできます。ないフォームオーバー機能設定アプリを使用します)。「デフォルトゲートウェイ」と「インターフェースメトリック」の下に個別のメトリックが表示されます。
Windows の自動メトリック値 (バージョンによって異なります)
インターフェースメトリック:
パーこれよく見かける Microsoft のページには、リンク速度に応じてインターフェイス メトリックを設定するために使用される内部テーブルがあります。現在、XP SP2 以前の値 (推測)、XP SP2 から Windows 8.1 までの値、そしてワイヤレス リンクと有線リンクの Windows 10 以降の値 (別のテーブル) の順にリストされています。サーバー バージョンは、内部の多くの部分と同様に、同等のコンシューマー リリースとほぼ同一です。
- 例: 1Gbit 標準イーサネット有線リンク、Win10 -> 4 番目の表 (上記)、「200 Mb 以上 2 Gb 未満」は、インターフェイス自動メトリック 25 です。
ゲートウェイメトリック:
ゲートウェイ メトリックは、デフォルトが明確でなく、簡単な検索でも文書化されていないため、少し扱いにくい場合があります。ここでは、リンクが動的 IP を使用するか静的 IP を使用するかによって設定されます。他の条件もあるかもしれませんが、私が見つけたのはこれら 2 つだけです。
テストの結果、デフォルトの静的メトリックは256で、デフォルトはダイナミック/DHCPメトリックは0です。これらは上記のインターフェースメトリックに追加され、上記のリンクされた表では256がどの自動インターフェースメトリックよりも大きい/悪いことがわかります。すべてのデフォルト/自動設定が使用されている場合、動的にアドレス指定されたリンクは常に静的にアドレス指定されたリンクよりも優先されます。。
実践における基本的な考慮事項
例: 静的 IP を持つサーバーまたはその他の Windows デバイスを管理していて、たとえば 2 番目の NIC 上の不正な/テスト/2 番目のルーターが突然そのルーターを介してデバイスのトラフィックをプルする (サーバーがオフラインになる可能性がある) ことを望まない場合は、ゲートウェイとインターフェイスの両方のメトリックを、他の自動割り当てがそれを上書きする可能性がないほど低く強制的に設定します。そのルート/NIC を常に使用したい場合は、それぞれ 1 と 10 を使用するか、1 と 1 のみを使用します。一部のものを極端な値にハード設定すると、後で問題が発生することがあるため、これを行ったことを文書化してください。
起こりうる不具合/バグ
この小さなドキュメントプロジェクトを始める前に、セカンダリNICを設定しました。インターフェースメトリックを100に設定して、ネットワークラボで使用していたのですが、1週間か2週間後、通常の使用をしながら戻ってみると、インターフェースがゲートウェイメトリックも 100 に設定されていました... なぜそうなったのか、または稀なバグだったのかはわかりませんが、すぐに静的に設定して戻すと (DHCP を使用したため、NIC プロパティに設定するゲートウェイがありませんでした)、問題は修正され、問題は再発していません。