Windows Serverを中心に、ITプロ向け教育コースを担当

Windowsネットワークの複雑さ

»

 PCがネットワークに接続されるのは当たり前になってきた。WindowsもMacintoshも、もちろんLinuxもネットワーク機能が標準装備だし、ハードディスクレコーダーのような家電製品にもネットワーク機能が装備されている。中にはメールサーバーが内蔵されていて、メールで録画予約までできるものもあるらしい。

 しかし、ネットワークが普及するにつれて、その本質が理解しにくくなっていることも確かである。

十分に進んだテクノロジーは、魔法と見分けがつかない。

Any sufficiently advanced technology is indistinguishable from magic.

というのは、SF作家アーサー・C・クラークの有名な言葉だ。

 確かに、今からネットワークを学習する人は、魔法に立ち向かう覚悟で勉強しなければならない。しかし英語では「魔法」も「手品」も同じ「Magic」であり、区別はない。テクノロジーは、魔法のように見えても、実は手品であって、タネも仕掛けも存在する。理解できないはずはない。

●Windowsネットワークのプロトコル

 ネットワークと言えば、プロトコルの学習からスタートするのが普通だろう。本来、プロトコルは「外交手順」の意味で、儀式を執り行う手順の意味だ。一般的には外交手順を著す場合に「プロトコル」と表記する。

 例えば、神社への正式な参拝手順は「二礼二拍手一礼」で、二拍手と一礼の間に願いごとやお礼を述べる。以前は神社ごとにばらばらだったそうだが、それではどれが願いごとなのか神様も判断に困る。明治期にプロトコル統一が行われ、日本中の神社で参拝手順に互換性が生まれたという話だ。

●NetBIOS

 初期のWindowsはNetBIOSまたはNetBEUI(Net BIOS Extended User Interface)というプロトコルを使って通信を行っていた。現在は使っていないが、知っていればトラブルシューティングに役立つこともあるだろうから簡単に紹介する。

 もともとNetBIOSはプログラムインターフェイスの名称だが、その後プロトコルを意味するようになった(正確なプロトコル名は「NetBIOSフレームプロトコル」または「NetBEUIフレームプロトコル」で略称はNBF)。

 NetBIOSの利用範囲は広く、ファイル共有やプリンタ共有のほか、Exchange Server 2007もNetBIOSを必要としていた。

 NetBIOSでは宛先アドレスにコンピュータ名(正確にはNetBIOS名)を使う。TCP/IP通信を行う場合、NetBIOS名はIPアドレスに変換されてデータが送信されるが、IPアドレスさえ合っていればいいというものではなく、本来は正しいコンピュータ名(NetBIOS名)を指定していなければ通信はできない(後述するようにWindows 7以降は通信ができてしまうのだが)。

 例えば、AがBに電話をかけるプロトコルを考えてみよう。

A:(グローバルナレッジネットワークの電話番号を電話帳で調べて電話をかける)。

B:もしもし、グローバルナレッジネットワークです。

A:@ITの太田と申しますが、ソリューション1部の横山哲也さんはいらっしゃいますか?

B:少々お待ちください。

 これが、一般的なビジネス電話のプロトコルである。昔は、家庭用の電話でもこれが正しいプロトコルだった。しかし、プライバシーの観点から、最近では着信時に自分の名前を名乗る人は減り、特にプロトコル違反というわけでもなくなった。そもそも家庭用の電話を使ったことがなく、プロトコル教育を受けていない人も増えている。しばらくすると家庭用の電話はなくなるかもしれない。

 話を戻す。ここで、電話をかけるプロトコルには2つの宛先(アドレス)が含まれていることに気付いただろうか。電話番号と名前である。何らかの手違いで、誤った電話番号にかけてしまったらどうなるだろう。

A:(田中かおりさんに教えてもらった電話番号メモを見ながら電話をかける)。

B:もしもし、山本です。

A:田中さんではありませんか?

B:いいえ違います。

A:失礼しました。

 私の学生時代、仲良くなった(と思った)女の子に教えてもらった電話番号がでたらめだったという友人がいた。私の妹も、ときどきウソの電話番号を教えていたらしい。ウソを教えられたと思われる電話を受けたこともある。電話番号が正しくても、名前が違えば通信はできない。

 NetBIOSは宛先アドレスとしてコンピュータ名を使う。コンピュータ名はIPアドレスに変換されるが、単に変換できれば良いというわけではない。通信相手が正しい名前を持っていないといけないのだ。

●TCP/IPソケット

 TCP/IPは、業界標準のネットワークプロトコルであり、ご存じのとおりインターネットの標準プロトコルだ。

 TCP/IPが普及した要因の1つに、UNIXに標準搭載されたことが挙げられる。UNIXでは、TCP/IPに対して「ソケット」というプログラムインターフェイスを提供した。実際にはソケットはTCP/IP専用ではなく、初期化時にプロトコルセットを指定する。Windowsソケットのドキュメントを見るとNetBIOSを元にしたプロトコルも利用できるようだ。しかし、UNIX標準のネットワークはTCP/IPであり、TCP/IPとソケットは同時に広まっていった。もちろんWindowsでもTCP/IPアプリケーションはソケットを使うのが一般的である。

 TCP/IPの通信は、すべてIPアドレスで行われ、名前は使わない。しかし、それでは使いにくいので、名前とIPアドレスの対応を検索する機能がある。このときに、使う名前が「ホスト名」だ。アプリケーションは、ソケットのホスト名検索機能を使ってIPアドレスに変換し、次にIPアドレスを使って通信を開始するように作成される。通信の開始手順の中に、相手の名前を確認する機能はない。

 そのため、ソケットの場合は、たとえ名前が間違っていたとしてもIPアドレスさえ正しければ正常な通信が始まる。間違いに気付くのは本題に入ってからだ。

 もう一度、田中かおりさんに登場してもらおう。

A:(田中かおりさんに教えてもらった電話番号メモを見ながら電話をかける)。

B:来週の花火大会は、午後6時に学校の正門で待ち合わせをしましょう。

A:分かりました。

 今度は相手の名前を確認していない。電話がかかったということは、電話番号は正しいのだが、相手が正しいとは限らない。

 こういうとき、普通は会話の内容が噛み合わないので気付くのだが、今回は田中かおりさんだと思って電話した相手(B)も偶然花火大会に行く予定だったようである。しかし、おそらく2人は学校が違うので会えない。

 TCP/IPでは通信相手を厳密に確認しないのでこういうことが起きる。こうした誤解を避ける機能がSSLである。SSLは暗号化だけではなくサーバの身元確認も行う。

●Windows 7以降

 Windows 2000以降、NetBIOSの出番は激減した。ファイル共有などでもソケットが使えるようになったからだ。しかし、Windows XPまでは、旧NetBIOSアプリケーションはソケットよりもNetBIOSを優先して使っていた。完全に移行したのはWindows 7からだ。

 Windows 7以降では、ファイル共有もプリンタ共有もソケットアプリケーションである。NetBIOSを使っていたWindows XPなどでは、IPが正しくてコンピュータ名が間違っている場合はエラーになる(なぜか「コンピュータ名がすでに使われています」というメッセージが出る)。しかし、Windows 7では何ごともなかったかのように通信が成功してしまう。間違って違うサーバに接続しないように注意してほしい。

Comment(0)

コメント

コメントを投稿する