d0iの連絡帳

気がむいたら書く

Revisiting OSI 7 Layer Model

今更だけど、OSI 7 Layer Modelを考えなおしてみます。この1年ぐらい、OSI Modelが実はよくできているモデルだった、というか、Internet ArchitectureがどんどんOSI Modelに近付いている、という気がしているのです。

物理層データリンク層

ここは仮想化とかからんでいちばん熱い領域だけど、専門外だから論じません。

ネットワーク層

ロケータか識別子か、それが問題だ。

Internetはこれを区別せずに作ってしまったがゆえに、いろいろと苦労してMIPとかHIPとかLISPとかいう話になっています。本来のOSIモデルではロケータなのだろうと思っているのですが、実際のところよくわかっていません。

セッション層さえちゃんと作っておけば、DNSが識別子となって、ネットワーク層はロケータを徹頭徹尾できる筈なのだけど、そんな魔法のようなセッション層は今のところないようですね。

トランスポート層

ここも専門外すぎて手も口も出ない。まぁ、ロケータ-ロケータ間をどう抽象化するか、という話ですよね。

セッション層

実はここが、Internetを作るための鍵の一つだったと思ってます。
そして、一般に「アプリケーション層」扱いされるさまざまなプロトコル: HTTP, CoAP, FTP, XMPP, SMTP, などなど が、本来はセッション層だと理解されるべきだと思ってます。番外でscreen+sshを挙げてもいいけど。

ここで挙げたプロトコルは、いずれも自分自身の終点識別子を持ってます。そして、その終点間をどう接続するか、というモデルを個別に持ってます。MTAやXMPP Serverのように、中間を経由してEnd-to-Endを接続するにせよ、HTTP-CoAP Proxyのように終点の概念を写像して異種プロトコルへ乗り入れるにせよ、それぞれの(freeかつinnovativeな)セッションに対するモデルが存在して、少々のL4以下の変動にめげずに終点同士のコミュニケーションを維持します。

freeかつinnovativeとここで敢えて言ったのは、このレイヤが他のレイヤの束縛を比較的受けづらく、並立したまま発展することが容易であることによります*1

そして、これらが真のセッション層に成り得なかったのは、DNSが単なる「IPアドレスのalias」に過ぎないとして、アプリ側でキャッシュすることを許してしまったことが一因じゃないかと思っています。DNS RRがupdateされたら、全てのアプリにそのcacheを破棄してセッションの再生成を許すべきだったんだなぁ(← 後の祭り)。

つまり何が言いたいかと言うと: アドレスを隠蔽するSOCKSはIPv6/IPv4混在時代の最高のセッション層だと思いませんか?

プレゼンテーション層

そしてもう一つの鍵が、ほとんど全ての人が「無視」している「プレゼンテーション層」です。本稿はこの節を書きたくて書いたといっても過言ではない!

いわずもがなですが、アプリケーションが通信を行うのは、通信自体が重要な場合(NTP, pingなど)を除けば、メッセージの中身が重要なわけです。そして、送受信されるメッセージは、かならず何らかの符号化・直列化を行わなければならない。

アプリケーションの内側で格納されているデータ形式memcachedだろうがInnoDBだろうが、Berkeley DBだろうがExcelだろうが、「交換」されるためにはプレゼンテーション層まで下りてくる。そして、データが単一のアプリケーション、単一のインターフェイスだけではなくマルチユースされることを期待すると*2、セッション層から下と、アプリケーションから『上』に対する、neck of the hourglassに見えてくる。

単一の通信のレイヤリングモデルにおいては、プレゼンテーションなんてアプリケーションの出入口に過ぎないのですが、単一のデータはそのまま複製され、加工され、系列を管理され*3、交換されつづける。その時間方向に拡張したレイヤリングモデルにおいて、プレゼンテーション、つまり交換のためにデータを直列化する方式こそが、変更しづらい点なのではないか、という仮説です。

いわゆるインターネット屋さんはかなりの確率で嫌っています*4が、僕は、XMLJSONみたいなもの、とくに、スキーマや、スキーマのネットワーク (hypertextが文書のネットワークであったのと同じ意味で) が、このレイヤを占う鍵だと思っています*5

アプリケーション層

好きにすれば的な何か。
とはいえ、前節で「スキーマ」という言葉をうっかり出したけど、実はスキーマ自体はアプリケーション仕様の一部ということもできる。通信仕様ではあるのだけど、データの意味付け (セマンティクスとオントロジ; これはISOで決定された通貨シンボルですよ、とか、あれはIECで決定された電力物理量の規格ですよ、とか、それはOASISで決められた電力取引市場のメッセージですよ、とか) は、プレゼンテーション層とアプリケーション層の境界領域と言えなくもありません。

まとめ

そんなわけで、最近ほかの人と話が合いません。特にIETF界隈。

*1:参考: S. Akhshabi, et.al "The Evolution of Layered Protocol Stacks Leads to an Hourglass-Shaped Architecture", SIGCOMM 2011

*2:この仮説は妥当か?

*3:Data ProvenanceとかObject Traceabilityとか

*4:最近のappsawg@ietf を参照

*5:そして、最近はInternet of Thingsもここらへんのコンセプトがないと駄目だと思っている。が、その話はまだ綺麗に整理できていない / 上手に話せない