PR
■この連載では,Windowsネットワークにかかわるトラブルを取り上げて,原因究明と対策に必要な基礎知識を解説している。
■Windowsマシンには,コンピュータ名とホスト名という2種類の名前が付く。IPアドレスとの対応付けである名前解決も2種類の方法があるので区別したい。場合によってはコンピュータ名を正しく指定しても,目的のサーバーにアクセスできないトラブルが生じる。

(永尾 幸夫=NTTデータ関西)



△ 図表をクリックすると拡大されます
図1●コンピュータ名が正しいのにエラーが出る

 ある日,エンドユーザーから「サーバーの共有フォルダに接続しようとするとエラーになる」という問い合わせを受けた(図1)。実は前日にそのサーバーをリプレースしてコンピュータ名を「FILE-SERVER」に変更しており,接続先も変えるように連絡していた。問題の起きたエンドユーザーのマシンを確認すると,指示した通り接続先を変更していた。

 次にコマンド・プロンプトから「ping FILE-SERVER」を試すと,接続先として表示されたIPアドレスはそのサーバーに割り当てたものとは異なるものだった。また,IPアドレスを使って「nbtstat -A <IPアドレス>」というコマンドを実行すると,「FILE-SERVER」とは異なるコンピュータ名「FILE-SV」が表示された。どうもトラブルは,IPアドレスとコンピュータ名の対応付けが間違っていることが原因のようだ。

 このトラブルの解決には,Windows NT/2000/XPおよびWindows Server 2003なら%SystemRoot%\system32\drivers\etcフォルダに,Windows 95/98/Meなら\Windowsフォルダに,「LMHOSTS」という名前のファイルが存在することと,その内容をテキスト・エディタで確認することが重要である。

 今回,LMHOSTSの内容を確認すると,接続先のコンピュータ名「FILE-SERVER」に対して,他部署のマシン「FILE-SV」のIPアドレスが記述されていた。このIPアドレスを正しい値に修正してLMHOSTSファイルを上書き保存し,「nbtstat -R」を実行したあとは,目的のサーバーの共有フォルダへ接続できた。

 この連載では,DNS(Domain Name System)の解説で,ローカル・コンピュータのhostsというファイルが名前解決に使われることを説明した。LMHOSTSというファイルは,hostsファイルと名前は似ているが別ものである。これが何かを知るためには,TCP/IPにおけるホスト名とWindowsにおけるコンピュータ名を区別する必要がある。

コンピュータ名はNetBIOSに起源がある
 実はWindowsには2種類の名前が各マシンに付いている。前回まで説明してきたDNSやhostsファイルで登録・管理される名前は「ホスト名」と呼ばれ,TCP/IPの通信でOSを問わず一般的に用いられる。

 これに対し,Windowsエクスプローラのアドレス欄で「\\sample」という形で指定するサーバーの名前は,「コンピュータ名」または「NetBIOS(Network Basic Input/Output System)名」と呼ばれる。NetBIOS名は共有フォルダやプリンタの指定,ネットワーク上のサーバー・コンピュータの一覧表示に用いられる。


△ 図表をクリックすると拡大されます
図2●OSによってホスト名とNetBIOS名の扱いが異なる

 NT 4.0以前のWindowsでは自分自身の「ホスト名」と「NetBIOS名」を設定する場所が異なっていた。ただし,Windows 2000以降にリリースされた OSでは「ホスト名」と「NetBIOS名」を同一の欄で設定するように変更されている(図2)。

NetBIOSの名前解決はもともとブロードキャスト
 NetBIOSは,IBMがPC用に開発し,マイクロソフトのLAN Managerというソフトを経てWindowsに広がったネットワーク・インターフェースである。NetBIOSを拡張したNetBEUIプロトコルはTCP/IPとは異なり,単一の小規模なネットワークでの使用を想定していた。例えば,通信相手を16文字の名前で識別する(うち15文字を人間が指定可能),ルーティング機能を備えていない,接続先の特定はブロードキャスト(特定の相手ではなく,すべての機器に向けた通信)で行うなどが特徴である。ファイル共有やプリンタ共有など初期のWindowsの基本ネットワーク・サービスやアプリケーションはNetBIOSを前提に作られた。

 しかし,Windowsでも大規模なネットワークを構築するようになると,NetBEUIでは対応できなくなった。そこで登場したのが,NetBIOSをインターネット標準のTCP/IPで使えるように拡張した「NBT(NetBIOS over TCP/IP)」である。NBTにより,WindowsマシンのTCP/IPプロトコルによる通信では,IPアドレスやホスト名のほかに,NetBIOS名で通信相手を指定できる。また,ルーターを挟んだ異なるネットワークの間でもNetBIOSをベースにしたファイル共有などのネットワーク・サービスが利用できる。

ルーター越えに対応するLMHOSTSとWINS
 半面,NBTのネットワークでは,これまで説明したホスト名とIPアドレスの対応付けのほかに,NetBIOS名とIPアドレスの対応付けが必要になった。後者はNetBIOS名前解決と呼ばれる。

 元来のNetBIOS名前解決は,NetBEUI同様にブロードキャストによって行われる。ブロードキャストの信号はルーターを越えないようになっているし,ルーティングには対応していない。そこで登場するのがLMHOSTSファイルとWINS(Windows Internet Name Service)である。

 LMHOSTSファイルは,「LAN Manager HOSTS」という意味で,NetBIOS名とIPアドレスを組み合わせて登録し,名前解決のときに参照するテキスト・ファイルである。冒頭のトラブル・シューティングで書き換えたのがこれである。TCP/IPのhostsファイルと同様にネットワークにアクセスする各マシンに配布する必要がある。

 WINSはNetBIOS名とIPアドレスを組み合わせて登録するデータベースである。LMHOSTSファイルの場合,登録するNetBIOS名が多いと,そのメンテナンス作業は大変である。そこでWINSの仕組みが考え出された。これはネットワーク上にWINSサーバーと呼ぶコンピュータを置き,各クライアントがその中のデータベースを参照して名前解決に利用する仕組みだ。



△ 図表をクリックすると拡大されます
図3●Windowsが名前解決する手順

 WINSの基本的な役割はDNSと同じであるが,名前空間がDNSで扱うwww.nikkeibp.co.jpのように階層構造ではなくNBPPC01のようにフラットであることが大きく異なる。DNSの場合は1つの階層であるドメインごとにホスト名を管理するため,ドメイン(階層)が異なれば同じホスト名になっても構わない。一方,WINSでは通信可能な範囲で同じNetBIOS名はあくまで1つしか存在できない。WINSへの登録は,基本的にクライアントが自ら行うことも大きな違いである。

 図3にWindowsがホスト名とNetBIOS名をどのような手順で解決するかを示した。クライアントでLMHOSTSを参照させると,ブロードキャストによるNetBIOS名前解決が行われないわけではない。WINSでの名前解決に失敗した場合に,ブロードキャストによる問い合わせが利用される。また,NetBIOS名前解決においてどの方法がどの順番で用いられるかは,クライアントの設定によって異なる。さらに名前解決にDNSやhostsファイルが用いられることもあるという具合に複雑だ。