第17回 LLCとNetBEUIプロトコル:基礎から学ぶWindowsネットワーク(2/3 ページ)
NetBEUIとLLCは初期のWinネットワークを支えた核心プロトコルだ。これらの知識は現在のWinネットワークの理解にも欠かせない。
LLC(論理リンク制御、Logical Link Control)副層は、OSI参照モデルでいえば、データリンク層の最上部に位置している。データリンク層(と物理層)は物理的なネットワーク媒体を表す層であるが、LAN技術の標準化を進めるIEEE 802ワーキング・グループでは、データリンク層を上位のLLC層と下位のMAC層の2つに分け、それぞれ別々に標準化している。
このLLC副層については、通常はあまり知っておく必要はないのだが、NetBEUIのパケットをキャプチャして解析する場合には必ず目にすることになるので、ここで簡単に説明しておく。
このように、LLC副層が設けられているのは、物理的なネットワーク媒体によらず、上位層(ネットワーク層)からネットワーク媒体を同じ手順で利用できるようにするためである。物理的なネットワーク媒体としては、イーサネット(IEEE 802.3)やToken Ringネットワーク(IEEE 802.5)、HDLC、FDDI、ATM、DSL、シリアル回線(PPP、SLIP)、無線LANなどを始めとして、さまざまなものが存在する。各ネットワーク媒体が提供している機能にはそれぞれ大きな違いがあるが、それらの違いを吸収して、上位層から統一的に扱えるようにするためにLLC副層が設けられている。
例えばイーサネットは(信頼性のない)データグラム指向の通信しか行えない、非常にシンプルなネットワーク媒体であるが、ほかのネットワーク媒体ではセッション指向の通信を行ったり、受信確認付きのデータグラム通信を行ったり、ルーティングを行うなどといった、高度な機能を持っているものがある。これらの機能を統合して取り扱えるようにするために用意されているのがLLC副層である。
LLC層が提供するサービスには、大きく分けると次の3つのタイプがある(これらのサービスは、主にHDLCが提供している機能を基にしている)。
■タイプ1
事前にセッション確立の不要なデータグラム型通信。データの受信確認やフロー制御、エラー時の再送などは不要。タイプ1は必須(すべての媒体で実装する必要がある)。
■タイプ2
事前にセッション(データ・リンク)を確立してからデータを送信する双方向のセッション指向の通信。データの受信確認やエラー時の再送などを行う。このため、送信するデータに7bitの順序番号を付け、順番どおりに相手に届くよう制御したり、効率よい伝送のためにウィンドウ制御を行ったりする。タイプ2はオプション(媒体によっては利用できない)。
■タイプ3
事前にセッション確立の不要なデータグラム型の通信。受信確認は必要。ユーザー・データの送信ではなく、主に制御情報の通知などに使われる。タイプ3はオプション(媒体によっては利用できない)。
タイプ1は必須だが、媒体や実装によってはタイプ2やタイプ3は利用できないこともある。
タイプ2では事前にセッションを確立してデータを送信し、さらに受信確認なども行うことになっている。だが例えばイーサネットはもともとこのような機能を持っていないので、必要ならばLLCのレベルでこれを実装する必要がある。実際のイーサネット上のNetBEUIパケットをキャプチャして観測すると、このタイプ2のサービスも利用されていることが確認できる。
LLCの構造
以下に具体的なLLCの構造を示しておく。
LLCフレームの構造
送信するコマンドやデータに応じてこの3種類のフォーマットが利用される。U(Unnumbered)はデータグラム通信に、S(Supervisor)フォーマットは制御データのやりとりに、I(Information)フォーマットはセッション指向の通信にそれぞれ利用される。
DSAP(Destination Service Access Point):あて先サービス
SSAP(Source Service Access Point):送信元サービス
N(S):送信シーケンス(Send Sequence)番号
N(R):受信シーケンス(Receive Sequence)番号
M、PF、S:各種制御情報
LLCのパケットにはその用途に応じていくつかのフォーマットがあるが、基本的にはこの3種類が使われる。データグラム通信にはUフォーマットが、セッション指向通信にはIフォーマットがそれぞれ利用される。
LLCパケットの先頭にはDSAPとSSAPが置かれ(それぞれ1byte)、それに続いて1byteもしくは2bytes(および必要ならばオプションのパラメータ)の制御フィールドが続く。以下、簡単に構造を解説しておく。
■DSAP(Destination Service Access Point)/SSAP(Source Service Access Point)
DSAPやSSAPは、あて先や送信元の「サービス」を表すためのフィールドである。具体的には「プロトコル」といった方が分かりやすいであろうか。NetBIOSのパケットを送信する場合はDSAPもSSAPもともに「0xF0」となる(ただし最下位bitはほかの目的に使われるので、0xF0か0xF1のいずれかになる可能性がある)。同じマシン上でほかのサービスが動作している場合は、異なるDSAPやSSAPが利用されることになる(例:NetWareならば0xE0)。利用可能なプロトコル番号は7bit分(最大128)しかないが、これ以上必要な場合はSNAP(Sub-Network Access Protocol、値は0xAA)を利用して2bytesの拡張プロトコル・フィールドをデータ領域中に用意し、そこにプロトコル番号をセットする。このようなSNAP形式はTCP/IPをLLC上に実装する場合などに利用される。
■N(Send Sequence)/N(Receive Sequence)
タイプ2のサービスを実現するために、送信するデータ・パケットに順序付けを行う場合、これらのフィールドはパケットの番号(「フレーム番号」という)を表すために利用される。パケットを送信するたびにN(Send)番号フィールドをインクリメントさせ、受信した側ではN(Receive)をインクリメントして応答することにより、送受信するパケットの順序制御を行う。
フラグ・フィールドを除くと、非常にシンプルな構成となっていることが分かる。DSAPやSSAPは、サービスの種類を表すためのプロトコル番号フィールドである。NetBIOSパケットをやりとりする場合は、いずれも0xF0という数値をセットしておく。
「N(S)」と「N(R)」という2つの数値フィールド(いずれも7bit幅)は、タイプ2のサービスを実現するために利用される、シーケンス番号フィールドである。セッション指向の通信では、送受信するパケットにシーケンス番号を割り当て、パケットが正しく順序どおりに届くことを保証している。イーサネットにはない機能なのでLLC層(データリンク層)でこのような機能をわざわざ実現するのは不思議に思われるかもしれないが、例えばToken RingやHDLCなどではこれらの機能はもともとすべて持っており、LLC層を用意したからといってオーバーヘッドはほとんどない(イーサネットの場合はソフトウェア的な補助が必要)。
LLCパケットの例
それでは実際のLLCパケットの例を見てみよう。次の画面は一番シンプルなUフォーマットのLLCパケットの例である。たった3bytesしかない、非常にシンプルな構造になっている。この場合は上位のペイロード(NetBIOSデータ)が何もないので、キャプチャしたパケットの総サイズは、イーサネットの14bytes(6bytesのMACアドレスが2つと、0x0003というタイプのみしか含まれていない)と合わせて、全部で17bytesしかない。
LLCの例1(Uフォーマット)
イーサネット上にUフォーマットのLLCパケットが1つだけ載っている場合の例。イーサネットのヘッダ部分は全部で14bytesであり、その直後にある3bytesがLLCパケット。これは3bytesの最小LLCパケットの例。
(1)DSAP(あて先プロトコル)は0xF0(NetBIOS)。
(2)SSAP(ソース・プロトコル)も0xF0(NetBIOS)。
(3)Uフォーマットのフレーム。
(4)サイズは3bytesしかない。直後に続く0はイーサネット・パケット受信時のダミー・データであり、意味はない。イーサネットではパケット・サイズが最小でも60bytesになるようにダミーのデータがパディングされる。
次はもう少し複雑な例として、Iフォーマット(セッション指向のデータ送信)のLLCパケットの例を挙げる。この場合はLLCヘッダに続いて、上位のデータ(実際にはNetBEUIヘッダとそのデータ)が続いている。LLCヘッダ自体は全部で4bytesであり、後半の2bytesには送信シーケンス番号と受信シーケンス番号が含まれている。
LLCの例2(Iフォーマット)
IフォーマットのLLCパケットの例。上位プロトコルとしてNetBEUIのパケットが載っている。この場合はシーケンス番号によって送信したフレームの順番が管理されており、フロー制御や信頼性のあるセッション・サービスを提供している。
(1)次に送信するフレームのシーケンス番号。
(2)フレーム・タイプはIフォーマット。
(3)次に受信するフレームのシーケンス番号。
(4)上位プロトコルはNetBEUI(NetBIOS)。
(5)LLCフレームのサイズは4bytesしかない。
Copyright© Digital Advantage Corp. All Rights Reserved.