Netmon を使った DirectPlay ネットワーク トラフィックの監視
Netmon を使った DirectPlay ネットワーク トラフィックの監視
ゲームの開発中 (特にバグを解析しているとき) には、Microsoft® DirectPlay® のネットワーク トラフィックを監視すると役立つことがある。ネットワーク モニタは、ネットワーク トラフィックを分析するための標準ユーティリティである。DirectPlay メッセージングの 4 つのコンポーネント (サービス プロバイダ レイヤ、トランスポート レイヤ、セッション レイヤ、および音声レイヤ) を分析するため、DirectPlay にはネットワーク モニタを使った一連のパーサーが用意されている。
ネットワーク モニタと DirectPlay の連動
DirectPlay のプロトコル スタックには、3 つの基本レイヤがある。
- 音声レイヤとセッション レイヤは、スタックの最上位レベルを共有する。通常のメッセージングはセッション レイヤを通り、音声関連のメッセージングは音声レイヤを通る。
- トランスポート レイヤは、スタックの中位にある。音声とセッションのトラフィックは、どちらもこのレイヤを通る。メッセージの分割と再構成や、消失したパケットの再転送などの作業は、このレイヤが担当する。
- サービス プロバイダ レイヤは、スタックの一番下にある。すべてのメッセージングはこのレイヤで処理される。ネットワークとの通信は、このレイヤが担当する。たとえば、TCP/IP (Transmission Control Protocol/Internet Protocol) ネットワーキングの場合、サービス プロバイダは Winsock API (Windows Sockets アプリケーション プログラミング インターフェイス) を使ってネットワーク スタックと通信を行う。ネットワーク モニタは、IP (Internet Protocol) サービス プロバイダまたは IPX (Internetwork Packet Exchange) サービス プロバイダが転送するネットワーク トラフィックのみを解析できる。
DirectPlay パーサーをインストールすると、ネットワーク モニタを使って、これら 4 つのレイヤのいずれかを通るネットワーク トラフィックを分析できる。サービス プロバイダ パーサーを選択すると、DirectPlay の全トラフィックを表示できる。また、上位レベルのパーサーのいずれかを選択すれば、興味のないトラフィックを除外することができる。
トランスポート レイヤ パーサーを使うと、音声とセッションの全トラフィックが表示され、接続のためのハンドシェイクといった下位レベルのトラフィックは除外される。トランスポート レイヤでは、MTU (Maximum Transmission Unit) より長いメッセージが 1 つ以上の断片に分解されるので、注意すること。
セッション レイヤ パーサーと音声レイヤ パーサーを使うと、セッション関連のトラフィックと音声関連のトラフィックを別々に分析できる。これらのパーサーは、どちらも分割を検出し、ユーザーに知らせるようになっているが、分割したパケットを分析することはできない。
DirectPlay 向けネットワーク モニタの構成
Windows 2000 Server システムを使っている場合、ネットワーク モニタは既にインストールされている。Windows 2000 Professional の場合は、SMS (Systems Management Server) を購入する必要がある。ネットワーク モニタの基本的な使い方については、「ネットワーク モニタ 2.0 について」を参照すること。
DirectPlay トラフィックをネットワーク モニタが解析できるようにするには、次の手順を実行する。
- (SDK ルート)\bin\DXUtils から適切なフォルダに Dp8parse.dll をコピーする。ネットワーク モニタのルート フォルダは、通常、\Winnt\System32 フォルダにインストールされる。SMS がインストールされている場合、ルート フォルダ名は NetMonFull となる。Windows 2000 Server の場合、ルート フォルダ名は NetMon となる。パーサー DLL (ダイナミックリンク ライブラリ) を ...\NetMonFull\Parsers または ...\NetMon\parsers にコピーする。コピー先は、使用しているネットワーク モニタのバージョンに依存する。
- ネットワーク モニタを起動する。
- (Capture, Networks, Local Computer) からキャプチャするようアダプタを設定する。このとき、[ダイヤルアップ接続] プロパティがオフに設定されたアダプタを選択するように注意する。
これで、トラフィックのキャプチャを開始できる。
DirectPlay ネットワーク トラフィックのキャプチャ
キャプチャ処理を開始するには、[Microsoft ネットワーク モニタ] ツールバーの [キャプチャの開始] ボタンをクリックして、キャプチャ表示を開く。最初は、対象のアダプタを通るトラフィックがすべて表示される。この生のトラフィック ストリームは、興味のある一定のパケットだけに絞り込むことができる。DirectPlay® のパーサーをインストールすると、基本的に、DirectPlay 指向の 4 つのフィルタがネットワーク モニタに追加される。これらのフィルタを使うと、キャプチャ表示から DirectPlay 以外のすべてのトラフィックを除外できる。
フィルタを選択するには次の手順を実行する。
- [Microsoft ネットワーク モニタ] ツールバーの [キャプチャ フィルタの編集] をクリックする。
- [Protocol == Any] をダブルクリックする。
- [全て無効] をクリックする。
- [無効なプロトコル] の [DPLAYSESSION]、[DPLAYSP]、[DPLAYTRANSPORT]、および [DPLAYVOICE] をダブルクリックする。
[OK] を 2 回クリックしてキャプチャ表示に戻る。これで、DirectPlay トラフィックの表示を開始できる。
キャプチャ表示でなく、キャプチャ処理自体にフィルタを適用することもできる。こうすると、たとえば、指定したポートから指定したポートへの IP パケットだけをキャプチャできる。詳細については、ネットワーク モニタのマニュアルを参照すること。
DirectPlay でネットワーク モニタを使うためのヒント
ここでは、DirectPlay でネットワーク モニタを使うためのヒントをいくつか紹介する。
デフォルトでは、最新のトラフィック 1 MB だけがキャプチャされるようになっている。この値は、必要に応じて 10 ~ 20 MB 程度に増やした方がよい場合がある。
ハード ドライブへのストリームは行われないので、確認できるトラフィックは現在キャプチャ バッファ内にある内容に限られる。キャプチャ済みのトラフィックをハード ドライブにストリームするには、独自のキャプチャ処理を実装する必要がある。詳細については、MSDN® を参照すること。
デフォルトでは、DirectPlay のパーサーは、[2302,2400]U{6073} ポート/ソケット範囲を使って、IP および IPX パケットをフィルタリングするようになっている。デフォルト以外の DirectPlay ポートを解析するには、HKEY_CURRENT_USER\Software\Microsoft\DirectPlay\Parsers キーの下に次の例に示す 2 つの DWORD 値を新規に作成する。
MinUserPort = x MaxUserPort = y
x と y のデータ値を指定することで、解析の範囲がデフォルトの DirectPlay ポートに追加される。新たに解析するポートが 1 つだけの場合は、x と y を同じ値にする。
DirectPlay パーサーは、符号付きと符号なしの両方のトラフィックをサポートする。デフォルトでは、パケットが符号なしであるという前提でパーサーが実行される。符号付きパケットの監視を有効にするには、HKEY_CURRENT_USER\Software\Microsoft\DirectPlay\Parsers キーの下の DWORD 値を次の例のように設定する。
AssumeSigned = 1
DirectPlay プロトコルと RTP (Realtime Transport Protocol) プロトコルは、どちらも UDP (User Datagram Protocol) プロトコルの上位レイヤであるため、両者のパーサーが競合する可能性がある。したがって、DirectPlay トラフィックを分析するときは RTP パーサーを無効にし、RTP トラフィックを分析するときは DirectPlay パーサーを無効にしなければならない。