題名:ネットワークについて

五郎の入り口に戻る

日付:1999/6/4

 この文章について | ネットワークの動作概要 | Physical Layer:物理層 | Media Access Control SubLayer | Logical Link Sublayer | Network Layer | Transport Layer


ネットワークの動作概要

さて、ここまで「階層構造」について怪しげな実生活(というにはかなり非現実的な気がするが)の例をとって説明してきた。普通の本であればここでOSIの7層の構造図が登場し、各層の役割が羅列されるところだが、私はひねくれ者であるのでそれは書かない。実際に各層がどのように動くかイメージがわかないのに抽象的な言葉をならべて説明をされてもさっぱりだと思うからだ。(少なくとも私はそうだ)従って実際の各層の動作を例に使いながらネットワークがどのような階層構造になっているか、の説明をしてみたいと思う。

説明の前に一言但し書きを書いておく。これからしようと思っている「細部に立ち入らず動作概念を伝える説明」というのは私の知識と技量の範囲を超えるものである可能性が高い。従って「見てきたような嘘」を書いている可能性も非常に高いのであまり書いてあること(特に細部)を本気にしないでほしい。

 

さてネットワークの動作を示すため一番身近な例として、ブラウザソフトを(Internet ExplorerとかNetscape Navigatorだが)使ってホームページを閲覧する事を考えよう。ブラウザのアドレス欄に「http://homepage3.nifty.com/GOtsubo/index.html」とかタイプしてぽんとリターンキーをおすとしばらくの後にアドレスで指定されたホームページが表示される。その間コンピュータの内部ではどのような事が起こっているのだろうか?

 

まず先ほどの打ち込んだ文字列を見てみよう。頭が「http」となっている。このhttpというのもプロトコルの一種であり、通信をするための約束事をしめしている。さっきの例で行けば、ぽんとリターンキーを押すと、パソコンから、"homepage3.nifty.com"というアドレスで指定されるコンピュータ(以下サーバーと称する)に対して

"Get /GOtsubo/index.html HTTP/1.0"

という要求が送信される。このGetというのはhttpプロトコルの中で規定されている命令(httpの仕様ではメソッドと呼んでいるが)である。何を「命令」しているかと言うと、"GOtsubo/index.html"という名前のファイルをよこせというものだ。

さてそのメソッドを受け取ったサーバーの側ではhttpプロトコルの取り決めに従い、指定されたファイルを読み出して要求元に返送する。その転送されたデータをパソコンは受け取り、ブラウザで表示をしてぱちぱちぱちとなる。こうやって書くと、httpなるプロトコルがパソコンとサーバーの間でやりとりされていて、話がすむように思える。

 

しかしながら細かく見るとそうではない。例えばパソコンからサーバーにhttpが"Get /GOtsubo/index.html HTTP/1.0"を送信すると言っても、そのメッセージが直接飛んでいくわけではない。その下位のプロトコルであるところのTCPに「これをあのアドレスのサーバーに送ってね。よろしく」と渡すだけなのだ。こういってなんだかわからないデータ(TCPにとってみればそうだ)を渡されたTCPはさらに下位のプロトコルにデータを渡し、、というように実際に相手にデータが届くまでにはいろいろなプロトコルがいろいろな役割を分担しながら使われている。

この様子を一番下位と呼ばれている(別に下等というわけではないが)レベルから順に説明していこう。説明の都合上具体的なプロトコル名、及びその内容に触れるが、それらは家庭に設置されたパソコンからインターネットに接続することを想定して一番多く使われる、と思う物を取り上げる。

 

まず一番わかりやすいところから行こう。あなたのパソコンが外部からデータを受け取る、とはいうものの本当に外部とつながっているもので目で見える物は(多くの場合)モデム(これはパソコンに内蔵されていて見えないかもしれない)及び電話線である。少なくとも通常目に見える範囲では2本の細い線だ。この電話線が家の外にでてからどうなるのか私は全く知らないが、とにかく電話線と呼ばれるものでパソコンとプロバイダまでは接続されているものとしよう。これがOSIでは物理層と呼ばれるものになる。物理的な接続だから話は一番具体的でわかりやすい。この層では物理媒体に対する具体的なアクセス方法を規定する必要がある。たとえばこちらの端は電圧を±3Vで送り、むこうの端では、電圧は5V〜0Vでくるものと想定していれば当然ことながら情報はうまく伝わらない。ちゃんと両者で共通の規定に従う必要があるのだ。

 

さて物理的に接続されていれば信号つたわるよね。はいおしまい、というわけではない。その上でデータを受け渡しするためにはこれまた約束事が必要なわけだ。というわけでピーとかガーとか不気味な音を響かせながら、電話線の上では(これまた多くの場合)PPPなるプロトコルが話されている。このPPPの役割は、とにかく上から渡されたデータを物理的に接続された2つのコンピュータ(もしくはそれに類する物)の間で転送することだ。(だからPPP-Point to Point Protocolと言う)彼(もしくは彼女)は自分が渡されたデータの内容が何であるかとか、(それが核ミサイルの発射コマンドであったとしてもだ)自分が受け持っている区間を超えてデータが流れていくのかあるいは自分が受け持っているどちらかの点が終点なのか、等ということに関しては全く興味がない。黙々と指定された2点の間を渡されたデータを運び続ける。この層はOSIの区分ではDLC Data Link Control :データリンク層と呼ばれている。

 

さて、目的とする相手が直接物理的に接続されて到達できる相手ばかりであれば話は簡単である。データリンク層だけあればなんとかなりそうだ。しかし大抵の場合はそうでない。インターネットというのはその名の通りお互いに接続されたネットワークなのだ。ホームページなど閲覧しようと思ったときには最終的に接続したい相手は遙か彼方に存在していて、複雑な経路を通ってしか到達できないかもしれない。経路中の二つの点の間の伝送はDLCがやってくれるかもしれないが、それをさらにつないでデータの通り道を設定し、その上でのデータの流れを管理する機能が必要となる。

この役割を担う層はOSI用語ではネットワーク層と呼ばれている。具体的なプロトコルとして、インターネットではIP(Internet Protocol)が主に使われる。

この層の役割は結構大変である(別の他の層が楽だとは言わないが)上位の層からは相手のIPアドレス(いわゆる192.168.107.0といった数字列)とデータだけ渡されて「あとはよろしく」と言われるのである。彼(もしくは彼女)は泣きながら(私だったら泣き出すと思う)世界中のどこにいるかわからない相手の居所を探し出し、データルートを考え、とにかくデータを送り、といった仕事をこなす必要がある。おまけに途中の経路で使われている下位プロトコル-つまりはDLCだが-は実に種種雑多なものが存在している。ある箇所では電話線の上を走っているPPPかもしれないし、別の場所ではEthernetかもしれない。相手がどこにあるか知らないがとにかく道を開け、というのが彼(または彼女)に与えられた命題なのだから、「いやー、どうもPPPとはそりがあわなくてねえ」などと好き嫌いを言うことは許されない。

 

さてかように大変な苦労をするIPなのだが、彼(または彼女)はデータを「確実に」配送してくれることは保証してくれない。渡されたデータをパケット(日本語にすると小包)という細かいデータの単位に分割して送信するのだが、送り手は100個のパケットを送ったとしても受け取った時には95個になっているかもしれない。おまけに1から順番に100までパケットを送り出したとしても、受け取られた時にはNo3, No5, No2, No85,,,といったでたらめな順番になっているかもしれない。IPはそこまでは面倒を見てくれないのである。彼(または彼女)はとにかく「やれるだけやりましたよ」と言ってさわやかな顔をして開き直ってしまうのだ。

 

ここまでくれば後一息だ。ネットワーク層の上に乗っかるのは、トランスポート層である。具体的にプロトコルとして一番目にするのはTCPだ。TCPは下位のIPを通じて送られてきたパケットの順番を並べ直し、あるいは途中でなくなったものがあれば「送り直せ」と相手に文句を言う。

考えようによっては彼はがんばってはいるのだけどいまいち作業にミスが多い部下を使ってなんとか仕事をこなす中間管理職のようなものかもしれない。部下が(IPのことだが)確かに大変な苦労をして道を開きデータを送っているのはわかる。しかし部下が届けてくれるデータというのは順番はめちゃくちゃかもしれないし、おまけにだいぶ欠けていたりする。それを彼はきちんと並べたり、欠けている物については文句をいって送り直させたりして、なんとか見れる格好にし上役に「こんなデータが届きました」と言って渡す。しかし上役は彼の苦労などしらず「ご苦労」と言っておしまだ。

さて、同じトランスポート層に分類されるプロトコルの中にはUDPと呼ばれるもののように、仕事は確かに速いのだが、「データの正確さについてはしりましぇーん」と開き直っている物も存在する。そんなものが使い物になるのか、と思われるかもしれないが、実生活と同じで大抵のもの(あるいは人)には適した役割がちゃんと存在しているのである。このことについては後述する。

 

このトランスポート層の上に載っているのがアプリケーションが使っているプロトコル、例えばhttpだ。彼は自分が発したGETというメソッドの結果として、ようやく相手から送信されたホームページの内容を受け取ったことになる。これから別のプログラムがこの内容に従って一生懸命絵だの文字だのを書いていくことになるが、それはまた別のストーリーである。いままでのやりとりを絵にすると下のようになろうか。

 

 

さて、以上がネットワークの階層構造及び機能の概要である。次には各層のもっと詳細な説明を行う。

 

次の章へ


注釈