第4回 NetBIOSを理解する(その2):基礎から学ぶWindowsネットワーク(2/3 ページ)
NetBIOSネットワークでは、TCP/IPにおけるIPアドレスの役割を「NetBIOS名」という16bytesの文字列が担っている。
よくも悪くも、NetBIOSを大きく特徴付けるNetBIOS名とは?
NetBIOSを使ったネットワークでは、ネットワークに接続されたコンピュータ(NetBIOSでは「ステーション(station)」と呼んでいる)や、ファイル・サービスなどの各種ネットワーク・サービスなどを識別可能にするため、それぞれに文字列(最大16bytes)の名前を付ける。これは「NetBIOS名(NetBIOS name)」と呼ばれる。例えばステーションを識別するための名前は、ネットワーク内でユニークであることが保証されている(ユニークなNetBIOS名でなければ、NetBIOSネットワークに参加できないしくみが用意されている。これについては、次ページの「2.NetBIOS名前サービスを使った名前の登録」で具体的に述べる)。例えば「OGAWA」や「YAMADA」などがステーション名として付けられているなら、NetBIOS APIを使ってそれらのコンピュータとの接続を確立するときに、APIのパラメータとして“OGAWA”や“YAMADA”という文字列を指定することになる。
当初NetBIOSが設計された時点では、NetBIOS名に使える文字コードに強い制限はなく、英数字や記号以外の特殊な制御文字などを使用することも可能だった。しかしそのあと、NetBIOSを使用して実装されたソフトウェアの一部でそれらの特殊な文字をNetBIOS名として扱えないものが現れるなどしたので、慣用的にアルファベットや数字、一部の記号だけがNetBIOS名として使われるようになった。現在では、NBT(NetBIOS over TCP/IP)のプロトコルを規定したRFC 1001において、NetBIOS名に使用可能な文字が規定されている(RFC 1001はこちら。なおNBTに関する仕様は、RFC1002でも規定されている)。なお、Windows NT 4.0までは、NetBIOS名の一部にスペース(0x20)を使用可能だったが、DNSサービスにおける名前付け規則との整合性を維持するため、Windows 2000からはスペースも使用不可能になった。これらに関するマイクロソフトのサポート技術情報は次のとおり。日本語の使用については明示的な規定はないようだが、非対応アプリケーションがあること、使用するコードセットや全角文字によっては、使用不能文字が含まれてしまう可能性もあるので、通常は使えないと考えるべきである(実際にはマシン名などに漢字文字を使うことも可能であるが、いろいろと不都合が生じる可能性があるので、避けるべきである) 。
FATファイルシステムにおける8.3形式のファイル名と同じく、NetBIOS名にも大文字/小文字の区別はない。ただしUNIXネットワークの文化を持つTCP/IPネットワークでWindowsネットワークを運用するときなど、場合によっては大文字・小文字の区別がなされる場合もあるので注意が必要だ(例:サポート技術情報「LMHOSTS ファイルの PDC 名は大文字と小文字を区別する(JP262655)」)。
NetBIOS名は、基本的に各コンピュータのユーザーが任意に付けることができる。そして各コンピュータは、このNetBIOS名によってお互いを識別している。TCP/IPにおけるIPアドレスのように、サブネット・マスクを使ってネットワークを論理的に分割し、これらのネットワーク間でのルーティングを実現することなどは想定されていない。NetBIOSが想定するネットワーク(名前空間)はただ1つであり、そのネットワークに参加するコンピュータ(ステーション)には、それぞれユニークな名前が付いていると想定している(すぐあとで述べるように、複数のコンピュータが同一の名前を使用する「グループ名」もある)。
NetBIOSリソース・タイプ
これまでに述べたように、当初NetBIOS名としては、16bytesまでの文字列を割り当てることができた。しかしその後マイクロソフトは、複雑化してきたNetBIOSネットワークを効率よく管理するために、名前として使用可能なサイズを15bytesに制限し、残った最後の1byteを使って、コンピュータやネットワーク・サービスの種類を表すことにした。これはNetBIOS名の「副指数(suffixの訳語)」とか、「サフィックス(suffix=『接尾辞』の意味)」「ノード・タイプ(node type)」「リソース・タイプ(resource type)」などと呼ばれる。ドキュメントによって呼称はまちまちなのだが、最も意味が分かりやすいので、本稿では「リソース・タイプ」で統一することにする。NetBIOS名とリソース・タイプの関係を図示すると次のようになる。
NetBIOS名とリソース・タイプ
当初は16bytes全体を名前に使えるようにしていたが、その後マイクロソフトは、複雑化するNetBIOSネットワークを効率よく管理できるように、名前を15bytesまでに制限して、最後の1byteでコンピュータやネットワーク・サービスの種類を表すように変更した。これはNetBIOS名の「副指数」「サフィックス」「ノード・タイプ」「リソース・タイプ」などと呼ばれる。15文字に満たない部分には、空白文字(16進で0x20)を埋める。
具体的なリソース・タイプの値としては、次のようなものがある。
名前 | 値(16進数) | タイプ | 使用方法 |
---|---|---|---|
<コンピュータ名> | 00 | ユニーク | ワークステーション・サービス |
<01><02>__MSBROWSE__<02>* | 01 | グループ | マスタ・ブラウザ |
<コンピュータ名> | 03 | ユニーク | メッセンジャー・サービス |
<コンピュータ名> | 06 | ユニーク | RASサーバ・サービス |
<コンピュータ名> | 1F | ユニーク | NetDDEサービス |
<コンピュータ名> | 20 | ユニーク | ファイル・サーバ・サービス |
<コンピュータ名> | 21 | ユニーク | RASクライアント・サービス |
<コンピュータ名> | 22 | ユニーク | Microsoft Exchange Interchange(MSMailコネクタ) |
<コンピュータ名> | 23 | ユニーク | Microsoft Exchangeストア |
<コンピュータ名> | 43 | ユニーク | SMS(Systems Management Server)クライアント・リモート・コントロール |
<コンピュータ名> | 87 | ユニーク | Microsoft Exchange MTA(Message Transfer Agent) |
<コンピュータ名> | BE | ユニーク | ネットワーク・モニタ・エージェント |
<ドメイン名> | 00 | グループ | ドメイン名 |
<ドメイン名> | 1B | ユニーク | ドメイン・マスタ・ブラウザ |
<ドメイン名> | 1C | グループ | ドメイン・コントローラ |
<ドメイン名> | 1D | ユニーク | マスタ・ブラウザ |
<ドメイン名> | 1E | グループ | ブラウザ・サーバ/ポテンシャル・ブラウザ・サーバ |
INet~Services | 1C | グループ | IIS(Internet Information Services) |
IS~<コンピュータ名> | 00 | ユニーク | IIS(Internet Information Services) |
NetBIOSリソース・タイプ(主要なもののみ) * <01>、<02>は、1byteの0x01、0x02(16進数表現)という数値を表す。 |
リソース・タイプの詳細については、次のサポート技術情報を参照されたい。
表中の「名前」の項目にある「<コンピュータ名>」と「<ドメイン名>」の部分には、それぞれ任意のコンピュータ名とドメイン名が入る。従って例えば、「PC01」という名前のコンピュータがあり、そのコンピュータがワークステーション・サービス(ファイル共有を利用するクライアント)とサーバ・サービス(共有ファイルを公開するサーバ)の双方を登録しているときには、それぞれNetBIOS名として「PC01<00>」「PC01<20>」が使われることになる。なお「PC01」の場合、NetBIOS名の5byte目から15byte目までが空欄になるが、このような場合には、スペース(16進で0x20)を埋め込むことになっている。このように同じ名前を使用しても、リソース・タイプの値が異なれば、NetBIOS名全体としては異なる値になるから、それぞれを識別できる。つまり同じ名前(コンピュータ名)を使っても、リソース・タイプを変えることで、同じコンピュータが提供する異なるサービスを識別できるようになるわけだ。TCP/IPでいえば、同一のIPアドレスに複数のポート番号を割り当て、異なるサービスを識別可能にするポート番号のような役割を果たすと考えればよいだろう。
「NetBIOSユニーク名」と「NetBIOSグループ名」
上表の「タイプ」の列を見ると、「ユニーク」と「グループ」という2種類があることが分かる。これまでの説明では、同一ネットワーク内では同じNetBIOS名を使えないとしてきたが、これは表中の「ユニーク」に対応する項目を指している。つまり、ワークステーション・サービスやサーバ・サービスではユニークな名前を付ける必要がある。
これに対し、複数のコンピュータやサービスに対し、同じNetBIOS名を割り当てられるものがある。これが「グループ」と表記したもので、例えばネットワーク内のコンピュータ一覧を保持しているブラウザ(の候補となるコンピュータ)を表す「<ドメイン名><1E>」や、ドメイン/ワークグループ名を表す「<ドメイン名><00>」などがこれに当たる。同じグループ名が付けられたコンピュータやサービスは、同一のグループとして管理することができ、そのグループを対象として一括処理を実行できるようになる。分かりやすいところでは、複数のコンピュータをひとまとめに管理するドメインやワークグループなどは、NetBIOSネットワークの内部では、このグループ名を使って管理されることになる。
以後本稿では、誤解を避けるため、それがユニーク名なのか、グループ名なのかを明確に表記し分ける必要があるときには、それぞれ「NetBIOSユニーク名」「NetBIOSグループ名」と表記することにする。
どうやってNetBIOS名がユニークであることを保証するのか?
NetBIOSネットワークにおいて、特定のコンピュータと通信したいときには、相手のコンピュータに付けられたNetBIOSユニーク名を頼りにアドレッシングしなければならない。この場合のNetBIOSユニーク名は、電話でいうところの電話番号のようなものであるから、同じ電話番号を持つ電話機が世界に2つとないのと同様に、NetBIOSユニーク名がネットワーク内で「ユニーク」であることを保証しなければならない。さもなければ正しい通信は行えない。
しかしコンピュータ名は任意の文字列であり、ネットワークOSのインストール時にユーザーが自由に入力可能なものなので、統一的な管理を行わないかぎり、名前はユーザーによってまったく任意に付けられてしまう可能性がある。このように付けられた名前が、ネットワーク内でユニークであることをどうやって保証するのだろうか?
手元にWindowsネットワークがあるなら、試しに、重複するコンピュータ名を別のコンピュータに割り当ててシステムを起動してみよう。すると次のようなエラー・ダイアログが表示されるはずだ。
名前の衝突を知らせるエラー・メッセージボックス
すでに「DAPC100」というコンピュータが存在するWindowsドメイン・ネットワークに対して、同じ「DAPC100」という名前を付けたコンピュータをネットワークに接続しようとしたところ、このようなエラーが発生した。
このエラーから分かるとおり、NetBIOSネットワークでは、コンピュータがネットワークに参加するとき、自身のNetBIOS名が、ほかのコンピュータのそれと衝突していないかどうかを検査している。そして名前が衝突しているときには、その名前でのネットワークへの接続が許可されない。このようにして、NetBIOSネットワークでは、その名前がユニークであることを保証しているのである。
Copyright© Digital Advantage Corp. All Rights Reserved.