第4回 WindowsネットワークとNetBIOS:Windowsネットワークの基礎
WindowsネットワークはNetBIOSと呼ばれる古い技術をベースにしている。そのため長いコンピューター名が使えないとか、ネットワーク上でユニークな名前が要求されるなどの制約がある。
前回は、共有リソースを見つける「コンピューターブラウザー」と「ネットワーク探索」サービスについて解説した。今回からは、ネットワークプロトコルの内部について見ていく。今回は、Windowsネットワークと深い関係があるNetBIOSについて、その歴史を振り返りながら見ていこう。
NetBIOSとは?
一般にTCP/IPネットワークでは、利用する機器にユニーク(一意)な「IPアドレス」を付けておけば、とりあえず問題なく相互に通信ができる。TCP/IPネットワークでは、IPアドレスさえあれば(「名前」がなくても)相互に通信できるからだ。だがWindows OSの場合は少し事情が異なる。Windowsネットワークでは、そのベースとなる部分に「NetBIOS(Network BIOS)」と呼ばれる技術が使われており、IPアドレス以上に「コンピューター名(正確にはNetBIOS名)」が重要な役割を持っている。
NetBIOSとは、ネットワーク通信を行うための、非常に基本的なコマンドセットのことだ。現代のWindows PCの『祖』といえるPC/AT互換機には、システム起動後に、基本的なデバイス入出力(ディスプレーやキーボード、シリアル/パラレル通信ポートなどとの通信)を行う「BIOS (Basic Input Output System)」という機能が用意されている。そのネットワーク向けとして提供されていたのが「NetBIOS」というシステム(APIセット)である。実装が始まった当初は、拡張ネットワークカード上のROM内に実装されていた。
ネットワークインターフェースとNetBIOSを利用すると、同一ネットワーク上に接続された複数台のコンピューター間で非常に基本的な通信を行うことができた。具体的には次のような操作が可能だった。
機能 | 内容 |
---|---|
NetBIOS名の登録/解除 | ネットワーク上に「NetBIOS名を登録」して、ネットワークへの参加を表明したり、「NetBIOS名を削除」して、ネットワークから離脱する。以下の通信では、このNetBIOS名でお互いを識別する |
セッションサービス | 「セッション指向」の通信サービスを提供する。セッション指向とは、あらかじめ2台のコンピューター間で通信回線を確立してから相互に通信する方式。電話のように、最初にダイヤルして相手に接続してから通信する形態のサービス。1対1の通信になる |
データグラムサービス | 「データグラム指向」の通信サービスを提供する。データグラム指向とは、相手に対して、データを一方的に送りつけるような形態の通信。セッションサービスが電話だとすると、データグラムサービスは拡声器などによる一方的な送信に相当する。相手からの応答確認は行わない(のが普通である)。応答が必要なら、やはりデータグラムサービスで送り返す。同時に複数の相手にも通知できるので、1対1の通信だけでなく、1対多の通信も実現できる |
NetBIOSの主要機能 |
NetBIOSによる通信
NetBIOSを使った通信形態は次のようになる。
- システム開始時に、NetBIOSの名前登録機能を使ってネットワークに参加する
- NetBIOS名を指定して通信相手を特定し、通信パケットを送るという操作を繰り返す
- システム終了時に、NetBIOSの名前登録を削除し、ネットワークから離脱する
もっともネットワークに参加するといっても、どこかに中央集権的なネットワーク管理サーバーがあるわけではなく、もっとシンプルな仕組みで動作している。あるコンピューターが自分の名前をブロードキャスト(ネットワーク上の全コンピューターに対する一斉同報通信)で宣言し(例「PC001」など)、それに対して異議(衝突の報告)がなければその名前の使用を継続する、というだけである。通信したい場合は、相手のNetBIOS名を指定してデータを送信し、ネットワーク上のコンピューターは自分のNetBIOS名宛てのパケットなら受信する、という方法で通信する。NetBIOSによる通信方法の詳細については、以下のサイトを参照していただきたい。
Windows OSにおけるコンピューター名の要件
現在では純粋なNetBIOSインターフェースはもう使われていないが、初期のWindowsネットワークはこのNetBIOS機能を利用して実装されていた。Windows OSの内部では、NetBIOS名をそのまま「コンピューター名」として利用していたのである。その結果、NetBIOS名に対する制約が、そのままWindows OSのコンピューター名などに対する制約となっている。具体的には次のような制約がある。
- コンピューター名は最大15文字まで
- ネットワーク上で一意であること
以下、詳しく見ていこう。
コンピューター名の制限1―名前は最大15文字まで
Windows OSではインストールの途中でコンピューター名を指定する必要がある。これを指定しないとインストール作業が止まってしまう。しかもその名前は英数字および記号などを含めて「最大15文字(15bytes)」までという制限がある。日本語も使えるが(日本語を正しく扱えないツールもあるので、実運用では日本語は使わないようにするのが無難)、その場合は漢字1文字がアルファベット2文字換算となる。英字の大文字/小文字は区別されないが、サポート技術情報「LMHOSTS ファイルの PDC 名は大文字と小文字を区別する」のように、大文字/小文字の違いが意味を持つ場合もあるので注意する。
インストール中に長いコンピューター名を入力しようとしたところ
これはWindows 8.1 Enterpriseのインストール中の画面。たとえ最新のWindows OSであってもこのように、16文字以上のコンピューター名を入力しようとするとエラーとなる。
(1)23文字(23bytes)のコンピューター名を入力してみる。
(2)このようにエラーが表示され、次の画面へ進めない。エラーメッセージが不親切でよく分からないが、これはコンピューター名が長すぎるというエラー。15文字以下にすると次の画面へ進むことができる。なおコンピューター名はアルファベットだけでなく日本語文字も利用できるが(全角漢字なら7文字以下)、日本語を想定していないツールなどで問題が発生する可能性があるので使わない方が無難だ。
Windows OSのインストール後でもコンピューター名は変更できる。そのためにはWindows OSにログイン(サインイン)後、「システムのプロパティ」を表示させ、[コンピューター名]タブにある[変更]ボタンをクリックする(次の画面参照)。だがここでもやはり、指定できるコンピューター名は最大でも15文字までである。
システムのプロパティ画面でコンピューター名を変更する
これは「システムのプロパティ」を表示させ、[コンピューター名]タブにある[変更]ボタンをクリックしたときに表示される画面。ここではコンピューター名やドメインサフィックスなどを変更できるが、コンピューター名はアルファベット(+記号)で最大15文字までである。
(1)長い名前に変更しようとしたところ。
(2)コンピューター名は最大15文字までであり、それを超える部分は切り捨てられるというメッセージ。これは「NetBIOS名の制限」によるものである。
コンピューター名の制限2―ネットワーク上で一意であること
コンピューター名には、「同一ネットワーク上で一意(ユニーク)であること」という制限もある。これもNetBIOSの仕様に基づく制限の1つである(ここでいう「同一ネットワーク」とは、簡単にいえばブロードキャストが届く範囲のことを指す)。もし重複するようなコンピューター名を付けようとすると次のようにエラーメッセージが表示され、ネットワークが無効になったり、ファイル共有機能が利用できなくなったりする(実際にどうなるかは、Windows OSのバージョンなどによって異なる)。
名前衝突の例
コンピューター名を変更するには、システムのプロパティ画面で[コンピューター名]タブを選択し、[変更]というボタンをクリックする。これはWindows 2000 Professionalのコンピューターにおいて、すでにネットワーク上に存在するコンピューターと同じ名前を付けようとして、エラーになったところ。より新しいWindows OSでは、このようなメッセージは表示されず、指定された名前をそのまま使うことができる。だがそのまま起動すると、同じ名前を持つ複数台のコンピューターが同一ネットワーク上に存在するので、リモートのサーバーを名前で指定しても、どれに接続されるかは不定となる。
(1)ここに新しいコンピューター名を指定する。
(2)ネットワークがつながっていれば、入力された名前が利用できるかどうかがすぐにチェックされ、重複していれば(他に同じ名前を持つコンピューターがあれば)このようにエラーメッセージが表示される。
同一ネットワーク上にある複数のコンピューターが同じ名前(同じNetBIOS名)を持っているとNetBIOS名による検索が正しく動作しなくなる(どれに接続されるかが不定となる)。そのためWindowsネットワークにおいては、(15文字以内で)それぞれのコンピューターに異なる名前を付けるのは重要なルールである。
- 注:現在のWindows OSでは、たとえ名前が一意でなくても、TCP/IP経由でサーバーと通信するといった手段があるため、完全に通信不能になることはない。だがコンピューター名の一覧(ブラウズリスト)やWINSサーバー、DNSサーバーなどには同じ名前のコンピューターは1台しか表示/登録されないので、ユーザーからするとトラブルの元となる。やはり同じコンピューター名を使うというのは、避けるべき運用方法である。TCP/IPを使ったNBT(NetBIOS over TCP/IP)プロトコルについては次回解説する。
NetBIOS名の詳細
NetBIOS名についてもう少し詳しく見ておこう。NetBIOS名は、内部仕様では16文字(16bytes)まで利用できるが、最後の1byteは名前のタイプ(リソースタイプ)を表すために使うことになっている。そのため、実際には最大で15文字しか利用できない。コンピューター名が最大15文字に制限されているのは、このためである。
NetBIOS名とリソースタイプ
当初のNetBIOS仕様では、16bytes全体をNetBIOS名に使えるようにしていたが、その後、最後の1byteをリソースタイプとして利用するように規約を定めた。15文字に満たない部分には、空白文字(16進で0x20)を埋める。
リソースタイプとは、NetBIOS名の用途を表すために付けられたタイプ番号のことである。コンピューター名以外にも、ドメイン/ワークグループ名やサービス名、マスターブラウザー名など、さまざまな種類の名前がある。例えば「<01><02>__MSBROWSE__<02>」という名前が登録されていれば、そのコンピューターは「マスターブラウザー」として動作しているということを表す(マスターブラウザーについて前回の記事参照)。
具体的なリソースタイプの値としては、次のようなものがある。詳細については、次のリンク先を参照していただきたい。
名前 | 値(16進数) | 意味 |
---|---|---|
<コンピューター名> | 00 | ワークステーションサービス |
<01><02>__MSBROWSE__<02>* | 01 | マスターブラウザー |
<コンピューター名> | 03 | メッセンジャーサービス |
<コンピューター名> | 6 | RASサーバーサービス |
<コンピューター名> | 1F | NetDDEサービス |
<コンピューター名> | 20 | ファイルサーバーサービス |
<コンピューター名> | 21 | RASクライアントサービス |
<コンピューター名> | 23 | Microsoft Exchangeストア |
<コンピューター名> | BE | ネットワークモニターエージェント |
<ユーザー名> | 03 | ログオンユーザー名(net sendの送信対象ユーザー) |
<ドメイン名> | 00 | ドメイン名 |
<ドメイン名> | 1B | ドメインマスターブラウザー |
<ドメイン名> | 1C | ドメインコントローラー |
<ドメイン名> | 1D | マスターブラウザー |
<ドメイン名> | 1E | ブラウザーサーバー選択 |
INet˜Services | 1C | IIS(Internet Information Services) |
IS˜<コンピューター名> | 00 | IIS(Internet Information Services) |
NetBIOSのリソースタイプ(主要なもののみ) NetBIOS名の最後の文字(16byte目。バイナリデータ)はNetBIOS名のリソースタイプを表す。あるコンピューターが特定のいくつかの役割やサービスを提供している場合、NetBIOS名前テーブルにはこれらのNetBIOS名とリソースタイプが登録されている。 ※<01>や<02>は、16進数のバイナリデータを表す。 |
あるコンピューターがどのようなNetBIOS名(とリソースタイプ)を持っているかどうかは、該当するコンピューター上で「nbtstat -n」というコマンドを実行して、NetBIOS名の一覧を表示させると確認できる。
C:\>nbtstat -n ……NetBIOS名の表示
ローカル エリア接続:
ノード IP アドレス: [169.254.17.101] スコープ ID: []
NetBIOS ローカル ネーム テーブル
名前 種類 状態
---------------------------------------------
WIN81X86ENTPC01<00> 一意 登録済 ……コンピューター名(ワークステーションサービス)
WORKGROUP <00> グループ 登録済 ……ワークグループ名
WIN81X86ENTPC01<20> 一意 登録済 ……コンピューター名(ファイルサーバー名)
WORKGROUP <1E> グループ 登録済 ……ブラウザーサービス
WORKGROUP <1D> 一意 登録済 ……マスターブラウザー選択(マスターブラウザー候補)
..__MSBROWSE__.<01> グループ 登録済 ……マスターブラウザー
C:\>
このコンピューターは「WIN81X86ENTPC01」という名前を持ち、「WORKGROUP」というワークグループもしくはドメインに属していて、「マスターブラウザー」の役割も担当している、ということが分かる。
NetBIOSの名前解決結果を確認する
NetBIOSで通信する場合は、まず通信相手(指定されたNetBIOS名とリソースタイプを持つノード)が存在するかどうかを確認する。これをNetBIOSの名前解決という。この確認結果のキャッシュは「nbtstat -r」コマンドで確認できる。
C:\>nbtstat -r ……NetBIOS名前解決結果
NetBIOS 名の解決と登録の統計
----------------------------------------------------
ブロードキャストで解決 = 27 ……ローカルのNetBIOSブロードキャストで名前解決した数
ネーム サーバーで解決 = 0 ……WINSサーバーを使って名前解決した数
ブロードキャストで登録 = 6
ネーム サーバーで登録 = 0
ブロードキャストで解決された NetBIOS 名 ……ローカルのNetBIOSブロードキャストで解決した名前
---------------------------------------------
WIN2000PROSP4 ……解決した名前のリスト
UXPC24X64 <00>
WIN2000PROSP4 <00>
UUPC24X6411
WIN2000PROSP4 <00>
UUPC24X6411 <00>
C:\>nbtstat -c
今回はWindowsネットワークを支えるNetBIOSの機能について見てきた。現在のWindowsネットワークでは、純粋なNetBIOSではなく、TCP/IPプロトコル上に実装した「NBT(NetBIOS over TCP/IP)」上で利用されていることがほとんどである。次回はこのNBTについて見ていく。
Copyright© Digital Advantage Corp. All Rights Reserved.