列を積み終えて、ペンが止まる。この番号、入口だけが知っていればよかったのだったか。
前話で、入口が経路を番号の列として持つと決めた。入口で通り道を決め、通る点の番号を並べて積む。そこまでは進んだ。けれど、積んだ番号を読んで実際に進むのは、途中に並んだ router たちで、入口ではない。途中が同じ番号を知らなければ、入口がどれだけ丁寧に列を積んでも、その番号は転送面に積まれたまま、どこへ向かう一手なのかを途中の router が判定できない。番号には、網全体へ行き渡らせるという宿題が残っている。
そして「配る」と言われた瞬間、ペンはもう一つ箱を描こうとする。番号を配るためだけの、専用の役を。網に点検する仕組みがまた一つ増えるのか——その手を止めて、別の道がないか見てみたい。番号を配る仕事は、本当に新しい役をもう一つ立てる話なのか。すでに何かを網全体へ配っている仕組みに、一緒に載せて済ませられないか。


途中が読めなければ、入口が積んだ番号は転送面に積まれたまま判定に使えない
入口が積む番号の列には、前話で見たとおり二種類あった。一つは宛先を指す番号。網のどこへ届けたいか、その目的地そのものを指す。もう一つは特定の隣へ進む番号。この router から、どの隣へ一歩出るかを指す。役割は違うが、どちらも番号で、列の中に並んで積まれている。
入口でこの列を積むのは、もう難しくない。難しいのはその先だ。番号で書かれた通り道を実際にたどるのは途中の router で、入口ではない。途中の router が「宛先を指すこの番号は、どこへ向かう一手か」「隣へ進むこの番号は、どの隣のことか」を読めなければ、番号は packet とともに転送面を運ばれても、次にどこへ進む一手なのかを途中の router が決められない。
ここで二種類の届き方が、少しだけ違ってくる。宛先を指す番号は、網のどこから見ても同じ意味でないと困る。ある router にとっての「あの拠点行きの番号」が、別の router では違う意味になっていたら、列は途中で意味を失う。だから宛先を指す番号は、網全体で同じ意味として知られている必要がある。一方、隣へ進む番号は、その番号を出した router にとっての一手だ。「私から見て、この隣へ出る」という、その場所での指し手。網の全員が同じ番号を共有する話ではなく、誰がどの隣を指して出したのかが伝わればいい。
役割の差はあれ、どちらも入口の中だけにあっては役に立たない。途中の router が読めるよう、番号は網へ行き渡らせる必要がある。配るという宿題が、ここで確かに立つ。
番号を網全体へ行き渡らせるとして、配る役をもう一つ新しく立てるのと、すでに何かを網全体へ配っている仕組みに乗せるのとでは、あとから網を見回る点検のループはどう変わるか。続ける前に、一度この差を予想してみてほしい。
番号配布と到達性配布を別々の面で確認しなければならない
番号を網全体へ行き渡らせる。そう言われて素直にペンを動かすと、番号配布のための箱を一つ描き足したくなる。到達性は到達性の仕組みが配る。番号は番号の仕組みが配る。役割が分かれていて、見た目には整理されている。だが、その整理は運用中の設計メモで別の顔を見せる。
専用の役を立てた網を思い浮かべる。到達性を広げる仕組みは、これまでどおり網全体へ地図を配っている。どこへどう届くかは、その仕組みを見れば分かる。その横に、番号を配る別の役が新しく立つ。番号が網のすみずみまで行き渡っているかは、こちらの役を見る。
すると、設計のときも障害のときも、見回る対象が二つになる。地図は届いているか。番号は届いているか。この二つを、別々の仕組みとして、別々に確かめ続ける。あるとき到達性は問題なく広がっているのに、番号だけが一部へ届いていない、という状態も起こりうる。そのとき切り分けは、「地図は来ているのに番号が来ていない、なぜか」と、二つの仕組みをまたいで原因を追う作業になる。
設計メモには前話まで、到達性を広げる仕組み、label を隣どうしに配る仕組み、通り道ごとに状態を持つ仕組みが、すでに並んでいた。三つが同じ網の中でそれぞれ別の状態を持つ。経路を入口の番号の列で決めると割り切ったのに、番号配布のために四つ目の役を足せば、減らしたかった重なりがまた一つ戻ってしまう。
配る役をもう一つ立てるか。すでに地図を配っている仕組みに番号も載せるか。この二つを同じ設計メモに並べると、違いは「どの仕組みが好みか」ではなく、「網を見回る点検のループが一つ増えるかどうか」として見えてくる。
専用の配布役を立てるか、地図の広告へ番号を載せるか
別の役を立てない手は、どう描けるか。網にはすでに、何かを網全体へ配っている仕組みがある。OSPF や IS-IS のような link-state の仕組みは、どの宛先へどうたどり着けるか、どの router がどの隣とつながっているか、という到達性の地図を、もともと網全体へ広告として配っている。
番号は経路上の一手を指すもので、到達性の地図とは別世界に見えるかもしれない。けれど、地図を配るというのは、広告という形で網全体へ情報を流すことだ。その広告に、これまで運んでいた宛先や隣の情報に加えて、番号の欄を一つ足せるなら、番号も同じ広告に乗って網全体へ届く。配る経路をもう一本引くのではなく、すでに流れている広告へ欄を一つ書き足す。
実際、番号を網全体へ配る役は、この地図を配る仕組みに任せられるよう定められている。入口が経路を番号の列で持つという発想を支えるために、別の専用の配布役を必ず立てるのではなく、到達性を配る仕組みの広告へ番号を載せる道が用意されている。OSPF にも IS-IS にも、その載せ方が決められていて、どちらか一方だけの特殊な話ではない。だから、地図が網全体へ行き渡っているかを見れば、その同じ広告に番号も乗っていると読めるようになる。
ここで一つ、混ぜてはいけない区別がある。SR-MPLS は、番号が乗った packet を実際に転送する動作そのものは、これまでどおり label を見て次へ進める仕組みのまま変わらない。番号を地図の広告に載せて配る、というのは配る側の話だ。番号や label を割り当てて配るためだけに、LDP や RSVP-TE のような別の配布の仕組みを起動しなくて済む。地図を配る OSPF や IS-IS の広告一つで番号も届くので、別のシグナリングを立ち上げる必要がない。MPLS を捨てる話ではなく、番号を配るために別の仕組みを起動せず、すでに動いている地図の広告へ寄せる話だ。この、地図を配る仕組みに番号も載せて配るやり方を、地図を配る仕組みに番号も載せる、と呼ぶ。
同じ広告に、二つの番号が別の印として乗る
地図の広告に番号を載せると言ったとき、載るのは一種類ではない。前話で見た二種類が、そのまま別の印として乗る。
地図の広告には、もともと「この宛先へ届く」という到達性の情報と、「この router はこの隣とつながっている」という隣接の情報が流れている。宛先を指す番号は、その宛先の情報の横に置かれる。地図の中で目的地を指している場所に、その目的地を指す番号が添う。隣へ進む番号は、隣接の情報の横に置かれる。地図の中で線が引かれている場所に、その線を一歩進む番号が添う。


受け取った側は、この一つの広告から両方を読む。宛先を指す番号も、隣へ進む番号も、別々の仕組みから集めてくるのではなく、同じ広告の中の別の欄として手に入る。役割は違うが、運ばれてくる道は同じだ。入口はそこから、宛先を指す番号と隣へ進む番号を、目的に応じて列に選んで積む。
ただし、設計レビューで「だからもう従来の配る役は一切要りません」と言い切ると、移行の現場で足をすくわれる。番号を地図に載せられるから、番号を配る専用の役を畳める——これは、新しくこの形で組む網について言えることだ。これまでの配る役が残っている網へ少しずつ番号配布を持ち込んでいく途中の段階や、新旧が混ざった網では、従来の配る役とこの新しい配り方が並んで動くこともある。「番号の配布を一切別に持ちません」と言い切るのではなく、「番号配布のために別の配布の仕組みを必須にしない基本形です。ただし、移行の途中や混在した網では、従来の役と並ぶこともあります」と言えば、簡素化の方向と現場の段階を分けて話せる。畳めることと、即なくなることは、分けて言う。
配布役を一つ畳むと、確認する面も一つ減る
最初の設計メモへ戻る。到達性を広げる仕組み、隣どうしで配る仕組み、通り道ごとに状態を持つ仕組み、そして番号、と並んでいた。番号を配るために専用の役をもう一つ描き足そうとしていたペンは、止めてよかった。番号は、すでに網全体へ地図を配っている仕組みの広告へ、欄を一つ足して載せられるからだ。
専用の役を畳むと、それにつながって減るものがある。番号が網全体で行き渡っているかを別に見回るループが消える。障害のときに「地図は来ているのに番号が来ていない」と二つの仕組みをまたいで切り分ける必要が薄れる。地図が届いているかを見れば、その同じ広告に番号も乗っていると読めるからだ。揃える状態も、見比べる対象も、一つ少なくなる。
設計レビューで「この番号、誰がどう配るのか」と聞かれたとき、答えはもう「番号配布のための別の仕組みを立てます」ではない。「番号は、到達性の地図を配っている広告に載せて配ります。別のシグナリングを起動せず、配る役を増やしません」と言える。番号は、地図とは別世界の番号ではなく、地図の広告に乗って届く印として説明できるようになった。
番号が網全体へ配られる像は、これで掴めた。ただ、ここまでで一つ、まだ触れていない問いが残っている。同じ広告から番号を受け取った各 router は、その番号を本当に同じ値として読めるのだろうか。宛先を指す番号は網全体で同じ意味であってほしい、とは言った。けれど、それが各 router の手元で同じ値として揃うかどうかは、配る側の話とは別の判断になる。番号を誰がどう配るか、まではここで決まった。その番号が router ごとにずれないための起点は、次に進む。