第3回 Windows LANの核心、NetBIOSを理解する(その1):基礎から学ぶWindowsネットワーク(3/3 ページ)
いまなおWindowsネットワークの原点として機能しているNetBIOS。前編はネットワークの基本とNetBIOSの概要を解説。
PCにおけるネットワーク・アプリケーション・インターフェイスの原点とも呼べるNetBIOSには、非常にシンプルに、いま述べたアドレッシングの機能やデータグラム型通信の機能、コネクション指向通信の機能が実装されている。なおNetBIOSのコネクション指向通信では、通信路を「セッション」と呼び、これを使用するコネクション指向通信サービスは「セッション・サービス」と呼んでいる。以後この連載では、NetBIOSのコネクション指向通信の呼称を「セッション・サービス」で統一する。
NetBIOSにおけるデータグラム・サービスと、セッション・サービスの特徴をまとめると次のようになる。
データグラム・サービス(コネクションレス指向) | セッション・サービス(コネクション指向) | ||
---|---|---|---|
通信目的 | 一方的にデータを送るだけで、必ずしも応答を要求しないような通信や、(少々エラーが発生してもよいので)なるべく素早く相手にデータなどを届ける通信のために使う | 2つのアプリケーション間で確実にデータを(双方向で)やり取りするために使う。最もよく使われる通信形態 | |
プロトコルのオーバーヘッド | 小さい。接続の確立処理などを行うことなく、すぐにデータ送信ができる。応答確認やエラー検出なども行わない | 大きい。通信する相手とのセッション(接続)を確立してから通信を開始する。また応答確認やエラー検出、再送、エラー訂正処理などを行う | |
信頼性 | 低い。エラーが発生しても再送処理などは行われない(必要ならば上位のアプリケーションで対応する) | 高い。エラー検出や、エラー訂正処理などが行われる | |
適する通信の種類 | 1対多のブロードキャストや、信頼性よりもリアルタイム性が要求されるような通信 | データを間違いなくやりとりする必要がある通信 | |
NetBIOSデータ通信サービスの2つの種類と特徴 |
ネットワーク・アプリケーションは、必要に応じてこれら2種類のデータ通信サービスを使い分ける。通常は2つのアプリケーション間だけでデータをやり取りすることが多いので(例えばサーバとクライアント間の通信とか、何らかのファイルやデータをやりとりするようなアプリケーションなど)、このような用途ではセッション・サービスに基づく通信が使われる。だが、ほかのマシンに対して(自分の持つ何らかの情報を)ブロードキャストしたいとか、ビデオ配信のような、リアルタイム性が要求される用途では(リアルタイムに届かなかったような情報は、後から届いても意味がないということ)、データグラム通信が使われる。
NCB(Network Control Block)
NetBIOSを利用するには、ほかのシステムBIOSなどと同様に、実行したいコマンドや、必要なパラメータなどを自身で確保したメモリ・ブロック内のフィールドに設定し、このメモリ・ブロックのポインタを指定してNetBIOSインターフェイスを呼び出す。NetBIOSインターフェイスで使用するこのメモリ・ブロックは「NCB(Network Control Block)」と呼ばれる。通信に必要な発信元の情報や、あて先の情報などは、すべてこのNCBと呼ばれるメモリ・ブロック内のフィールド値としてやりとりされる。
ここで詳しくは説明しないが、興味がある方は、本稿冒頭でご紹介した「NetBIOS SDK」のNCBの解説ページ(英文)を参照してみていただきたい。このページでは、NCBの構造や各フィールドの意味と使い方、利用可能なコマンド一覧(詳細はすぐ次で述べる)、リターン・コード一覧などが詳しく解説されている。これをくまなく読めば、NetBIOSの全貌が分かるといっても過言ではない。予備知識なしに読みこなすのは難しいにしても、このページを斜め読みしていただければ、NetBIOSがどのようなインターフェイスを備えたAPIなのか、概要を把握してもらえると思う。
NetBIOSコマンド
前出のNCBの解説ページには、すべてのコマンドが解説されているが、ここでは代表的なものだけをいくつか選んで表にまとめてみた。すでに述べたとおり、RESETやCANCELなどの全般的に使用されるコマンドを除けば、NetBIOSが提供するサービスは、以下のように名前関連サービス、セッション・サービス、データグラム・サービスの3つに大別できる。
コマンド名 | コマンドのはたらき | |
---|---|---|
一般 | ||
RESET | NetBIOS名を管理するテーブル、セッション・テーブルをリセットし、ステーションを再構成する | |
CANCEL | 直前に行った要求をキャンセルする | |
名前関連サービス | ||
ADD NAME | ユニーク名(NetBIOS名)を登録する | |
ADD GROUP NAME | グループ名(NetBIOS名)を登録する | |
DELETE NAME | 登録されている名前を削除する | |
セッション・サービス | ||
CALL | コネクションの確立要求を行う | |
LISTEN | ステーションをコネクション可能な状態にする | |
HANG UP | 確立されたコネクションを終了する | |
SEND | 確立されたコネクションを使ってデータを送信する | |
RECEIVE | 指定したコネクションを使ってデータを受信する | |
RECEIVE ANY | 任意のコネクションを使ってデータを受信する | |
SESSION STATUS | セッションの状態を取得する | |
データグラム・サービス | ||
SEND DATAGRAM | 特定のステーション、またはグループに向けてデータグラムを送信する。あて先としてグループ名を指定したときには、そのグループの各メンバがデータグラムを受信する | |
SEND BROADCAST DATAGRAM | ネットワーク内のすべてのステーションに向けてデータグラムを送信する | |
RECEIVE DATAGRAM | このステーションに登録されたNetBIOS名に向けたデータグラムを受信する | |
RECEIVE BROADCAST DATAGRAM | SEND BROADCAST DATAGRAMによって送信されたブロードキャストを受信する。ブロードキャスト・データグラムがステーションに到着しても、アプリケーションがこのコマンドを実行しなければ、そのデータグラムは破棄される |
ネットワーク・アプリケーションは、これらのNetBIOSコマンドを呼び出しながら、目的とする通信処理を実行することになる。上表から、コマンド群は非常にシンプルであることが分かるだろう。
次回は、名前関連サービス、セッション・サービス、データグラム・サービスのそれぞれについて、名前登録やセッションの確立、データ通信などが、これらのコマンドでどのように実現されるのかを見ていくことにする。
Copyright© Digital Advantage Corp. All Rights Reserved.