講義第11回

講義第11回:計算機ネットワーク

今回は、 計算機を使ったコミュニケーションのまとめということで、以下のことについて簡単に触れる。で、課題を出す。

計算機ネットワークの原理について

これは講義3回めでも簡単に触れたが、これまでにメイルとか WWW とかにある 程度なれたであろうからもう一度説明すると、前にはなんだかわからなかった ものが少しはわかるようになっていると期待したい。

上に示したのが、教育用計算機ネットワークの概念図である。「端末群」と書いてあるのが、実際に皆さんの前にある機械、つまり、キーボード、 マウス、ディスプレイとその下の本体のセットである。これは NC とか NC 端 末ということもある。 NC とは network computer の略で、商品名であるが、 このように計算機ネットワークにつながって、計算機を使う人の相手をする機 械ということになる。

この端末というのは、「端末」という名前が示している通りそれだけではあ まりたいしたことはできない。「イーサネットスイッチネットワーク」を通して つながっている各種のサーバを使うことで初めていろいろなことができるわけ である。

今みなさんが使っている(はずである)のはUnix CPU サーバである。これ は一応自立した計算機であって、その上でいろいろなプログラムが動作する。 Netscape や mule といったものは、この Unix CPU サーバの上で動 作しているわけである。

来週からは、 Windows NT も少し使ってみようと思っている。これは Unix CPU サーバとは別の、 Windows CPU サーバで動く。Unix サーバと Windows サーバは絵では同じ計算機みたいに書いてあるが、別のメーカの別の計算機で ある。 なお、メイルについてはメイルサーバーとなる計算機、また WWW についても そのサーバーや、さらにその代理となる計算機がある。

メイルを読む時になにがおこっているか

例えば皆さんが Unix CPU サーバー上の Mule でメイルを読むと いうことを考えると、以下のようなことがおきていることになる。

何が起こるかを順番に書いてみると、
  1. ユーザーがキーボードかマウスから何か入力する
  2. NC がそれを UNIX CPU サーバーで動いているプログラム(この場合は mule)に伝える
  3. mule はメイルサーバー上のサービスプログラム(imapd)に、「メイルの一覧をく れ」とか「指定した番号のメイルの中身をよこせ」とかの要求を出す
  4. imapd は(もし運良く動いていたら)mule 側の要求に答えて必要なデー タを送り返す
  5. mule は受けとったデータを解釈して画面表示のデータにして NC に送る
  6. NC は受けとったデータを画面に表示する
  7. ユーザーが画面に出たメイルを読む
という具合である。これは極めてややこしいと思うであろうが、その通りであ る。古いメイルをファイルサーバーのほうに持ってきていれば、それらを見る 時にはメイルサーバーではなくファイルサーバーのほうとやりとりすることに なる。

NC 上の ICEMail の場合には、話が少し簡単になって、 ICEMail というプログラムが NC の上で動作し、これが mail server と会話する。

さて、前にも少し話したが、このようなややこしい仕掛けというのは、必 ずしも一般的なものというわけではない。例えば私の研究室の場合では、「メ イルサーバー」の役を割り当てられた特別な計算機があるわけではない。私は (ファイルサーバーに使われている計算機はあるが、これはファイルサービス だけをするのではなく数値計算や mule を走らせるのにも使う)他のスタッフ や大学院生も使っている計算機のなかの一つでメイルを読み書きしている。

なぜこれほど複雑か

では、このセンターではこのようなややこしい仕掛けになるのはどうしてかと いうことを考えていこう。その前に問題なのは、メイルはではいったいどうやっ て送られるのかということである。これの原理はここのメイルサーバーでも私 の研究室の計算機でも同じで、基本的には
  1. アドレスの後半(@の後ろ)を見て、「それがどの計算機か」というのを 判断する。これには、実際にはインターネット全体で動いている Domain Name Service (DNS) という仕掛けがあって、その末端になっている nameserver (このセンターの場合には独自に専用の計算機を当てている。教養学部ではま た別に一台持っている)に問い合わせるということになる。
  2. ネットワークを通してその計算機にメイルを送りつける
  3. 受けとった方は、アドレスの前半に対応するユーザーがいればその人に 対応するファイルをつくってそこにメイルをしまう
というような感じである。

さて、こう書くとわからないことが実はいっぱいあるわけで、

というようなことは不思議に思う人がいるかもしれないし、他にもいっぱい良 くわからないことはあるであろう。このあたりを今日は少し詳しく説明してい く。

計算機同士の会話とは?

まず、計算機同士が会話するとはどういうことかというわけだが、これもちゃ んと説明しようとすると結構面倒である。 まず、計算機が 2 台あって、それらが直接つながっている場合というのを考 えてみよう。

現在計算機の普通のネットワーク用の接続では上のように 1から2、2から1に いくための専用の線があって、そこに電気信号の形でデータが流れる。これは、 大学の計算機ネットワークの中で使われているイーサネットと呼ばれるものでも、 また皆さんが自宅からインターネットプロバイダなどに電話でつなぐという場 合でも同じことである。

電話の場合には、データを一旦音声信号の形にして、それが電話線を通ってな がれる。普通の計算機ネットワークでは、データが「パケット」という単位に まとめられて、そのまとまりで送ったり受けとったりする。

さて、使っているほうから見ると、例えば A さんが mule でファイルを編集 していて、 Save を実行すると、mule はそのファイルを作ろうとする。例え ば上の絵で Computer 1 で mule が動いていて、 Computer 2 がファイルサー バーであるとしよう、この時、別に mule が Computer 2 がつながっていると いうことを知っていて、データを送るというわけではない。 Mule は、別のプ ログラムに「こういう名前でファイルをつくって、こういうデータをしまいた い」という要求を出す。ここでの「別のプログラム」が OS (オペレーティン グシステム)であるということになる。OS は、このデータを受けとって、ファ イルサーバーの側にしまうべきデータであればふつうはさらにまた別のプログ ラムに要求を振り替える(UNIXの場合、 biod とか nfsiod)。これらが、もう 一度データを解釈し直して、「こういうデータを Computer 2 に送ってくれ」と いう形に変換して、また OS に返すと、最終的に OS が上の線をつかって Computer 2 にデータを送るということになる。

Computer 2 の方では、受けとったデータを逆の順番で解釈して、最終的には 自分のハードディスクにファイルをしまう。

このように、ファイルサーバーにファイルをしまうという一見簡単に見える (かどうかしらないけど)操作でも、それぞれの計算機のなかでは極めて複雑 な処理が行なわれているのである。

なぜ、このような面倒なことをするかというと、実は、このような複雑な処理 を OS とその補助プログラムがやることによって、応用プログラムである Mule や、それを使って仕事をする皆さんはこういった複雑な処理が起こって いるということをあまり(あくまでも「あまり」であって、「全く」というわ けではないが、、、)意識しなくても計算機が使えるということになっている のである。

例えば、ファイルサーバーがなくて Computer 1 が自分のハードディスクを持っ ている場合でも、 Mule が何をするかというのは全く変わらず、 OS に「ファ イルにしまって」という要求を出すだけである。 OS の方で、ファイルの名前 等からどこに書くべきかを自動的に判断して、自分のハードディスクなりファ イルサーバーなりにデータを送る。

OS の仕事

さて、OS という言葉は聞いたことはあると思う。 UNIX や MS-DOS、あるいは Windows NT というのはどれも OS の名前である。 OS の大事な機能は2つあっ て、
  1. 「同時」に動いている複数のプログラムの管理をする。
  2. それらのプログラムの要求に答えて入出力を行なう。
ということになる。最初の、「同時」というのは、どういうことかをちょっと 説明しておく。例えば UNIX CPU サーバー や Windows NT CPU サーバーでは同時に沢山の人が同じ計算機を使っていて、 さらにそのそれぞれの人がいくつものプログラムを同時に走らせている。本当 は、 CPU が一つの計算機では、ある瞬間にはプログラムは 1 つしか動いてい ない。 OS は、同時に走っているいくつものプログラムに順番にすこしずつ時 間を割り当てて、切替えていくことで、使っている人から見る限りその人が計 算機を占有しているかのように見せかけているのである。これを Multitask とか Timesharing という。

OS の歴史

ここで少し歴史的な話をしよう。プログラムして使うことができる、今のよう な形の計算機がはじめて出来たのは 1950年頃で、ほぼ半世紀前のことになる。 このころの計算機(例えばこんなもの)には OS というような概念はなく、また Multitask とか Timesharing という考えもなかった。プログラムを書くと、それは何も OS と かが入ってない計算機のメモリーに何らかの方法で書き込まれる。それが実行 されるとなんか計算されて、紙テープリーダーとか磁気テープ から入力を読んだり、また結果を磁気テープやプリンタにだしたりしたわけで ある。

最初のプログラムを書き込むというところで、うまいことを考えた人がいる。 「プログラムを紙テープ(あるいは磁気テープ)」から読み出して、それを実 行するというプログラムを作れば、紙テープにプログラムがあればそれを読み 込ませて実行出来る。これが、もっとも原始的な OS ということが出来よう。

さて、計算機は昔は高いものだったので、遊ばせておくのはもったいない。そ う考えると、あるプログラムがデータを読んだり、結果を書いたりしている時 間というのは無駄である。というのは、多くの場合に入出力にかかる時間は結 構長くて、計算自体はすぐに終るからである。とすると、あるプログラムが入 出力している間に、別のプログラムが計算するとか、あるいは入出力装置を沢 山つけてそれらを別々のプログラムが使うとか、そういうことをしたくなる。 これが Multitask である。 こういった要求を実現するために OS はどんどん複雑なものになってきたわけ である。

さらに、計算機に紙テープやカードでデータやプログラムを与えて、結果がプ リンターに出るというのではなく、今やっているように画面とキーボードをつ けて直接人が計算機とやりとりすればもっと便利になると考えた人がいた。こ こでも、一人が占有しては計算機がもったいないので多数の人が「同時」に使 うという機能、つまり Timesharing をつけるということが行なわれた。

UNIX という OS は、この Timesharing を比較的小さい計算機で手軽に使おう ということでアメリカ ATT のベル研で 1970年頃に開発された。当時は、 Multics という OS が開発されており、これはそれまでのあらゆる OS の便利 な機能を全部合わせたうえに Timesharing も実現しようというなかなか大変 なもの(計算機ソフトウェアのプロジェクトはこういった「何でもあり」なも のになることが珍しくないが)で、予定よりも時間、予算が大幅に超過してな お予定の性能、機能のものはできなかった。

UNIX は、比較的機能を絞って、単純なやり方で実現するという発想で(今は とにかく最初は)作られた。比較的小型の計算機でも高い性能で動いたこと、 また、ベル研が非常に安価(大学、研究機関には無償)で OS のソースプログ ラムを配布したこともあって、大学関係から次第に広まり、80年代中頃からは 新しく開発される計算機のほとんどが UNIX を OS に使うようになった。特に、 Sun Microsystems という 1980年代初めに作られたメーカーで UNIX のさまざ まな改良がなされ、上の「ファイルサーバー」の仕組みなど、複数の計算機を 一つの「ネットワーク」として利用出来るようになったことも、 UNIX の普及 を助けた。

しかしながら、多数のメーカに採用されたということは、結果的にそれぞれの メーカーが独自の形で UNIX を「改良」するということにつながった。改良自 体は悪くないが、各メーカーは改良した結果を普通公開しないので、同じ UNIX といっても少しずつ違ってきてしまうという問題がかなり深刻なものに なっている。

では、 Windows95/98/NT というのはなにで、その UNIX との関係はどんなも のかという疑問が生じるであろう。これもごく簡単に説明しておく。

これらは、1970 年頃に「マイクロプロセッサ」というものが開発されたこと が契機になって発展してきたものである。 UNIX の話の時に述べた「計算機」 というのは、少なくとも 1980年頃までは計算センターの巨大なマシンルーム を占有するような高価なものであった。しかし、 1970年ころから IC (集積 回路)の技術が進んで、計算機の基本的な機能を 1 つの IC チップに収める ことが出来るようになった。もちろん、当時は 1 つのチップに収めるために 機能を削っていたので、速度も遅かったが、とにかく完全な計算機が普通の人 が買える値段になったのである。

もちろん、普通の人が計算機を持っていても、ソフトウェアがなければ何も出 来ない。 OS と応用プログラム、あるいは自分で応用プログラムを書くための コンパイラといったものが必要になる。1970年代に広く使われたのが (Apple を別にすると) CP/M という OS であった。

OSといっても、これは UNIX や Multics が OS であったのとはだいぶ趣を異 にする。もっとも違う点はなにかというと、 timesharing と multitask の機 能がなかったことである。基本的に一人で使うものであったのでこれらは全く 必要ではなかったことが理由の一つであり、もう一つの理由は当時のマイクロ プロセッサは multitask を実現するのに必要ないろんな機能をそもそも持っ ていなかったことである。

CP/M はザイログという会社の Z-80 というチップ用に書かれていたが、これ を発展させてインテル社の 8086 というチップ用にしたものがマイクロソフト 社の MS-DOS である。これにも timesharing と multitask の機能はなかった。

インテル社の 8086 を採用した計算機の代表的なものが IBM-PC と NEC の PC-98であろう。これらは、表計算(Multiplan, Lotas 1-2-3, Excel) やワー ドプロセッサ(Wordperfect, 一太郎, MS-Word) といったものが一般家庭やオ フィスに受け入れられたこともあって非常に急速に普及した。

その間に半導体技術はどんどん進歩し、インテル社のマイクロプロセッサは今 ではちょっと前のスーパーコンピュータ以上の能力を持つまでになった。それ に合わせて、MS-DOS に OS の機能をどんどん追加してきたのが Windows であ る。また UNIX を、「オープンソース」の形で、商業ベースではなくボランティ アの集まりが作り上げたのが Linux や FreeBSD などである。

以上の簡単な歴史からわかるように、 Windows の利点は広く使われているワー プロソフトなどの応用ソフトが充実しているというところにある。これに対し て UNIX の利点はネットワーク、 multitask などの対応がしっかりしている ことということになろう。Windows は特にウィルスに対する脆弱性が近年問題 になっている。

ネットワーク上での交信

と、話がだいぶそれたが、計算機ネットワークの話に戻る。2台なら自分か他 人かであるが、もっと増えたらどうなるのだろうか?問題は論理的な問題と物 理的な問題にわかれる。論理的な問題は、沢山の計算機をどうやって区別する かということで、これはネットワークにつながったすべての計算機に固有の名 前と番号をつけるということで解決されている。名前は、例えば
hostname
いうコマンドを (UNIXの場合)実行すると出てくるのが CPU サーバーについた 名前ということになる。これは妙に短くて、これでは世界中には同じ名前の計 算機が沢山あるのではないかという気がするが、これは、「この計算センター の外では .ecc.u-tokyo.ac.jp がついたものが名前になる」ということで解決 する。この、下の名前のことをドメインネームという。

名前は人には便利だが、計算機にはいろいろやっかいなものである。そういう わけで、名前の他に計算機には IP アドレスという番号がついている。この二 つの関係をつけるのが前にちょっと述べた DNS である。

例えばある UNIX CPU サーバーがファイルサーバーにデータを 送るというときには、最初の図で「イーサネットスイッチネットワーク」と書 いてあるところに「この IP アドレスのところにこのデータを送ってくれ」と いう形でデータを送る。すると、このスイッチやルータといったものが交通整 理をして、ファイルサーバーのほうにデータを伝えていくことになる。

これがセンターの外の計算機でも話は同じで、 UTnetコアネットワークという のがまたルータで、そこで交通整理がされる。なお、「スイッチ」と「ルータ」 はどう違うかとかいろいろ疑問はあると思うが、これはあまりに技術的な話に なるので説明は省く。なお、上の説明も、いろいろ簡略化しているところもあ る。

ここの計算センターのネットワーク構成について

この計算機センターのシステムは、かなり遠大な野望をもって設計されている。 つまり、以下のようなことを目指している。
  1. 使う人が駒場でも、本郷でも、どの端末の前に座ってもまったく同じよ うに使える。
  2. Windows NT と UNIX の両方が不自由なく使える。
  3. メイルはWindows NT と UNIX の両方から読み書き出来る。これは、古い ものについてもそうなっている。
これは、一つの計算センターが多様な要求に答えるためにはやむを得ない面も あるが、かなり実現困難な目標であったことも確かである。(特に予算の制限 のため)これは、具体的には UNIX CPU サーバーと Windows CPU サーバーに 予算が分散されたためにそれぞれの能力が必ずしも十分ではないこと、またそ れらへの端末からのネットワークの転送速度も必ずしも十分ではないというこ とに反映されている(といっても、昨年度までのシステムに比べればずいぶん 処理速度が速くなったが)。

この、 CPU サーバーの潜在的な能力不足に対する対応として、計算センター 側では皆さんがもっとも良く使うであろうメイルと Web については、CPU サー バー上ではなく NC 端末上で直接実行されるプログラムを準備してくれている。 これが画面左上のメニューに出ている Netscape と ICEMail である。これら を使うことは、そういう意味では CPU サーバーの負担を減らすことになって 好ましいという面もある。が、いまのところこれらと UNIX の画面との使いわ けが面倒であるとか、また ICEMail は必ずしもちゃんと動かないとかいうこ とがあって改善の余地はある。

計算機ネットワークを使う上で注意するべき技術的問題について

というわけで、技術的問題ということである。これは、要するに「ネットワー ク」であるので一人で使っているのではないということによって、使い方によっ ては回りに迷惑がいくということである。例えば、使いもしないのに Netscape や Mule をいくつも開いたり、あるいは何をしているかをちゃんと 理解せずに画面設定ファイルを人からもらっていくつものウインドウを出した りすると、それは同じ CPU サーバーやネットワークを使っている人の邪魔を しているということになる。

もちろん、これは程度問題なので、あまり神経質になるのもどうかと思うが、 自分がどれくらい計算機資源を使っているかということには意識的であるよう に心がけたい。

また、毎年問題になることとして、メイルの乱用がある。電子メイルの便利な ところは沢山の人にコピーを送るのが簡単にできることで、クラス全員とか、 その気になれば東大生全員に送ることもそれほど難しくはない。これには技術 的な問題と社会的な問題があり、技術的な問題としては、あまりに沢山の人に 同時にメイルを送るようなことをすると、メイルサーバーの計算機がその負荷 に対応出来なくて止まってしまうようなことがあり得る。現在のメイルサーバー はただでさえあまり安定に動いていないので(時々読めなくなっているのに気 がついたことはあるだろうか?)、無用な負担は掛けないようにしてほしい。

計算機ネットワークを使う上で注意するべき社会的問題について

計算機を使ったコミュニケーションでは、普通のコミュニケーションとはちょっ と違って注意したほうがよいことがある。といっても、別に普通とは違うこと が起きるというわけではないが、便利になった結果として注意するべきことが あるという程度である。 これについてはワークブッ クにとっても格調高い説明があるが、特に 事例 のほうを見ておこう。

課題

1は必須、2は選択課題である。
  1. Latex で文書を作る。表紙にはレポートの表題と学生証番号、科類、クラス、名前を (もちろん LATEXで)書き、2ページ目以降に文章を書く。文章の内容は特に 問わないが、何も思いつけない人はなにか別の講義のレポートを Latex で書いてくれてもいいし、自己紹介、この講義に関する不満、改善案等、 でも構わない。なお、 図、数式、表などが入っていればそれに応じて評価される。

  2. 自分のHomepage を作る。
なお、LATEX の場合、紙をレポートボックスに出したりするのではなく、 という手順をとってもらうことにする。ホームページの場合は単に作ったとい うことをメイルで知らせてくれればいい。

Latex の場合、手順は以下のようにすること

  1. latex のファイルを作り、 jlatex コマンドで変換し、 xdvi で見て作りたいものができていることを確認する。
  2. dvi2ps filename > kadai2.ps というコマンドを実行して、ポストスクリプトのファイルをつくる。
  3. ホームディレクトリの下に jyousho-kadai というディレクトリを作る(作り方がわからない人は HWB などで調べる)
  4. いま作った kadai2.ps を mv または cp コマンドで jyousho-kadai の下に移す。
  5. うつした kadai2.ps を chmod コマンドで人から見えるようにしておく。 HTML の場合、とりあえず自分のホームディレクトリの下に .public_html と いうディレクトリを作って、ファイルをそこに置き、上と同様に人から見える ようにしておくこと。 user.ecc.u-tokyo.ac.jp に登録する必要はない。

    メイルは Subject を kadai-2A (Latex の場合)または kadai-2B (ホームページの場合) として、「課題2を提出します」というメイ ルを送ること(Subject があっていれば本文はなんでも構わない)。送り先は 前回と同じ。

    〆切は再来週の講義の時間である。

    今回の課題(の提出)は結構手間が掛かります。まあ、そういう手間を通して どういうふうに計算機が処理しているのか少し考えてもらおうというもので すので、頑張って下さい。