距離ベクトルルーティング:表が収束する
各ノードが「自分の距離表」を隣に教え合うだけで、ネットワーク全体の最短距離が反復で決まる様子を観察します。D_x(y) = min_v ( c(x,v) + D_v(y) )
距離ベクトル方式では、各ルータは隣接ノードまでのコストと、自分が知っている各宛先までの最短距離(距離ベクトル)だけを持ちます。
定期的に隣へ自分のベクトルを送り、受け取った側は ベルマン・フォードの更新
ダイクストラ法が「全体を見て一発で最短経路を確定する」のに対し、ここで見るのは分散・反復・隣接交換という収束のダイナミクスです。リンクを切ると count-to-infinity(無限カウント) も再現できます。
定期的に隣へ自分のベクトルを送り、受け取った側は ベルマン・フォードの更新
D_x(y) = min_v ( c(x,v) + D_v(y) ) で表を直します。これを繰り返すと、誰も全体地図を知らないのに表は正しい最短距離へ収束します。ダイクストラ法が「全体を見て一発で最短経路を確定する」のに対し、ここで見るのは分散・反復・隣接交換という収束のダイナミクスです。リンクを切ると count-to-infinity(無限カウント) も再現できます。
2
1
7
3
表の更新があったセルは黄色で点滅します。
∞ は「到達不能(または更新待ち)」を表します。交換ラウンド数
0
状態
未収束
直近で更新されたセル
—
最大距離(∞検出)
—
ネットワーク(コスト付きリンク)
各ノードの距離ベクトル表(行=宛先, 列=距離 / 経由する隣接)
D_x(y) = min over neighbors v of [ c(x,v) + D_v(y) ]
いま何が起きている?
ここがポイント
- 隣接交換だけで収束 ── 各ノードは隣のベクトルと自分のリンクコストから
min(c+D)を取るだけ。全体地図は不要。 - 反復回数 ≒ ネットワークの直径 ── 情報は1ラウンドで1ホップずつ伝わる。遠い宛先ほど確定が遅れる。
- count-to-infinity ── リンク切断後、古い情報が残ると距離が 1 ずつ増え続ける「悪い知らせは伝わるのが遅い」現象が起きる。
- スプリット・ホライズン ── 「ある宛先への経路を教えてくれた隣には、その宛先の距離を返さない」ことでループ起因の∞カウントを抑制できる。