前話で、宛先を指す番号は配り終えた。専用の配布役を立てる代わりに、すでに地図を網じゅうへ配っている仕組みにその番号も載せて、すみずみまで届けた。番号は、もう全ルータの手元にある。
ところが、いくつかのルータの出力を並べて見比べたとき、手が止まる。宛先は同じ、配られた番号も同じはずだ。それなのに、実際に荷札へ載っている値が、こちらのルータとあちらのルータで、まるで違う数字になっている。
念のため到達性を確かめると、届いている。荷物はちゃんと宛先まで運ばれている。届いているのに、荷札の値だけを追っても、どの宛先へ向かう荷物なのかが一目で読めない。同じ宛先なら同じ値のはずではないのか。番号は配ったはずなのに、なぜ値が揃わないのか。


同じ番号なのに荷札の値が違う。だとすると、番号と、荷札に実際に載る値は、同じものではない。その間に、何かが一つ挟まっている。
揃っていないのは番号ではない。番号から値を作るときに、各ルータが足している起点のほうだ。
番号は、実際に載る値そのものではなく、箱の中の位置
宛先を指す番号は、荷札にそのまま載る値ではない。配られているのは、共通の箱の何番目か、という位置のほうだ。
箱の中の位置は、先頭を起点として、そこから数えた何番目かで表す。先頭そのものを指すなら位置は 0、そこから一つ先なら 1、というふうに、起点を 0 として数える。番号が 1 から始まるわけでも、番号に何かを足してから渡すわけでもない。番号は、箱の先頭からの距離だ。
その位置を実際の荷札の値へ変えるのは、受け取った各ルータのほうだ。各ルータは、その宛先へ向かう方向の箱の起点を見て、起点にその位置を足す。箱がひとつながりの、いちばん単純な場合なら、これは「起点に番号を足す」だけの足し算になる。位置が 0 なら起点そのものが値になり、位置が三つ先なら起点から三つ先の値になる。同じ番号でも、起点が違えば、足し算の答えは変わる。番号は箱の中の位置でしかなく、値そのものを抱えてはいない。値は、起点と組み合わさって初めて決まる。
なぜ、番号そのものを直接配らず、わざわざ位置だけを配るのか。番号と実際の値を最初から同じものにしてしまうと、網全体でどの値をどの宛先に使うかを、全員で取り合わせる手間が残る。位置だけを配る形にすれば、配るものは「箱の何番目か」に絞れて、実際の値は各ルータが手元の起点に足して自分で決められる。配るものは軽くなる。その代わりに、各ルータが持つ箱の起点という、もう一つの前提が表に出てくる。見えている値だけを並べて比べる前に、その値がどの起点から作られたものかへ目を戻すことになる。
この、番号が中に入っている共通の箱を、SRGB、あるいは label block と呼ぶ。番号の共通の箱、と読み替えてもいい。番号の共通の箱は、実際の荷札の値の起点をそろえる対象であり、本来は各ルータがローカルに決めるものだ。出力の表で値がルータごとに違って見えていたのは、番号が違っていたからではなく、起点に足した結果が違っていたからだった。
番号の共通の箱は、本来は各ルータが自分で決めるローカルなもの
「共通の箱」という言葉だけを見ると、網のどこかに一つ箱があって、全ルータがそれを共有しているように感じる。だが、そうではない。
この箱は、各ルータが自分のラベル空間の中で、自分のために取り分けた持ち物だ。網のどこかに置かれた共有の箱を全員で覗いているのではなく、ルータの数だけ箱があって、それぞれが自分の箱の起点を自分で決めている。名前に共通とついていても、起点が自動で配られて一つに揃うわけではない。
だから、各ルータが手元で自由に起点を決めれば、起点はばらばらになりうる。同じ宛先を指す同じ番号を受け取っても、起点がルータごとに違えば、起点に足した値もルータごとに違う。出力の表で値が揃っていなかったのは、まさにこれが起きていたからだ。
では、起点を全員で揃えるのは誰の仕事か。仕組みが黙ってやってくれるなら、表の値はとっくに揃っているはずだった。揃っていないということは、揃えるのは仕組みの自動処理ではなく、運用する側が起点を合わせにいく判断だ、ということになる。網全体で同じ起点を使うことは強く勧められてはいるが、そうしないと動かない決まりではない。揃えるかどうかは、運用側がそろえにいくかどうかにかかっている。
起点がずれても、届きはする。失われるのは、値から宛先を読める一貫性
起点を網全体で揃えておけば、同じ宛先を指す同じ番号は、どのルータでも同じ起点に同じ位置を足すことになり、荷札へ載る値はどこでも同じになる。値を一つ見れば、それがどの宛先へ向かう荷物かを、ルータをまたいでも同じ読み方で追える。表の中で、同じ宛先の欄が同じ値で並ぶのは、起点が揃っているときだ。
起点がばらばらだと、同じ宛先を指す同じ番号でも、ルータごとに足す起点が違うので、荷札の値はルータごとに変わる。表の中で、同じ宛先の欄に違う値が並ぶのは、こちらの状態だ。


ここで一つ、値が違うことと通信が壊れたことは別だ。各ルータは、その宛先へ向かう方向の起点を使って、出す値を自分で計算し直せる。だから起点が揃っていなくても、荷物は宛先まで運ばれる。届きはする。失われるのは到達性ではない。失われるのは、値を一つ見れば宛先が読める、という一貫性のほうだ。起点がばらばらだと、荷札の値を追っても、それがどの宛先のものかを、ルータごとに起点へ戻して数え直さないと読めなくなる。冒頭で値が揃わずに引っかかったのは、届かなくなっていたからではなく、ここが読みにくくなっていたからだった。
起点を揃えるのは、揃えないと壊れるからではない。同じ宛先を同じ値で読める一貫性を、運用の側で手に入れるための判断だ。
起点を揃えるのは運用判断。その揃い具合は、どこで確かめるのか
ここまでで、番号と値の関係はほどけた。冒頭の、ルータごとに違う値が並んだ表へ戻ってみる。あの違いを見たとき、宛先そのものが違うと読むのでも、通信が壊れたと読むのでもない。各ルータの箱の起点が揃っているかを、まず疑える。同じ宛先なのに値が違うなら、違っているのは宛先ではなく、値を作る起点のほうかもしれない、と。
番号には、それを実際の値へ変える起点が、ルータごとに隠れていた。残るのは、その起点や番号の状態を、いったいどこを見れば確かめられるのか、という問いだ。確かめる場所そのものが、これまでとは別のところへ移っていく。その続きは、次で扱う。