LAN技術研究室(LANに関心がある人のために情報を提供しているサイト)

スポンサードリンク


LANの初歩

NetBIOS

NetBIOSプロトコルとして独立させたNetBEUIに関しては、NetBEUIのページで既に述べました。
現在では、NetBIOSは、アプリケーションプログラムから利用される単なるAPIApplication Program Interface)という位置付けになります。
NetBIOSAPIは、NetBEUIIPX/SPXNetBIOS over TCP/IPNBTまたはNetBT)、過去の遺物であるMS−DOSの環境下でも利用できます。
MS−DOS環境下では、LANマネージャーNetWareのNetxワークステーションがあります。
以下に、Windows® 95とNetBEUIの環境下でのNetBEUINetBIOSの関係について、プロトコルレベルのレイヤ構造ではなく、プログラムレベルのレイヤ構造について表で示します。

NetBIOSのプログラムレベルでの階層構造
リアルモードのNetBIOSアプリケーション Win32 NetBIOSアプリケーション Win16 NetBIOSアプリケーション
NETBIOS.DLL
VNETBIOS.386
VNETBEUI.VXD
NDIS.VXD
NDIS3.1ドライバー

上の表が示しているように、何らかのNetBIOSアプリケーションプログラムだけを作れば、プロトコルレベルのすべての処理を下位のDLL(ダイナミック・リンク・ライブラリー)やVで始まる仮想デバイスドライバーなどのドライバープログラムがやってくれます。
従って、プログラマーはNetBIOSAPIの使い方を学んでプログラムを作るだけで良いことになります。
NetBIOSは、主にネームサービスセションサービス、及び、データグラムサービスの3つのサービスから成り立っています。
他には、ネットワークアダプタのステータスを取得したりするなどのサービスもあります。
これらのサービスについて以下で簡単に説明します。

  1. ネームサービス


  2. ネームサービスを利用することで、ネットワーク全体で唯一の名前として識別できる名前を登録したり、削除することができます。
    この名前をあるグループに含めることもできます。
    グループの名前を登録したり、削除することもできます。
    グループ名は、複数のステーションに付けられます。
    グループの名前やその仲間の名前を登録したり、削除することができることになります。
    このような名前のことをNetBIOS名と言います。

  3. セションサービス


  4. セションサービスは、セションのオープン、クローズ、データ通信のサービスを提供しています。
    ただし、事前にネームサービスを利用してネットワーク全体で唯一の名前を登録しておく必要があります。
    その次にセションのオープンを行っておく必要があります。
    1回の送受信で、128KB(キロバイト)−2バイト=131070バイトまでのデータバッファを作って送受信できます。
    セションサービスでは、コネクション型のデータ転送ができます。
    そのため、通信中のデータ保証があります。
    通信を終了したい場合は、最後にセションのクローズを行います。

  5. データグラムサービス


  6. データグラムサービスでは、前述のセションサービスとは異なり、セションのオープンやクローズの処理はなく、事前にネームサービスを利用してネットワーク全体で唯一の名前を登録しておけば、いきなりデータ通信を始められます。
    1回の送受信で、64KB−1バイト=65535バイトまでのデータの送受信ができます。
    データグラムサービスでは、コネクションレス型のデータ転送になるため、通信中のデータ保証がありません。
    ネットワーク上の一つのステーションにも、複数のステーションにもデータを送れます。
    例えば、「ニャロメ」というグループ名があったとして、「ミケちゃん」とか「トラちゃん」が「ニャロメ」グループに属していたなら、「トムちゃん」が「ミケちゃん」と「トラちゃん」に共通のメッセージを送りたい場合は、「ニャロメ」というグループ名を指定してメッセージを送信すればこれらの2台のステーションに届いてしまいます。

  7. その他のサービス


  8. NetBIOSAPIは、LANアダプタに割り当てられているMACアドレスを取得したい場合や、LANアダプタをリセットしたい場合のサービスも提供しています。
    後ろにNetBIOSコマンド一覧表を書いておきましたが、LANアダプタをリセットしたい場合は、一番最初の行のNCBRESETというコマンドを実行します。
    MACアドレスを取得したい場合は、その下の行にあるNCBASTATというコマンドを実行します。
    何れの場合も、NCB構造体に上記のコマンド名と必要な数値を設定して、NetBIOSAPIが提供しているNetbiosというC言語の関数を呼び出すことでコマンドを実行できます。
    最近ではこのような方法でNetBIOSAPIを利用します。

これらのサービスは、実際にはアプリケーションプログラムを作ることで利用できます。
具体的には、以下のアセンブリ言語でNetBIOSを呼び出します。

int 5c

NCBNetwork Control Block)構造体に適切な値や文字列を設定して、上記のアセンブリ言語の命令を実行すると、前述のサービスがいろいろ利用できます。
上の例は、BIOSコールの記述で、intというアセンブリ言語の命令を使用しています。
従って、元々NetBIOSという名前からもわかるように、5Cという16進数の番号で示される特定のBIOSなのです。
元々BIOSの一種だったので、NetBIOSには、BIOSの名前が残っています。
前述のプログラムの例は、MS−DOS時代のプログラムの例で、私(ケロ丸)は昔NetBIOSコールの部分とその前後だけアセンブリ言語で書いていました。
MS−DOS、Windows®3.1、及び、NetWareの環境でテストしました。
通信全体をC言語で書いた記憶があります。
その後、Windows NT®時代にもNetBIOSAPIを利用したネットワークプログラムをまた作りました。
この頃は、NetBIOSAPIが提供しているC言語の関数や前述のNCB構造体を利用して通信を行っていました。
今では、このスタイルでプログラムを作成します。
32ビットアプリケーションプログラムからは前述のBIOSコールはできませんから、NetBIOSAPIが提供しているC言語の関数を利用することになります。
具体的には、前述したNetbiosというC言語の関数を呼び出すことでNetBIOSコマンドを実行できます。
恐らく、Windows® 2000以降でも同じだと思います。
NCB構造体について説明しておいても良いのですが、あくまでもLANの初歩としての解説なのでここまでにしておきます。
最後に、NetBIOSで使用されるコマンド一覧表を以下に示しておきます。

NetBIOSコマンド一覧表
コマンド同期コード【16進数】非同期コード【16進数】
NCBRESET32
NCBASTAT33B3
NCBCANCEL35
NCBUNLINK70
NCBADDNAME30B0
NCBDELNAME31B1
NCBADDGRNAME36B6
NCBFINDNAME78F8
NCBCALL1090
NCBLISTEN1191
NCBHANGUP1292
NCBSEND1494
NCBRECV1595
NCBRECVANY1696
NCBCHAINSEND72F2
NCBSSTAT34B4
NCBDGSEND20A0
NCBDGRECV21A1
NCBDGSENDBC22A2
NCBDGRECVBC23A3


ページトップ
サイトマップ(LAN技術研究室の案内図)
ネットワーク技術用語集へ行く
LAN技術研究室のトップページ

© 2007 Toyozi Masuda All rights reserved.