Windowsネットワーク
PCがネットワークに接続されるのは当たり前になってきた。WindowsもMacintoshも、もちろんLinuxもネットワークが標準装備だし、ハードディスクレコーダーのような家電製品にもネットワーク機能が装備されている。中にはメールサーバーが内蔵されていて、メールで録画予約までできるものもあるらしい。
しかし、ネットワークが普及するにつれて、その本質が理解しにくくなっていることも確かである。
十分に進んだテクノロジーは、魔法と見分けがつかない
Any sufficiently advanced technology is indistinguishable from magic.
というのは、SF作家アーサー・C・クラークの有名な言葉だ。確かに、今からネットワークを学習する人は、魔法に立ち向かう覚悟で勉強しなければならない。しかし英語では「魔法」も「手品」も同じ「Magic」であり、区別はない。テクノロジーは、魔法のように見えても、実は手品であって、タネも仕掛けも存在する。理解できないはずはない。
●Windowsネットワークのプロトコル
ネットワークと言えばプロトコルの学習からスタートするのが普通だろう。本来プロトコルは「外交手順」の意味で、儀式を執り行う手順の意味だ。
たとえば、神社への正式な参拝手順は「二礼二拍手一礼」で、二拍手と一礼の間に願い事やお礼を述べる。以前は神社ごとにばらばらだったそうだが、それではどれが願い事なのか神様も判断に困るだろう。明治期にプロトコル統一が行われ、日本中の神社で参拝手順に互換性が生まれたという話だ。
●NetBIOS
初期のWindowsはNetBIOSというプロトコルを使って通信を行っていた。もともとNetBIOSはプログラムインターフェースの名称だが、その後プロトコルを意味するようになった。
NetBIOSの利用範囲は広く、ファイル共有やプリンタ共有の他、Exchange Server 2007もNetBIOSを必要としている。
NetBIOSでは宛先アドレスにコンピュータ名(正確にはNetBIOS名)を使う。TCP/IP通信を行う場合、NetBIOS名はIPアドレスに変換されてデータが送信されるが、正しいコンピュータ名を指定していなければ通信はできない。不思議なようで当然のことである。たとえばAがBに電話をかけるプロトコルを考えてみよう。
A: グローバルナレッジネットワークの電話番号を電話帳で調べて電話をかける
B: もしもし、グローバルナレッジネットワークです
A: IDGジャパンの鈴木と申しますが、横山哲也さんいらっしゃいますか
B: 少々お待ちください
プライバシーの観点から、最近では着信時に自分の名前を名乗る人は少ないが、筆者の子どもの頃はこれが正しいプロトコルだと教わった。
さて、ここで2つの宛先(アドレス)が使われていることに気付かれただろうか。電話番号と名前である。何らかの手違いで、誤った電話番号にかけてしまったらどうなるだろう。
A: 田中かおりさんに教えてもらった電話番号メモを見ながら電話をかける
B: もしもし、山本です
A: 田中さんではありませんか
B: いいえ違います
A: 失礼しました
筆者の学生時代は、仲良くなった(と思った)女の子に教えてもらった電話番号がでたらめだったということがあった。筆者自身は経験ないが、妹は時々ウソの電話番号を教えていたらしい。ウソを教えられたと思われる電話を受けたこともある。
NetBIOSは宛先アドレスとしてコンピュータ名を使う。コンピュータ名はIPアドレスに変換されるが、単に変換できれば良いというわけではない。正しい名前に変換しなければならないのだ。
●TCP/IPソケット
TCP/IPは、業界標準のネットワークプロトコルであり、ご存知のとおりインターネットの標準プロトコルだ。
TCP/IPが普及した要因にはUNIXに標準搭載されたことがある。UNIXでは、TCP/IPに対して「ソケット」というプログラムインターフェースを提供した。ソケットはTCP/IP専用ではないが、TCP/IPのプログラムが広まるのと同時に、ソケットも広まっていった。もちろんWindowsでも利用できる。
TCP/IPの通信は、全てIPアドレスで行われ名前は使わない。しかし、それでは使いにくいので、名前とIPアドレスの対応を検索する機能がある。この時に使う名前が「ホスト名」だ。アプリケーションは、ソケットのホスト名検索機能を使ってIPアドレスに変換し、次にIPアドレスを使って通信を開始するように作成される。
もし、ホスト名とIPアドレスの対応が間違っていたらどうなるか。ソケットの場合は、たとえ名前が間違っていたとしてもIPアドレスを使って通信が行われる。間違いに気付くのは本題に入ってからだ。
もう一度、田中かおりさんに登場してもらおう。
A: 田中かおりさんに教えてもらった電話番号メモを見ながら電話をかける
B: 来週の卒業式、10:00に正門で待ち合わせをしましょう
A: 分かりました。
田中かおりさんだと思って電話した相手も来週が卒業式だったようである。しかし、おそらく学校が違うので2人は会えないだろう。TCP/IPでは通信相手を厳密に確認しないのでこういうことが起きる。こうした誤解を避ける機能がSSLである。SSLは暗号化だけではなくサーバーの身元確認も行う。
●Windows 7では
Windows 7では、NetBIOS名を使ったアプリケーションは含まれない。ファイル共有もプリンタ共有もソケットアプリケーションである。Windows XPなどでは間違ったコンピュータ名を指定した場合は通信できずエラーになる(なぜか「コンピュータ名が既に使われています」というエラーメッセージが出る)。しかしWindows 7では何事もなかったかのように通信が成功してしまう。間違って違うサーバーに接続しないように注意して欲しい。
ホスト名からIPアドレスを調べるにはDNSを使うのが一般的であるが、ローカルコンピュータ上のテキストファイルhostsも利用できる。しかし、問題を防ぐにはIPアドレスと名前の対応はhostsを使わず、DNSに全面的に任せるべきである。