第5回 NetBIOSサービスを利用した通信の実際:基礎から学ぶWindowsネットワーク(3/3 ページ)
NetBIOSコマンドを利用した通信手順とはどのようなものか? いくつかの具体例をもとに、実際のやりとりを概観する。
通信路を確保してデータ交換を行うコネクション型通信に対し、データグラム型通信は、相手の状態とは無関係に(相手が受信の準備ができていなくても)、送信側から受信側に対して一方的にデータを送信する通信方法だった。従ってデータグラム通信では、相手が正しくデータを受け取ったかどうかは分からない。つまり信頼性は保証されない「送りっぱなし」の通信方法である。
NetBIOSデータグラム・サービスでは、特定のコンピュータ(プロセス)を指定してデータを送信することもできるし、グループ名を指定して特定のグループにデータを送信することも、相手を指定せずにネットワーク内のすべてのコンピュータにデータを送信(つまりブロードキャスト)することもできる。
このうち最初は、通信相手を指定したデータグラム通信について見てみよう。先ほどと同様に、NetBIOS APIを使用した通信手順を図示すると次のようになる。
通信相手を指定したデータグラム通信の手順
最初に受信側ステーションがRECEIVE DATAGRAMを呼び出して受信可能状態になり、送信側ステーションがSEND DATAGRAMを呼び出す。すると送信データが受信側データ・バッファにコピーされ、RECEIVE DATAGRAMとSEND DATAGRAMがそれぞれ呼び出し元にリターンする。
図から分かるとおり、まずは受信側ステーションのNetBIOSアプリケーションが、自身の名前(名前識別番号=自身の名前をADD NAMEコマンドで登録した際の戻り値として得た値)とデータ・バッファへのポインタ、バッファ・サイズをパラメータとして指定し、RECEIVE DATAGRAMコマンドを呼び出す。これにより、受信側ステーションは、送信側ステーションからのデータ送信要求を受けることが可能になる。データ・バッファは、NetBIOSアプリケーションが用意するメモリ領域で、相手から送信されたデータをコピー(取得)するためのものである。
一方、送信側ステーションのアプリケーションは、名前識別番号と、送信データを格納しているデータ・バッファへのポインタ、バッファ・サイズ、送信相手のステーション名(NetBIOS名)をパラメータとして指定して、SEND DATAGRAMコマンドを呼び出す。するとNetBIOSプロトコル・ドライバは、バッファから送信データを読み出してNetBIOSフレームを構築し、ネットワークに送信する。
データの送信要求を受けた受信側ステーションのNetBIOSプロトコル・ドライバは、それが自身へのデータ送信であることを識別したら、フレームからデータを読み出し、RECEIVE DATAGRAMコマンドで与えられたポインタを使って、バッファにデータをコピーし、RECEIVE DATAGRAMコマンド呼び出しからリターンする。この際には、受信したデータのサイズ、データを送信した相手のステーション名(NetBIOS名)が戻り値として返される。
データグラム・サービスを利用したブロードキャスト
次は、NetBIOSデータグラム・サービスを利用したブロードキャスト通信について見てみよう。同様に、通信手順は次のようになる。
データグラム・サービスを利用したブロードキャストの手順
ブロードキャストでは、ネットワークに存在するすべてのコンピュータに対してデータが送信される。データを受信可能になっているすべてのコンピュータは、送信されたデータを受信する。
ブロードキャストを受け付けるステーションのアプリケーションは、RECEIVE BROADCAST DATAGRAMコマンドを呼び出してブロードキャストの受信に備える。この際パラメータとしては、自身の名前(名前識別番号)、受信データを取得するためのバッファへのポインタ、バッファ・サイズを指定する。
ブロードキャスト送信を行うアプリケーションは、SEND BROADCAST DATAGRAMコマンドを呼び出す。パラメータとしては、名前識別番号、送信データを格納したバッファへのポインタ、バッファ・サイズ(送信データのサイズ)を指定する。ブロードキャストは、ネットワーク内のすべてのコンピュータを対象とするデータ送信なので、送信先コンピュータを指定する必要はない。こうして呼び出されたNetBIOSプロトコル・ドライバは、バッファ・ポインタからデータを読み出し、ネットワーク・フレームを構成して送信する。
RECEIVE BROADCAST DATAGRAMコマンドを呼び出しによって、ブロードキャストを受信可能になっているステーションは、ブロードキャスト・フレームを受け取ると、フレーム内のデータを読み出し、RECEIVE BROADCAST DATAGRAMコマンドのパラメータとして与えられたバッファにこれをコピーし、RECEIVE BROADCAST DATAGRAMコマンドからリターンする。このとき戻り値としては、送信データのデータ・サイズと、送信元ステーションの名前(NetBIOS名)が与えられる。この戻り値から、ブロードキャストを送信した送信元コンピュータを特定することができる。
時代の要求に従って拡張されたNetBIOS
以上、これまで3回にわたって、Windowsネットワークの基礎の基礎であるNetBIOSについて概観してきた。細かくはともかく、通信先コンピュータなどを識別するために、系統的な管理が難しい任意の文字列を使っているということ、BIOS拡張に端を発する極めてプリミティブなNetBIOSコマンドによって通信が実現されているということには驚かされる。
何台かのコンピュータを接続して、データをやりとりできるだけで満足していた初期のネットワークならともかく、そのような原始的なしくみを核として、現在のような複雑なWindowsネットワークが構築され、運用されているというのも驚きである。
読者のご想像どおり、現在のWindowsネットワークは、確かにこれまでに述べたNetBIOSを核としながらも、時代の要求に応じてさまざまな拡張を施して現在に至っている。その最たるものは、インターネットの基本プロトコルであるTCP/IPに対応したことだろう。これは、NetBIOS over TCP/IP(NBT)と呼ばれるトランスポート・プロトコルである。名前が示すとおり、このプロトコルは、TCP/IPネットワークを使って、NetBIOSによるネットワーク制御を可能にしようというものだ。最新のWindows XPでは、デフォルトでNBTのみがインストールされるようになった(かつてはWindowsネットワークの標準トランスポート・プロトコルだったNetBEUIは、Windows XPインストールCDの隅にひっそり収録されているが、明示的にインストールしないかぎりWindowsには組み込まれない。具体的な方法については「TIPS―Windows XPでNetBEUIプロトコルを利用する方法」を参照)。
次回からは、このNBTを理解するための第一歩として、TCP/IPの基礎について学ぶことにする。
Copyright© Digital Advantage Corp. All Rights Reserved.