連載
» 2014年12月11日 17時11分 UPDATE

Windowsネットワークの基礎:第4回 WindowsネットワークとNetBIOS

WindowsネットワークはNetBIOSと呼ばれる古い技術をベースにしている。そのため長いコンピューター名が使えないとか、ネットワーク上でユニークな名前が要求されるなどの制約がある。

[打越浩幸,デジタルアドバンテージ]
Windowsネットワークの基礎
Windows Server Insider


「Windowsネットワークの基礎」のインデックス

連載目次

 前回は、共有リソースを見つける「コンピューターブラウザー」と「ネットワーク探索」サービスについて解説した。今回からは、ネットワークプロトコルの内部について見ていく。今回は、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を使った通信形態は次のようになる。

  1. システム開始時に、NetBIOSの名前登録機能を使ってネットワークに参加する
  2. NetBIOS名を指定して通信相手を特定し、通信パケットを送るという操作を繰り返す
  3. システム終了時に、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名とリソースタイプ
当初の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について見ていく。


「Windowsネットワークの基礎」のインデックス

Windowsネットワークの基礎

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。