OSI基本参照モデルとセカイ
IT関係の方なら聞いたことがあるかもしれませんが、OSI基本参照モデルとは、ネットワークを体系的に理解するためにつくられた、階層的なモデルのことです。
ITに詳しくない方のために、例を挙げます。
例えばこの記事に飛んでくるとき、noteやTwitterからリンクをタップあるいはクリックしたと思います。タップすると、「この記事を見たい」という要求があなたのスマホから送信されます。その要求は、例えばメルカリで荷物を発送するときのように、ある程度決まったサイズの箱に入れられ、決まった荷札を貼って梱包されます。梱包されたデータは、スマホなら無線通信に乗って、近くの無線LANルータあるいは基地局に飛んでいき、いくつかのケーブルの中を光や電気として通って、noteのシステムが稼働しているサーバに到着します。そこでnoteのシステムが、届いた荷物を開封し「この記事を送ればいいんだね、了解」と判断して、この記事を同じような箱に梱包し、送り返します。箱はさっきの経路の逆を辿ってあなたのスマホに到着して、ようやくこの記事が見れるというわけです。実際はもっと複雑ですが、ざっくりと説明するだけでも、なかなかの大冒険に感じると思います。
さて、突然ですが、あなたがnoteの開発者だとしましょう。上司に「noteの通知機能を改善して」と指示を受けました。ざっくりした指示ですね。
なんとなくですが、通知を送るためのプログラムを改良したり、通知マークのアニメーションを変えてみたり、通知が来たらをメールでもお知らせするように機能を追加してみたり、そういうことをするのかな、という気がします。
ここで最初の例を思い出してください。あなたがこの記事を見るときと同じように、noteがあなたに通知を送るときもまた、ネットワークの海をめぐる大冒険を繰り広げられます。ではプログラマのあなたは、その大冒険の一部始終をすべて知っている必要があるでしょうか?すなわち、
海外からアクセスが来た場合に備えて、太平洋を横断する海底ケーブルの仕様を把握しなきゃ……。
海底ケーブルは光ファイバーだから、光が直進する原理を理解しなきゃ……。
光の原理を理解するために、アインシュタインの相対性理論から勉強しなきゃ……。
……みたいなことが、プログラマには要求されるのでしょうか?
もちろん、何かをきっかけに学びを深めることは素敵なことだと思いますが、ほとんどの場合、わざわざ海底ケーブルに思いを馳せずとも、通知機能を改善するプログラムは書けます。そりゃそうだ、と思われるかもしれませんが、SNSやネットサービスが普及した現在、私たちがやりとりするデータは、実際、ごく当たり前に海底ケーブルを通っています。このように、海底ケーブルのことを考えなくても、プログラマがプログラムを書き、私たちがネットサービスを使うことを可能にしているのが、OSI基本参照モデルという考え方です。
OSI基本参照モデルには7つの階層(レイヤー)があり、海底ケーブル、電気、光などの話をしているのが、一番低い層の「物理層」です。LANケーブルや無線通信の話もここに含まれます。言い換えれば、第2層より上のレイヤーの話をするとき、第1層のおかげで、わざわざ海底ケーブルについて考えなくて済むようになっています。つまり、第1層が「電気とか光の話はこっちでまとめとくから、あんたらは気にせず良いシステムを作ってくれや!」と1個上の層に語りかけているのです。とても頼もしいですね。そして同じように「○○はこっちでまとめとくから、あんたらは気にせずに良いシステムを作ってくれや!」がさらに6個積み重なり、合わせて7つのレイヤーとしてOSI基本参照モデルという考え方が成り立っているのです。
アニメづくりには必ず「アニメーター」という職業の人がいます。何枚もの紙に線を書き、動いて見せるようにする人です。アニメーターが書いた線を、決められた色に塗る人がいます。色が塗られたキャラクターを背景に重ねて撮影する人がいます。仕上がったカットを繋げて、音声を乗せる人がいます。最終チェックをして完パケする人がいます。完成したアニメを、テレビ局や配信サービスに売り込む人がいます。買い取ったアニメを世界中に届ける人がいます。もちろん、ここに書ききれない色々な役割を果たす人たちがいます。
他人を羨んだり、見下したくなることがときどきあります。そういうとき、私はOSI基本参照モデルのことを思い出すようにしています。