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

スポンサードリンク


LANの初歩

ネットワーク層プロトコル

NetBEUI

今度は、メーカー固有のネットワーク層プロトコルについて解説しましょう。
ここでは、代表的なプロトコルだけをあげます。
Microsoft®では、NetBEUINetBIOS Extended User Interface)というものがあります。
NetBEUIは、Microsoft®が開発したわけではないのですが、Windows® XPが登場するまでは、私(ケロ丸)も含めてたっぷりお世話になったのではないでしょうか。
元々IBMのNetBIOSをMicrosoft®などが拡張したもので、Microsoft®のネットワークではよく使われていました。
また、NetBIOSは、Microsoft®のネットワークだけではなく、それ以外ではNovellなどがあります。
Novell NetWareでは、NetBIOS over IPX/SPXとして存在します。
余談ですが、昔、私(ケロ丸)は、NetWareというNovellネットワークOSの環境下でNetBIOSAPIを使用したプログラムを作って試験したことがあります。
サーバー1台、クライアント2台用意して、適当な文字列を送信して受信するだけの単純なプログラムですが、うまくいきました。
この時は、MS-DOS+Windows®3.1(クライアントOS)、NetWare(Ver3.12J)(サーバーOS)のネットワークを使用していました。
その後もWindows NT®の環境下でも同様の実験を行い、その時のプログラムソースが残っていると思いますので、いつか当サイト(LAN技術研究室)で公開しようかと思っています。
それではまたNetBEUIの解説に戻ります。

今では、TCP/IPが主流なので、NetBIOS over TCP/IPがあることから、NetBEUIはあまり利用価値がなくなりました。
NetBEUIは、ネットビューイと読み、OSI参照モデルではレイヤ3のネットワーク層からレイヤ4のトランスポート層までに相当します。
ただし、NetBEUIは、経路選択の機能を有していません。つまり、ルーティングができません。
NetBEUIレイヤ3以上なので、レイヤ2以下は、イーサーネットがカバーします。
ここで、フレーム構造について触れる必要があります。
既にイーサーネットフレームの項目でMACフレームに関しては解説しました。
詳しくは、イーサーネットフレームを参照して下さい。
NetBEUIの説明のため、もう一度簡単に説明します。
MACフレームは、EthernetUIEEE802.3の2つの仕様に分かれ、それぞれフォーマットがやや異なります。
もう一度フレームフォーマットを以下に示します。

一般的なMACフレームEthernetII
終点MACアドレス始点MACアドレスイーサーネットタイプデータFCS

MACフレームIEEE802.3
終点MACアドレス始点MACアドレスフレーム DSAPSSAP制御 OUI上位プロトコルタイプ データFCS

終点MACアドレスからフレーム長までは、MACヘッダーと呼ばれ、DSAPSSAPと制御の部分は802.2LLCヘッダーと呼ばれ、OUIと上位プロトコルタイプの部分は802.2SNAPヘッダーと呼ばれます。
IEEE802.3仕様のフレームフォーマットでは、OSI参照モデルにおけるレイヤ2に相当するデータリンク層が以下のように2つの副層に分かれます。
以下の表では、OSI参照モデル階層を下位3階層のみ示しました。上位階層は説明上不要なので省略しました。

OSI参照モデルにおけるデータリンク層の構造
レイヤネットワーク層
レイヤ
データリンク層
LLC副層論理リンク制御副層
MAC副層メディアアクセス制御副層
レイヤ物理層

御覧のように、レイヤ2のデータリンク層には、2つのサブレイヤ副層)があります。
下の階層から解説します。
まず、MAC副層Media Access Control SubLayer)です。
MAC副層の任務は、実際に6オクテットMACアドレスMedia Access Control Address)を使用して、イーサーネット対応機器間の送受信を行うことです。
そのすぐ下の物理層とは違い、ちょっとソフトウェアらしいところがあります。
MACアドレスには、宛先と送信元の2つがあるので、お互いを識別できるようになっています。
次は、LLC副層Logical Link Control SubLayer)です。
物理層には、イーサーネット以外にも、トークンリングToken Ring】(IEEE802.5)、トークンバスToken Bus】(IEEE802.4)、無線LANIEEE802.11)、FDDIなどがあります。
ちなみに、IBMは、かつてNetBIOSトークンリングIEEE802.5)上にインプリメント(実装)したことがありました。
この時、上記のLLC副層を利用したNetBEUIというプロトコルの原型ができあがりました。
これによって、NetBIOSは、アプリケーションプログラムから利用される単なるAPIApplication Program Interface)という位置付けになり、NetBEUIなどのメーカー固有のプロトコルから切り離されました。
その後、NetBIOSは、トークンリングToken Ring】だけでがなく、イーサーネットEthernet】上にもインプリメントされるようになりました。
また、NetBIOS over TCP/IPNetBIOS over IPX/SPXなど、レイヤ3(ネットワーク層)以上のプロトコル上にもインプリメントされました。
トークンリングToken Ring】のころ、LLC副層上にインプリメントされたNetBEUIは、その後発展し、幾つかのバージョンができました。
そして、Windows NT®上にインプリメントされたNetBEUIは、現在ではNetBEUI FrameNBF)という名前のプロトコルになりました。
Windows NT®でも、ネットワークアプリケーションプログラムを開発するプログラマーにとっては、NetBIOSAPIを利用して従来に近いイメージでプログラムの作成ができます。
前述しましたが、私(ケロ丸)が昔Windows NT®の環境下でテストした自作のNetBIOSAPI使用のプログラムは、プロトコルとして見ると、NBFを使用していたのだと思います。
プロトコルアナライザーのようなプログラムで分析すれば、NBFのフォーマットのフレームが着信していることがわかると思います。
NBFのフォーマットのフレームに関する詳細は、後述します。
IBMNetBIOSからNBFまでの歴史的過程の解説はここまでにして、一旦前述のデータリンク層の二つの副層の解説に戻ります。
その後、再びNetBEUI FrameNBF)の解説の続きをします。

ところで、LLC副層では、物理層の違いや通信機器の違いも区別しなくても済むように、物理的な媒体を扱えるような仕組みを提供しています。
イーサーネットでも、10 BASE 510 BASE 210 BASE-Tなどの違いや中継装置の違いも区別しなくても済むようになっています。
LLC副層は、これらの違いを区別しなくてもその上の階層であるネットワーク層に位置する異なるプロトコルともデータのやり取りができる機能を提供しています。
サポートするプロトコルは、LSAPLink Service Access Point)で決まります。
上の「MACフレームIEEE802.3)」の表を御覧下さい。
DSAPDestination Service Access Point)とSSAPSource Service Access Point)に注目して下さい。
DSAPは宛先のサービスアクセスポイントを指し、SSAPは送信元のサービスアクセスポイントを指します。
最後は1オクテットの制御フィールドになっています。
DSAPSSAPには、LSAPの値が設定され、それぞれ1オクテットです。
LSAPの値には、802.2SNAPヘッダーがある場合は、それを示す16進数でAAという値が入ります。
しかし、そうとは限りません。
上位レイヤNovell NetWare関連プロトコルであるならE0、IBM NetBIOSであるならF0などがあります。
NetBEUIの場合は、NetBIOSと同じでF0です。
NetBEUIは、Windows NT®以降プロトコルの名前がNetBEUI FrameNBF)となりましたが、ここではNT系以外の古いWindows®も範疇に入れるため、NetBEUIという名前を使って解説を続けます。
上の「MACフレームIEEE802.3)」の表を御覧下さい。
NetBEUIの場合、MACフレームは、IEEE802.3仕様のフォーマットとなります。
また、NetBEUIの場合、802.2LLCヘッダーに続いて802.2SNAPヘッダーがありません。
代わりにNetBEUIヘッダーNBFヘッダー)があるので、DSAPSSAPに設定されるLSAPの値はF0になります。
なお、上記のAAとかF0とかいう数字は16進数ですが、16進数などコンピュータで良く扱う数の表記法については、10進数・16進数・2進数の相互変換計算の方法についてという項目で解説しています。
御覧になりたい方は、10進数・16進数・2進数の相互変換計算の方法についてをクリックして参照できます。

MACフレームの仕様がIEEE802.3の場合、以下の表のようにNetBEUIヘッダーの手前の802.2LLCヘッダーまではレイヤ2のデータリンク層に含まれます。

NetBEUIフレーム
MACフレーム802.2LLCヘッダーNetBEUIヘッダーNetBIOSデータ

次にNetBEUIヘッダーのフォーマットを以下に示します。

NetBEUIヘッダー
NetBEUIフレームの長さデリミタNetBEUIコマンドオプションデータxmit/resp宛先送信元

NetBEUIヘッダーの解説
NetBEUIフレームの長さ【2オクテットNetBEUIヘッダーとそれに続くデータまで含むNetBEUIフレームの長さ
デリミタ【2オクテット16進数でEFFFと決まっています。
NetBEUIコマンド【1オクテット(16進数2桁)】 この項目には、NetBEUIコマンドが設定されます。
このすぐ下のNetBEUIコマンド一覧表で示したように、NetBEUIコマンドは、NetBIOSの項目で後述するNetBIOSコマンドと似てはいる部分もありますが、NetBIOSコマンドはAPIのコマンドでNetBEUIコマンドとは異なります。
オプションデータ【3バイト】 コマンドに付随するオプションのデータ
xmit/resp【4バイト】送信したリクエストと受信したレスポンスの対応関係を示す1個か2個の数値が設定されます。
宛先【1バイトまたは16バイト】 NetBIOSセションサービスの場合だけ、1バイトのセション識別用のセション番号になりますが、それ以外のサービスでは16バイトの宛先のNetBIOS名になります。
送信元【1バイトまたは16バイト】 NetBIOSセションサービスの場合だけ、1バイトのセション識別用のセション番号になりますが、それ以外のサービスでは16バイトの送信元のNetBIOS名になります。

NetBEUIフレームの構造は、上記のようにシンプルです。
具体的には、ネットワークアプリケーションプログラムは、NetBIOSAPIを呼び出して、このNetBEUIフレームの各項目にデータを設定した後、LANに送信されるイメージとなります。
NetBEUIの下位のレイヤに位置するLLC副層における数値の設定項目と合わせても、NetBEUI自体は大したプロトコルでないことがわかります。非常にシンプルです。
NetBEUIヘッダーを見ても、宛先と送信元のNetBIOS名くらいしか相手を識別する手段はありません。
他の項目は、ほとんどが大した意味はありません。
さらにその下位の802.2LLCヘッダーでは、せいぜい16進数のF0を設定するくらいが重要である以外にこれも大した項目はありません。

NetBEUIコマンド一覧表(コマンドコード順)
コマンド名コマンドコード【16進数】コマンドの種類コマンドの説明
ADD_GROUP_NAME_QUERY00名前管理コマンドNetBIOSグループ名の多重登録をチェックする。
ADD_NAME_QUERY01名前管理コマンドNetBIOS名の多重登録をチェックする。
NAME_IN_CONFLICT02名前管理コマンド登録しようとしている名前が重複していることを意味する。
STATUS_QUERY03その他の管理コマンドリモート・ノードのステータスの問い合わせ
TERMINATE_TRACE
(リモート・ノードのみ)
07その他の管理コマンドリモート・ノードのみトレースを中止します。
DATAGRAM08データ通信関連コマンド指定の名前に対してコネクションレス型データ転送を行う。
DATAGRAM_BROADCAST09データ通信関連コマンドすべての名前に対してコネクションレス型データ転送を行う。
NAME_QUERY0Aセション関連コマンド名前の問い合わせを行い、セション確立の準備に入る。
ADD_NAME_RESPONSE0D名前管理コマンドADD_NAME_QUERYかADD_GROUP_NAME_QUERYに対する応答で名前が重複していることを意味する。
NAME_RECOGNIZED0Eセション関連コマンドNAME_QUERYに対する応答でセション確立の準備ができたことを通知する。
STATUS_RESPONSE0Fその他の管理コマンドSTATUS_QUERYに対する応答を意味する。
TERMINATE_TRACE13その他の管理コマンドローカル・ノードとリモート・ノードの何れのトレースも中止します。
DATA_ACK14データ通信関連コマンドDATA_ONLY_LASTに対する応答を意味する。
DATA_FIRST_MIDDLE15データ通信関連コマンド断片化されたデータを送信を意味し、最初か途中の断片を示す。
DATA_ONLY_LAST16データ通信関連コマンド断片化されていないデータの送信か、最後の断片化されたデータの送信を示す。
SESSION_CONFIRM17セション関連コマンドSESSION_INITIALIZEに対する応答で、セションの確立が成功したことを意味する。
SESSION_END18セション関連コマンドセションが終了したことを意味する。
SESSION_INITIALIZE19セション関連コマンドNAME_RECOGNIZEDに対する応答で、セションの初期化を意味する。
NO_RECEIVE1Aデータ通信関連コマンド送信の停止を要求する。
RECEIVE_OUTSTANDING1Bデータ通信関連コマンド受信の再開を要求する。
RECEIVE_CONTINUE1Cデータ通信関連コマンド受信保留中であることを通知する。
SESSION_ALIVE1Fセション関連コマンドセションがまだ生きていることを通知する。

ずいぶん長くなりましたが、NetBEUIというプロトコルに関して、だいたいお分かり頂けましたでしょうか。


ページトップ
ネットワーク層プロトコル[メニュー]へ戻る
サイトマップ(LAN技術研究室の案内図)
ネットワーク技術用語集へ行く
LAN技術研究室のトップページ

© 2007 Toyozi Masuda All rights reserved.