図1
 名前解決の実現方法は,3つある。C/S(クライアント/サーバー)型は,ネットワーク上のすべてのマシンのコンピュータ名とIPアドレスの組み合わせのデータベースをもつネーム・サーバーを利用するもの(図1[拡大表示]a)。特別にネーム・サーバーを用意する必要があり,かつ,各マシンがネーム・サーバーのIPアドレスを知らなければならないという欠点がある。しかし,新しいマシンの追加やIPアドレスの変更などは,ネーム・サーバーにだけ行えばよい。集中管理が可能であるため,メンテナンス性が高い。コンピュータ名のネーム・サーバーがWINSであり,ホスト名のネーム・サーバーがDNSである。後述するように,Windowsクライアントであれば,両者を使った名前解決が可能である。

 ローカル・ファイル参照型は,通信する可能性のあるすべてのマシンのコンピュータ名とIPアドレスの組を,各マシンがファイルとしてローカルに保存しておく方式(図1[拡大表示]b)。ローカルですべてを処理できるために最も名前解決の速度は速い。しかし,マシンの追加や名前の変更があると,関係するすべてのマシンのローカル・ファイルを変更する必要があり,メンテナンス性は最も低い。コンピュータ名に対するファイルがLMHOSTS,ホスト名に対するファイルがhostsである

 ブロードキャスト型は,IPアドレスからMACアドレスを知るときに使うARPのように,すべてのマシンに対してブロードキャストで名前解決を依頼する(図1[拡大表示]c)。他の2つの方法と異なり,何も用意する必要がないのが最大の利点である。だが,ブロードキャストであるため,ルーターを越えた名前解決ができない。つまり,ある程度の規模のネットワークでは利用できない。

 なお,コンピュータ名の名前解決は,従来はブロードキャストが中心だった。一方,もともとのTCP/IPネットワークの世界では,ブロードキャストによるホスト名の名前解決というものは存在しない。DNSサーバーとhostsファイルでのみ,名前解決を実現していた。ただしWindowsマシンでホスト名の名前解決を行う場合は,DNSとhostsによる名前解決が失敗したらコンピュータ名の名前解決方法を行ってみる。つまり,ブロードキャストによるホスト名の名前解決もやってみる。

 では,どの名前解決を利用したらよいのか。それはどうやって指定すればよいのだろうか。

写真1
 前者の質問への答えのキーワードは,ルーター越えと運用管理である。図1で説明したように,ブロードキャスト型はルーターを越えた名前解決ができない。運用管理面を考えると,ルーターによるセグメント分けをしておらず,運用管理の担当者もいないような小規模ネットワークにはブロードキャスト型が適しているだろう。ただ,すべてWindowsマシンで構成するならよいが,WWWサーバーやメール・サーバーにUNIXマシンを利用する場合は要注意だ。前述したようにUNIXマシンはブロードキャストによる名前解決は行わない。外部とのやり取りのためのDNSサーバーはISPのものを利用するにしても,内部でUNIXマシンのホスト名の名前解決をする方法は,自分で考える必要がある。方法は,アプリケーションでホスト名を使わずにIPアドレスで指定する,各マシンにhostsファイルを用意する,DNSサーバーを用意する──の3通りである。

 すでにUNIXをサーバーとして利用し,UNIXの操作は行っていることから,ホスト名の解決にはDNSサーバーを用意するのが最もよいと思われる。DNSでネーム・サーバーの運用管理をするならば,コンピュータ名の名前解決にWINSを利用しても,運用管理面でのデメリットにはならないだろう。また,DNSは静的に設定する必要があるが,WINSでは,Windowsマシンがネットワークにログオンすると,そのコンピュータ名とIPアドレスのマッピングが動的更新されるため,WINSの運用管理の手間は少ない。

図2
 大規模ネットワークになると,ルーターを越えた通信が発生することから,C/S型とローカル・ファイル型が選択肢になる。ローカル・ファイル型は速度が速いという利点はあるものの,やはりメンテナンス性から,ネーム・サーバーを利用することが望ましい。以上のことから,小規模で,かつ,Windowsだけのネットワークではブロードキャスト型だが,それ以外ではネーム・サーバーを利用したC/S型を使うのがよいだろう。

 WINS,DNSの利用は,Windows95であれば,[コントロールパネル]の[ネットワーク]-[ネットワークの設定]でTCP/IPのプロパティを表示し,[WINS設定]や[DNS設定]画面で必要な項目を設定すればよい。それぞれのサーバーの中身を見るためには,WINSの場合は,Windows NTで稼働するWINSマネージャを利用する(写真1[拡大表示])。DNSサーバーの場合は,サーバー・マシンでなくても中身を確認できる。Windows NTに標準添付しているnslookup.exeをコマンド・プロンプトで実行すればよい。

 それでは,ローカル・ファイル参照型は必要ないのかというと,そうではない。図2[拡大表示]にLMHOSTSファイルのサンプルを示したが,場合によっては,これをうまく使いこなすことでシステム全体の性能を向上させることができる。

表1
 先ほど,基本はC/S型で,小規模ならブロードキャスト型と説明したが,実際は,どれか一つだけを利用するのではなく,組み合わせて使う。Windowsマシンは,4つのノード・タイプに分かれており,タイプによって名前解決の順番が異なるのである(表1[拡大表示])。自分のマシンがどのノード・タイプかというのは,Windows95であれば,winipcfg.exeで調べることができる(写真2[拡大表示]右)。Windows NTならば,ipconfig.exeを使う。もっと簡単には,Windows95なら,[コントロールパネル]の[ネットワーク]-[ネットワークの設定]のTCP/IPのプロパティの[WINSの設定]で,「WINSの解決をする」を選んでいるかどうかでわかる。「解決をする」を選んでいれば,hノード,「解決をしない」を選んでいれば,bノードがデフォルトの設定となる。pノード,mノードは,レジストリの変更をしなければならない。

写真2
 Windows NTの場合は,同じ[ネットワーク]-[プロトコル]のTCP/IPのプロパティで,[WINSアドレス]を調べる。WINSサーバーのアドレスが1つ以上設定してあればhノード,していなければbノードとなる。この設定画面を見ると,NTではWINSを利用するのがデフォルトといった感じがする。p,mノードの設定は,Windows95同様,レジストリの変更が必要である。

 表1で示した名前解決の順番は基本であり,実際の名前解決の順番はもう少し複雑である。DNSサーバー/hostsファイルや,名前解決のキャッシュ(NetBIOSキャッシュ)があるからだ(図3[拡大表示])。図3は,上からスタートして,名前解決ができた時点で終了する。これを見て分かるように,どのノード・タイプでもLMHOSTSやhostsを参照するようにできる。つまり,ローカル・ファイルに指定さえしておけば,WINSサーバーが落ちていようが,ルーター越えだろうが実現できるのである。

図3
 LMHOSTSファイルを利用するときの問題は,Windows95では,DNSサーバーを利用しているときには,図3のLMHOSTSの確認のフェーズを飛ばしてしまうことだ。Windows NTでも,前述の[WINSアドレス]の設定で「LMHOSTS参照を行う」をチェックしておかなければ,LMHOSTSを確認にいかない。

 NTの場合は,チェックすればよいだけだが,Windows95の場合は,図2で示したような「#PRE」キーワードを付けるとよい。#PREがついたものは,マシン起動時にNetBIOSキャッシュに読み込んでしまうからだ。この#PREは,使い方によっては有効なキーワードである。図5を見れば分かるように,コンピュータ名の名前解決では,常にNetBIOSキャッシュが最初に参照される。名前解決の速度を上げたいものだけ,あらかじめ読み込んでおけばよい。ただし,運用管理には注意しなければならない。#PREで示したマシンのIPアドレスが変更された場合は,即座にその値を含んでいるLMHOSTSの中身を更新しなければいけないからだ。

 このような場合に有用なLMHOSTSのキーワードもある。「#INCLUDE]である。これを利用すれば,ネットワーク上にある特定のファイルをローカル・ファイルとして利用することができる。つまり,WINSサーバーを利用するときと同じような集中管理が可能になる。#INCLUDEを利用する場合は,常に#PREと併用する必要がある。つまり,ネットワーク上のファイルの中身を,すべてNetBIOSキャッシュに取り込んでしまうのだ。すると,WINSサーバーなど利用しないで,すべてこれらで実現すればよさそうだが,#PREでキャッシュに読み込める数には限度がある,WINSサーバーではコンピュータ名とIPアドレスの組を動的に把握できる,WINSではWINSマネージャというGUIの管理ツールが利用できる──などの理由から,やはりWINSの利用が基本だと考えるとよいだろう。

 一方,コンピュータ名の名前解決では,図3の下の方の「hostsファイルの確認」,「DNSサーバーへ問い合わせ」を行いたくない場合もある。例えばDNSサーバーとしてISPのものを利用している場合などだ。何らかの原因でコンピュータ名の名前解決に失敗し,わざわざISPのDNSサーバーにその名前解決にいっても,そこで名前解決ができることはないだろう。その場合,Windows NTでは,やはり[WINSアドレス]の設定で「Windows名前解決にDNSを利用する」のチェックをとればよいのだが,Windows95ではレジストリを変更しなければならない。

 この連載は,日経オープンシステムに連載した「新人SEのためのネットワーク入門」の内容をもとに,Webコンテンツとして再編集したものです。なお,日経オープンシステム別冊「新人SEのためのネットワーク入門」では,本記事の内容を詳しく説明するほか,実践編としてトラフィックの把握やネットワーク設計の実際などの内容もご紹介しております。内容のご確認とご購入は,http://coin.nikkeibp.co.jp/coin/nos/se/でお願いいたします。